These are debug / cheat game messages to switch between players in skirmish mode:
GameMessage::MSG_CHEAT_SWITCH_TEAMS
GameMessage::MSG_META_DEMO_SWITCH_TEAMS
GameMessage::MSG_META_DEMO_SWITCH_TEAMS_BETWEEN_CHINA_USA
They change the local player by calling rts::changeLocalPlayer. This causes the replay to mismatch, because MSG_LOGIC_CRC messages are now created with the new local player index instead of the original local player index:
|
GameMessage *msg = newInstance(GameMessage)(GameMessage::MSG_LOGIC_CRC); |
|
GameMessage::GameMessage( GameMessage::Type type ) |
|
{ |
|
m_playerIndex = ThePlayerList->getLocalPlayer()->getPlayerIndex(); |
AFAICT MSG_LOGIC_CRC messages should always use the original local player index, not whatever it may be changed to. Using the original player index fixes this bug.
These are debug / cheat game messages to switch between players in skirmish mode:
They change the local player by calling
rts::changeLocalPlayer. This causes the replay to mismatch, becauseMSG_LOGIC_CRCmessages are now created with the new local player index instead of the original local player index:GeneralsGameCode/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp
Line 3773 in 45178ee
GeneralsGameCode/Core/GameEngine/Source/Common/MessageStream.cpp
Lines 55 to 57 in 45178ee
AFAICT
MSG_LOGIC_CRCmessages should always use the original local player index, not whatever it may be changed to. Using the original player index fixes this bug.