bugfix(energy): Don't increase power production for disabled power plants on save game load#2508
bugfix(energy): Don't increase power production for disabled power plants on save game load#2508Caball009 wants to merge 4 commits intoTheSuperHackers:mainfrom
Conversation
…ants on save game load Moved code.
|
| Filename | Overview |
|---|---|
| GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Object.cpp | Moves setOrRestoreTeam call to after m_disabledMask and m_disabledTillFrame are loaded in Object::xfer(), fixing disabled-producer power bug on save load. Also adds clarifying comment at the deferred team-assignment site. |
| Generals/Code/GameEngine/Source/GameLogic/Object/Object.cpp | Same fix replicated from GeneralsMD: setOrRestoreTeam deferred until disabled state is fully deserialized, with matching comment added at call site. |
Sequence Diagram
sequenceDiagram
participant X as Object::xfer()
participant T as Object::setOrRestoreTeam()
participant P as Player::becomingTeamMember()
participant A as Object::friend_adjustPowerForPlayer()
Note over X: xfer teamID (but DON'T set yet)
Note over X: xfer m_status, m_scriptStatus...
Note over X: xfer m_disabledMask ✅
Note over X: xfer m_disabledTillFrame ✅
X->>T: setOrRestoreTeam(team, restoring=true)
T->>P: becomingTeamMember(obj, yes=true)
P->>A: friend_adjustPowerForPlayer(incoming=true)
alt isDisabled() && energyProduction > 0
Note over A: RETURN early — disabled producer skips power adjustment ✅
else
Note over A: objectEnteringInfluence(this)
end
Reviews (2): Last reviewed commit: "Replicated in Generals." | Re-trigger Greptile
|
This can be finalized. |
|
Replicated in Generals. |
When loading a save game with disabled power plants, players still get the power production from those plants. That's because the power production is increased before the
Objectdisabled flags are xfer'd. The following code is supposed to prevent the increase in power production, but the disabled flag would have to be xfer'd before this is called. This PR fixes that.GeneralsGameCode/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Object.cpp
Lines 3829 to 3835 in 920c4e6
Callstack:
TODO: