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.

675 lines
18 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
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();
}
}
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;
}
}