User:Oshisaure: Difference between revisions
I've been wanting to do a writeup of my own rotation system concept and the ideas behind it to have a reference of it somewhere. I'll do this here later. |
No edit summary |
||
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Hello! I'm Oshisaure, a Tetris nerd who likes to do silly things in Tetris games, with a slight | Hello! I'm Oshisaure, a Tetris nerd who likes to do silly things in Tetris games, with a slight specialisation in [[Rotation system|Rotation Systems]] and unusual [[Twists]]. I have a [http://youtube.com/user/LeSpyroshisaure/ YouTube channel] where I like to share these silly things. | ||
I've also made [[A Gnowius' Challenge]] and [ | I've also made [[A Gnowius' Challenge]] and [[Puzzle Juggle Trouble]], and worked on a [[Cambridge]] fork with MillaBasset. | ||
== | == Vulptile Rotation System (VRS) == | ||
( | Although I had made a few over-the-top joke rulesets in the past (see [[A Gnowius' Challenge#Biased-On-Nutty-Kick-Enhancement Rotation System|BONKERS]] for a good example), the question of a proper Rotation System came about when I started having projects about a 1-VS-1 game. I wanted to have a game that differed greatly from the [[Tetris Guideline]], partly because it was incompatible with the idea of my game, partly because I wanted to imply that this game was following its own set of rules. One of the points of difference was, of course, the Rotation System. | ||
< | === Piece colours and entry orientations === | ||
While I do not consider things like colour scheme, harddrop vs sonic drop or piece entry rotation to be strictly related to the rotation system itself, they still end up being commonly assiciated into a common ruleset that people get used to - you can ask a guideline player and a TGM player what "the right piece colours" are and they will give you different answers. | |||
Because of this, I've decided to make my own colour scheme as well. To make it easier to play for colourblind people, I've made S and Z follow complemetary hues, as well as L and J. I then filled in the colours to the best of my ability by putting warm colours on the S and L pieces - as they both fit in a left well - and then picking colours that would probably upset anyone using Sega or guideline colours. I ended up with: | |||
* I: Purple (hue 270°) | |||
* O: Orange (hue 30°) | |||
* T: Green (hue 150°) | |||
* L: Red (hue 0°) | |||
* J: Cyan (hue 180°) | |||
* S: Yellow (hue 60°) | |||
* Z: Dark blue (hue 240°) | |||
As for spawning orientations, I make the pieces spawn flat side down, as that gives the most manoeuvrability in high gravity. | |||
TL;DR: the pieces look like this on spawn | |||
<playfield> | |||
ll s z i oo jj | |||
tttt ll sss zzz iii oo jj | |||
</playfield> | |||
Now onto the rotation system itself, for real. | |||
=== Core ideas and base guideline of VRS === | |||
A common criticism about [[SRS]] is that it feels unpredictable at high gravity. I think that this is mostly an issue on the wallkicks, but that part of it is induced by the S, Z and I pieces behaving differently on opposite orientations. Here's an example: | |||
{| border="0" cellspacing="0" style="text-align:center; border-collapse:collapse" | |||
|- style="vertical-align:top;" | |||
|style="padding:4px; width:108px;"|<playfield> | |||
gggg | |||
gggggg | |||
gggggggzz | |||
ggggggggzz | |||
ggggggggg | |||
gggggggg | |||
gggggggg | |||
ggggggggg | |||
</playfield> | |||
Rotate CW from entry orientation | |||
|style="padding:4px; width:108px;"|<playfield> | |||
gggg | |||
gggggg | |||
ggggggg | |||
gggggggg | |||
gggggggggz | |||
ggggggggzz | |||
ggggggggz | |||
ggggggggg | |||
</playfield> | |||
Z piece goes down | |||
|- style="vertical-align:top;" | |||
|style="padding:4px; width:108px;"|<playfield> | |||
gggg | |||
gggggg | |||
gggggggzz | |||
ggggggggzz | |||
ggggggggg | |||
gggggggg | |||
gggggggg | |||
ggggggggg | |||
</playfield> | |||
Rotate CW from "upside-down" | |||
|style="padding:4px; width:108px;"|<playfield> | |||
gggg | |||
gggggg z | |||
ggggggg zz | |||
ggggggggz | |||
ggggggggg | |||
gggggggg | |||
gggggggg | |||
ggggggggg | |||
</playfield> | |||
Z piece stays up | |||
|} | |||
While ambiguities like this don't happen in ARS, its right-side bias still leads to the infamous [[ARS#Mihara's conspiracy|Mihara conspiracy]]. | |||
The [[ARS#Center column rule|centre column rule]] also prevents moves that would otherwise work the same as their inverse: | |||
{| border="0" cellspacing="0" style="text-align:center; border-collapse:collapse" | |||
|- style="vertical-align:top;" | |||
|style="padding:4px; width:108px;"|<playfield> | |||
gg | |||
gggllggggg | |||
ggggl ggg | |||
gggglggggg | |||
</playfield> | |||
Rotate CCW | |||
|style="padding:4px; width:108px;"|<playfield> | |||
gg | |||
ggg ggggg | |||
gggglllggg | |||
gggglggggg | |||
</playfield> | |||
Works fine, classic ARS twist | |||
|- style="vertical-align:top;" | |||
|style="padding:4px; width:108px;"|<playfield> | |||
gggg | |||
ggg | |||
gggglllggg | |||
gggglggggg | |||
</playfield> | |||
Inverse move, rotate CW | |||
|style="padding:4px; width:108px;"|<playfield> | |||
gggg | |||
gggxx | |||
ggggx ggg | |||
ggggxbgggg | |||
</playfield> | |||
Doesn't work, would kick off [[File:BTet.png]] | |||
|} | |||
Based on these observations, VRS was designed with strict compliance to the following rules in mind: | |||
* '''Visual consistency:''' If two situations look identical, they are identical, and the same input will give the same results. The only direct consequence of this is that S, Z and I only have two states (horizontal and vertical) instead of four (North, East, South and West) | |||
* '''Reversability:''' If a rotation works, then the inverse rotation should be accounted for. While a valid setup for some reverse rotations may be impossible, the necessary kick is available anyway. This happens with the T piece in SRS on a couple rotations: | |||
{| border="0" cellspacing="0" style="text-align:left; border-collapse:collapse" | |||
|- | |||
|style="padding:4px;width:68px;"|<playfield> | |||
gt | |||
gttgg | |||
gt--g | |||
gg-gg | |||
</playfield> | |||
|This kick exists | |||
|- | |||
|style="padding:4px;width:68px;"|<playfield> | |||
- | |||
-- | |||
ttt | |||
t | |||
</playfield> | |||
|Despite not being possible to make this kick happen in normal gameplay, it is still coded in out of reversability | |||
|} | |||
* '''Horizontal symmetry''': A setup and its mirror conditions give mirrored results. This prevents the rotations and kicks to be biased towards one side only. For example: | |||
{| border="0" cellspacing="0" style="text-align:left; border-collapse:collapse" | |||
|- | |||
|style="padding:4px;width:108px;"|<playfield> | |||
g | |||
g i- | |||
gggiii gg | |||
ggg-g ggg | |||
ggggggggg | |||
</playfield> | |||
|If this is what happens when rotating CW on this state... | |||
|- | |||
|style="padding:4px;width:108px;"|<playfield> | |||
g | |||
-z g | |||
gg zzzggg | |||
ggg g-ggg | |||
ggggggggg | |||
</playfield> | |||
|... then this is what happens when rotating CCW on this state | |||
|} | |||
* '''Kick thoroughness:''' Do not leave gaps in the list of kicks you attempt, and attempt rotations closer to the kickless rotation first. For example, don't attempt a kick 2 cells up without trying 1 cell up first, or a diagonal down-left kick without trying a down kick and a left kick before that. Here's a visual example of a situation where SRS does '''not''' follow this rule, and which is probably the main inspiration for this rule: | |||
{| border="0" cellspacing="0" style="text-align:left; border-collapse:collapse" | |||
|- | |||
|style="padding:4px;width:108px;"|<playfield> | |||
gggg | |||
g | |||
glll | |||
glgggggggg | |||
g-gggggggg | |||
g--ggggggg | |||
</playfield> | |||
|If this is what happens when rotating CCW on this state... | |||
|- | |||
|style="padding:4px;width:108px;"|<playfield> | |||
gggg | |||
g | |||
glll | |||
glgggggggg | |||
gxxggggggg | |||
</playfield> | |||
|... then why would this not happen when rotating CCW on this state? | |||
|} | |||
=== Base rotations and the I piece drift === | |||
Defining the base rotation of L, J, T under these rules is not a problem - just make them rotate around their visual centre like SRS does and notice that it works: L and J perfectly mirror eachother, and T perfectly mirrors itself. | |||
{| border="1" cellspacing="0" style="text-align:center; border-collapse:collapse" | |||
|- | |||
|style="padding:4px;"|<playfield> | |||
s | |||
scs | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
s | |||
cs | |||
s | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
scs | |||
s | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
s | |||
sc | |||
s | |||
</playfield> | |||
|- | |||
|style="padding:4px;"|<playfield> | |||
z | |||
zcz | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
z | |||
c | |||
zz | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
zcz | |||
z | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
zz | |||
c | |||
z | |||
</playfield> | |||
|- | |||
|style="padding:4px;"|<playfield> | |||
i | |||
ici | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
ii | |||
c | |||
i | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
ici | |||
i | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
i | |||
c | |||
ii | |||
</playfield> | |||
|} | |||
S and Z have to be two-state however. The two states were chosen so that the vertical state "reaches down", as this allows more spins to be done with kicks. As for the lateral placement, it was inspired by [[Sega rotation]] and [[The New Tetris]], where the space in the middle column occupied by the piece is always at the same place. | |||
{| border="1" cellspacing="0" style="text-align:center; border-collapse:collapse" | |||
|- | |||
|style="padding:4px;"|<playfield> | |||
oo | |||
oo | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
o | |||
oo | |||
o | |||
</playfield> | |||
|- | |||
|style="padding:4px;"|<playfield> | |||
jj | |||
jj | |||
</playfield> | |||
|style="padding:4px;"|<playfield> | |||
j | |||
jj | |||
j | |||
</playfield> | |||
|} | |||
The O piece only has a single orientation. | |||
{| border="1" cellspacing="0" style="text-align:center; border-collapse:collapse" | |||
|- | |||
|style="padding:4px;"|<playfield> | |||
ll | |||
ll | |||
</playfield> | |||
|} | |||
However, defining a base rotation for the I piece gives some complications. | |||
Let's look at the rotation from horizontal to vertical. Because of the horizontal symmetry rule, the result of a clockwise rotation and a counterclowise rotation in free space have to be mirrors of each other. However, because of the visual consistency rule, the I piece has to be 2-state. This means the only possible place for the I piece to be pushed to the same position on both CW and CCW would be between two columns, which can't work. To work around this, a slight right bias is introduced on the CW rotation, and a slight left bias is introdiced on the CCW rotation. | |||
{| border="0" cellspacing="0" style="text-align:left; border-collapse:collapse" | |||
|- | |||
|style="padding:4px;width:48px;"|<playfield> | |||
- | |||
- | |||
tttt | |||
- | |||
</playfield> | |||
|style="padding:4px;width:48px;"|<playfield> | |||
t | |||
t | |||
t | |||
t | |||
</playfield> | |||
|Clockwise rotation | |||
|- | |||
|style="padding:4px;width:48px;"|<playfield> | |||
- | |||
- | |||
tttt | |||
- | |||
</playfield> | |||
|style="padding:4px;width:48px;"|<playfield> | |||
t | |||
t | |||
t | |||
t | |||
</playfield> | |||
|Counterclockwise rotation | |||
|} | |||
Now if we look at the rotation from vertical to horizontal, the same problem appears. It is resolved in the same way, by giving a slight right bias to CW rotation and a slight left bias to CCW rotations again. | |||
{| border="0" cellspacing="0" style="text-align:left; border-collapse:collapse" | |||
|- | |||
|style="padding:4px;width:58px;"|<playfield> | |||
t | |||
t | |||
-t-- | |||
t | |||
</playfield> | |||
|style="padding:4px;width:58px;"|<playfield> | |||
tttt | |||
</playfield> | |||
|Clockwise rotation | |||
|- | |||
|style="padding:4px;width:58px;"|<playfield> | |||
t | |||
t | |||
--t- | |||
t | |||
</playfield> | |||
|style="padding:4px;width:58px;"|<playfield> | |||
tttt | |||
</playfield> | |||
|Counterclockwise rotation | |||
|} | |||
This leads to a peculiar behaviour where one can add up the biases of the individual rotations to move I piece to the side without even pushing the shifting buttons, even without taking advantage of wallkicks, by rotating in the same direction repeatedly. This behaviour is called ''I piece drift''. | |||
{| border="0" cellspacing="0" style="text-align:center; border-collapse:collapse" | |||
|- style="vertical-align:top;" | |||
|style="padding:4px; width:108px;"|<playfield> | |||
- | |||
- | |||
tttt | |||
- | |||
ggggggggg | |||
ggggggggg | |||
ggggggggg | |||
ggggggggg | |||
</playfield> | |||
Rotate CW | |||
|style="padding:4px; width:108px;"|<playfield> | |||
t | |||
t | |||
-t-- | |||
t | |||
ggggggggg | |||
ggggggggg | |||
ggggggggg | |||
ggggggggg | |||
</playfield> | |||
Rotate CW again | |||
|style="padding:4px; width:108px;"|<playfield> | |||
-tttt | |||
ggggggggg | |||
ggggggggg | |||
ggggggggg | |||
ggggggggg | |||
</playfield> | |||
I piece moved to the right one cell | |||
|} | |||
=== Wallkicks === | |||
Coming Soon | |||
<small>''(this is still WIP)''</small> |
Latest revision as of 03:35, 27 October 2020
Hello! I'm Oshisaure, a Tetris nerd who likes to do silly things in Tetris games, with a slight specialisation in Rotation Systems and unusual Twists. I have a YouTube channel where I like to share these silly things.
I've also made A Gnowius' Challenge and Puzzle Juggle Trouble, and worked on a Cambridge fork with MillaBasset.
Vulptile Rotation System (VRS)
Although I had made a few over-the-top joke rulesets in the past (see BONKERS for a good example), the question of a proper Rotation System came about when I started having projects about a 1-VS-1 game. I wanted to have a game that differed greatly from the Tetris Guideline, partly because it was incompatible with the idea of my game, partly because I wanted to imply that this game was following its own set of rules. One of the points of difference was, of course, the Rotation System.
Piece colours and entry orientations
While I do not consider things like colour scheme, harddrop vs sonic drop or piece entry rotation to be strictly related to the rotation system itself, they still end up being commonly assiciated into a common ruleset that people get used to - you can ask a guideline player and a TGM player what "the right piece colours" are and they will give you different answers.
Because of this, I've decided to make my own colour scheme as well. To make it easier to play for colourblind people, I've made S and Z follow complemetary hues, as well as L and J. I then filled in the colours to the best of my ability by putting warm colours on the S and L pieces - as they both fit in a left well - and then picking colours that would probably upset anyone using Sega or guideline colours. I ended up with:
- I: Purple (hue 270°)
- O: Orange (hue 30°)
- T: Green (hue 150°)
- L: Red (hue 0°)
- J: Cyan (hue 180°)
- S: Yellow (hue 60°)
- Z: Dark blue (hue 240°)
As for spawning orientations, I make the pieces spawn flat side down, as that gives the most manoeuvrability in high gravity.
TL;DR: the pieces look like this on spawn
Now onto the rotation system itself, for real.
Core ideas and base guideline of VRS
A common criticism about SRS is that it feels unpredictable at high gravity. I think that this is mostly an issue on the wallkicks, but that part of it is induced by the S, Z and I pieces behaving differently on opposite orientations. Here's an example:
Rotate CW from entry orientation |
Z piece goes down | ||
Rotate CW from "upside-down" |
Z piece stays up |
While ambiguities like this don't happen in ARS, its right-side bias still leads to the infamous Mihara conspiracy. The centre column rule also prevents moves that would otherwise work the same as their inverse:
Rotate CCW |
Works fine, classic ARS twist | ||
Inverse move, rotate CW |
Based on these observations, VRS was designed with strict compliance to the following rules in mind:
- Visual consistency: If two situations look identical, they are identical, and the same input will give the same results. The only direct consequence of this is that S, Z and I only have two states (horizontal and vertical) instead of four (North, East, South and West)
- Reversability: If a rotation works, then the inverse rotation should be accounted for. While a valid setup for some reverse rotations may be impossible, the necessary kick is available anyway. This happens with the T piece in SRS on a couple rotations:
This kick exists | ||
Despite not being possible to make this kick happen in normal gameplay, it is still coded in out of reversability |
- Horizontal symmetry: A setup and its mirror conditions give mirrored results. This prevents the rotations and kicks to be biased towards one side only. For example:
If this is what happens when rotating CW on this state... | ||
... then this is what happens when rotating CCW on this state |
- Kick thoroughness: Do not leave gaps in the list of kicks you attempt, and attempt rotations closer to the kickless rotation first. For example, don't attempt a kick 2 cells up without trying 1 cell up first, or a diagonal down-left kick without trying a down kick and a left kick before that. Here's a visual example of a situation where SRS does not follow this rule, and which is probably the main inspiration for this rule:
If this is what happens when rotating CCW on this state... | ||
... then why would this not happen when rotating CCW on this state? |
Base rotations and the I piece drift
Defining the base rotation of L, J, T under these rules is not a problem - just make them rotate around their visual centre like SRS does and notice that it works: L and J perfectly mirror eachother, and T perfectly mirrors itself.
S and Z have to be two-state however. The two states were chosen so that the vertical state "reaches down", as this allows more spins to be done with kicks. As for the lateral placement, it was inspired by Sega rotation and The New Tetris, where the space in the middle column occupied by the piece is always at the same place.
The O piece only has a single orientation.
However, defining a base rotation for the I piece gives some complications.
Let's look at the rotation from horizontal to vertical. Because of the horizontal symmetry rule, the result of a clockwise rotation and a counterclowise rotation in free space have to be mirrors of each other. However, because of the visual consistency rule, the I piece has to be 2-state. This means the only possible place for the I piece to be pushed to the same position on both CW and CCW would be between two columns, which can't work. To work around this, a slight right bias is introduced on the CW rotation, and a slight left bias is introdiced on the CCW rotation.
Clockwise rotation | ||||
Counterclockwise rotation |
Now if we look at the rotation from vertical to horizontal, the same problem appears. It is resolved in the same way, by giving a slight right bias to CW rotation and a slight left bias to CCW rotations again.
Clockwise rotation | ||||
Counterclockwise rotation |
This leads to a peculiar behaviour where one can add up the biases of the individual rotations to move I piece to the side without even pushing the shifting buttons, even without taking advantage of wallkicks, by rotating in the same direction repeatedly. This behaviour is called I piece drift.
Rotate CW |
Rotate CW again |
I piece moved to the right one cell |
Wallkicks
Coming Soon (this is still WIP)