@@ -592,6 +592,40 @@ static void recordDemoResult() {
592592 engine->demorecorder ->RecordData (data.data (), data.size ());
593593}
594594
595+ static std::vector<uint8_t > buildIncompleteSummary () {
596+ std::vector<uint8_t > data ({0x12 });
597+
598+ appendI32 (g_speedrun.splits .size (), data);
599+
600+ for (SplitInfo split : g_speedrun.splits ) {
601+ appendStr (split.name , data);
602+ appendI32 (split.segments .size (), data);
603+ for (Segment seg : split.segments ) {
604+ appendStr (seg.name , data);
605+ appendI32 (seg.ticks , data);
606+ }
607+ }
608+
609+ // category rules
610+ appendI32 (1 , data);
611+ auto rules = SpeedrunTimer::GetCategoryRules ();
612+ appendI32 (rules.size (), data);
613+ for (auto ruleName : rules) {
614+ auto rule = SpeedrunTimer::GetRule (ruleName);
615+ appendStr (ruleName, data);
616+ appendStr (rule->Describe (), data);
617+ }
618+
619+ return data;
620+ }
621+
622+ void SpeedrunTimer::RecordIncompleteSummary () {
623+ if (!SpeedrunTimer::IsRunning ()) return ;
624+
625+ std::vector<uint8_t > data = buildIncompleteSummary ();
626+ engine->demorecorder ->RecordData (data.data (), data.size ());
627+ }
628+
595629void SpeedrunTimer::Stop (std::string segName) {
596630 if (!g_speedrun.isRunning ) {
597631 return ;
0 commit comments