2009-08-21 20:21:05 +00:00
|
|
|
/*
|
|
|
|
* This file is part of OpenTTD.
|
|
|
|
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
|
|
|
|
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
2023-06-13 08:33:33 +00:00
|
|
|
/** @file gamelog.h Functions to be called to log fundamental changes to the game */
|
2008-06-03 18:35:58 +00:00
|
|
|
|
|
|
|
#ifndef GAMELOG_H
|
|
|
|
#define GAMELOG_H
|
|
|
|
|
|
|
|
#include "newgrf_config.h"
|
|
|
|
|
2011-05-02 17:42:12 +00:00
|
|
|
/** The actions we log. */
|
2023-05-08 17:01:06 +00:00
|
|
|
enum GamelogActionType : uint8_t {
|
2008-06-03 18:35:58 +00:00
|
|
|
GLAT_START, ///< Game created
|
|
|
|
GLAT_LOAD, ///< Game loaded
|
|
|
|
GLAT_GRF, ///< GRF changed
|
|
|
|
GLAT_CHEAT, ///< Cheat was used
|
2009-02-08 12:25:13 +00:00
|
|
|
GLAT_SETTING, ///< Setting changed
|
2008-07-24 15:19:26 +00:00
|
|
|
GLAT_GRFBUG, ///< GRF bug was triggered
|
2009-03-30 00:21:43 +00:00
|
|
|
GLAT_EMERGENCY, ///< Emergency savegame
|
2008-06-03 18:35:58 +00:00
|
|
|
GLAT_END, ///< So we know how many GLATs are there
|
|
|
|
GLAT_NONE = 0xFF, ///< No logging active; in savegames, end of list
|
|
|
|
};
|
|
|
|
|
2023-05-01 17:14:31 +00:00
|
|
|
/** Type of logged change */
|
2023-05-08 17:01:06 +00:00
|
|
|
enum GamelogChangeType : uint8_t {
|
2023-05-01 17:14:31 +00:00
|
|
|
GLCT_MODE, ///< Scenario editor x Game, different landscape
|
|
|
|
GLCT_REVISION, ///< Changed game revision string
|
|
|
|
GLCT_OLDVER, ///< Loaded from savegame without logged data
|
|
|
|
GLCT_SETTING, ///< Non-networksafe setting value changed
|
|
|
|
GLCT_GRFADD, ///< Removed GRF
|
|
|
|
GLCT_GRFREM, ///< Added GRF
|
|
|
|
GLCT_GRFCOMPAT, ///< Loading compatible GRF
|
|
|
|
GLCT_GRFPARAM, ///< GRF parameter changed
|
|
|
|
GLCT_GRFMOVE, ///< GRF order changed
|
|
|
|
GLCT_GRFBUG, ///< GRF bug triggered
|
|
|
|
GLCT_EMERGENCY, ///< Emergency savegame
|
|
|
|
GLCT_END, ///< So we know how many GLCTs are there
|
|
|
|
GLCT_NONE = 0xFF, ///< In savegames, end of list
|
|
|
|
};
|
|
|
|
|
|
|
|
struct LoggedChange;
|
|
|
|
struct LoggedAction;
|
|
|
|
struct GamelogInternalData;
|
|
|
|
|
|
|
|
class Gamelog {
|
|
|
|
private:
|
|
|
|
std::unique_ptr<GamelogInternalData> data;
|
|
|
|
GamelogActionType action_type;
|
|
|
|
struct LoggedAction *current_action;
|
|
|
|
|
2023-05-09 21:10:38 +00:00
|
|
|
void Change(std::unique_ptr<LoggedChange> &&change);
|
2008-06-03 18:35:58 +00:00
|
|
|
|
2023-05-01 17:14:31 +00:00
|
|
|
public:
|
|
|
|
Gamelog();
|
|
|
|
~Gamelog();
|
2008-06-03 18:35:58 +00:00
|
|
|
|
2023-05-01 17:14:31 +00:00
|
|
|
void StartAction(GamelogActionType at);
|
|
|
|
void StopAction();
|
|
|
|
void StopAnyAction();
|
2008-06-03 18:35:58 +00:00
|
|
|
|
2023-05-01 17:14:31 +00:00
|
|
|
void Reset();
|
2009-03-30 00:21:43 +00:00
|
|
|
|
2023-04-29 11:11:45 +00:00
|
|
|
void Print(std::function<void(const std::string &)> proc);
|
2023-05-01 17:14:31 +00:00
|
|
|
void PrintDebug(int level);
|
|
|
|
void PrintConsole();
|
2008-06-03 18:35:58 +00:00
|
|
|
|
2023-05-01 17:14:31 +00:00
|
|
|
void Emergency();
|
|
|
|
bool TestEmergency();
|
2008-06-03 18:35:58 +00:00
|
|
|
|
2023-05-01 17:14:31 +00:00
|
|
|
void Revision();
|
|
|
|
void Mode();
|
|
|
|
void Oldver();
|
2023-05-08 17:01:06 +00:00
|
|
|
void Setting(const std::string &name, int32_t oldval, int32_t newval);
|
2008-06-03 18:35:58 +00:00
|
|
|
|
2023-05-01 17:14:31 +00:00
|
|
|
void GRFUpdate(const GRFConfig *oldg, const GRFConfig *newg);
|
|
|
|
void GRFAddList(const GRFConfig *newg);
|
2023-05-08 17:01:06 +00:00
|
|
|
void GRFRemove(uint32_t grfid);
|
2023-05-01 17:14:31 +00:00
|
|
|
void GRFAdd(const GRFConfig *newg);
|
2023-05-08 17:01:06 +00:00
|
|
|
void GRFBug(uint32_t grfid, byte bug, uint64_t data);
|
|
|
|
bool GRFBugReverse(uint32_t grfid, uint16_t internal_id);
|
2023-05-01 17:14:31 +00:00
|
|
|
void GRFCompatible(const GRFIdentifier *newg);
|
2023-05-08 17:01:06 +00:00
|
|
|
void GRFMove(uint32_t grfid, int32_t offset);
|
|
|
|
void GRFParameters(uint32_t grfid);
|
2023-05-01 17:14:31 +00:00
|
|
|
|
|
|
|
void TestRevision();
|
|
|
|
void TestMode();
|
|
|
|
|
2023-05-08 17:01:06 +00:00
|
|
|
void Info(uint32_t *last_ottd_rev, byte *ever_modified, bool *removed_newgrfs);
|
2023-05-01 17:14:31 +00:00
|
|
|
const GRFIdentifier *GetOverriddenIdentifier(const GRFConfig *c);
|
|
|
|
|
|
|
|
/* Saveload handler for gamelog needs access to internal data. */
|
|
|
|
friend struct GLOGChunkHandler;
|
|
|
|
};
|
2008-07-24 15:19:26 +00:00
|
|
|
|
2023-05-01 17:14:31 +00:00
|
|
|
extern Gamelog _gamelog;
|
2011-10-30 13:47:45 +00:00
|
|
|
|
2008-06-03 18:35:58 +00:00
|
|
|
#endif /* GAMELOG_H */
|