grassblade-entertainment / greebles-issues

Feedback and issues with Greebles
1 stars 0 forks source link

Principles of Block Movement #42

Open James-Gryphon opened 1 year ago

James-Gryphon commented 1 year ago

Rather than being a proper "issue", this is a working document showing what my study suggests are underlying principles of Classic Greebles block movement and behavior. This may be expanded or changed as further research is done, and edited for clarity.

Inasmuch as any behavior that doesn't match Classic Greebles play is a bug, I suppose you could close this issue when block movement behavior is believed to be identical.

Terminology: An "obstacle" is a wall (the edge around the game board), a regular stationary block, or a stationary Easy mode or shielded player. A "collision" is defined as being between two blocks or block-like objects. A "target" is a player or greeble that is vulnerable to being squashed. A "bounce" is when a block strikes a bounce block.

Principles of Greebles Block Movement:

1. Blocks have three basic speeds: fast, medium, and slow. Medium is half the speed of fast; slow is a quarter of the speed of fast. When you first push a block, it moves at full speed.

The full speed of a block appears to be about 14 squares per second (with the starting square being 0 and each additional square incrementing the count). For comparison, the normal speed of a player appears to be 3Q/s, slightly slower than a 'slow' block. This behavior seems to be decently simulated on the port; I'm not certain that apparent discrepancies I observed in my brief overview aren't actually caused by the screen recording mechanism.

2. Suppose a block is pushed and is moving at full speed. When striking only obstacles, on the first collision, it will reverse direction and move at half speed. On a second collision, it will again reverse direction and move at quarter speed (of its initial speed). On a third collision, it will stop outright in place, the square it was in when impacting the obstacle.

3. Walls (the edge around the game board) are treated the same as blocks.

4. Easy mode, or shielded, players are treated the same as blocks.

5. On Suicidal mode, blocks randomly do not slow down at times when they might. The rate appears to be about 50%.

6. When a block squashes a greeble on Easy or Normal mode, it will come to a complete stop upon hitting the first obstacle.

7. When squishing a greeble on Suicidal, if the block does not stop (with a 50% chance), it will only bounce back at slow speed.

8. When a block strikes a bounce block, it does not lose speed, unless it has already struck a greeble.

9. Flamethrowers shoot grenades at medium speed.

10. A bounce grenade behaves as a normal block, until becoming stationary, when it explodes.

11. Regular grenades are complicated: A grenade explodes when it would become stationary or bounce, unless it bumps into a moving block. A moving (Easy mode/shielded) player usually counts as a moving block. While stationary players who are hit by grenades on Easy mode die, they are killed by the explosion that ensues when the grenade hits an obstacle, not the block crushing them. (Incidentally, the grenadier doesn't get points.) Grenades are not affected by bounce blocks. A grenade bounces, as a normal block, if it collides with a moving block. On Easy mode, it is possible to bounce grenades back and forth, so long as you are in motion.

12. Blocks that hit blocks in motion head-on do not slow down, but do reverse direction.

13. Blocks that hit blocks in motion perpendicular to their own motion behave as though they had collided with a stationary block. However, this only applies to one block, the block adjudged to be striking the other. The other block remains at full speed.

14. Bounce blocks in motion do not appear to have an additional bounce effect.

Things that are currently unknown that we know are unknown: While we know it exists, hastened block decay (caused by block bounces) is currently not understood.

drautb commented 1 year ago

The full speed of a block appears to be about 14 squares per second (with the starting square being 0 and each additional square incrementing the count). For comparison, the normal speed of a player appears to be 3Q/s, slightly slower than a 'slow' block. This behavior seems to be decently simulated on the port; I'm not certain that apparent discrepancies I observed in my brief overview aren't actually caused by the screen recording mechanism.

14 tiles per second is what I came up with as well, so 14, 7, and 3.5 tiles/s for each speed. For players the port is using a default speed of 3 tiles/s at the moment.

  1. On Suicidal mode, blocks randomly do not slow down at times when they might. The rate appears to be about 50%.

The original manual specifies the 50% slowdown chance as well.

  1. When squishing a greeble on Suicidal, if the block does not stop (with a 50% chance), it will only bounce back at slow speed.

I don't think the port obeys this yet, on my todo list.

  1. When a block strikes a bounce block, it does not lose speed, unless it has already struck a greeble.

I think the port always bounces without losing speed, even when squishing a greeble. If it should slow down, then what is the correct behavior when a block moving at slow speed squishes a greeble against a bounce block? Should it halt or bounce off? (Still at slow speed)

  1. Regular grenades are complicated: A grenade explodes when it would become stationary or bounce, unless it bumps into a moving block. A moving (Easy mode/shielded) player usually counts as a moving block. While stationary players who are hit by grenades on Easy mode die, they are killed by the explosion that ensues when the grenade hits an obstacle, not the block crushing them. (Incidentally, the grenadier doesn't get points.)

The port matches this behavior, although it may be awarding points in this case where it shouldn't.

Grenades are not affected by bounce blocks.

Confirmed.

While we know it exists, hastened block decay (caused by block bounces) is currently not understood.

Posted my best theory so far of the rules that govern this in https://github.com/grassblade-entertainment/greebles-issues/issues/39.

habnabit commented 1 year ago
  1. Easy mode, or shielded, players are treated the same as blocks.

AIUI players in this state are treated like a bounce block: pushed blocks bounce off without loss of speed