From 9292bd53b33db2a482fdfee8e373d09df3e7732e Mon Sep 17 00:00:00 2001 From: Christopher Torres Date: Mon, 11 Jun 2018 22:49:24 -0400 Subject: [PATCH] Add the sum of game time so the "only act N" is correct. --- SonicGenerations.asl | 55 +++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/SonicGenerations.asl b/SonicGenerations.asl index 6c74207..69ab2b0 100644 --- a/SonicGenerations.asl +++ b/SonicGenerations.asl @@ -69,6 +69,7 @@ startup settings.Add("loading_time", true, "Include loading time in gametime"); settings.Add("pause_game_timer", false, "Pause gametime when game is paused"); settings.Add("stage_split", false, "Split only when both acts of a stage is completed (does not include challanges)"); + settings.Add("always_total_gt", true, "Show total game time during stages instead of total time on current stage (overworld always shows total sum of stages)"); //settings.Add("catagory", false, "Run Catagory"); //settings.CurrentDefaultParent = "catagory"; @@ -128,6 +129,11 @@ init vars.in_final_boss = false; vars.prev_stage_state = false; vars.current_stage_state = false; + + + vars.gameTimeBuffer = 0; + vars.totalGameTime = 0; + vars.totalStageTime = 0; Action DebugOutput = (text) => { print("[SonicGenerations Autosplitter] "+text); @@ -146,6 +152,9 @@ exit vars.in_final_boss = false; vars.prev_stage_state = false; vars.current_stage_state = false; + vars.gameTimeBuffer = 0; + vars.totalGameTime = 0; + vars.totalStageTime = 0; } start @@ -220,7 +229,6 @@ update // if the new if statement in the split function works, we won't need this here if(current.stage_progress == 0x02) - //(current.character_state != 0x07 || vars.in_boss || current.challenge_id > 0x00) ) // Challenges require us to check for 1 { vars.current_stage_state = true; } @@ -228,17 +236,12 @@ update if(current.num_of_lives != old.num_of_lives) { vars.lives = current.num_of_lives; + + if(current.num_of_lives < old.num_of_lives) + { + vars.gameTimeBuffer = current.stage_time; + } } - - //vars.DebugOutput("stage_id:"+vars.stage_table[vars.stage_code.ToString()].Item1+"\nact1:"+vars.stage_table[vars.stage_code.ToString()].Item2+"\nact2:"+vars.stage_table[vars.stage_code.ToString()].Item3); - - //vars.DebugOutput("name: "+current.stage_name.ToString()+ - // "\nid:"+vars.stage_id.ToString()+ - // "\nact:"+vars.act.ToString()+ - // "\nisloading:"+current.stage_loading.ToString()+ - // "\nin_cutscene:"+current.stage_state.ToString()+ - // "\nin_boss:"+vars.in_boss.ToString()+ - // "\nin_final_boss:"+vars.in_final_boss.ToString()); } split @@ -255,20 +258,13 @@ split (current.stage_name == old.stage_name) && (vars.current_stage_state != vars.prev_stage_state) ) { -// vars.DebugOutput("name: "+current.stage_name.ToString()+ -// "\nact:"+vars.act.ToString()+ -// "\nis_paused:"+current.is_paused.ToString()+ -// "\nisloading:"+current.stage_loading.ToString()+ -// "\nin_cutscene:"+current.stage_state.ToString()+ -// "\nin_boss:"+vars.in_boss.ToString()+ -// "\nin_final_boss:"+vars.in_final_boss.ToString()+ -// "\nnum_of_lives:"+current.num_of_lives.ToString()+ -// "\ngui_active:"+current.gui_active.ToString()); - vars.DebugOutput("Split condition triggered"); vars.prev_stage_state = vars.current_stage_state; rtnValue = true; + vars.totalGameTime += vars.totalStageTime + current.stage_time; + vars.totalStageTime = vars.gameTimeBuffer = 0; + Tuple stage_item; if(vars.stage_table.TryGetValue(vars.stage_code.ToString(), out stage_item)) { @@ -317,10 +313,21 @@ isLoading gameTime { - if(vars.stage_id == 1) - return TimeSpan.FromSeconds( 0 ); + if(vars.stage_id == 1) { + vars.totalStageTime = vars.gameTimeBuffer = 0; + return TimeSpan.FromSeconds( vars.totalGameTime ); + } + + if( vars.gameTimeBuffer > 0 && (current.stage_time < 1) && (current.stage_time < vars.gameTimeBuffer) ) + { + vars.totalStageTime += vars.gameTimeBuffer; + vars.gameTimeBuffer = 0; + } //TODO Find out if you died that way we keep ticking the counter //TODO create a buffer for the time here as the total_stage_time resets when changing stages - return TimeSpan.FromSeconds( Convert.ToDouble(current.stage_time) ); + if(settings["always_total_gt"]) + return TimeSpan.FromSeconds( Convert.ToDouble(vars.totalGameTime + vars.totalStageTime + current.stage_time) ); + else + return TimeSpan.FromSeconds( Convert.ToDouble(vars.totalStageTime + current.stage_time) ); }