void read_from(ReadSource in, Level& level) { read(in, level.netRaceFlags); read(in, level.playerNum); read(in, level.player, kMaxPlayerNum); read(in, level.scoreStringResID); read(in, level.initialFirst); read(in, level.prologueID); read(in, level.initialNum); read(in, level.songID); read(in, level.conditionFirst); read(in, level.epilogueID); read(in, level.conditionNum); read(in, level.starMapH); read(in, level.briefPointFirst); read(in, level.starMapV); read(in, level.briefPointNum); level.parTime = game_ticks(secs(read<int16_t>(in))); in.shift(2); read(in, level.parKills); read(in, level.levelNameStrNum); read(in, level.parKillRatio); read(in, level.parLosses); int16_t start_time = read<int16_t>(in); level.startTime = secs(start_time & kLevel_StartTimeMask); level.is_training = start_time & kLevel_IsTraining_Bit; }
String DebriefingScreen::build_score_text( game_ticks your_time, game_ticks par_time, int your_loss, int par_loss, int your_kill, int par_kill) { Resource rsrc("text", "txt", 6000); String text(utf8::decode(rsrc.data())); StringList strings(6000); const int your_mins = duration_cast<secs>(your_time.time_since_epoch()).count() / 60; const int your_secs = duration_cast<secs>(your_time.time_since_epoch()).count() % 60; const int par_mins = duration_cast<secs>(par_time.time_since_epoch()).count() / 60; const int par_secs = duration_cast<secs>(par_time.time_since_epoch()).count() % 60; const int your_score = score(your_time, par_time, your_loss, par_loss, your_kill, par_kill); const int par_score = 100; string_replace(&text, strings.at(0), your_mins); string_replace(&text, strings.at(1), dec(your_secs, 2)); if (par_time > game_ticks()) { string_replace(&text, strings.at(2), par_mins); String secs_string; print(secs_string, format(":{0}", dec(par_secs, 2))); string_replace(&text, strings.at(3), secs_string); } else { StringList data_strings(6002); string_replace(&text, strings.at(2), data_strings.at(8)); // = "N/A" string_replace(&text, strings.at(3), ""); } string_replace(&text, strings.at(4), your_loss); string_replace(&text, strings.at(5), par_loss); string_replace(&text, strings.at(6), your_kill); string_replace(&text, strings.at(7), par_kill); string_replace(&text, strings.at(8), your_score); string_replace(&text, strings.at(9), par_score); return text; }