You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

663 lines
18 KiB
C#

4 years ago
using System;
using Qoo.Application;
using Qoo.Def;
using Qoo.File;
using Qoo.Game;
using Qoo.Graphics;
using Qoo.Input;
using Qoo.SoundSystem;
namespace Qoo.Ks
{
// Token: 0x02000035 RID: 53
public class EventPlayer : KsPlayer
{
// Token: 0x0600019D RID: 413 RVA: 0x00007238 File Offset: 0x00005438
public EventPlayer()
{
this.Scene = new KsScene();
}
// Token: 0x17000037 RID: 55
// (get) Token: 0x0600019E RID: 414 RVA: 0x0000724C File Offset: 0x0000544C
// (set) Token: 0x0600019F RID: 415 RVA: 0x00007254 File Offset: 0x00005454
public PLAY_MODE Mode { get; private set; }
// Token: 0x17000038 RID: 56
// (get) Token: 0x060001A0 RID: 416 RVA: 0x00007260 File Offset: 0x00005460
// (set) Token: 0x060001A1 RID: 417 RVA: 0x00007268 File Offset: 0x00005468
public KsScene Scene { get; private set; }
// Token: 0x17000039 RID: 57
// (get) Token: 0x060001A2 RID: 418 RVA: 0x00007274 File Offset: 0x00005474
// (set) Token: 0x060001A3 RID: 419 RVA: 0x0000727C File Offset: 0x0000547C
private bool RewOn { get; set; }
// Token: 0x1700003A RID: 58
// (get) Token: 0x060001A4 RID: 420 RVA: 0x00007288 File Offset: 0x00005488
// (set) Token: 0x060001A5 RID: 421 RVA: 0x00007290 File Offset: 0x00005490
private int nRawWaitCnt { get; set; }
// Token: 0x1700003B RID: 59
// (get) Token: 0x060001A6 RID: 422 RVA: 0x0000729C File Offset: 0x0000549C
// (set) Token: 0x060001A7 RID: 423 RVA: 0x000072A4 File Offset: 0x000054A4
public bool JumpOn { get; set; }
// Token: 0x1700003C RID: 60
// (get) Token: 0x060001A8 RID: 424 RVA: 0x000072B0 File Offset: 0x000054B0
// (set) Token: 0x060001A9 RID: 425 RVA: 0x000072B8 File Offset: 0x000054B8
public bool RestoreOn { get; private set; }
// Token: 0x1700003D RID: 61
// (get) Token: 0x060001AA RID: 426 RVA: 0x000072C4 File Offset: 0x000054C4
// (set) Token: 0x060001AB RID: 427 RVA: 0x000072CC File Offset: 0x000054CC
private bool MesFull { get; set; }
// Token: 0x1700003E RID: 62
// (get) Token: 0x060001AC RID: 428 RVA: 0x000072D8 File Offset: 0x000054D8
// (set) Token: 0x060001AD RID: 429 RVA: 0x000072E0 File Offset: 0x000054E0
public string Name { get; set; }
// Token: 0x1700003F RID: 63
// (get) Token: 0x060001AE RID: 430 RVA: 0x000072EC File Offset: 0x000054EC
// (set) Token: 0x060001AF RID: 431 RVA: 0x000072F4 File Offset: 0x000054F4
public int CurKsNo { get; private set; }
// Token: 0x17000040 RID: 64
// (get) Token: 0x060001B0 RID: 432 RVA: 0x00007300 File Offset: 0x00005500
// (set) Token: 0x060001B1 RID: 433 RVA: 0x00007308 File Offset: 0x00005508
public bool IsParamLock { get; private set; }
// Token: 0x17000041 RID: 65
// (get) Token: 0x060001B2 RID: 434 RVA: 0x00007314 File Offset: 0x00005514
// (set) Token: 0x060001B3 RID: 435 RVA: 0x00007330 File Offset: 0x00005530
public bool Face
{
get
{
return this.Scene.GrpList[6].A != 0;
}
set
{
this.Scene.RedrawFace(value);
}
}
// Token: 0x060001B4 RID: 436 RVA: 0x00007340 File Offset: 0x00005540
public bool Init(PLAY_MODE mode)
{
base.Init();
this.Mode = mode;
this.Scene.Init();
App.QooKsData.Clear();
this.RewOn = false;
this.nRawWaitCnt = 0;
this.MesFull = false;
this.Name = string.Empty;
this.CurKsNo = -1;
GameData.EnableChangeParam = true;
GameData.OldWork.Clear();
this.m_isNextKsRead = false;
return true;
}
// Token: 0x060001B5 RID: 437 RVA: 0x000073B4 File Offset: 0x000055B4
public bool Release()
{
App.QooKsData.Clear();
GameData.EnableChangeParam = false;
GameData.OldWork.Clear();
this.Scene.Release();
KsInput.Clear();
return true;
}
// Token: 0x060001B6 RID: 438 RVA: 0x000073F0 File Offset: 0x000055F0
internal void Restore(GAME_SAVE_DATA data)
{
this.RestoreOn = true;
KSID ksid = KSID.UNKNOWN;
this.Scene.SceneInit();
this.Scene.ApplyBackup(data.m_Scene);
int num = data.m_Log.m_LogData.Length;
SCENEPOSDATA[] logData = data.m_Log.m_LogData;
for (int num2 = 0; num2 != num; num2++)
{
if (ksid == KSID.STOP)
{
this.Scene.EntrySelect(-1, string.Empty, string.Empty, string.Empty, 0, string.Empty);
}
this.LoadNext((int)logData[num2].sFileNo, 0, 0);
this.SetNext((int)logData[num2].sLabelNo, (int)logData[num2].sTagNo);
base.PeekTag();
ksid = base.CurTag.ID;
if (num2 == num - 1 && ksid == KSID.EXEC)
{
this.RestoreOn = false;
}
this.IsParamLock = logData[num2].bLock;
this.ProcTag_Restore(base.CurTag, KsTagTable.GetInfo(base.CurTag.ID));
if (num2 == num - 1 && ksid == KSID.EXEC)
{
Singleton<UnityGraph>.Instance.Effect("FadeOut", 0f);
}
}
this.RestoreOn = false;
this.JumpOn = true;
this.IsParamLock = false;
this.Scene.SceneApply(true, true);
this.Scene.SceneApplyCg(false);
if (!this.IsExecutedTag())
{
this.SnapShot(true);
}
this.Scene.SceneResetEffect();
this.Scene.SceneReset();
Singleton<MsgWnd>.Instance.ResetMessage();
base.ResetCallCount(0);
}
// Token: 0x060001B7 RID: 439 RVA: 0x00007584 File Offset: 0x00005784
public bool Load(string filename, string labelname = "")
{
FileId fileId = new FileId(string.Empty);
fileId.Set(filename);
int num = Akb.SearchFile(fileId.Name);
int num2 = (labelname.Length <= 0) ? 0 : Akb.SearchLabel(num, labelname);
if (num2 < 0)
{
num2 = 0;
}
bool flag = this.LoadNext(num, num2, 0);
if (flag)
{
App.QooKsLog.Reset();
this.Scene.Backup();
this.SnapShot(true);
}
return flag;
}
// Token: 0x060001B8 RID: 440 RVA: 0x00007604 File Offset: 0x00005804
public bool LoadNext(int nKsNo, int nLabelNo = 0, int nTagNo = 0)
{
if (nKsNo != this.CurKsNo)
{
string name = Akb.GetFileInfo(nKsNo).Name;
if (!App.QooKsData.IsItem(name))
{
App.QooKsData.Add(name);
}
this.Name = name;
this.CurKsNo = nKsNo;
this.SetKsData(App.QooKsData.Get(name));
this.m_isNextKsRead = true;
}
this.SetNext(nLabelNo, nTagNo);
return true;
}
// Token: 0x060001B9 RID: 441 RVA: 0x00007678 File Offset: 0x00005878
protected override TAG_RESULT ProcTag(TagData tag)
{
this.Scene.KeyWait.Show = true;
KsInput.Pause = true;
this.m_isNextKsRead = false;
KsTagInfo info = KsTagTable.GetInfo(tag.ID);
if (KsInput.IsJump)
{
if (!KsInput.IsRewind)
{
return this.ProcTag_JumpFront(tag, info);
}
return this.ProcTag_JumpBack(tag, info);
}
else
{
this.Scene.UpdateSkipMark();
if (this.RewOn)
{
return this.ProcTag_Back(tag, info);
}
if (KsInput.IsRewind && App.QooKsLog.IsRewind())
{
this.SetRewind(true);
return TAG_RESULT.CONTINUE;
}
if (KsInput.IsRewind)
{
KsInput.Clear();
}
return this.ProcTag_Next(tag, info);
}
}
// Token: 0x060001BA RID: 442 RVA: 0x00007730 File Offset: 0x00005930
private TAG_RESULT ProcTag_Next(TagData tag, KsTagInfo info)
{
bool flag = !info.IsJumpTag();
if (flag && GameData.CheckReadedSkip(this.CurKsNo, base.CurLabelNo, base.CurTagNo))
{
Sound.VoiceStop();
}
if (base.TagCallCnt == 0)
{
KsInput.IsTrig = false;
}
TAG_RESULT tag_RESULT = info.Run(this, tag);
int num = 0;
if (KsInput.IsSkip)
{
num |= 1;
}
if (flag)
{
if (GameData.CheckReadedSkip(this.CurKsNo, base.CurLabelNo, base.CurTagNo))
{
num |= 2;
}
else
{
this.Scene.ResetSkipMark();
}
}
this.Scene.SetSkipFlag(num);
this.Scene.SceneApply(info.IsMessage(), true);
if (this.MesFull && info.IsMessage())
{
Singleton<MsgWnd>.Instance.Full();
}
this.MesFull = false;
if (!this.IsExecutedTag() && !info.IsUserSnapShot())
{
this.SnapShot(true);
}
if (tag.Connect && info.IsEnabelConnect())
{
if (tag_RESULT == TAG_RESULT.NEXT_EXIT)
{
tag_RESULT = TAG_RESULT.NEXT;
}
}
else
{
if (!this.JumpOn)
{
this.Scene.SceneApplyEffect();
}
this.Scene.SceneApplyCg(!this.JumpOn);
this.Scene.SceneResetEffect();
}
this.Scene.SceneReset();
if (this.JumpOn)
{
this.JumpOn = false;
App.FrameUpdate(true);
Graph.Fade_In();
}
if (this.m_isNextKsRead)
{
base.ResetCallCount(base.TagCallCnt - 1);
return TAG_RESULT.CONTINUE_EXIT;
}
return tag_RESULT;
}
// Token: 0x060001BB RID: 443 RVA: 0x000078D0 File Offset: 0x00005AD0
private TAG_RESULT ProcTag_Back(TagData tag, KsTagInfo info)
{
if (!KsInput.IsRewind)
{
this.SetRewind(false);
return TAG_RESULT.CONTINUE_EXIT;
}
if (Singleton<SelectWnd>.Instance.IsRun)
{
Singleton<SelectWnd>.Instance.End();
}
if (!this.JumpOn && this.nRawWaitCnt > 0)
{
this.nRawWaitCnt--;
return TAG_RESULT.CONTINUE_EXIT;
}
this.nRawWaitCnt = 2;
GameData.SetRead(this.CurKsNo, base.CurLabelNo, base.CurTagNo);
while (App.QooKsLog.IsRewind())
{
if (tag.IsMessage())
{
App.QooBackLog.RemoveMessage(this.CurKsNo, base.CurLabelNo, tag.MesNo);
}
Sound.VoiceStop();
int nextLog = EventPlayer.Pop();
tag = this.SetNextLog(nextLog);
info = KsTagTable.GetInfo(tag.ID);
bool flag = info.IsRevSceneApply();
bool flag2 = info.IsJumpBreak(false, this.Mode == PLAY_MODE.MEMORY);
bool flag3 = info.IsRevContinue();
if (flag)
{
SCENELOGDATA sceneCurrent = App.QooKsLog.GetSceneCurrent();
bool flag4 = info.IsMessage();
if (sceneCurrent.Msg != null && sceneCurrent.Msg.ID == KSID.BACKLOG)
{
Singleton<MsgWnd>.Instance.IsSilentMode = true;
}
else if (sceneCurrent.Msg != null)
{
Singleton<MsgWnd>.Instance.IsSilentMode = false;
}
if (flag4)
{
App.QooBackLog.SetMesNo(this.CurKsNo, base.CurLabelNo, tag.MesNo);
}
if (this.JumpOn)
{
this.Scene.SceneSetLog(sceneCurrent, flag4 && App.QooBackLog.GetNum() == 0);
}
else
{
this.Scene.SceneApplyLog(sceneCurrent, flag4, flag4 && App.QooBackLog.GetNum() == 0);
this.Scene.SceneApplyCg(false);
}
Sound.VoiceStop();
}
if (info.IsMessage())
{
this.Scene.SetMessage(null);
this.MesFull = true;
Singleton<MsgWnd>.Instance.Full();
string message = Singleton<MsgWnd>.Instance.Message;
GameData.LastMessage = message;
}
else
{
this.RecallSaveMessage();
}
if (!this.JumpOn || !flag2)
{
if (tag.Connect)
{
continue;
}
if (!this.JumpOn)
{
}
if (this.JumpOn || flag3)
{
continue;
}
}
base.ResetCallCount(-1);
return TAG_RESULT.CONTINUE_EXIT;
}
this.SetRewind(false);
return TAG_RESULT.CONTINUE_EXIT;
}
// Token: 0x060001BC RID: 444 RVA: 0x00007B5C File Offset: 0x00005D5C
private static int Pop()
{
int num = App.QooKsLog.Pop();
Debug.Assert(num != -1, "error:LogData nothing!!");
GameData.OldWork.Clear();
SCENELOGDATA sceneCurrent = App.QooKsLog.GetSceneCurrent();
if (sceneCurrent.WorkArray != null && sceneCurrent.WorkArray.Length > 0)
{
foreach (KsWorkLog ksWorkLog in sceneCurrent.WorkArray)
{
if (!ksWorkLog.IsEmpty())
{
GameData.SetParamString(ksWorkLog.Value, ksWorkLog.Index, ksWorkLog.Old);
}
}
sceneCurrent.WorkArray = null;
}
return num;
}
// Token: 0x060001BD RID: 445 RVA: 0x00007C10 File Offset: 0x00005E10
private TAG_RESULT ProcTag_Restore(TagData tag, KsTagInfo info)
{
TAG_RESULT tag_RESULT = info.Run(this, tag);
if (!this.IsExecutedTag() && info.IsMessage())
{
this.Scene.SceneApply_Message(true);
}
if (!this.IsExecutedTag())
{
this.SnapShot(true);
}
this.Scene.EntryVoice(false, string.Empty);
if (tag.Connect && tag_RESULT == TAG_RESULT.NEXT_EXIT)
{
tag_RESULT = TAG_RESULT.NEXT;
}
base.RunResult(tag_RESULT);
return tag_RESULT;
}
// Token: 0x060001BE RID: 446 RVA: 0x00007C8C File Offset: 0x00005E8C
private TAG_RESULT ProcTag_JumpFront(TagData tag, KsTagInfo info)
{
if (this.JumpOn || this.RestoreOn)
{
TagData tagData = tag;
KsTagInfo ksTagInfo = info;
while (!ksTagInfo.IsJumpBreak(true, this.Mode == PLAY_MODE.MEMORY))
{
if (ksTagInfo.IsJumpTag() || SysData.GetSkip() != SKIP_MODE.READ || SysData.IsRead(this.CurKsNo, base.CurLabelNo, base.CurTagNo + 1))
{
if (this.ProcTag_Restore(tagData, ksTagInfo) != TAG_RESULT.END)
{
if (base.NextTagNo >= 0)
{
base.PeekTag();
tagData = base.CurTag;
ksTagInfo = KsTagTable.GetInfo(tagData.ID);
}
else
{
base.ResetCallCount(base.TagCallCnt + 1);
}
if (this.m_isNextKsRead)
{
base.ResetCallCount(base.TagCallCnt - 1);
return TAG_RESULT.CONTINUE_EXIT;
}
continue;
}
}
IL_165:
if (ksTagInfo.GetId() == KSID.MOVIE)
{
this.Scene.SceneApply(false, true);
}
this.RestoreOn = false;
KsInput.Unlock();
base.ResetCallCount(-1);
return TAG_RESULT.CONTINUE_EXIT;
}
if (ksTagInfo.IsJumpEffectResetTag())
{
this.Scene.SceneResetEffect();
}
goto IL_165;
}
SKIP_MODE skip = SysData.GetSkip();
if (skip != SKIP_MODE.DISABLE)
{
if (skip == SKIP_MODE.READ)
{
if (!SysData.IsRead(this.CurKsNo, base.CurLabelNo, base.CurTagNo + 1))
{
base.ResetCallCount(-1);
KsInput.Unlock();
return TAG_RESULT.CONTINUE_EXIT;
}
}
Sound.VoiceStop();
Sound.SeSlotStopAll();
Graph.Fade_Out();
this.JumpOn = true;
this.RestoreOn = true;
return TAG_RESULT.CONTINUE_EXIT;
}
base.ResetCallCount(-1);
KsInput.Unlock();
return TAG_RESULT.CONTINUE_EXIT;
}
// Token: 0x060001BF RID: 447 RVA: 0x00007E2C File Offset: 0x0000602C
private TAG_RESULT ProcTag_JumpBack(TagData tag, KsTagInfo info)
{
if (App.QooKsLog.IsRewind())
{
this.JumpOn = true;
Sound.SeSlotStopAll();
Graph.Fade_Out();
if (Singleton<SelectWnd>.Instance.IsRun)
{
Singleton<SelectWnd>.Instance.End();
}
this.ProcTag_Back(tag, info);
KsInput.Unlock();
}
this.SetRewind(false);
this.Scene.SceneApply(false, true);
return TAG_RESULT.CONTINUE_EXIT;
}
// Token: 0x060001C0 RID: 448 RVA: 0x00007E98 File Offset: 0x00006098
private bool SetRewind(bool bEnable)
{
this.RewOn = bEnable;
if (!bEnable)
{
base.ResetCallCount(-1);
KsInput.Unlock();
}
return true;
}
// Token: 0x060001C1 RID: 449 RVA: 0x00007EB4 File Offset: 0x000060B4
public int SnapShot(bool bRun = true)
{
if (base.CurLabelNo == -1 && base.CurTagNo == -1)
{
return -1;
}
int result = App.QooKsLog.Push();
SCENELOGDATA sceneCurrent = App.QooKsLog.GetSceneCurrent();
this.Scene.SaveSceneLog(ref sceneCurrent);
if (GameData.OldWork.Count > 0)
{
sceneCurrent.WorkArray = GameData.OldWork.ToArray();
}
GameData.OldWork.Clear();
App.QooKsLog.SetSceneCurrrent(sceneCurrent);
SCENEPOSDATA posCurrent = App.QooKsLog.GetPosCurrent();
posCurrent.sFileNo = (short)this.CurKsNo;
posCurrent.sLabelNo = (short)base.CurLabelNo;
posCurrent.sTagNo = (short)base.CurTagNo;
posCurrent.bRun = bRun;
App.QooKsLog.SetPosCurrent(posCurrent);
GameData.SetRead((int)posCurrent.sFileNo, (int)posCurrent.sLabelNo, (int)(posCurrent.sTagNo + 1));
return result;
}
// Token: 0x060001C2 RID: 450 RVA: 0x00007F98 File Offset: 0x00006198
private TagData SetNextLog(int nPos)
{
SCENEPOSDATA pos = App.QooKsLog.GetPos(nPos);
Debug.Print(string.Format("Back:KS:{0}:{1}:{2}(LogNo={3})\n", new object[]
{
pos.sFileNo,
pos.sLabelNo,
pos.sTagNo,
nPos
}));
this.LoadNext((int)pos.sFileNo, (int)pos.sLabelNo, (int)pos.sTagNo);
base.PeekTag();
GameData.SetRead(this.CurKsNo, base.CurLabelNo, base.CurTagNo);
return base.CurTag;
}
// Token: 0x060001C3 RID: 451 RVA: 0x00008038 File Offset: 0x00006238
public bool IsExecutedTag()
{
SCENEPOSDATA posCurrent = App.QooKsLog.GetPosCurrent();
if (posCurrent != null && (int)posCurrent.sFileNo == this.CurKsNo && (int)posCurrent.sLabelNo == base.CurLabelNo && (int)posCurrent.sTagNo == base.CurTagNo)
{
SCENELOGDATA sceneCurrent = App.QooKsLog.GetSceneCurrent();
return sceneCurrent.nExist;
}
return false;
}
// Token: 0x060001C4 RID: 452 RVA: 0x0000809C File Offset: 0x0000629C
internal void SetJump(bool isJump)
{
this.JumpOn = isJump;
}
// Token: 0x060001C5 RID: 453 RVA: 0x000080A8 File Offset: 0x000062A8
internal bool JumpKs(string ks, string label, bool IsCall)
{
Debug.Assert(ks != null && label != null);
bool flag = ks.Length > 0;
bool flag2 = label.Length > 0;
if (!flag && !flag2)
{
return false;
}
if (!this.IsExecutedTag())
{
this.SnapShot(true);
}
if (flag)
{
FileId fileId = new FileId(string.Empty);
fileId.Set(ks);
this.LoadNext(Akb.SearchFile(fileId.Name), 0, 0);
}
if (label.IndexOf('*') >= 0)
{
label = label.Substring(label.IndexOf('*') + 1);
}
int num = (!flag2) ? 0 : base.GetLabelNo(label);
Debug.Assert(num >= 0, string.Format("====ERROR!!!!====:KS{0} のラベル名:'{1}'は見つかりません\n", ks, label));
this.SetNext(num, 0);
return true;
}
// Token: 0x060001C6 RID: 454 RVA: 0x00008184 File Offset: 0x00006384
internal bool ReturnKs()
{
throw new NotImplementedException();
}
// Token: 0x060001C7 RID: 455 RVA: 0x0000818C File Offset: 0x0000638C
private bool RecallSaveMessage()
{
for (int i = App.QooKsLog.GetLogNum() - 1; i >= 0; i--)
{
SCENELOGDATA scene = App.QooKsLog.GetScene(i);
if (scene != null && scene.Msg != null)
{
bool isVisible = Singleton<MsgWnd>.Instance.IsVisible;
this.Scene.SetMessage(scene.Msg);
GameData.LastMessage = Singleton<MsgWnd>.Instance.Message;
Singleton<MsgWnd>.Instance.ResetMessage();
Singleton<MsgWnd>.Instance.Show(isVisible);
return true;
}
}
return false;
}
// Token: 0x0400015B RID: 347
private bool m_isNextKsRead;
}
}