I am trying to implement a replay/undo system for a turn based strategy game I am currently working on. A sample move could go as follows:
1. A players select a pawn and gives it an attack command. 2. The attacked unit dies. 3. The dead unit is removed from the map and the controlling player. 4. The controlling player takes some damage. 5. The attacking unit gains a survivor strength power up for the remainder of the game.
The rest of the game plays similarly to a Fire Emblem type game, but the point is a single command like attacking yields multiple effects to various game entities.
Eventually I want to make the game networked, but for now everything is local play.
After doing some research, I came across several resources discussing the command pattern and feel it is the solution to my replay and undo system. I ended up using an interface similar to https://gamedev.stackexchange.com/a/37684/41499 but I am confused on some of the implementation details.
Do I make commands to update each component of my game separately (i.e. AtkUnitCmd, RmvUnitFromMapCmd, RmvUnitFromPlayerCmd, InflictPlayerDmgCmd, etc.) or should my AtkUnitCmd handle all updates of entity state internally?
How do I handle dead units? I can store a reference to the dead unit, but this would likely need to change when networking is implemented as the object itself would not be transmitted over the network correct?
Each command has some animation involved for example when a unit moves an animation needs to play. I may choose to skip the animations while other times leave them on. Do I bake the animations into the commands themselves or should I separate the animation code and call it somehow when the command is played?