User:IDK/Speed Rework

From PMDOWiki

The current speed system that everyone moves on is:

    0: All movement Speeds
    1/4: Quad Speed
    1/3: Triple Speed
    1/2: Double, Quad Speed
    2/3: Triple Speed
    3/4: Quad Speed
-- End Turn.  Clear all used-move flags --

I tried changing it to

    1/4: Quad Speed
    1/3: Triple Speed
    1/2: Double, Quad Speed
    2/3: Triple Speed
    3/4: Quad Speed
    0: All movement Speeds
-- End Turn.  Clear all used-move flags --

this would in theory solve the speed-up delay

because previously it was:

0: Use speed-up move, player is marked as used-move
0: Enemy moves
1/2: Player is at double speed and would be able to move again, but is marked as used-move so they can't
-- Next Turn.  Clear all used-move flags. --
0: Player walks
0: Enemy walks
1/2: Player can walk again


Now it would be:

1: Use speed-up move, player is marked as used-move
1: Enemy moves
-- Next Turn.  Clear all used-move flags. --
1/2: Player walks
1: Player can walk again
1: Enemy gets to move

HOWEVER

this design would reveal a favoritism to enemy:

1: Player attacks
1: Enemy used Silver wind!  Enemy is at double speed! (Marked as move-used)
-- Next turn.  All used-move flags cleared. --
1/2: Enemy used Silver Wind! Enemy is at triple speed! (Marked as move-used)
2/3: Enemy would normally be able to move AGAIN, but is marked as used-move so they can't (thank god)
1: Player can respond

technically, this issue also occurs in the current system, just with a one-turn delay. But our current system slightly favors enemies too. But what if...

-- All used-move flags for ENEMIES cleared --
    0: All movement Speeds
-- All used-move flags for PLAYERS cleared --
    1/4: Quad Speed
    1/3: Triple Speed
    1/2: Double, Quad Speed
    2/3: Triple Speed
    3/4: Quad Speed

or rather

    0: All movement Speeds (Player)
-- All used-move flags cleared --
    0: All movement Speeds (Enemies)
    1/4: Quad Speed
    1/3: Triple Speed
    1/2: Double, Quad Speed
    2/3: Triple Speed
    3/4: Quad Speed

This doesn't look very clean, but it would result in fairness:

0: Player: Agility.  Used-Move set
-- Used-move flags cleared --
0: Enemy: Move.
1/2: Player: Move
-- Next turn --
0: Player: Move
0: Enemy Move
1/2: Player: Move
-- Next turn --
0: Player: Move
etc.

and

0: Player: Move
-- Used Move flags cleared --
0: Enemy: Silver Wind.  Used-Move set.
1/2: Enemy: Used-move, not allowed to move.
-- Next Turn --
0: Player: Move
0: Enemy: Move
1/2: Enemy: Move
-- Next Turn --
0: Player: Move
0: Enemy: Move
1/2: Enemy: Move

also...

0: Player: Move
-- Used Move flags cleared --
0: Enemy: Silver Wind (Double speed).  Used-Move set.
1/2: Enemy: Used-move, not allowed to move.
-- Next Turn --
0: Player: Move
-- Used Move flags cleared --
0: Enemy: Silver Wind (Triple speed). Used-move set.
1/3: Enemy: Used-move, not allowed to move.
2/3: Enemy: Used-move, not allowed to move.
-- Next Turn --
0: Player: Move

if both the player and the enemy get to move on a sub-turn like 1/2, the player gets to move first and then the enemy moves right after


0: Player: Agility.  Used-Move set
-- Used-move flags cleared --
0: Enemy: (Already at 2x speed) Move.
1/2: Player: Move
1/2: Enemy: Move
-- Next turn --
0: Player: Move
0: Enemy Move
1/2: Player: Move
1/2: Enemy: Move
-- Next turn --
0: Player: Move
etc.

This scenario is slightly in favor of the player, but only within the player's frame of reference, so it should be fine:

0: Player: (already at 2x speed) Move.
-- Used-move flags cleared --
0: Enemy: Agility. Used-Move set
1/2: Player: Move
1/2: Enemy: Can't Move
-- Next turn --
0: Player: Move
0: Enemy Move
1/2: Player: Move
1/2: Enemy: Move
-- Next turn --

Additional scenarios:

0:Player used Agility! <Move used>
0:Ally moves
-- Move use clears --
0:Enemy moves
1/2:Player moves
1/2:Ally moves
--- End Turn --
0:Player moves
0:Ally moves
-- Move use clears --
0:Enemy moves
1/2:Player moves
1/2:Ally moves
0:Player is already at double speed, moves.
0:Enemy moves
1/2:Player used agility! <move use set>
2/3:Player qualifies for this tier but skips.  already used move
--- End Turn --
0:Player skips.  already used move
-- Move use clears --
0:Enemy moves
1/3:Player moves
2/3:Player moves
--- End Turn --
0:Player moves
-- Move use clears --
0:Enemy moves

this only works because there are two sides: player and enemy.

which is exactly the same as the number of directions in the flow of time itself: forwards and backwards.

This causes regression in another problem: Normally, Summon Trap turns on the Move Use flag to prevent the summoned enemies from immediately attacking (only for enemies).

0:Player steps on a summon Trap.  Move Use flags are set for the newly summoned enemies.
0:Allies take their turn
0:Enemies skip due to Move Use flag
1/4: Player/allies can move, Enemies skip
1/3: Player/allies can move, Enemies skip
1/2: Player/allies can move, Enemies skip
2/3: Player/allies can move, Enemies skip
3/4: Player/allies can move, Enemies skip
--- End Turn, Move Use clears --
0:Player reacts to the new summons
0:Enemies (including the new summons) move or attack

And Orb/Chest-activated Monster Houses turn on the Move Use flag to prevent everyone from immediately attacking or reacting, until it's the leader's next turn:

0:Player opens a chest, triggers a monster house.  Move Use flags are set for everyone on the floor.
0:Allies skip due to Move Use flag
0:Enemies skip due to Move Use flag
1/4: Allies skip, Enemies skip
1/3: Allies skip, Enemies skip
1/2: Allies skip, Enemies skip
2/3: Allies skip, Enemies skip
3/4: Allies skip, Enemies skip
--- End Turn, Move Use clears --
0:Player reacts to the Monster House
0:Allies react to new summons
0:Enemies can move

Because of the new move use flag mechanics, enemies are able to attack immediately in both scenarios, respectively:

0:Player steps on a summon Trap.  Move Use flags are set for the newly summoned enemies.
0:Allies take their turn
-- Move Use Clear --
0:Enemies can move or attack!
1/4: Player/allies can move, Enemies can move
1/3: Player/allies can move, Enemies can move
1/2: Player/allies can move, Enemies can move
2/3: Player/allies can move, Enemies can move
3/4: Player/allies can move, Enemies can move
--- End Turn --
0:Player reacts to the new summons
0:Allies react to new summons
0:Enemies can move

And Orb/Chest-activated Monster Houses turn on the Move Use flag to prevent everyone from immediately attacking or reacting, until it's the leader's next turn:

0:Player opens a chest, triggers a monster house.  Move Use flags are set for everyone on the floor.
0:Allies skip due to Move Use flag
-- Move Use Clear --
0:Enemies can move or attack!
1/4: Player/allies can move, Enemies can move
1/3: Player/allies can move, Enemies can move
1/2: Player/allies can move, Enemies can move
2/3: Player/allies can move, Enemies can move
3/4: Player/allies can move, Enemies can move
--- End Turn, Move Use clears --
0:Player reacts to the Monster House

We must still have a variable that prevents movement or attacking that gets cleared at the end of a round/beginning of a round, like the original Move Use flag. We will call it the End Turn Lock. As long as Move Use OR End Turn Lock are on, the character cannot act. For example, with summons:

0:Player steps on a summon Trap.  End Turn Lock are set for the newly summoned enemies.
0:Allies take their turn
-- Move Use Clear --
0:Enemies skip due to End Turn Lock
1/4: Player/allies can move, Enemies skip
1/3: Player/allies can move, Enemies skip
1/2: Player/allies can move, Enemies skip
2/3: Player/allies can move, Enemies skip
3/4: Player/allies can move, Enemies skip
-- End Turn, End Turn Lock cleared --
0:Player reacts to the new summons
0:Allies react to new summons
-- Move Use Clear --
0:Enemies can move

Chest/Orb Monster Houses:

0:Player opens a chest, triggers a monster house.  End Turn Locks are set for everyone on the floor.
-- Move Use Clear --
0:Allies skip due to End Turn Lock
0:Enemies skip due to End Turn Lock
1/4: Allies skip, Enemies skip
1/3: Allies skip, Enemies skip
1/2: Allies skip, Enemies skip
2/3: Allies skip, Enemies skip
3/4: Allies skip, Enemies skip
-- End Turn, End Turn Lock cleared --
0:Player reacts to the Monster House
0:Allies react to new summons
-- Move Use Clear --
0:Enemies can move

If the player activates a chest house while at double speed, they may lose their first reacting turn:

1/2:Player opens a chest, triggers a monster house.  End Turn Locks are set for everyone on the floor.  Player's Move Use is set.
1/2: Allies skip, Enemies skip
-- End Turn, End Turn Lock cleared --
0:Player cannot act due to Move Use flag set
0:Allies react to new summons
-- Move Use Clear --
0:Enemies move/attack

Removing End Turn Lock must also remove Move Use flag, but ONLY if they have End Turn Lock to begin with:

1/2:Player opens a chest, triggers a monster house.  End Turn Locks are set for everyone on the floor.  Player's Move Use is set.
1/2: Allies skip, Enemies skip
-- End Turn, End Turn Lock cleared, Move Use flag cleared --
0:Player reacts to new summons
0:Allies react to new summons
-- Move Use Clear --
0:Enemies move/attack

for summon trap:

1/2:Player steps on a summon tile.  End Turn Locks are set for the newly spawned enemies.  Player's Move Use is set.
1/2: Allies can act, Enemies skip
-- End Turn, End Turn Lock and Move Use flag cleared for enemies --
0:Player reacts to new summons
0:Allies react to new summons
-- Move Use Clear --
0:Enemies move/attack


HOWEVER, the new speed system introduces the issue that it becomes impossible to kite enemies when moving faster than them:

0:Player used Agility! <Move used>
-- Move use clears --
0:Enemy attacks
1/2:Player moves one tile away
--- End Turn --
0:Player attacks
-- Move use clears --
0:Enemy attacks
1/2:Player moves one tile away

No matter what order you perform attacks or movements, enemies will always be able to respond to your attack. This is unwanted behavior, and a far worse consequence than the issue of gained speed appearing on the next turn. Thus, the change needs to be rolled back.