# gamelog.cpp File Reference

Definition of functions used for logging of important changes in the game. More...

`#include "stdafx.h"`
`#include "openttd.h"`
`#include "saveload/saveload.h"`
`#include "core/alloc_func.hpp"`
`#include "variables.h"`
`#include "string_func.h"`
`#include "settings_type.h"`
`#include "gamelog.h"`
`#include "gamelog_internal.h"`
`#include "console_func.h"`
`#include "debug.h"`
`#include "rev.h"`
`#include <stdarg.h>`

Go to the source code of this file.

## Data Structures
struct | GRFList
| List of GRFs using array of pointers instead of linked list. More...
## Enumerations
enum | { GAMELOG_BUF_LEN = 1024 }
## Functions
void | GamelogStartAction (GamelogActionType at)
| Stores information about new action, but doesn't allocate it Action is allocated only when there is at least one change.
void | GamelogStopAction ()
| Stops logging of any changes.
void | GamelogReset ()
| Resets and frees all memory allocated - used before loading or starting a new game.
static void | AddDebugText (char *buf, const char *s,...) WARN_FORMAT(2
static void | PrintGrfFilename (char *buf, uint grfid)
| Prints GRF filename if found.
static void | PrintGrfInfo (char *buf, uint grfid, const uint8 *md5sum)
| Prints GRF ID, checksum and filename if found.
| assert_compile (lengthof(la_text)==GLAT_END)
void | GamelogPrint (GamelogPrintProc *proc)
| Prints active gamelog.
static void | GamelogPrintConsoleProc (const char *s)
void | GamelogPrintConsole ()
static void | GamelogPrintDebugProc (const char *s)
void | GamelogPrintDebug (int level)
| Prints gamelog to debug output.
static LoggedChange * | GamelogChange (GamelogChangeType ct)
| Allocates new LoggedChange and new LoggedAction if needed.
void | GamelogEmergency ()
| Logs a emergency savegame.
bool | GamelogTestEmergency ()
| Finds out if current game is a loaded emergency savegame.
void | GamelogRevision ()
| Logs a change in game revision.
void | GamelogMode ()
| Logs a change in game mode (scenario editor or game).
void | GamelogOldver ()
| Logs loading from savegame without gamelog.
void | GamelogSetting (const char *name, int32 oldval, int32 newval)
| Logs change in game settings.
void | GamelogTestRevision ()
| Finds out if current revision is different than last revision stored in the savegame.
void | GamelogTestMode ()
| Finds last stored game mode or landscape.
static void | GamelogGRFBug (uint32 grfid, byte bug, uint64 data)
| Logs triggered GRF bug.
bool | GamelogGRFBugReverse (uint32 grfid, uint16 internal_id)
| Logs GRF bug - rail vehicle has different length after reversing.
static bool | IsLoggableGrfConfig (const GRFConfig *g)
| Decides if GRF should be logged.
void | GamelogGRFRemove (uint32 grfid)
| Logs removal of a GRF.
void | GamelogGRFAdd (const GRFConfig *newg)
| Logs adding of a GRF.
void | GamelogGRFCompatible (const GRFIdentifier *newg)
| Logs loading compatible GRF (the same ID, but different MD5 hash).
static void | GamelogGRFMove (uint32 grfid, int32 offset)
| Logs changing GRF order.
static void | GamelogGRFParameters (uint32 grfid)
| Logs change in GRF parameters.
void | GamelogGRFAddList (const GRFConfig *newg)
| Logs adding of list of GRFs.
static GRFList * | GenerateGRFList (const GRFConfig *grfc)
| Generates GRFList.
void | GamelogGRFUpdate (const GRFConfig *oldc, const GRFConfig *newc)
| Compares two NewGRF lists and logs any change.
void | GamelogGetOriginalGRFMD5Checksum (uint32 grfid, byte *md5sum)
| Get the MD5 checksum of the original NewGRF that was loaded.
## Variables
const uint16 | SAVEGAME_VERSION
| current savegame version
SavegameType | _savegame_type
| type of savegame we are loading
uint32 | _ttdp_version
| version of TTDP savegame (if applicable)
uint16 | _sl_version
| the major savegame version identifier
byte | _sl_minor_version
| the minor savegame version, DO NOT USE!
static GamelogActionType | _gamelog_action_type = GLAT_NONE
| action to record if anything changes
LoggedAction * | _gamelog_action = NULL
| first logged action
uint | _gamelog_actions = 0
| number of actions
static LoggedAction * | _current_action = NULL
| current action we are logging, NULL when there is no action active
static int | _dbgofs = 0
| offset in current output buffer
static const char * | la_text []
| Text messages for various logged actions.
static int | _gamelog_print_level = 0
| gamelog debug level we need to print stuff

## Detailed Description

Definition of functions used for logging of important changes in the game.

Definition in file gamelog.cpp.

## Enumeration Type Documentation

anonymous enum

Enumerator:

  GAMELOG_BUF_LEN | length of buffer for one line of text

Definition at line 82 of file gamelog.cpp.

## Function Documentation

static LoggedChange* GamelogChange | ( | GamelogChangeType | ct | ) | `[static]`

Allocates new LoggedChange and new LoggedAction if needed.

If there is no action active, NULL is returned.

Parameters:

  | ct | type of change

Returns:
  new LoggedChange, or NULL if there is no action active

Definition at line 303 of file gamelog.cpp.

References _gamelog_action_type, _gamelog_actions, LoggedAction::at, LoggedAction::change, LoggedAction::changes, LoggedChange::ct, GLAT_NONE, ReallocT(), and LoggedAction::tick.

Referenced by GamelogEmergency(), GamelogGRFAdd(), GamelogGRFBug(), GamelogGRFCompatible(), GamelogGRFMove(), GamelogGRFParameters(), GamelogGRFRemove(), GamelogMode(), GamelogOldver(), GamelogRevision(), and GamelogSetting().

void GamelogGetOriginalGRFMD5Checksum | ( | uint32 | grfid,
|  | byte * | md5sum |
| ) |  |  |

Get the MD5 checksum of the original NewGRF that was loaded.

Parameters:

  | grfid | the GRF ID to search for
  | md5sum | the MD5 checksum to write to.

Definition at line 702 of file gamelog.cpp.

References _gamelog_actions, LoggedAction::change, LoggedAction::changes, LoggedChange::ct, GLCT_GRFADD, LoggedChange::grfadd, GRFIdentifier::grfid, and GRFIdentifier::md5sum.

Referenced by NewGRFWindow::OnClick().

void GamelogGRFAdd | ( | const GRFConfig * | newg | ) |

Logs adding of a GRF.

Parameters:

  | newg | added GRF

Definition at line 523 of file gamelog.cpp.

References _gamelog_action_type, GamelogChange(), GLAT_GRF, GLAT_LOAD, GLAT_START, GLCT_GRFADD, LoggedChange::grfadd, and IsLoggableGrfConfig().

Referenced by GamelogGRFAddList(), and GamelogGRFUpdate().

void GamelogGRFAddList | ( | const GRFConfig * | newg | ) |

Logs adding of list of GRFs.

Useful when old savegame is loaded or when new game is started

Parameters:

  | newg | head of GRF linked list

Definition at line 582 of file gamelog.cpp.

References _gamelog_action_type, GamelogGRFAdd(), GLAT_LOAD, GLAT_START, and GRFConfig::next.

static void GamelogGRFBug | ( | uint32 | grfid,
|  | byte | bug,
|  | uint64 | data |
| ) |  |  | `[static]`

Logs triggered GRF bug.

Parameters:

  | grfid | ID of problematic GRF
  | bug | type of bug,

See also:
  enum GRFBugs

Parameters:

  | data | additional data

Definition at line 458 of file gamelog.cpp.

References _gamelog_action_type, GamelogChange(), GLAT_GRFBUG, GLCT_GRFBUG, and LoggedChange::grfbug.

Referenced by GamelogGRFBugReverse().

bool GamelogGRFBugReverse | ( | uint32 | grfid,
|  | uint16 | internal_id |
| ) |  |  |

Logs GRF bug - rail vehicle has different length after reversing.

Ensures this is logged only once for each GRF and engine type This check takes some time, but it is called pretty seldom, so it doesn't matter that much (ideally it shouldn't be called at all).

Parameters:

  | engine | engine to log

Returns:
  true iff a unique record was done

Definition at line 477 of file gamelog.cpp.

References _gamelog_actions, LoggedAction::change, GamelogGRFBug(), GamelogStartAction(), GamelogStopAction(), GBUG_VEH_LENGTH, GLAT_GRFBUG, and GLCT_GRFBUG.

Referenced by RailVehicleLengthChanged().

void GamelogGRFCompatible | ( | const GRFIdentifier * | newg | ) |

Logs loading compatible GRF (the same ID, but different MD5 hash).

Parameters:

  | newg | new (updated) GRF

Definition at line 539 of file gamelog.cpp.

References _gamelog_action_type, GamelogChange(), GLAT_GRF, GLAT_LOAD, GLCT_GRFCOMPAT, and LoggedChange::grfcompat.

Referenced by GamelogGRFUpdate(), and IsGoodGRFConfigList().

static void GamelogGRFMove | ( | uint32 | grfid,
|  | int32 | offset |
| ) |  |  | `[static]`

Logs changing GRF order.

Parameters:

  | grfid | GRF that is moved
  | offset | how far it is moved, positive = moved down

Definition at line 553 of file gamelog.cpp.

References _gamelog_action_type, GamelogChange(), GLAT_GRF, GLCT_GRFMOVE, and LoggedChange::grfmove.

Referenced by GamelogGRFUpdate().

static void GamelogGRFParameters | ( | uint32 | grfid | ) | `[static]`

Logs change in GRF parameters.

Details about parameters changed are not stored

Parameters:

  | grfid | ID of GRF to store

Definition at line 568 of file gamelog.cpp.

References _gamelog_action_type, GamelogChange(), GLAT_GRF, GLCT_GRFPARAM, and LoggedChange::grfparam.

Referenced by GamelogGRFUpdate().

void GamelogGRFRemove | ( | uint32 | grfid | ) |

Logs removal of a GRF.

Parameters:

  | grfid | ID of removed GRF

Definition at line 510 of file gamelog.cpp.

References _gamelog_action_type, GamelogChange(), GLAT_GRF, GLAT_LOAD, GLCT_GRFREM, and LoggedChange::grfrem.

Referenced by GamelogGRFUpdate(), and IsGoodGRFConfigList().

void GamelogGRFUpdate | ( | const GRFConfig * | oldc,
|  | const GRFConfig * | newc |
| ) |  |  |

Compares two NewGRF lists and logs any change.

Parameters:

  | oldc | original GRF list
  | newc | new GRF list

Definition at line 621 of file gamelog.cpp.

References GamelogGRFAdd(), GamelogGRFCompatible(), GamelogGRFMove(), GamelogGRFParameters(), GamelogGRFRemove(), GenerateGRFList(), GRFList::grf, GRFIdentifier::grfid, GRFIdentifier::md5sum, GRFList::n, GRFConfig::num_params, and GRFConfig::param.

Referenced by NewGRFConfirmationCallback().

void GamelogPrintDebug | ( | int | level | ) |

Prints gamelog to debug output.

Code is executed even when there will be no output. It is called very seldom, so it doesn't matter that much. At least it gives more uniform code...

Parameters:

  | level | debug level we need to print stuff

Definition at line 291 of file gamelog.cpp.

References GamelogPrint().

Referenced by GamelogStopAction().

void GamelogRevision | ( |  | ) |

Logs a change in game revision.

Parameters:

  | revision | new revision string

Definition at line 354 of file gamelog.cpp.

References _gamelog_action_type, GamelogChange(), GLAT_LOAD, GLAT_START, GLCT_REVISION, lastof, LoggedChange::revision, SAVEGAME_VERSION, and strecpy().

Referenced by GamelogTestRevision().

void GamelogSetting | ( | const char * | name,
|  | int32 | oldval,
|  | int32 | newval |
| ) |  |  |

Logs change in game settings.

Only non-networksafe settings are logged

Parameters:

  | name | setting name
  | oldval | old setting value
  | newval | new setting value

Definition at line 399 of file gamelog.cpp.

References _gamelog_action_type, GamelogChange(), GLAT_SETTING, GLCT_SETTING, and LoggedChange::setting.

Referenced by CmdChangeSetting().

void GamelogStartAction | ( | GamelogActionType | at | ) |

Stores information about new action, but doesn't allocate it Action is allocated only when there is at least one change.

Parameters:

  | at | type of action

Definition at line 40 of file gamelog.cpp.

References _gamelog_action_type, and GLAT_NONE.

Referenced by ClickChangeClimateCheat(), CmdChangeSetting(), GamelogGRFBugReverse(), NewGRFConfirmationCallback(), and SaveOrLoad().

void GamelogTestMode | ( |  | ) |

Finds last stored game mode or landscape.

Any change is logged

Definition at line 437 of file gamelog.cpp.

References _gamelog_actions, _settings_game, LoggedAction::change, GameSettings::game_creation, GamelogMode(), GLCT_MODE, GameCreationSettings::landscape, and LoggedChange::mode.

Referenced by ClickChangeClimateCheat().

void GamelogTestRevision | ( |  | ) |

Finds out if current revision is different than last revision stored in the savegame.

Appends GLCT_REVISION when the revision string changed

Definition at line 415 of file gamelog.cpp.

References _gamelog_actions, LoggedAction::change, GamelogRevision(), GLCT_REVISION, and LoggedChange::revision.

static GRFList* GenerateGRFList | ( | const GRFConfig * | grfc | ) | `[static]`

Generates GRFList.

Parameters:

  | grfc | head of GRF linked list

Definition at line 600 of file gamelog.cpp.

References GRFList::grf, IsLoggableGrfConfig(), GRFList::n, and GRFConfig::next.

Referenced by GamelogGRFUpdate().

static bool IsLoggableGrfConfig | ( | const GRFConfig * | g | ) | `[inline, static]`

Decides if GRF should be logged.

Parameters:

  | g | grf to determine

Returns:
  true iff GRF is not static and is loaded

Definition at line 502 of file gamelog.cpp.

References GRFConfig::flags, GCF_STATIC, GCS_NOT_FOUND, HasBit(), and GRFConfig::status.

Referenced by GamelogGRFAdd(), and GenerateGRFList().

static void PrintGrfFilename | ( | char * | buf,
|  | uint | grfid |
| ) |  |  | `[static]`

Prints GRF filename if found.

Parameters:

  | grfid | GRF which filename to print

Definition at line 105 of file gamelog.cpp.

References GRFConfig::filename.

Referenced by GamelogPrint(), and PrintGrfInfo().

static void PrintGrfInfo | ( | char * | buf,
|  | uint | grfid,
|  | const uint8 * | md5sum |
| ) |  |  | `[static]`

Prints GRF ID, checksum and filename if found.

Parameters:

  | grfid | GRF ID
  | md5sum | array of md5sum to print

Definition at line 118 of file gamelog.cpp.

References BSWAP32(), lastof, md5sumToString(), and PrintGrfFilename().

Referenced by GamelogPrint().

## Variable Documentation

const char* la_text[]`[static]`

Initial value:

     {
      "new game started",
      "game loaded",
      "GRF config changed",
      "cheat was used",
      "settings changed",
      "GRF bug triggered",
      "emergency savegame",
    }

Text messages for various logged actions.

Definition at line 133 of file gamelog.cpp.

Referenced by GamelogPrint().