260 lines
7.4 KiB
C#
Executable File
260 lines
7.4 KiB
C#
Executable File
using LiveSplit.Model;
|
|
using LiveSplit.TZA.Splits;
|
|
|
|
namespace LiveSplit.TZA;
|
|
|
|
internal class SplitLogic {
|
|
internal static readonly List<SplitInfo> Splits = new() {
|
|
new SplitInfo(
|
|
SplitId.StartGame,
|
|
new GameStart()
|
|
),
|
|
new SplitInfo(
|
|
SplitId.AirCutterRemora,
|
|
new KillBoss(16, 275, 1_000)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Reks,
|
|
new Cutscene("naf_b0401", CutsceneAction.Enter),
|
|
new StageChange(25)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Rats,
|
|
new Cutscene("grm_g0100", CutsceneAction.Enter),
|
|
new Cutscene("grm_g0100", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.RogueTomato,
|
|
new StageChange(78)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Sunstone,
|
|
new EnterLocationWithStage(306, 160)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Dustia,
|
|
new LevelUp(Character.Vaan, 13)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Flans,
|
|
new StageChange(265)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Firemane,
|
|
new KillBoss(265, 329),
|
|
new Cutscene("grm_d0102", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.MimicQueen,
|
|
new KillBoss(340, 69),
|
|
new Cutscene("mic_c0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.LhusuMines,
|
|
new EnterLocationWithStage(806, 680)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Judges,
|
|
new StageChange(966)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.JudgeGhis,
|
|
new KillBoss(1000, 552, 1_030),
|
|
new Cutscene("rsn_a0102", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Garuda,
|
|
new KillBoss(1352, 403),
|
|
new Cutscene("rwg_a0181", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.DemonWall2,
|
|
new KillBoss(1364, 407),
|
|
new Cutscene("rwg_b0202", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Belias,
|
|
new KillBoss(1376, 415),
|
|
new Cutscene("rwg_d0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Vossler,
|
|
new KillBoss(1460, 872),
|
|
new Cutscene("rsn_z0201", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.EnterEruytVillage,
|
|
new EnterLocation(768)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.LeaveEruytVillage,
|
|
new EnterLocationWithStage(751, 1790)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.OsmonePlain,
|
|
new EnterLocation(712)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Jellies,
|
|
new EnterLocation(718)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Tiamat,
|
|
new KillBoss(1820, 722),
|
|
new Cutscene("hne_b0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.EnterStilshrine,
|
|
new EnterLocation(597)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Vinuskar,
|
|
new KillBoss(2057, 603),
|
|
new Cutscene("mrm_c0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Mateus,
|
|
new KillBoss(2100, 612),
|
|
new Cutscene("mrm_e0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.JudgeBergan,
|
|
new KillBoss(2290, 737),
|
|
new Cutscene("bul_a0201", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Salikawood,
|
|
new EnterLocation(483)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.PhonCoastTchitaUplands,
|
|
new EnterLocation(187)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Mandragoras,
|
|
new Cutscene("rui_d0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Ahriman,
|
|
new KillBoss(new uint[] { 3150, 3200 }, 198),
|
|
new Cutscene("rui_c0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Archades,
|
|
new EnterLocation(1008)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Cid1,
|
|
new KillBoss(3440, 286, 18_247),
|
|
new Cutscene("dor_b0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Rafflesia,
|
|
new KillBoss(4160, 545),
|
|
new Cutscene("mfr_b0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Daedalus,
|
|
new KillBoss(4295, 687),
|
|
new Cutscene("gil_a0201", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Tyrant,
|
|
new KillBoss(4320, 695),
|
|
new Cutscene("gil_c0201", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Shemhazai,
|
|
new KillBoss(4370, 698),
|
|
new Cutscene("gil_d0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Hydro,
|
|
new KillBoss(5200, 522),
|
|
new Cutscene("rwf_c0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Pandaemonium,
|
|
new KillBoss(5303, 1113),
|
|
new Cutscene("rbl_c0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Slyt,
|
|
new KillBoss(5320, 1121),
|
|
new Cutscene("rbl_f0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Fenrir,
|
|
new KillBoss(5320, 1132),
|
|
new Cutscene("rbl_j0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Hashmal,
|
|
new KillBoss(5320, 670),
|
|
new Cutscene("dgl_h0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Cid2,
|
|
new Cutscene("dgl_g0103", CutsceneAction.Exit)
|
|
// new KillBoss(0, 0, 20_523) - too many boss HP bars in same stage and area
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Gabranth,
|
|
new KillBoss(6600, 779),
|
|
new Cutscene("bhm_b0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.Vayne,
|
|
new KillBoss(6750, 782),
|
|
new Cutscene("bhm_c0101", CutsceneAction.Exit)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.VayneNovus,
|
|
new KillBoss(new uint[] { 6850, 6900 }, 782)
|
|
),
|
|
new SplitInfo(
|
|
SplitId.TheUndying,
|
|
new TheUndying()
|
|
),
|
|
};
|
|
|
|
private HashSet<uint> Completed { get; } = new();
|
|
|
|
internal LogicResult Tick(TzaControl control, TimerPhase phase, GameMemory memory) {
|
|
// never do anything if the timer is ended
|
|
if (phase == TimerPhase.Ended) {
|
|
return LogicResult.None;
|
|
}
|
|
|
|
foreach (var info in Splits) {
|
|
if (this.Completed.Contains(info.Id)) {
|
|
continue;
|
|
}
|
|
|
|
if (!control.EnabledSplits.TryGetValue(info.Id, out var idx)) {
|
|
continue;
|
|
}
|
|
|
|
if (idx >= info.Splits.Length) {
|
|
continue;
|
|
}
|
|
|
|
var result = info.Splits[idx].Calculate(phase, memory);
|
|
if (result == LogicResult.None) {
|
|
continue;
|
|
}
|
|
|
|
this.Completed.Add(info.Id);
|
|
return result;
|
|
}
|
|
|
|
return LogicResult.None;
|
|
}
|
|
}
|
|
|
|
internal enum LogicResult {
|
|
None,
|
|
Start,
|
|
Split,
|
|
}
|