Updated more rules, working on undo & rewind.
More Pushable Things
Rotators, life points, time pausers, and time players, are all considered small, consumable objects. There is an edge case with these, which is what to do when an object attempting to enter cannot absorb the consumable object. Currently, the game handles these cases by blocking collision.
Instead, I am thinking it could be interesting to allow these small objects to be pushed if they aren’t absorbed, instead of blocking collision.
Now that these small objects are pushable, it makes sense to allow them through wall holes that the player is also allowed through.
Any object (both small and large) still follows the one push rule - you can only push one object at a time, no matter what the size. Trying to do so will still block collision.
Existing Object Updates
Max Life Points
The new push rule allows for puzzles with rotators and time changers, but doesn’t improve life points. One fix for this is to have a hard-limit on the number of life points you can have - such as 5. Once you reach this, you will only be pushing the hearts around, and will have to take damage before absorbing more of them. This allows for at least a few new types of puzzles.
The player won’t be considered rotatable (it’s just not going to really affect anything). Which means rotators can always be pushed around like blocks. This may or may not be OP, but I am planning to test this out. Rotators will only affect mirrors, to be consistent with the plan from the last post.
Time Immune Changers
When the player has the opposite time immunity state (playing/paused) as the changer, it will be pushed, otherwise absorbed. Pushing another object into it will have the same affect, except it will block collision when the object has the same state already - since the player can only push one object at a time.
Currently Working On
I am focusing on setting up some data structures for handling execute/undo, rewind/forward. I am most likely going to flatten the tree structure, since it will still contain the same number of elements and reduces complexity. There will need to be a timeline in addition to the action stack. Currently, it is not possible to undo a rewind, since the stack permanently pops the action metadata that is required to reverse the rewind.