User:Arcorann/Rotation: Difference between revisions
No edit summary |
|||
(8 intermediate revisions by the same user not shown) | |||
Line 402: | Line 402: | ||
!Z | !Z | ||
! Kicks? | ! Kicks? | ||
!Code | |||
|- | |- | ||
|[[Original Rotation System]]<br />[[Tetris (ZX Spectrum, V.A. Baliasov)]]|| CCW || UR (h) || Centre (d) || Centre (d) || 1-state || LR (h) || Centre (d) || LR (h) || No | |[[Original Rotation System]]<br />[[Tetris (ZX Spectrum, V.A. Baliasov)]]|| CCW || UR (h) || Centre (d) || Centre (d) || 1-state || LR (h) || Centre (d) || LR (h) || No || O-85 | ||
|- | |- | ||
|[[Tetris (ZX Spectrum, Andic Software)]]|| CW || Centre (u) || Centre (r) || Centre (l) || 1-state || LR (v) || Centre (l) || LL (v) | |[[Tetris (ZX Spectrum, Andic Software)]]|| CW || Centre (u) || Centre (r) || Centre (l) || 1-state || LR (v) || Centre (l) || LL (v) | ||
|- | |- | ||
|[[Tetris (Mirrorsoft)#ZX_Spectrum_Version]] || CCW || UL (h) || Centre (u) || Centre (u) || 1-state || UL (h) || Centre (u) || UL (h) | |[[Tetris (Mirrorsoft)#ZX_Spectrum_Version]] || CCW || UL (h) || Centre (u) || Centre (u) || 1-state || UL (h) || Centre (u) || UL (h) || | ||
|- | |- | ||
|[[Tetris (PC, Spectrum HoloByte)]] || CCW || UR (h) || Bottom (d) || Bottom (d) || 1-state || LR (h) || Centre (d) || LR (h) || No | |[[Tetris (PC, Spectrum HoloByte)]] || CCW || UR (h) || Bottom (d) || Bottom (d) || 1-state || LR (h) || Centre (d) || LR (h) || No || H-88 | ||
|- | |- | ||
|[[Aint]] || CW || Propeller (l) || Centre (d) || Centre (d) || 1-state || Centre (l) || Centre (d) || Centre (l) | |[[Aint]] || CW || Propeller (l) || Centre (d) || Centre (d) || 1-state || Centre (l) || Centre (d) || Centre (l) | ||
Line 417: | Line 418: | ||
|[[The Son of Tetris Project]] || CCW || UL (h) || UL (d) || UL (d) || 1-state || UL (h) || Centre (d) || UL (h) | |[[The Son of Tetris Project]] || CCW || UL (h) || UL (d) || UL (d) || 1-state || UL (h) || Centre (d) || UL (h) | ||
|- | |- | ||
|[[Sega Rotation]] || CCW || UR (h) || Bottom (d) || Bottom (d) || 1-state || LL (h) || Bottom (d) || LR (h) || No | |[[Sega Rotation]] || CCW || UR (h) || Bottom (d) || Bottom (d) || 1-state || LL (h) || Bottom (d) || LR (h) || No || S-88 | ||
|- | |- | ||
|[[Tetris (Atari)]] || CCW || TL (h) || UL (d) || UL (d) || 1-state || UL (h) || UL (d) || UL (h) || Yes | |[[Tetris (Atari)]] || CCW || TL (h) || UL (d) || UL (d) || 1-state || UL (h) || UL (d) || UL (h) || Yes || A-88 | ||
|- | |- | ||
|[[Vs. Tetris]] || Both || TL (h) || UL (d) || UL (d) || 1-state || UL (h) || UL (d) || UL (h) || Yes | |[[Vs. Tetris]] || Both || TL (h) || UL (d) || UL (d) || 1-state || UL (h) || UL (d) || UL (h) || Yes || A-88 | ||
|- | |- | ||
|[[Tetris (BPS)]]<br />[[Tetris (Famicom)]] || CCW || LL (*) || Centre (*) || Centre (*) || 1-state || LR (*) || Centre (*) || LR (*) || No | |[[Tetris (BPS)]]<br />[[Tetris (Famicom)]] || CCW || LL (*) || Centre (*) || Centre (*) || 1-state || LR (*) || Centre (*) || LR (*) || No || F-88 | ||
|- | |- | ||
|[[Tetris (NES, Tengen)]] || Both || TL (h) || UL (d) || UL (d) || 1-state || UL (h) || UL (d) || UL (h) || Yes | |[[Tetris (NES, Tengen)]] || Both || TL (h) || UL (d) || UL (d) || 1-state || UL (h) || UL (d) || UL (h) || Yes || A-88 | ||
|- | |- | ||
|[[Tetris (Mega Drive)]] || Both || UR (h) || Bottom (d) || Bottom (d) || 1-state || LL (h) || Bottom (d) || LR (h) || No | |[[Tetris (Mega Drive)]] || Both || UR (h) || Bottom (d) || Bottom (d) || 1-state || LL (h) || Bottom (d) || LR (h) || No || S-88 | ||
|- | |- | ||
|[[Tetris (Game Boy)]]|| Both || LL (h) || Centre (d) || Centre (d) || 1-state || LL (h) || Centre (d) || LL (h) | |[[Tetris (Game Boy)]]|| Both || LL (h) || Centre (d) || Centre (d) || 1-state || LL (h) || Centre (d) || LL (h) || No || G-89 | ||
|- | |- | ||
|[[Tetris (NES, Nintendo)]]|| Both || LR (h) || Centre (d) || Centre (d) || 1-state || LR (h) || Centre (d) || LR (h) | |[[Tetris (NES, Nintendo)]]|| Both || LR (h) || Centre (d) || Centre (d) || 1-state || LR (h) || Centre (d) || LR (h) || No || N-89 | ||
|- | |- | ||
|[[Tetris (Microsoft Entertainment Pack for Windows)]] || CCW || DownwardR (h) || Centre (d) || Centre (d) || 1-state || UR (h) || Centre (d) || UL (h) | |[[Tetris (Microsoft Entertainment Pack for Windows)]] || CCW || DownwardR (h) || Centre (d) || Centre (d) || 1-state || UR (h) || Centre (d) || UL (h) || || W-90 | ||
|- | |- | ||
|[[Super Tetris]] || CCW || UL (h) || Centre (d) || Centre (d) || 1-state || UL (h) || Centre (d) || UL (h) | |[[Super Tetris]] || CCW || UL (h) || Centre (d) || Centre (d) || 1-state || UL (h) || Centre (d) || UL (h) || || M-91 | ||
|- | |- | ||
|[[Tetris 2 + Bombliss]] || Both || Centre (u) || Centre (d) || Centre (d) || 1-state || Centre (d) || Centre (d) || Centre (d) | |[[Tetris 2 + Bombliss]] || Both || Centre (u) || Centre (d) || Centre (d) || 1-state || Centre (d) || Centre (d) || Centre (d) || No || B-91 | ||
|- | |- | ||
|[[Tetris Classic]] || Both (buggy) || UR (h) || Bottom (d) || Bottom (d) || 1-state || LR (h) || Centre (d) || LR (h) || No | |[[Tetris Classic]] || Both (buggy) || UR (h) || Bottom (d) || Bottom (d) || 1-state || LR (h) || Centre (d) || LR (h) || No || H-88 | ||
|- | |- | ||
|[[Tetris Battle Gaiden]] || Both || Centre-Rev (d) || Centre (u) || Centre (u) || 1-state || Centre (d) || Centre (u) || Centre (d) | |[[Tetris Battle Gaiden]] || Both || Centre-Rev (d) || Centre (u) || Centre (u) || 1-state || Centre (d) || Centre (u) || Centre (d) || No ||B-93 | ||
|- | |- | ||
|[[Super Tetris 3]] || Both || Centre (u) || Centre (u) || Centre (u) || 1-state || Centre (d) || Centre (u) || Centre (d) || No | |[[Super Tetris 3]] || Both || Centre (u) || Centre (u) || Centre (u) || 1-state || Centre (d) || Centre (u) || Centre (d) || No || B-94 | ||
|- | |- | ||
|[[Tetris X]]<br />[[Tetris 4D]] || Both || Centre-Rev (d) || Centre (u) || Centre (u) || 1-state || Centre (u) || Centre (u) || Centre (u) || No | |[[Tetris X]]<br />[[Tetris 4D]] || Both || Centre-Rev (d) || Centre (u) || Centre (u) || 1-state || Centre (u) || Centre (u) || Centre (u) || No | ||
Line 451: | Line 452: | ||
|[[SuperLite 1500 Series: The Tetris]] || Both || Centre (d) || Centre (u) || Centre (u) || 1-state || Centre (u) || Centre (u) || Centre (u) || Yes | |[[SuperLite 1500 Series: The Tetris]] || Both || Centre (d) || Centre (u) || Centre (u) || 1-state || Centre (u) || Centre (u) || Centre (u) || Yes | ||
|- | |- | ||
|SRS || Both || Centre (u) || Centre (u) || Centre (u) || 1-state || Centre (u) || Centre (u) || Centre (u) || Yes | |SRS || Both || Centre (u) || Centre (u) || Centre (u) || 1-state || Centre (u) || Centre (u) || Centre (u) || Yes || B-A1 | ||
|- | |- | ||
|[[Tetris 64]] (Rotation Center on) || Both || Propeller (l) || Centre (d) || Centre (d) || Offset (ur) || Centre (u) || Centre (d) || Centre (d) | |[[Tetris 64]] (Rotation Center on) || Both || Propeller (l) || Centre (d) || Centre (d) || Offset (ur) || Centre (u) || Centre (d) || Centre (d) | ||
Line 459: | Line 460: | ||
|[[Magical Tetris Challenge]]|| Both || UL (v) || Outside (l) || Outside (r) || 1-state || Centre (l) || Centre (d) || Centre (r) | |[[Magical Tetris Challenge]]|| Both || UL (v) || Outside (l) || Outside (r) || 1-state || Centre (l) || Centre (d) || Centre (r) | ||
|- | |- | ||
|[[Pokémon Tetris]] || Both || Centre (u) || Centre (d) || Centre (d) || 1-state || Centre (d) || Centre (d) || Centre (d) | |[[Pokémon Tetris]] || Both || Centre (u) || Centre (d) || Centre (d) || 1-state || Centre (d) || Centre (d) || Centre (d) || || B*-81 | ||
|- | |- | ||
|[[Face to Face]] || CCW || UR (h) || Centre (d) || Centre (d) || 1-state || UL (h) || Centre (d) || UL (h) | |[[Face to Face]] || CCW || UR (h) || Centre (d) || Centre (d) || 1-state || UL (h) || Centre (d) || UL (h) | ||
Line 893: | Line 894: | ||
The centre column rule is ignored if the piece kicks off a block in a row above the appropriate centre column block, but not below (presumably due to block precedence. | The centre column rule is ignored if the piece kicks off a block in a row above the appropriate centre column block, but not below (presumably due to block precedence. | ||
== 180 degree rotations in SRS == | |||
=== Official SRS === | |||
Due to how the rotations in SRS are constructed, 180 degree rotations are well defined in SRS, though no official game implements them. | |||
(Recall that values are given as x shift then y shift, with right and up positive.) | |||
{| border="1" cellspacing="0" | |||
|+'''J, L, S, T, Z Tetromino Wall Kick Data''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
! bgcolor="#80A3F8" width="60"|Test 3 | |||
! bgcolor="#80A3F8" width="60"|Test 4 | |||
! bgcolor="#80A3F8" width="60"|Test 5 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt>||<tt>( 0, 0)</tt>||<tt>( 0, 0)</tt>||<tt>( 0, 0)</tt>||<tt>( 0, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt>||<tt>( 0, 0)</tt>||<tt>( 0, 0)</tt>||<tt>( 0, 0)</tt>||<tt>( 0, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(-2, 0)</tt>||<tt>( 0, 0)</tt>||<tt>(-2, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(+2, 0)</tt>||<tt>( 0, 0)</tt>||<tt>(+2, 0)</tt> | |||
|} | |||
Due to the symmetric locations of the rotation points, there are no kicks in states 0 or 2, and only one in states L or R. | |||
{| border="1" cellspacing="0" | |||
|+'''I Tetromino Wall Kick Data''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
! bgcolor="#80A3F8" width="60"|Test 3 | |||
! bgcolor="#80A3F8" width="60"|Test 4 | |||
! bgcolor="#80A3F8" width="60"|Test 5 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt>||<tt>(-3, 0)</tt>||<tt>(+3, 0)</tt>||<tt>(-3,+1)</tt>||<tt>(+3,+1)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt>||<tt>(+3, 0)</tt>||<tt>(-3, 0)</tt>||<tt>(+3,-1)</tt>||<tt>(-3,-1)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-1,-3)</tt>||<tt>(-1,+3)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+1,+3)</tt>||<tt>(+1,-3)</tt> | |||
|} | |||
Note that when the I is vertical, Test 2 maps the piece onto itself and thus this is in fact the only kick possible. | |||
==== Reduced tables ==== | |||
This is why official SRS is fundamentally incompatible with 180 degree rotations. | |||
{| border="1" cellspacing="0" | |||
|+'''J, L, S, T, Z Tetromino Wall Kick Data (reduced)''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>(-2, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>(+2, 0)</tt> | |||
|} | |||
{| border="1" cellspacing="0" | |||
|+'''I Tetromino Wall Kick Data (reduced)''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
! bgcolor="#80A3F8" width="60"|Test 3 | |||
! bgcolor="#80A3F8" width="60"|Test 4 | |||
! bgcolor="#80A3F8" width="60"|Test 5 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt>||<tt>(-3, 0)</tt>||<tt>(+3, 0)</tt>||<tt>(-3,+1)</tt>||<tt>(+3,+1)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt>||<tt>(+3, 0)</tt>||<tt>(-3, 0)</tt>||<tt>(+3,-1)</tt>||<tt>(-3,-1)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt> | |||
|} | |||
=== SRS-X === | |||
Compare the rotations in SRS-X from Heboris UE. Note that the code specifies down as positive; this has been adjusted for this table. Note also that the game numbers states as 0, 1, 2, 3 while in the table we have 0, R, 2, L (compare u, r, d, l above, or TTC's N, E, S, W). | |||
{| border="1" cellspacing="0" | |||
|+'''J, L, S, T, Z Tetromino Wall Kick Data''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
! bgcolor="#80A3F8" width="60"|Test 3 | |||
! bgcolor="#80A3F8" width="60"|Test 4 | |||
! bgcolor="#80A3F8" width="60"|Test 5 | |||
! bgcolor="#80A3F8" width="60"|Test 6 | |||
! bgcolor="#80A3F8" width="60"|Test 7 | |||
! bgcolor="#80A3F8" width="60"|Test 8 | |||
! bgcolor="#80A3F8" width="60"|Test 9 | |||
! bgcolor="#80A3F8" width="60"|Test 10 | |||
! bgcolor="#80A3F8" width="60"|Test 11 | |||
! bgcolor="#80A3F8" width="60"|Test 12 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(+1,-1)</tt>||<tt>(+2,-1)</tt>||<tt>(-1, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(-1,-1)</tt>||<tt>(-2,-1)</tt>||<tt>( 0,+1)</tt>||<tt>(+3, 0)</tt>||<tt>(-3, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(-1,+1)</tt>||<tt>(-2,+1)</tt>||<tt>(+1, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(+1,+1)</tt>||<tt>(+2,+1)</tt>||<tt>( 0,-1)</tt>||<tt>(-3, 0)</tt>||<tt>(+3, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,-2)</tt>||<tt>(+1,-1)</tt>||<tt>(+1,-2)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,+2)</tt>||<tt>(+1,+1)</tt>||<tt>(+1,+2)</tt>||<tt>(-1, 0)</tt>||<tt>( 0,-3)</tt>||<tt>( 0,+3)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,-2)</tt>||<tt>(-1,-1)</tt>||<tt>(-1,-2)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,+2)</tt>||<tt>(-1,+1)</tt>||<tt>(-1,+2)</tt>||<tt>(+1, 0)</tt>||<tt>( 0,-3)</tt>||<tt>( 0,+3)</tt> | |||
|} | |||
{| border="1" cellspacing="0" | |||
|+'''I Tetromino Wall Kick Data''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
! bgcolor="#80A3F8" width="60"|Test 3 | |||
! bgcolor="#80A3F8" width="60"|Test 4 | |||
! bgcolor="#80A3F8" width="60"|Test 5 | |||
! bgcolor="#80A3F8" width="60"|Test 6 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+2, 0)</tt>||<tt>( 0,-1)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-2, 0)</tt>||<tt>( 0,+1)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,-2)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,+2)</tt>||<tt>(+1, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,-2)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,+2)</tt>||<tt>(-1, 0)</tt> | |||
|} | |||
=== NullpoMino Mild180 === | |||
Also, NullpoMino's Mild180. Note that the code in NullpoMino also specifies down as positive. | |||
{| border="1" cellspacing="0" | |||
|+'''J, L, S, T, Z Tetromino Wall Kick Data''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
! bgcolor="#80A3F8" width="60"|Test 3 | |||
! bgcolor="#80A3F8" width="60"|Test 4 | |||
! bgcolor="#80A3F8" width="60"|Test 5 | |||
! bgcolor="#80A3F8" width="60"|Test 6 | |||
! bgcolor="#80A3F8" width="60"|Test 7 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(-1, 0)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,+2)</tt>||<tt>( 0,-2)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(+1, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,-2)</tt>||<tt>( 0,+2)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,+2)</tt>||<tt>( 0,-2)</tt>||<tt>(+1, 0)</tt>||<tt>(-1, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,+2)</tt>||<tt>( 0,-2)</tt>||<tt>(-1, 0)</tt>||<tt>(+1, 0)</tt> | |||
|} | |||
{| border="1" cellspacing="0" | |||
|+'''I Tetromino Wall Kick Data''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
! bgcolor="#80A3F8" width="60"|Test 3 | |||
! bgcolor="#80A3F8" width="60"|Test 4 | |||
! bgcolor="#80A3F8" width="60"|Test 5 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+2, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-2, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,+2)</tt>||<tt>( 0,-2)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>( 0,+1)</tt>||<tt>( 0,+2)</tt>||<tt>( 0,-2)</tt> | |||
|} | |||
=== Tetr.io === | |||
{| border="1" cellspacing="0" | |||
|+'''J, L, S, T, Z Tetromino Wall Kick Data''' | |||
|- align = center | |||
! width="45"| | |||
! bgcolor="#80A3F8" width="60"|Test 1 | |||
! bgcolor="#80A3F8" width="60"|Test 2 | |||
! bgcolor="#80A3F8" width="60"|Test 3 | |||
! bgcolor="#80A3F8" width="60"|Test 4 | |||
! bgcolor="#80A3F8" width="60"|Test 5 | |||
! bgcolor="#80A3F8" width="60"|Test 6 | |||
|- align = center | |||
| bgcolor="#80A3F8"|0->2||<tt>( 0, 0)</tt>||<tt>( 0,+1)</tt>||<tt>(+1,+1)</tt>||<tt>(-1,+1)</tt>||<tt>(+1, 0)</tt>||<tt>(-1, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|2->0||<tt>( 0, 0)</tt>||<tt>( 0,-1)</tt>||<tt>(-1,-1)</tt>||<tt>(+1,-1)</tt>||<tt>(-1, 0)</tt>||<tt>(+1, 0)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|L->R||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-1,+2)</tt>||<tt>(-1,+1)</tt>||<tt>( 0,+2)</tt>||<tt>( 0,+1)</tt> | |||
|- align = center | |||
| bgcolor="#80A3F8"|R->L||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+1,+2)</tt>||<tt>(+1,+1)</tt>||<tt>( 0,+2)</tt>||<tt>( 0,+1)</tt> | |||
|} |
Latest revision as of 03:23, 1 October 2023
I
Rotation type | Notable usage | Diagram | |||||||
---|---|---|---|---|---|---|---|---|---|
State 1 | State 2 | State 3 | State 4 | ||||||
2-state, upper-right | Original Rotation System, Sega Rotation | ||||||||
2-state, lower-right | Tetris (NES, Nintendo) | ||||||||
2-state, lower-left | Tetris (Game Boy) Tetris (Famicom) |
||||||||
2-state, upper-left | Magical Tetris Challenge | ||||||||
4-state | BPS, SRS |
J
Rotation type | Notable usage | Diagram | |||||||
---|---|---|---|---|---|---|---|---|---|
State 1 | State 2 | State 3 | State 4 | ||||||
Centre | SRS and related systems | ||||||||
Bottom | Sega and related systems | ||||||||
Outside | Magical Tetris Challenge | ||||||||
2 by 2 |
L
Rotation type | Notable usage | Diagram | |||||||
---|---|---|---|---|---|---|---|---|---|
State 1 | State 2 | State 3 | State 4 | ||||||
Centre | SRS/related |
O
Rotation type | Notable usage | Diagram | |||||||
---|---|---|---|---|---|---|---|---|---|
State 1 | State 2 | State 3 | State 4 | ||||||
1-state | Almost everything | ||||||||
4-state, offset | Tetris 64 (with Rotation Center turned on) |
S
Rotation type | Notable usage | Diagram | |||
---|---|---|---|---|---|
State 1 | State 2 | State 3 | State 4 |
T
Rotation type | Notable usage | Diagram | |||||||
---|---|---|---|---|---|---|---|---|---|
State 1 | State 2 | State 3 | State 4 | ||||||
Centre | BPS, SRS | ||||||||
Bottom | Sega | ||||||||
Outside |
Z
Rotation type | Notable usage | Diagram | |||
---|---|---|---|---|---|
State 1 | State 2 | State 3 | State 4 |
Rotations by game
Game | Directions | I | J | L | O | S | T | Z | Kicks? | Code |
---|---|---|---|---|---|---|---|---|---|---|
Original Rotation System Tetris (ZX Spectrum, V.A. Baliasov) |
CCW | UR (h) | Centre (d) | Centre (d) | 1-state | LR (h) | Centre (d) | LR (h) | No | O-85 |
Tetris (ZX Spectrum, Andic Software) | CW | Centre (u) | Centre (r) | Centre (l) | 1-state | LR (v) | Centre (l) | LL (v) | ||
Tetris (Mirrorsoft)#ZX_Spectrum_Version | CCW | UL (h) | Centre (u) | Centre (u) | 1-state | UL (h) | Centre (u) | UL (h) | ||
Tetris (PC, Spectrum HoloByte) | CCW | UR (h) | Bottom (d) | Bottom (d) | 1-state | LR (h) | Centre (d) | LR (h) | No | H-88 |
Aint | CW | Propeller (l) | Centre (d) | Centre (d) | 1-state | Centre (l) | Centre (d) | Centre (l) | ||
EGAint | Both | Propeller (l) | Centre (d) | Centre (d) | 1-state | Centre (l) | Centre (d) | Centre (l) | ||
The Son of Tetris Project | CCW | UL (h) | UL (d) | UL (d) | 1-state | UL (h) | Centre (d) | UL (h) | ||
Sega Rotation | CCW | UR (h) | Bottom (d) | Bottom (d) | 1-state | LL (h) | Bottom (d) | LR (h) | No | S-88 |
Tetris (Atari) | CCW | TL (h) | UL (d) | UL (d) | 1-state | UL (h) | UL (d) | UL (h) | Yes | A-88 |
Vs. Tetris | Both | TL (h) | UL (d) | UL (d) | 1-state | UL (h) | UL (d) | UL (h) | Yes | A-88 |
Tetris (BPS) Tetris (Famicom) |
CCW | LL (*) | Centre (*) | Centre (*) | 1-state | LR (*) | Centre (*) | LR (*) | No | F-88 |
Tetris (NES, Tengen) | Both | TL (h) | UL (d) | UL (d) | 1-state | UL (h) | UL (d) | UL (h) | Yes | A-88 |
Tetris (Mega Drive) | Both | UR (h) | Bottom (d) | Bottom (d) | 1-state | LL (h) | Bottom (d) | LR (h) | No | S-88 |
Tetris (Game Boy) | Both | LL (h) | Centre (d) | Centre (d) | 1-state | LL (h) | Centre (d) | LL (h) | No | G-89 |
Tetris (NES, Nintendo) | Both | LR (h) | Centre (d) | Centre (d) | 1-state | LR (h) | Centre (d) | LR (h) | No | N-89 |
Tetris (Microsoft Entertainment Pack for Windows) | CCW | DownwardR (h) | Centre (d) | Centre (d) | 1-state | UR (h) | Centre (d) | UL (h) | W-90 | |
Super Tetris | CCW | UL (h) | Centre (d) | Centre (d) | 1-state | UL (h) | Centre (d) | UL (h) | M-91 | |
Tetris 2 + Bombliss | Both | Centre (u) | Centre (d) | Centre (d) | 1-state | Centre (d) | Centre (d) | Centre (d) | No | B-91 |
Tetris Classic | Both (buggy) | UR (h) | Bottom (d) | Bottom (d) | 1-state | LR (h) | Centre (d) | LR (h) | No | H-88 |
Tetris Battle Gaiden | Both | Centre-Rev (d) | Centre (u) | Centre (u) | 1-state | Centre (d) | Centre (u) | Centre (d) | No | B-93 |
Super Tetris 3 | Both | Centre (u) | Centre (u) | Centre (u) | 1-state | Centre (d) | Centre (u) | Centre (d) | No | B-94 |
Tetris X Tetris 4D |
Both | Centre-Rev (d) | Centre (u) | Centre (u) | 1-state | Centre (u) | Centre (u) | Centre (u) | No | |
Tetris DX | Both | Centre (u) | Centre (d) | Centre (d) | 1-state | Centre (u) | Centre (d) | Centre (u) | Yes | |
SuperLite 1500 Series: The Tetris | Both | Centre (d) | Centre (u) | Centre (u) | 1-state | Centre (u) | Centre (u) | Centre (u) | Yes | |
SRS | Both | Centre (u) | Centre (u) | Centre (u) | 1-state | Centre (u) | Centre (u) | Centre (u) | Yes | B-A1 |
Tetris 64 (Rotation Center on) | Both | Propeller (l) | Centre (d) | Centre (d) | Offset (ur) | Centre (u) | Centre (d) | Centre (d) | ||
The New Tetris | Both | LL (h) | UR (d) | UL (d) | 1-state | UR (h) | Centre (u) | UL (h) | ||
Magical Tetris Challenge | Both | UL (v) | Outside (l) | Outside (r) | 1-state | Centre (l) | Centre (d) | Centre (r) | ||
Pokémon Tetris | Both | Centre (u) | Centre (d) | Centre (d) | 1-state | Centre (d) | Centre (d) | Centre (d) | B*-81 | |
Face to Face | CCW | UR (h) | Centre (d) | Centre (d) | 1-state | UL (h) | Centre (d) | UL (h) | ||
Yet Another Tetris | Both | Centre (*) | Centre (*) | Centre (*) | 1-state | Centre (*) | Centre (*) | Centre (*) | ||
Zentris | Selectable | UL (v) | LR (l) | LR (r) | 1-state | LR (v) | LR (d) | LR (v) | No | |
Klotz | CCW | UR (h) | Centre | Centre | 1-state | LL (h) | Centre | UL (h) | ||
Emlith | Selectable | LL (v) | Centre (l) | Centre (r) | 1-state | LR (v) | Centre (r) | LR (v) | Yes | |
Wintris | CCW | Centre-Rev (*) | Outside (*) | Outside (*) | 1-state | LR (*) | Outside (*) | LR (*) | ||
Tetanus On Drugs (PC ver.) | Both | LL (h) | Centre (d) | Centre (d) | 1-state | LL (h) | Centre (u) | LR (h) | ||
Futilitris | Both | UL (2) | 2 by 2 (right) | 2 by 2 (right) | 1-state | UL (2) | Centre (up) | LR (2) | ||
Craptris | Both | |||||||||
Shirase Rotation System | Both | ... |
Pentomino rotations by game
Reserved.
Shirase Rotation System
A joke rotation system made by Makiki99. Take the wallkick system from SRS, then apply offsets to each of the rotation states. Luckily for us, the offsets are consistent:
State | Offset |
---|---|
Up | 1 left |
Right | 1 up |
Down | 1 right |
Left | 1 down |
ARS kick diagrams
Rotation | Counterclockwise | Clockwise | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
Right | Left | Right | Left | |||||||
S, h -> v | ||||||||||
S, v -> h | ||||||||||
Z, h -> v | ||||||||||
Z, v -> h | ||||||||||
L, d | Impossible
|
* |
* |
Impossible
| ||||||
L, l | ||||||||||
L, u | * |
Impossible
|
Impossible
|
Impossible
| ||||||
L, r | ||||||||||
J, d | Impossible
|
* |
Impossible
| |||||||
J, l | ||||||||||
J, u | Impossible
|
Impossible
|
Impossible
|
*
| ||||||
J, r | ||||||||||
T, d | Impossible
|
Impossible
|
Impossible
|
Impossible
| ||||||
T, l | Impossible
|
|||||||||
T, u | *
|
Impossible
|
Impossible
|
*
| ||||||
T, r | Impossible
|
The centre column rule is ignored if the piece kicks off a block in a row above the appropriate centre column block, but not below (presumably due to block precedence.
180 degree rotations in SRS
Official SRS
Due to how the rotations in SRS are constructed, 180 degree rotations are well defined in SRS, though no official game implements them.
(Recall that values are given as x shift then y shift, with right and up positive.)
Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | |
---|---|---|---|---|---|
0->2 | ( 0, 0) | ( 0, 0) | ( 0, 0) | ( 0, 0) | ( 0, 0) |
2->0 | ( 0, 0) | ( 0, 0) | ( 0, 0) | ( 0, 0) | ( 0, 0) |
L->R | ( 0, 0) | (-2, 0) | (-2, 0) | ( 0, 0) | (-2, 0) |
R->L | ( 0, 0) | (+2, 0) | (+2, 0) | ( 0, 0) | (+2, 0) |
Due to the symmetric locations of the rotation points, there are no kicks in states 0 or 2, and only one in states L or R.
Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | |
---|---|---|---|---|---|
0->2 | ( 0, 0) | (-3, 0) | (+3, 0) | (-3,+1) | (+3,+1) |
2->0 | ( 0, 0) | (+3, 0) | (-3, 0) | (+3,-1) | (-3,-1) |
L->R | ( 0, 0) | (-1, 0) | (-1, 0) | (-1,-3) | (-1,+3) |
R->L | ( 0, 0) | (+1, 0) | (+1, 0) | (+1,+3) | (+1,-3) |
Note that when the I is vertical, Test 2 maps the piece onto itself and thus this is in fact the only kick possible.
Reduced tables
This is why official SRS is fundamentally incompatible with 180 degree rotations.
Test 1 | Test 2 | |
---|---|---|
0->2 | ( 0, 0) | |
2->0 | ( 0, 0) | |
L->R | ( 0, 0) | (-2, 0) |
R->L | ( 0, 0) | (+2, 0) |
Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | |
---|---|---|---|---|---|
0->2 | ( 0, 0) | (-3, 0) | (+3, 0) | (-3,+1) | (+3,+1) |
2->0 | ( 0, 0) | (+3, 0) | (-3, 0) | (+3,-1) | (-3,-1) |
L->R | ( 0, 0) | (-1, 0) | |||
R->L | ( 0, 0) | (+1, 0) |
SRS-X
Compare the rotations in SRS-X from Heboris UE. Note that the code specifies down as positive; this has been adjusted for this table. Note also that the game numbers states as 0, 1, 2, 3 while in the table we have 0, R, 2, L (compare u, r, d, l above, or TTC's N, E, S, W).
Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | Test 6 | Test 7 | Test 8 | Test 9 | Test 10 | Test 11 | Test 12 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0->2 | ( 0, 0) | (+1, 0) | (+2, 0) | (+1,-1) | (+2,-1) | (-1, 0) | (-2, 0) | (-1,-1) | (-2,-1) | ( 0,+1) | (+3, 0) | (-3, 0) |
2->0 | ( 0, 0) | (-1, 0) | (-2, 0) | (-1,+1) | (-2,+1) | (+1, 0) | (+2, 0) | (+1,+1) | (+2,+1) | ( 0,-1) | (-3, 0) | (+3, 0) |
L->R | ( 0, 0) | ( 0,-1) | ( 0,-2) | (+1,-1) | (+1,-2) | ( 0,+1) | ( 0,+2) | (+1,+1) | (+1,+2) | (-1, 0) | ( 0,-3) | ( 0,+3) |
R->L | ( 0, 0) | ( 0,-1) | ( 0,-2) | (-1,-1) | (-1,-2) | ( 0,+1) | ( 0,+2) | (-1,+1) | (-1,+2) | (+1, 0) | ( 0,-3) | ( 0,+3) |
Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | Test 6 | |
---|---|---|---|---|---|---|
0->2 | ( 0, 0) | (-1, 0) | (-2, 0) | (+1, 0) | (+2, 0) | ( 0,-1) |
2->0 | ( 0, 0) | (+1, 0) | (+2, 0) | (-1, 0) | (-2, 0) | ( 0,+1) |
L->R | ( 0, 0) | ( 0,-1) | ( 0,-2) | ( 0,+1) | ( 0,+2) | (+1, 0) |
R->L | ( 0, 0) | ( 0,-1) | ( 0,-2) | ( 0,+1) | ( 0,+2) | (-1, 0) |
NullpoMino Mild180
Also, NullpoMino's Mild180. Note that the code in NullpoMino also specifies down as positive.
Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | Test 6 | Test 7 | |
---|---|---|---|---|---|---|---|
0->2 | ( 0, 0) | (+1, 0) | (-1, 0) | ( 0,+1) | ( 0,-1) | ( 0,+2) | ( 0,-2) |
2->0 | ( 0, 0) | (-1, 0) | (+1, 0) | ( 0,-1) | ( 0,+1) | ( 0,-2) | ( 0,+2) |
L->R | ( 0, 0) | ( 0,-1) | ( 0,+1) | ( 0,+2) | ( 0,-2) | (+1, 0) | (-1, 0) |
R->L | ( 0, 0) | ( 0,-1) | ( 0,+1) | ( 0,+2) | ( 0,-2) | (-1, 0) | (+1, 0) |
Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | |
---|---|---|---|---|---|
0->2 | ( 0, 0) | (-1, 0) | (-2, 0) | (+1, 0) | (+2, 0) |
2->0 | ( 0, 0) | (+1, 0) | (+2, 0) | (-1, 0) | (-2, 0) |
L->R | ( 0, 0) | ( 0,-1) | ( 0,+1) | ( 0,+2) | ( 0,-2) |
R->L | ( 0, 0) | ( 0,-1) | ( 0,+1) | ( 0,+2) | ( 0,-2) |
Tetr.io
Test 1 | Test 2 | Test 3 | Test 4 | Test 5 | Test 6 | |
---|---|---|---|---|---|---|
0->2 | ( 0, 0) | ( 0,+1) | (+1,+1) | (-1,+1) | (+1, 0) | (-1, 0) |
2->0 | ( 0, 0) | ( 0,-1) | (-1,-1) | (+1,-1) | (-1, 0) | (+1, 0) |
L->R | ( 0, 0) | (-1, 0) | (-1,+2) | (-1,+1) | ( 0,+2) | ( 0,+1) |
R->L | ( 0, 0) | (+1, 0) | (+1,+2) | (+1,+1) | ( 0,+2) | ( 0,+1) |