Add log of game events since last load and overall
Add console command Add to crashlog
This commit is contained in:
@@ -1982,6 +1982,21 @@ DEF_CONSOLE_CMD(ConVehicleStats)
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConDumpGameEvents)
|
||||
{
|
||||
if (argc == 0) {
|
||||
IConsoleHelp("Dump game events.");
|
||||
return true;
|
||||
}
|
||||
|
||||
char buffer[256];
|
||||
DumpGameEventFlags(_game_events_since_load, buffer, lastof(buffer));
|
||||
IConsolePrintF(CC_DEFAULT, "Since load: %s", buffer);
|
||||
DumpGameEventFlags(_game_events_overall, buffer, lastof(buffer));
|
||||
IConsolePrintF(CC_DEFAULT, "Overall: %s", buffer);
|
||||
return true;
|
||||
}
|
||||
|
||||
DEF_CONSOLE_CMD(ConCheckCaches)
|
||||
{
|
||||
if (argc == 0) {
|
||||
@@ -2253,6 +2268,7 @@ void IConsoleStdLibRegister()
|
||||
IConsoleCmdRegister("dump_inflation", ConDumpInflation, nullptr, true);
|
||||
IConsoleCmdRegister("dump_cpdp_stats", ConDumpCpdpStats, nullptr, true);
|
||||
IConsoleCmdRegister("dump_veh_stats", ConVehicleStats, nullptr, true);
|
||||
IConsoleCmdRegister("dump_game_events", ConDumpGameEvents, nullptr, true);
|
||||
IConsoleCmdRegister("check_caches", ConCheckCaches, nullptr, true);
|
||||
|
||||
/* NewGRF development stuff */
|
||||
|
@@ -320,6 +320,14 @@ char *CrashLog::LogLibraries(char *buffer, const char *last) const
|
||||
*/
|
||||
char *CrashLog::LogGamelog(char *buffer, const char *last) const
|
||||
{
|
||||
if (_game_events_since_load || _game_events_overall) {
|
||||
buffer += seprintf(buffer, last, "Events: ");
|
||||
buffer = DumpGameEventFlags(_game_events_since_load, buffer, last);
|
||||
buffer += seprintf(buffer, last, ", ");
|
||||
buffer = DumpGameEventFlags(_game_events_overall, buffer, last);
|
||||
buffer += seprintf(buffer, last, "\n\n");
|
||||
}
|
||||
|
||||
CrashLog::gamelog_buffer = buffer;
|
||||
CrashLog::gamelog_last = last;
|
||||
GamelogPrint(&CrashLog::GamelogFillCrashLog);
|
||||
|
@@ -599,6 +599,8 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
||||
|
||||
cur_company.Restore();
|
||||
|
||||
RegisterGameEvents(new_owner != INVALID_OWNER ? GEF_COMPANY_MERGE : GEF_COMPANY_DELETE);
|
||||
|
||||
MarkWholeScreenDirty();
|
||||
}
|
||||
|
||||
|
@@ -79,6 +79,8 @@ void InitializeGame(uint size_x, uint size_y, bool reset_date, bool reset_settin
|
||||
_tick_skip_counter = 0;
|
||||
_cur_tileloop_tile = 1;
|
||||
_thd.redsq = INVALID_TILE;
|
||||
_game_events_since_load = (GameEventFlags) 0;
|
||||
_game_events_overall = (GameEventFlags) 0;
|
||||
if (reset_settings) MakeNewgameSettingsLive();
|
||||
|
||||
if (reset_date) {
|
||||
|
@@ -94,6 +94,9 @@ extern Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMP
|
||||
extern void ShowOSErrorBox(const char *buf, bool system);
|
||||
extern char *_config_file;
|
||||
|
||||
GameEventFlags _game_events_since_load;
|
||||
GameEventFlags _game_events_overall;
|
||||
|
||||
/**
|
||||
* Error handling for fatal user errors.
|
||||
* @param s the string to print.
|
||||
@@ -377,6 +380,9 @@ static void ShutdownGame()
|
||||
InvalidateVehicleTickCaches();
|
||||
ClearVehicleTickCaches();
|
||||
ClearCommandLog();
|
||||
|
||||
_game_events_since_load = (GameEventFlags) 0;
|
||||
_game_events_overall = (GameEventFlags) 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1698,3 +1704,15 @@ void GameLoop()
|
||||
SoundDriver::GetInstance()->MainLoop();
|
||||
MusicLoop();
|
||||
}
|
||||
|
||||
char *DumpGameEventFlags(GameEventFlags events, char *b, const char *last)
|
||||
{
|
||||
if (b <= last) *b = 0;
|
||||
auto dump = [&](char c, GameEventFlags ev) {
|
||||
if (events & ev) b += seprintf(b, last, "%c", c);
|
||||
};
|
||||
dump('d', GEF_COMPANY_DELETE);
|
||||
dump('m', GEF_COMPANY_MERGE);
|
||||
dump('n', GEF_RELOAD_NEWGRF);
|
||||
return b;
|
||||
}
|
||||
|
@@ -87,6 +87,24 @@ typedef SimpleTinyEnumT<PauseMode, byte> PauseModeByte;
|
||||
/** The current pause mode */
|
||||
extern PauseModeByte _pause_mode;
|
||||
|
||||
enum GameEventFlags : uint32 {
|
||||
GEF_COMPANY_DELETE = 1 << 0, ///< (d) A company has been deleted
|
||||
GEF_COMPANY_MERGE = 1 << 1, ///< (m) A company has been bought by another
|
||||
GEF_RELOAD_NEWGRF = 1 << 2, ///< (n) ReloadNewGRFData() has been called
|
||||
};
|
||||
DECLARE_ENUM_AS_BIT_SET(GameEventFlags)
|
||||
|
||||
extern GameEventFlags _game_events_since_load;
|
||||
extern GameEventFlags _game_events_overall;
|
||||
|
||||
inline void RegisterGameEvents(GameEventFlags events)
|
||||
{
|
||||
_game_events_since_load |= events;
|
||||
_game_events_overall |= events;
|
||||
}
|
||||
|
||||
char *DumpGameEventFlags(GameEventFlags events, char *b, const char *last);
|
||||
|
||||
void AskExitGame();
|
||||
void AskExitToGameMenu();
|
||||
|
||||
|
@@ -3746,6 +3746,8 @@ bool AfterLoadGame()
|
||||
*/
|
||||
void ReloadNewGRFData()
|
||||
{
|
||||
RegisterGameEvents(GEF_RELOAD_NEWGRF);
|
||||
|
||||
RailTypeLabel rail_type_label_map[RAILTYPE_END];
|
||||
for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) {
|
||||
rail_type_label_map[rt] = GetRailTypeInfo(rt)->label;
|
||||
|
@@ -105,6 +105,7 @@ const SlxiSubChunkInfo _sl_xv_sub_chunk_infos[] = {
|
||||
{ XSLFI_SAVEGAME_UNIQUE_ID, XSCF_IGNORABLE_ALL, 1, 1, "savegame_unique_id", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_RV_OVERTAKING, XSCF_NULL, 1, 1, "roadveh_overtaking", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_LINKGRAPH_MODES, XSCF_NULL, 1, 1, "linkgraph_modes", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_GAME_EVENTS, XSCF_NULL, 1, 1, "game_events", nullptr, nullptr, nullptr },
|
||||
{ XSLFI_NULL, XSCF_NULL, 0, 0, nullptr, nullptr, nullptr, nullptr },// This is the end marker
|
||||
};
|
||||
|
||||
|
@@ -72,6 +72,7 @@ enum SlXvFeatureIndex {
|
||||
XSLFI_SAVEGAME_UNIQUE_ID, ///< Savegame unique ID
|
||||
XSLFI_RV_OVERTAKING, ///< Roadvehicle overtaking
|
||||
XSLFI_LINKGRAPH_MODES, ///< Linkgraph additional distribution modes
|
||||
XSLFI_GAME_EVENTS, ///< Game event flags
|
||||
|
||||
XSLFI_RIFF_HEADER_60_BIT, ///< Size field in RIFF chunk header is 60 bit
|
||||
XSLFI_HEIGHT_8_BIT, ///< Map tile height is 8 bit instead of 4 bit, but savegame version may be before this became true in trunk
|
||||
|
@@ -92,6 +92,7 @@ static const SaveLoadGlobVarList _date_desc[] = {
|
||||
SLEG_CONDVAR(_next_competitor_start, SLE_UINT32, SLV_109, SL_MAX_VERSION),
|
||||
SLEG_VAR(_trees_tick_ctr, SLE_UINT8),
|
||||
SLEG_CONDVAR(_pause_mode, SLE_UINT8, SLV_4, SL_MAX_VERSION),
|
||||
SLEG_CONDVAR_X(_game_events_overall, SLE_UINT32, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_GAME_EVENTS)),
|
||||
SLE_CONDNULL(4, SLV_11, SLV_120),
|
||||
SLEG_END()
|
||||
};
|
||||
@@ -118,6 +119,7 @@ static const SaveLoadGlobVarList _date_check_desc[] = {
|
||||
SLE_CONDNULL(4, SLV_109, SL_MAX_VERSION), // _next_competitor_start
|
||||
SLE_NULL(1), // _trees_tick_ctr
|
||||
SLE_CONDNULL(1, SLV_4, SL_MAX_VERSION), // _pause_mode
|
||||
SLE_CONDNULL_X(4, SL_MIN_VERSION, SL_MAX_VERSION, SlXvFeatureTest(XSLFTO_AND, XSLFI_GAME_EVENTS)), // _game_events_overall
|
||||
SLE_CONDNULL(4, SLV_11, SLV_120),
|
||||
SLEG_END()
|
||||
};
|
||||
|
Reference in New Issue
Block a user