state("OnimushaWotS", "") { byte TransitionPhase: 0xCBD3E58, 0x110, 0x10, 0x78; // ANALYZE = 1, LOADING = 2, FINISH = 3 int StageID: 0xCBD3E58, 0x110, 0x10, 0x18, 0x48; int AreaID: 0xCBD3E58, 0x110, 0x10, 0x18, 0x4C; byte BossLocalPhase: 0xCBD3E58, 0xA8, 0x68; ushort BossTargetID: 0xCBD3E58, 0xA8, 0x6C; ulong RealTimeSec: 0xCBD3E58, 0xF0; ulong GameTimeSec: 0xCBD3E58, 0xF8; ulong SaveDataPlayTime: 0xCBC16C8, 0xF0, 0x10, 0x40; // PlayTime in SaveData, nanosecond data type, but only counts seconds. uint MissionClearFlag0: 0xCBC16C8, 0x80, 0x10, 0x10, 0x18, 0x10, 0x20; uint MissionClearFlag1: 0xCBC16C8, 0x80, 0x10, 0x10, 0x18, 0x10, 0x24; uint MissionClearFlag2: 0xCBC16C8, 0x80, 0x10, 0x10, 0x18, 0x10, 0x28; uint MissionClearFlag3: 0xCBC16C8, 0x80, 0x10, 0x10, 0x18, 0x10, 0x2C; int CutsceneID: 0xCBA7310, 0xA8; } startup { // This mode starts automatically when the first bossfight starts, // and splits when a boss is defeated. settings.Add("Bossrush", false); // Mission Splits settings.Add("MissionSplit", true, "Split when completing a mission"); settings.Add("Cutscene_Ganyru", false, "Story: Split before and after Ganryu"); settings.Add("Cutscene_Daidara", false, "Story: Split before Daidara"); settings.Add("Cutscene_Rasho_gan", false, "Story: Split before Rasho-gan"); settings.Add("Cutscene_Ifuu", false, "Story: Split before Ifuu"); settings.Add("Cutscene_Laboratory", false, "Story: Split before Laboratory"); settings.Add("Cutscene_Greater_Nue", false, "Story: Split before Greater Nue"); settings.Add("Cutscene_Benkei", false, "Story: Split before Benkei"); settings.Add("Cutscene_Burai", false, "Story: Split before Burai"); settings.Add("Cutscene_Ganyru2", false, "Story: Split before Ganryu 2"); settings.Add("Cutscene_Shuten_Doji", false, "Story: Split before Shuten Doji"); settings.Add("Cutscene_Shuten_Doji2", false, "Story: Split before Shuten Doji 2"); settings.Add("Cutscene_Ifuu_and_Burai", false, "Story: Split before Ifuu and Burai"); settings.Add("Cutscene_Ganryu3", false, "Story: Split before and after Ganryu 3"); settings.Add("Cutscene_Dokyo", false, "Story: Split before Dokyo"); settings.Add("Cutscene_Yoshitsune", false, "Story: Split before Yoshitsune"); settings.Add("Cutscene_Yoshitsune2", false, "Story: Split after Yoshitsune"); // Boss splits settings.Add("SplitBossFightStart", false, "Boss Rematch: Split on Fight Start"); settings.Add("Byakue_0_EM300_00_00", false, "Boss Rematch: Split on Defeating: Byakue"); settings.Add("Byakue_1_EM300_00_01", false, "Boss Rematch: Split on Defeating: Byakue (Enhanced)"); settings.Add("Dohatsu_Ten_0_EM301_00_00", false, "Boss Rematch: Split on Defeating: Dohatsu-Ten"); settings.Add("Dohatsu_Ten_1_EM301_00_01", false, "Boss Rematch: Split on Defeating: Dohatsu-Ten (Enhanced)"); settings.Add("Nue_Dual_EM304_00_00", false, "Boss Rematch: Split on Defeating: Nue Dual"); settings.Add("Sasaki_Ganryu_0_EM503_00_00", false, "Boss Rematch: Split on Defeating: Sasaki Ganryu"); settings.Add("Sasaki_Ganryu_1_EM503_00_01", false, "Boss Rematch: Split on Defeating: Sasaki Ganryu (Altered)"); settings.Add("Daidara_EM500_00_00", false, "Boss Rematch: Split on Defeating: Daidara"); settings.Add("Rasho_gan_EM502_00_00", false, "Boss Rematch: Split on Defeating: Rasho-gan"); settings.Add("Greater_Nue_EM501_00_00", false, "Boss Rematch: Split on Defeating: Greater Nue"); settings.Add("Benkei_0_EM504_00_00", false, "Boss Rematch: Split on Defeating: Benkei"); settings.Add("Benkei_1_EM504_00_01", false, "Boss Rematch: Split on Defeating: Benkei (Fully Armed)"); settings.Add("Ifuu_EM512_00_00", false, "Boss Rematch: Split on Defeating: Ifuu"); settings.Add("Burai_EM513_00_00", false, "Boss Rematch: Split on Defeating: Burai"); settings.Add("Ifuu_and_Burai_EM512_00_01", false, "Boss Rematch: Split on Defeating: Ifuu and Burai"); settings.Add("Shuten_Doji_EM507_00_00", false, "Boss Rematch: Split on Defeating: Shuten Doji"); settings.Add("Dokyo_EM510_00_00", false, "Boss Rematch: Split on Defeating: Dokyo"); settings.Add("Minamoto_no_Yoshitsune_EM514_00_00", false, "Boss Rematch: Split on Defeating: Minamoto no Yoshitsune"); } init { } isLoading { return current.TransitionPhase == 2; } start { if (settings["Bossrush"]) { return old.BossLocalPhase != 2 && current.BossLocalPhase == 2; } // We start 1 second off with this, but it should be correct for load removed time, since // playtime starts with a loading screen. Bounded values, because otherwise the timer would start // prematurely when loading a savegame while still in the save games list. return (current.SaveDataPlayTime > 0 && current.SaveDataPlayTime <= (2 * 0x1000000) && old.SaveDataPlayTime <= (1 * 0x1000000)) // Start immediately when loading a savegame. || (current.TransitionPhase == 3 && current.StageID != -1); } split { if (settings["MissionSplit"]) { if (current.MissionClearFlag0 != old.MissionClearFlag0) return true; if (current.MissionClearFlag1 != old.MissionClearFlag1) return true; if (current.MissionClearFlag2 != old.MissionClearFlag2) return true; if (current.MissionClearFlag3 != old.MissionClearFlag3) return true; } // Boss splits, detect transitioning from Main (2) to Wait_End_Victory (3), detecting a win. if (old.BossLocalPhase == 2 && current.BossLocalPhase == 3) { if (current.BossTargetID == 30569 && (settings["Byakue_0_EM300_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 5370 && (settings["Byakue_1_EM300_00_01"] || settings["Bossrush"])) return true; if (current.BossTargetID == 26515 && (settings["Dohatsu_Ten_0_EM301_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 28128 && (settings["Dohatsu_Ten_1_EM301_00_01"] || settings["Bossrush"])) return true; if (current.BossTargetID == 5865 && (settings["Nue_Dual_EM304_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 354 && (settings["Sasaki_Ganryu_0_EM503_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 21015 && (settings["Sasaki_Ganryu_1_EM503_00_01"] || settings["Bossrush"])) return true; if (current.BossTargetID == 12224 && (settings["Daidara_EM500_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 28045 && (settings["Rasho_gan_EM502_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 30616 && (settings["Greater_Nue_EM501_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 30875 && (settings["Benkei_0_EM504_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 6164 && (settings["Benkei_1_EM504_00_01"] || settings["Bossrush"])) return true; if (current.BossTargetID == 26446 && (settings["Ifuu_EM512_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 17004 && (settings["Burai_EM513_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 16869 && (settings["Ifuu_and_Burai_EM512_00_01"] || settings["Bossrush"])) return true; if (current.BossTargetID == 6309 && (settings["Shuten_Doji_EM507_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 21579 && (settings["Dokyo_EM510_00_00"] || settings["Bossrush"])) return true; if (current.BossTargetID == 17066 && (settings["Minamoto_no_Yoshitsune_EM514_00_00"] || settings["Bossrush"])) return true; } // Entering Main (2): Boss fight started (any boss) if (settings["SplitBossFightStart"] && old.BossLocalPhase != 2 && current.BossLocalPhase == 2) { return true; } // Split on Ganryu. if (settings["Cutscene_Ganyru"]) { if (current.CutsceneID == -1 && old.CutsceneID == 404) // After cutscene, before fight. return true; if (current.CutsceneID == 405 && old.CutsceneID == -1) // Before cutscene, after fight. return true; } if (settings["Cutscene_Daidara"]) { if (current.CutsceneID == -1 && old.CutsceneID == 410) // After cutscene, before fight. return true; } if (settings["Cutscene_Rasho_gan"]) { if (current.CutsceneID == -1 && old.CutsceneID == 601) // After cutscene, before fight. return true; } if (settings["Cutscene_Ifuu"]) { if (current.CutsceneID == -1 && old.CutsceneID == 501) // After cutscene, before fight. return true; } if (settings["Cutscene_Laboratory"]) { if (current.CutsceneID == -1 && old.CutsceneID == 10803) // After cutscene. return true; } if (settings["Cutscene_Greater_Nue"]) { if (current.CutsceneID == -1 && old.CutsceneID == 11001) // After cutscene, before fight. return true; } if (settings["Cutscene_Benkei"]) { if (current.CutsceneID == -1 && old.CutsceneID == 1102) // After cutscene, before fight. return true; } if (settings["Cutscene_Burai"]) { if (current.CutsceneID == -1 && old.CutsceneID == 1150) // After cutscene, before fight. return true; } if (settings["Cutscene_Ganyru2"]) { if (current.CutsceneID == -1 && old.CutsceneID == 1201) // After cutscene, before fight. return true; } if (settings["Cutscene_Shuten_Doji"]) { if (current.CutsceneID == -1 && old.CutsceneID == 11704) // After cutscene, before fight. return true; } if (settings["Cutscene_Shuten_Doji2"]) { if (current.CutsceneID == -1 && old.CutsceneID == 1711) // After cutscene, before fight. return true; } if (settings["Cutscene_Ifuu_and_Burai"]) { if (current.CutsceneID == -1 && old.CutsceneID == 1608) // After cutscene, before fight. return true; } if (settings["Cutscene_Ganryu3"]) { if (current.CutsceneID == -1 && old.CutsceneID == 11914) // After cutscene, before fight. return true; if (current.CutsceneID == 1915 && old.CutsceneID == -1) // Before cutscene, after fight. return true; } if (settings["Cutscene_Dokyo"]) { if (current.CutsceneID == -1 && old.CutsceneID == 11916) // After cutscene, before fight. return true; } if (settings["Cutscene_Yoshitsune"]) { if (current.CutsceneID == -1 && old.CutsceneID == 2000) // After cutscene, before fight. return true; } if (settings["Cutscene_Yoshitsune2"]) { if (current.CutsceneID == 2002 && old.CutsceneID == -1) // Before cutscene, after fight. return true; } return false; } reset { // Auto-Reset works only after 20 seconds of playtime. Without it the timer would reset after // the disclaimer at the beginning of the game, since that resets RealTimeSec to 0. return current.SaveDataPlayTime > (20 * 0x1000000) && current.RealTimeSec == 0 && old.RealTimeSec != 0; }