Super Rotation System: Difference between revisions

From TetrisWiki
Jump to navigation Jump to search
No edit summary
(33 intermediate revisions by 23 users not shown)
Line 1: Line 1:
[http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SherylDiu/noliwu.htm free midi ringtones] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=37 cheap paxil] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=261 free tracfone ringtones] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=254 xanax online] [http://bugzilla.internet2.edu/attachment.cgi?id=723 alltel ringtones] [http://grid.unimelb.edu.au/twiki/pub/Main/JamesMiller/tofi.htm xanax online] [http://www.hollins.edu/ubb/Forum32/HTML/000344.html pharmacy online online] [http://ccfl.unl.edu/twiki/pub/Main/SummersFrank/jicir.htm viagra online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/AshleighRodriquez/vojenyx.htm cheap alprazolam] [http://ist.greenville.edu/drupal/files/sotuky.html order soma] [http://ccfl.unl.edu/twiki/pub/Main/PaulinePauline/wudytel.htm free sonyericsson ringtones] [http://cyrusimap.web.cmu.edu/twiki/bin/view/Main/RobertDelise ultram online] [http://bugzilla.internet2.edu/attachment.cgi?id=724 alprazolam online] [http://ccfl.unl.edu/twiki/pub/Main/MarthaBell/webid.htm cheap hoodia] [http://dcc.syr.edu/dforum/message.asp?MessageID=49017 diazepam online] [http://ccfl.unl.edu/twiki/pub/Main/HermanHogg/rifykup.htm order albuterol] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=14 soma online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/PhillipRewers/hebur.htm qwest ringtones] [http://bugzilla.internet2.edu/attachment.cgi?id=756 verizon ringtones] [http://bugzilla.internet2.edu/attachment.cgi?id=729 cheap clonazepam] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SherylDiu/kygo.htm free kyocera ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/BilyKroft/suvycez.htm cheap soma] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/JustinJonson/jucidul.htm hgh online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/RobertSmith/pyro.htm buy ambien] [http://grid.unimelb.edu.au/twiki/pub/Main/NoriJohn/bepi.htm free nextel ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000315.html cheap xenical] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/kyvydin.htm cheap norco] [http://dcc.syr.edu/dforum/message.asp?MessageID=48834 tramadol online] [http://dcc.syr.edu/dforum/message.asp?MessageID=49026 vicodin online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SelmaJeremy/tidu.htm verizon ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SelmaJeremy/jivugyv.htm free alltel ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000371.html free music ringtones] [http://bugzilla.internet2.edu/attachment.cgi?id=748 cheap soma] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=52 funny ringtones] [http://bugzilla.internet2.edu/attachment.cgi?id=731 funny ringtones] [http://ccfl.unl.edu/twiki/pub/Main/SummersFrank/cogope.htm online cialis] [http://dcc.syr.edu/dforum/message.asp?MessageID=49058 free tracfone ringtones] [http://ccfl.unl.edu/twiki/pub/Main/SummersFrank/solizup.htm buy tramadol] [http://cyrusimap.web.cmu.edu/twiki/bin/view/Main/ArturJonson order xanax] [http://ccfl.unl.edu/twiki/pub/Main/MarthaBell/duxeru.htm vigrx] [http://dcc.syr.edu/dforum/message.asp?MessageID=49066 samsung ringtones] [http://ccfl.unl.edu/twiki/pub/Main/SummersFrank/wytyvib.htm fioricet online] [http://bugzilla.internet2.edu/attachment.cgi?id=741 paxil online] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=40 ambien online] [http://ccfl.unl.edu/twiki/pub/Main/PaulinePauline/tijohyw.htm sprint ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/PhillipRewers/jetok.htm free mp3 ringtones] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=20 cheap fioricet] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/BettySmith/pefuwe.htm order lipitor] [http://ist.greenville.edu/drupal/files/wohux.html cheap ultracet] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/BettySmith/ligi.htm tenuate online] [http://grid.unimelb.edu.au/twiki/pub/Main/JamesMiller/cucof.htm buy soma] [http://cyrusimap.web.cmu.edu/twiki/bin/view/Main/LukeLookin cheap phentermine] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/pinucep.htm cheap vicodin] [http://ccfl.unl.edu/twiki/pub/Main/HermanHogg/hujox.htm ortho online] [http://ist.greenville.edu/drupal/files/wusywyx.html vicodin online] [http://ist.greenville.edu/drupal/files/lunic.html cheap levitra] [http://dcc.syr.edu/dforum/message.asp?MessageID=49024 adipex] [http://ccfl.unl.edu/twiki/pub/Main/PaulinePauline/vuxinuz.htm motorola ringtones] [http://bugzilla.internet2.edu/attachment.cgi?id=722 cheap adipex] [http://www.hollins.edu/ubb/Forum32/HTML/000365.html free nextel ringtones] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=21 order ultram] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/PhillipRewers/jusify.htm nokia ringtones] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=262 free funny ringtones] [http://dcc.syr.edu/dforum/message.asp?MessageID=48922 carisoprodol online] [http://bugzilla.internet2.edu/attachment.cgi?id=742 buy phentermine] [http://www.hollins.edu/ubb/Forum32/HTML/000283.html valium online] [http://ccfl.unl.edu/twiki/pub/Main/PaulinePauline/jowili.htm free qwest ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000342.html cheap tenuate] [http://bugzilla.internet2.edu/attachment.cgi?id=750 sonyericsson ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/PhillipRewers/licox.htm motorola ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000319.html cyclobenzaprine online] [http://www.hollins.edu/ubb/Forum32/HTML/000295.html order norco] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/JustinJonson/tokuny.htm lortab online] [http://www.hollins.edu/ubb/Forum32/HTML/000354.html flexeril online] [http://bugzilla.internet2.edu/attachment.cgi?id=752 free tracfone ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000285.html carisoprodol online] [http://www.hollins.edu/ubb/Forum32/HTML/000299.html paxil] [http://dcc.syr.edu/dforum/message.asp?MessageID=49063 qwest ringtones] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=249 tramadol online] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/sywexyc.htm levitra online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/RobertSmith/zexuc.htm didrex online] [http://www.hollins.edu/ubb/Forum32/HTML/000380.html punk ringtones] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/kite.htm ultracet] [http://www.hollins.edu/ubb/Forum32/HTML/000311.html buy hydrocodone] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=42 xenical online] [http://ist.greenville.edu/drupal/files/luho.html free nokia ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SelmaJeremy/rufog.htm sprint ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/JustinJonson/jujope.htm diethylpropion online] [http://www.hollins.edu/ubb/Forum32/HTML/000294.html adipex] [http://ccfl.unl.edu/twiki/pub/Main/PaulinePauline/roteryh.htm free polyphonic ringtones] [http://cyrusimap.web.cmu.edu/twiki/bin/view/Main/AndreaHolivel cialis online] [http://dcc.syr.edu/dforum/message.asp?MessageID=49016 ultram online] [http://www.hollins.edu/ubb/Forum32/HTML/000336.html cheap clomid] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SelmaJeremy/hijosij.htm free sagem ringtones] [http://ist.greenville.edu/drupal/files/bigibe.html free nextel ringtones] [http://dcc.syr.edu/dforum/message.asp?MessageID=49027 alprazolam online] [http://www.hollins.edu/ubb/Forum32/HTML/000288.html ultram online] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/hicif.htm alprazolam online] [http://ccfl.unl.edu/twiki/pub/Main/PaulinePauline/sujy.htm free samsung ringtones] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=25 viagra online] [http://bugzilla.internet2.edu/attachment.cgi?id=735 free motorola ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/AshleighRodriquez/jybuhi.htm cheap viagra] [http://dcc.syr.edu/dforum/message.asp?MessageID=48916 phentermine online] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=256 ultram online] [http://bugzilla.internet2.edu/attachment.cgi?id=760 diazepam online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/JustinJonson/xyhyj.htm cheap rivotril] [http://ccfl.unl.edu/twiki/pub/Main/SummersFrank/vuru.htm cheap ativan] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/hykidi.htm cheap clonazepam] [http://www.hollins.edu/ubb/Forum32/HTML/000281.html tramadol online] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=253 buy carisoprodol] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=26 cheap meridia] [http://ist.greenville.edu/drupal/files/dydyse.html cheap valium] [http://ccfl.unl.edu/twiki/pub/Main/HermanHogg/rukexo.htm zoloft online] [http://ist.greenville.edu/drupal/files/kuxer.html cyclobenzaprine online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SelmaJeremy/cybo.htm free sonyericsson ringtones] [http://ccfl.unl.edu/twiki/pub/Main/MarthaBell/nezyz.htm order flexeril] [http://ccfl.unl.edu/twiki/pub/Main/SummersFrank/lyfogo.htm xanax online] [http://ccfl.unl.edu/twiki/pub/Main/MarthaBell/wofo.htm nokia ringtones] [http://grid.unimelb.edu.au/twiki/pub/Main/JamesMiller/sonuhop.htm cheap valium] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/RobertSmith/pevesuz.htm wellbutrin online] [http://ccfl.unl.edu/twiki/pub/Main/HermanHogg/rypel.htm sildenafil] [http://www.hollins.edu/ubb/Forum32/HTML/000339.html order zoloft] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=251 valium online] [http://www.hollins.edu/ubb/Forum32/HTML/000384.html free midi ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000290.html cheap cialis] [http://bugzilla.internet2.edu/attachment.cgi?id=744 qwest ringtones] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=266 real ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/PhillipRewers/kino.htm real ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SelmaJeremy/belizyl.htm polyphonic ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/PhillipRewers/dijuxoj.htm free tracfone ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000322.html cheap ultracet] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=28 cheap norco] [http://dcc.syr.edu/dforum/message.asp?MessageID=49072 free polyphonic ringtones] [http://bugzilla.internet2.edu/attachment.cgi?id=732 levitra online] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/woguked.htm cheap ambien] [http://www.hollins.edu/ubb/Forum32/HTML/000334.html cheap sildenafil] [http://www.hollins.edu/ubb/Forum32/HTML/000333.html cheap prozac] [http://ist.greenville.edu/drupal/files/rucod.html online xanax] [http://www.hollins.edu/ubb/Forum32/HTML/000343.html ortho online] [http://ist.greenville.edu/drupal/files/wypy.html funny ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000296.html vicodin online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/BilyKroft/koky.htm cheap phentermine] [http://bugzilla.internet2.edu/attachment.cgi?id=740 norco online] [http://ccfl.unl.edu/twiki/pub/Main/HermanHogg/figog.htm lortab online] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/kozu.htm cheap hydrocodone] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=24 cheap ativan] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/AshleighRodriquez/godufit.htm buy paxil] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SelmaJeremy/sevuv.htm mono ringtones] [http://bugzilla.internet2.edu/attachment.cgi?id=755 online valium] [http://grid.unimelb.edu.au/twiki/pub/Main/JamesMiller/sicofyr.htm tramadol online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/BettySmith/kuvodoj.htm cheap zoloft] [http://dcc.syr.edu/dforum/message.asp?MessageID=49034 hydrocodone online] [http://dcc.syr.edu/dforum/message.asp?MessageID=49022 cheap viagra] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/BettySmith/niwupu.htm but albuterol] [http://ccfl.unl.edu/twiki/pub/Main/MarthaBell/gedenu.htm rivotril online] [http://ccfl.unl.edu/twiki/pub/Main/PaulinePauline/dyzoko.htm free verizon ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000314.html lorazepam] [http://grid.unimelb.edu.au/twiki/pub/Main/JackLawson/rejyvob.htm viagra online] [http://www.hollins.edu/ubb/Forum32/HTML/000325.html cheap didrex] [http://ccfl.unl.edu/twiki/pub/Main/SummersFrank/kuzypuh.htm phentermine online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SelmaJeremy/nofelyr.htm cingular ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000389.html ericsson ringtones] [http://dcc.syr.edu/dforum/message.asp?MessageID=49077 free sony ericsson ringtones] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=267 free motorola ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/JustinJonson/kuluc.htm zanaflex online] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/JustinJonson/gekiw.htm flexeril online] [http://www.hollins.edu/ubb/Forum32/HTML/000369.html free samsung ringtones] [http://devel.linux.duke.edu/bugzilla/attachment.cgi?id=259 free nokia ringtones] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=22 diazepam online] [http://www.hollins.edu/ubb/Forum32/HTML/000376.html free sonyericsson ringtones] [http://ist.greenville.edu/drupal/files/devowy.html lorazepam online] [http://ist.greenville.edu/drupal/files/role.html free real ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000351.html cheap rivotril] [http://www.hollins.edu/ubb/Forum32/HTML/000312.html buy ambien] [http://www.hollins.edu/ubb/Forum32/HTML/000337.html cheap albuterol] [http://dcc.syr.edu/dforum/message.asp?MessageID=49018 cialis online] [http://dcc.syr.edu/dforum/message.asp?MessageID=49035 ambien online] [http://bugzilla.internet2.edu/attachment.cgi?id=746 free sagem ringtones] [http://dcc.syr.edu/dforum/message.asp?MessageID=49025 norco online] [http://ist.greenville.edu/drupal/files/puweso.html cheap meridia] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/RobertSmith/cibedis.htm nexium online] [http://ccfl.unl.edu/twiki/pub/Main/PaulinePauline/zivy.htm free mono ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000352.html cheap hgh] [http://bugzilla.internet2.edu/attachment.cgi?id=754 ultram online] [http://ist.greenville.edu/drupal/files/ruwyze.html order ativan] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/linefej.htm buy wellbutrin] [http://ccfl.unl.edu/twiki/pub/Main/MarthaBell/rofev.htm free ringtones] [http://ist.greenville.edu/drupal/files/pobiwi.html diazepam online] [http://bugzilla.internet2.edu/attachment.cgi?id=751 free sprint ringtones] [http://www.hollins.edu/ubb/Forum32/HTML/000345.html buy lortab] [http://grid.unimelb.edu.au/twiki/pub/Main/JamesMiller/bopogo.htm carisoprodol online] [http://dcc.syr.edu/dforum/message.asp?MessageID=49071 free verizon ringtones] [http://ccfl.unl.edu/twiki/pub/Main/HermanHogg/relu.htm clomid online] [http://ccfl.unl.edu/twiki/pub/Main/AlexCarneyham/sifus.htm cheap xenical] [http://bugzilla.internet2.edu/attachment.cgi?id=759 xanax online] [http://www.hollins.edu/ubb/Forum32/HTML/000360.html free ringtones] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=43 cheap wellbutrin] [http://www.coe.unt.edu/chec/forum/forum_posts.asp?TID=15 buy carisoprodol] [http://cyrusimap.web.cmu.edu/twiki/bin/view/Main/DikVolirev tracfone ringtones] [http://wwwx.cs.unc.edu/~kmp/twiki40/pub/Main/SherylDiu/popuxo.htm sharp ringtones] [[Image:SRS-pieces.png|thumb|All rotation states of all seven tetrominoes. From top to bottom: I, J, L, O, S, T, Z. The circle doesn't appear in the game; it helps to illustrate the axis on which each tetromino rotates.]]
The '''''Super Rotation System''''', or '''''SRS''''' is the current [[Tetris Guideline]] standard for how [[tetromino|tetrominoes]] [[rotate]] and what [[wall kick|wall kicks]] they may perform. SRS traces its roots back to 1991 when [[BPS]] introduced third and fourth rotation states for the ''S'', ''Z'', and ''I'' tetrominoes in the game [[Tetris 2 + Bombliss]]. Two years later, in the game [[Tetris Battle Gaiden]], BPS altered the spawn orientation of the ''T'', ''L'', and ''J'' tetrominoes so that they spawned flat-side first. It was not until the 2001 game, [[Tetris Worlds]], that the wall kick system was introduced, and SRS took its final form. [[Henk Rogers]], in his effort to unify all new Tetris games into the Tetris Guideline, required [[Arika]] to include a form of SRS in their 2005 game, [[Tetris The Grand Master 3 Terror-Instinct]], where it is called "World" rule, in reference to ''Tetris Worlds''.  
'''''Super Rotation System''''', or '''''SRS''''' is the current [[Tetris Guideline]] standard for how [[tetromino|tetrominoes]] behave, in a broad sense. SRS represents where and how tetrominoes spawn, how they [[rotate]], and what [[wall kick|wall kicks]] they may perform. In [[Tetris The Grand Master 3 Terror-Instinct|TI]], a player may choose between ''World'' and ''Classic'' rotation styles. ''World'' closely resembles SRS, and ''Classic'' closely resembles the rotation styles of its predecessors [[Tetris The Grand Master|TGM]] and [[Tetris The Absolute The Grand Master 2|TAP]]. [[Henk Rogers]], in his effort to unify all new Tetris games into the Tetris Guideline, required [[Arika]] to include SRS, which is called ''World'' in Ti. SRS traces its routes back to 1991 when [[BPS]] introduced its signature third and fourth [[orientation]]s for the ''S'', ''Z'', and ''I'' tetrominoes in their [[Tetris 2 and Bombliss|Tetris 2 Bombliss]]. Later would come flipped-side-up spawned ''T'', ''L'', and ''J'' tetrominoes and flexible new wall kicks. Probably the most accurate SRS finds itself in BPS's latest games [[Tetris Worlds]] and [[Tetris Deluxe]], which both feature exact same rotation styles.


==Description==
==Spawn Orientation and Location==
All tetrominoes exist inside a bounding square and rotate about the center of this square unless obstructed. Tetrominoes of width 3 (J, L, S, T, Z) are placed in the top two rows of the bounding square and (for J, L, and T) with the flat side down. I is placed in the top middle row.
[[Image:SRS-pieces.png|thumb|The 4 rotation states of all 7 tetrominoes. Starting with the spawn state on the left, the 4 rotation states resulting from successive clockwise rotations are shown in order. The circles merely help to illustrate rotation centers and do not appear in-game.]]
The spawn orientations are included in the diagram on the right.
* All tetrominoes spawn horizontally.
* The ''I'' and ''O'' tetrominoes spawn centrally, and the other, 3-cell wide tetrominoes spawn rounded to the left.
* The ''J'', ''L'' and ''T'' spawn flat-side first, while ''I'', ''S'' and ''Z'' spawn in their upper horizontal orientation.
* In Tetris Worlds, the tetrominoes spawn in rows 22 and 23 (or just row 22 in the case of the "I" tetromino), however, in later games the tetrominoes spawn 1 row lower. Some games spawn the tetrominoes another row lower (in rows 20 and 21), such as ''[[Tetris Effect]]''.


All tetrominoes spawn in 2 usually hidden rows at the top of the playfield. They are placed in the center of these rows, rounding to the left.
==Basic Rotation==
The basic rotation states are shown in the diagram on the right.
Some points to note:
* When unobstructed, the tetrominoes all appear to rotate purely about a single point. These apparent rotation centers are shown as circles in the diagram.
* It is a pure rotation in a mathematical sense, as opposed to the combination of rotation and translation found in other systems such as [[Sega Rotation]] and [[Atari Rotation]].
* As a direct consequence, the ''J'', ''L'', ''S'', ''T'' and ''Z'' tetrominoes have 1 of their 4 states (the spawn state) in a "floating" position where they are not in contact with the bottom of their [[bounding box]].
* This allows the bounding box to descend below the surface of the stack (or the floor of the playing field) making it impossible for the tetrominoes to be rotated without the aid of floor kicks.
* The ''S'', ''Z'' and ''I'' tetrominoes have two horizontally oriented states and two vertically oriented states. It can be argued that having two vertical states leads to faster [[:Category:Fast_DAS_SRS_Movement_Finesse|finesse]].
* For the ''I'' and ''O'' tetrominoes, the apparent rotation center is at the intersection of gridlines, whereas for the ''J'', ''L'', ''S'', ''T'' and ''Z'' tetrominoes, the rotation center coincides with the center of one of the four constituent [[mino]]s.


Once a tetromino lands, it does not lock until the lock delay expires. The lock delay behavior, called [[Infinity]] by the Tetris Company, resets the lock delay whenever the tetromino is moved or rotated.
==Wall Kicks==
Hard drop is generally mapped to up, which has has no lock delay.
When the player attempts to rotate a tetromino, but the position it would normally occupy after basic rotation is obstructed, (either by the wall or floor of the playfield, or by the stack), the game will attempt to "kick" the tetromino into an alternative position nearby.
Some points to note:
* When a rotation is attempted, 5 positions are sequentially tested (inclusive of basic rotation); if none are available, the rotation fails completely.  
* Which positions are tested is determined by the initial rotation state, and the desired final rotation state. Because it is possible to rotate both clockwise and counter-clockwise, for each of the 4 initial states there are 2 final states. Therefore there are a total of 8 possible rotations for each tetromino and 8 sets of wall kick data need to be described.
* The positions are commonly described as a sequence of <tt>(&nbsp;x,&nbsp;y)</tt> kick values representing translations relative to basic rotation; a convention of positive x rightwards, positive y upwards is used, e.g. <tt>(-1,+2)</tt> would indicate a kick of 1 cell left and 2 cells up.
* The ''J'', ''L'', ''S'', ''T'' and ''Z'' tetrominoes all share the same kick values, the ''I'' tetromino has its own set of kick values, and the ''O'' tetromino does not kick.
* Several different conventions are commonly used for the naming of the rotation states. On this page, the following convention will be used:
**0 = spawn state
**R = state resulting from a clockwise rotation ("right") from spawn
**L = state resulting from a counter-clockwise ("left") rotation from spawn
**2 = state resulting from 2 successive rotations in either direction from spawn.


Wall kicks in SRS are extremely flexible compared to those of earlier games. Some rotations result in new positions that do not overlap the former position at all, allowing for highly controversial T-spin triples (see [[Twist]]).


==20G==
{| border="1" cellspacing="0"
Since Henk Rogers has never been directly involved with a game boasting 20G, certain behaviors are likely undefined in the Tetris Guidelines. ''Tetris Worlds'' approaches 20G but reportedly never attains it. TGM3 and TGM ACE are the first and second games to support 20G and SRS, and ''[[Tetris DS]]'' (TDS) is the third. Though the rotations are identical, these games have different mobility restrictions due to their different order of processing events in between frames.
|+'''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->R||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-1,+1)</tt>||<tt>( 0,-2)</tt>||<tt>(-1,-2)</tt>
|- align = center
| bgcolor="#80A3F8"|R->0||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+1,-1)</tt>||<tt>( 0,+2)</tt>||<tt>(+1,+2)</tt>
|- align = center
| bgcolor="#80A3F8"|R->2||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+1,-1)</tt>||<tt>( 0,+2)</tt>||<tt>(+1,+2)</tt>
|- align = center
| bgcolor="#80A3F8"|2->R||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-1,+1)</tt>||<tt>( 0,-2)</tt>||<tt>(-1,-2)</tt>
|- align = center
| bgcolor="#80A3F8"|2->L||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+1,+1)</tt>||<tt>( 0,-2)</tt>||<tt>(+1,-2)</tt>
|- align = center
| bgcolor="#80A3F8"|L->2||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-1,-1)</tt>||<tt>( 0,+2)</tt>||<tt>(-1,+2)</tt>
|- align = center
| bgcolor="#80A3F8"|L->0||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(-1,-1)</tt>||<tt>( 0,+2)</tt>||<tt>(-1,+2)</tt>
|- align = center
| bgcolor="#80A3F8"|0->L||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(+1,+1)</tt>||<tt>( 0,-2)</tt>||<tt>(+1,-2)</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->R||<tt>( 0, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(-2,-1)</tt>||<tt>(+1,+2)</tt>
|- align = center
| bgcolor="#80A3F8"|R->0||<tt>( 0, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(+2,+1)</tt>||<tt>(-1,-2)</tt>
|- align = center
| bgcolor="#80A3F8"|R->2||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1,+2)</tt>||<tt>(+2,-1)</tt>
|- align = center
| bgcolor="#80A3F8"|2->R||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(+1,-2)</tt>||<tt>(-2,+1)</tt>
|- align = center
| bgcolor="#80A3F8"|2->L||<tt>( 0, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(+2,+1)</tt>||<tt>(-1,-2)</tt>
|- align = center
| bgcolor="#80A3F8"|L->2||<tt>( 0, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(-2,-1)</tt>||<tt>(+1,+2)</tt>
|- align = center
| bgcolor="#80A3F8"|L->0||<tt>( 0, 0)</tt>||<tt>(+1, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(+1,-2)</tt>||<tt>(-2,+1)</tt>
|- align = center
| bgcolor="#80A3F8"|0->L||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1,+2)</tt>||<tt>(+2,-1)</tt>
|}
 
 
'''A wall kick example:'''<br>
The desired rotation is 0->L, and from the table above, the wall kick test order is <tt>(&nbsp;0,&nbsp;0)</tt>, <tt>(+1,&nbsp;0)</tt>, <tt>(+1,+1)</tt>, <tt>(&nbsp;0,-2)</tt>, <tt>(+1,-2)</tt>.
 
{| cellpadding="2" style="border:1px solid darkgray;"
|- valign=top
|width="200pt"|<playfield>
..........
....GG....
...J.GGG..
...JJJGGGG
.GGG...GGG
GG....GGGG
GGGG..GGGG
GGGGG.GGGG
</playfield>
'''1.''' Initial position.<br>
Attempt to rotate 0->L.
|width="200pt"|<playfield>
..........
....GG....
....JGGG..
....J.GGGG
.GGXJ..GGG
GG....GGGG
GGGG..GGGG
GGGGG.GGGG
</playfield>
'''2.''' Test 1, <tt>( 0, 0)</tt> fails.<br>
(Basic rotation fails.)
|width="200pt"|<playfield>
..........
....GG....
.....XGG..
.....JGGGG
.GGGJJ.GGG
GG....GGGG
GGGG..GGGG
GGGGG.GGGG
</playfield>
'''3.''' Test 2, <tt>(+1, 0)</tt> fails.
|}


In this example, Left is being held and then a clockwise rotation is initiated.
{| cellpadding="2" style="border:1px solid darkgray;"
{|
|- valign=top
|{{pfstart}}
|width="200pt"|<playfield>
{{pfrow| | | | | | | | | | |}}
..........
{{pfrow|G|G|L|L|L| | | | | |}}
....GX....
{{pfrow|G|G|L| | | | | | | |}}
.....XGG..
{{pfrow|G|G|G| | | | | | | |}}
....JJGGGG
{{pfend}}
.GGG...GGG
|{{pfstart}}
GG....GGGG
{{pfrow| | |L|L| | | | | | |}}
GGGG..GGGG
{{pfrow|G|G| |L| | | | | | |}}
GGGGG.GGGG
{{pfrow|G|G| |L| | | | | | |}}
</playfield>
{{pfrow|G|G|G| | | | | | | |}}
'''4.''' Test 3, <tt>(+1,+1)</tt> fails.
{{pfend}}
|width="200pt"|<playfield>
..........
....GG....
.....GGG..
......GGGG
.GGGJ..GGG
GG..J.GGGG
GGGXJ.GGGG
GGGGG.GGGG
</playfield>
'''5.''' Test 4, <tt>( 0,-2)</tt> fails.
|width="200pt"|<playfield>
..........
....GG....
.....GGG..
......GGGG
.GGG.J.GGG
GG...JGGGG
GGGGJJGGGG
GGGGG.GGGG
</playfield>
'''6.''' Final position.<br>
Test 5, <tt>(+1,-2)</tt> succeeds.
|}
|}


The above example ends mid-frame... So the figure on the right is never actually rendered. It simply represents the internal game status after rotation has been processed.
==Arika SRS==
In their games [[Tetris The Grand Master 3 Terror-Instinct]] and [[Tetris The Grand Master Ace]], Arika were required to include a form of SRS as the default rotation system, in order to conform more closely to [[The Tetris Company]]'s Tetris Guideline. Arika's implementation of SRS uses the exact same wall kick data for the ''J'', ''L'', ''S'', ''T'' and ''Z'' tetrominoes as the Guideline's standard; however, the ''I'' tetromino uses the wall kick data shown below, with differences highlighted:


Now, if the game processes movement followed by gravity, the following scenario will happen (as found in TGM3).
{| border="1" cellspacing="0"
{|
|+'''Arika I Tetromino Wall Kick Data'''
|{{pfstart}}
|- align = center
{{pfrow| | |L|L| | | | | | |}}
! width="45"|
{{pfrow|G|G| |L| | | | | | |}}
! bgcolor="#80A3F8" width="60"|Test 1
{{pfrow|G|G| |L| | | | | | |}}
! bgcolor="#80A3F8" width="60"|Test 2
{{pfrow|G|G|G| | | | | | | |}}
! bgcolor="#80A3F8" width="60"|Test 3
{{pfend}}
! bgcolor="#80A3F8" width="60"|Test 4
|{{pfstart}}
! bgcolor="#80A3F8" width="60"|Test 5
{{pfrow| |L|L| | | | | | | |}}
|- align = center
{{pfrow|G|G|L| | | | | | | |}}
| bgcolor="#80A3F8"|0->R||<tt>( 0, 0)</tt>||<tt>(-2, 0)</tt>||<tt>(+1, 0)</tt>||bgcolor="#FFFFCC"|<tt>(+1,+2)</tt>||bgcolor="#FFFFCC"|<tt>(-2,-1)</tt>
{{pfrow|G|G|L| | | | | | | |}}
|- align = center
{{pfrow|G|G|G| | | | | | | |}}
| bgcolor="#80A3F8"|R->0||<tt>( 0, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(+2,+1)</tt>||<tt>(-1,-2)</tt>
{{pfend}}
|- align = center
| bgcolor="#80A3F8"|R->2||<tt>( 0, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1,+2)</tt>||<tt>(+2,-1)</tt>
|- align = center
| bgcolor="#80A3F8"|2->R||<tt>( 0, 0)</tt>||bgcolor="#FFFFCC"|<tt>(-2, 0)</tt>||bgcolor="#FFFFCC"|<tt>(+1, 0)</tt>||bgcolor="#FFFFCC"|<tt>(-2,+1)</tt>||bgcolor="#FFFFCC"|<tt>(+1,-1)</tt>
|- align = center
| bgcolor="#80A3F8"|2->L||<tt>( 0, 0)</tt>||<tt>(+2, 0)</tt>||<tt>(-1, 0)</tt>||<tt>(+2,+1)</tt>||bgcolor="#FFFFCC"|<tt>(-1,-1)</tt>
|- align = center
| bgcolor="#80A3F8"|L->2||<tt>( 0, 0)</tt>||bgcolor="#FFFFCC"|<tt>(+1, 0)</tt>||bgcolor="#FFFFCC"|<tt>(-2, 0)</tt>||bgcolor="#FFFFCC"|<tt>(+1,+2)</tt>||bgcolor="#FFFFCC"|<tt>(-2,-1)</tt>
|- align = center
| bgcolor="#80A3F8"|L->0||<tt>( 0, 0)</tt>||bgcolor="#FFFFCC"|<tt>(-2, 0)</tt>||bgcolor="#FFFFCC"|<tt>(+1, 0)</tt>||bgcolor="#FFFFCC"|<tt>(-2,+1)</tt>||bgcolor="#FFFFCC"|<tt>(+1,-2)</tt>
|- align = center
| bgcolor="#80A3F8"|0->L||<tt>( 0, 0)</tt>||bgcolor="#FFFFCC"|<tt>(+2, 0)</tt>||bgcolor="#FFFFCC"|<tt>(-1, 0)</tt>||<tt>(-1,+2)</tt>||<tt>(+2,-1)</tt>
|}
|}


On the other hand, if gravity is processed next, the following scenario will happen (as found in TDS). This could be the result of either movement processed after gravity, movement processed before rotation, or (most likely in the case of TDS) movement occurring one or more frames after both rotation and gravity due to slow [[DAS]].
The logic behind Arika's modifications is that the ''I'' wall kicks are now symmetric about the y-axis when rotating from or to a horizontal orientation. One noticeable consequence of this is illustrated in the following example:
{|
 
|{{pfstart}}
{| cellpadding="2" style="border:1px solid darkgray;"
{{pfrow| | |L|L| | | | | | |}}
|- valign=top
{{pfrow|G|G| |L| | | | | | |}}
|width="150pt"|<playfield>
{{pfrow|G|G| |L| | | | | | |}}
..........
{{pfrow|G|G|G| | | | | | | |}}
----......
{{pfend}}
.GG.GGGGGG
|{{pfstart}}
.GG.GGGGGG
{{pfrow| | | | | | | | | | |}}
IGGGGGGGGG
{{pfrow|G|G|L|L| | | | | | |}}
IGGGGGGGGG
{{pfrow|G|G| |L| | | | | | |}}
IGGGGGGGGG
{{pfrow|G|G|G|L| | | | | | |}}
IGGGGGGGGG
{{pfend}}
</playfield>
|width="350pt"|From the dotted position, it is possible to clear 4 lines with both Guideline and Arika SRS by rotating ''clockwise''.
|}
{| cellpadding="2" style="border:1px solid darkgray;"
|- valign=top
|width="150pt"|<playfield>
..........
......----
GGGGGG.GG.
GGGGGG.GG.
GGGGGGGGGI
GGGGGGGGGI
GGGGGGGGGI
GGGGGGGGGI
</playfield>
|width="350pt"|In the symmetric position, only Arika SRS allows the clearing of 4 lines by rotating ''counter-clockwise''.
|}
{| cellpadding="2" style="border:1px solid darkgray;"
|- valign=top
|width="150pt"|<playfield>
......I...
......I---
GGGGGGIGG.
GGGGGGIGG.
GGGGGGGGG.
GGGGGGGGG.
GGGGGGGGG.
GGGGGGGGG.
</playfield>
|width="350pt"|Arika SRS also allows for this position to be achieved by rotating ''clockwise''. However, with Guideline SRS, this is the ''only'' position achievable, regardless of which direction the player rotates.
|}
|}
==How Guideline SRS ''Really'' Works==
[[File:SRS-true-rotations.png | thumb | The internal true rotations used in Guideline SRS; offsets are applied to these.]]
Instead of directly assigning a set of <tt>(&nbsp;x,&nbsp;y)</tt> kick translations to each of the 8 possible ''rotations'', [[TTC]] actually employed a different approach, and instead assigned a set of <tt>(&nbsp;x,&nbsp;y)</tt> "offset" values to the 4 ''rotation states''. The kick translations are then derived by taking the difference between pairs of offset data. When rotating from A to B, subtracting B's values from A's will give the kick translation for the rotation one way; and subtracting A's values from B's will give the kick translation for rotating back the other way.
There is another complexity to TTC's implementation: the derived translations are relative to a different datum. So far on this page, kick translations have been defined relative to "basic rotation", but TTC uses what forum user nightmareci has named "true rotation". "True rotation" is still a mathematical pure rotation with no translation involved; however, the rotation center ''always'' coincides with the center of one of the four constituent minos. (Recall that the apparent rotation center of the ''I'' and ''O'' tetrominoes in basic rotation coincided with the intersection of gridlines). This means that for "true rotation", the rotation center for the O piece is not at the geometric center, so the piece will have a "wobble" when rotated. The first kick translation has to be used to correct for this wobble.
{| border="1" cellspacing="0"
|+ '''J, L, S, T, Z Tetromino Offset Data'''
|- align = center
! width="45"|
! bgcolor="#80A3F8" width="60"|Offset 1
! bgcolor="#80A3F8" width="60"|Offset 2
! bgcolor="#80A3F8" width="60"|Offset 3
! bgcolor="#80A3F8" width="60"|Offset 4
! bgcolor="#80A3F8" width="60"|Offset 5
|-align = center
! bgcolor="#80A3F8"| 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"| R
| <tt>( 0, 0)</tt> || <tt>(+1, 0)</tt> || <tt>(+1,-1)</tt> || <tt>( 0,+2)</tt> || <tt>(+1,+2)</tt>
|-align = center
! bgcolor="#80A3F8"| 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"| L
| <tt>( 0, 0)</tt> || <tt>(-1, 0)</tt> || <tt>(-1,-1)</tt> || <tt>( 0,+2)</tt> || <tt>(-1,+2)</tt>
|}
{| border="1" cellspacing="0"
|+ '''I Tetromino Offset Data'''
|- align = center
! width="45"|
! bgcolor="#80A3F8" width="60"|Offset 1
! bgcolor="#80A3F8" width="60"|Offset 2
! bgcolor="#80A3F8" width="60"|Offset 3
! bgcolor="#80A3F8" width="60"|Offset 4
! bgcolor="#80A3F8" width="60"|Offset 5
|-align = center
! bgcolor="#80A3F8"| 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"| R
| <tt>(-1, 0)</tt> || <tt>( 0, 0)</tt> || <tt>( 0, 0)</tt> || <tt>( 0,+1)</tt> || <tt>( 0,-2)</tt>
|-align = center
! bgcolor="#80A3F8"| 2
| <tt>(-1,+1)</tt> || <tt>(+1,+1)</tt> || <tt>(-2,+1)</tt> || <tt>(+1, 0)</tt> || <tt>(-2, 0)</tt>
|-align = center
! bgcolor="#80A3F8"| L
| <tt>( 0,+1)</tt> || <tt>( 0,+1)</tt> || <tt>( 0,+1)</tt> || <tt>( 0,-1)</tt> || <tt>( 0,+2)</tt>
|}
{| border="1" cellspacing="0"
|+ '''O Tetromino Offset Data'''
|- align = center
! width="45"|
! bgcolor="#80A3F8" width="60"|Offset 1
! bgcolor="#80A3F8" width="60"|Offset 2
! bgcolor="#80A3F8" width="60"|Offset 3
! bgcolor="#80A3F8" width="60"|Offset 4
! bgcolor="#80A3F8" width="60"|Offset 5
|-align = center
! bgcolor="#80A3F8"| 0
| <tt>( 0, 0)</tt> || rowspan="4" colspan="4" align=center| No further offset data required
|-align = center
! bgcolor="#80A3F8"| R
| <tt>( 0,-1)</tt>
|-align = center
! bgcolor="#80A3F8"| 2
| <tt>(-1,-1)</tt>
|-align = center
! bgcolor="#80A3F8"| L
| <tt>(-1, 0)</tt>
|}
'''An example of deriving kick translations from the offsets:'''
The offsets for ''J'', rotation state 0 are: <tt>(&nbsp;0,&nbsp;0)</tt>, <tt>(&nbsp;0,&nbsp;0)</tt>, <tt>(&nbsp;0,&nbsp;0)</tt>, <tt>(&nbsp;0,&nbsp;0)</tt>, <tt>(&nbsp;0,&nbsp;0)</tt>.<br>
The offsets for ''J'', rotation state R are: <tt>(&nbsp;0,&nbsp;0)</tt>, <tt>(+1,&nbsp;0)</tt>, <tt>(+1,-1)</tt>, <tt>(&nbsp;0,+2)</tt>, <tt>(+1,+2)</tt>.<br>
<tt>( 0, 0)</tt> - <tt>( 0, 0)</tt> = <tt>( 0, 0)</tt>,<br>
<tt>( 0, 0)</tt> - <tt>(+1, 0)</tt> = <tt>(-1, 0)</tt>,<br>
<tt>( 0, 0)</tt> - <tt>(+1,-1)</tt> = <tt>(-1,+1)</tt>,<br>
<tt>( 0, 0)</tt> - <tt>( 0,+2)</tt> = <tt>( 0,-2)</tt>,<br>
<tt>( 0, 0)</tt> - <tt>(+1,+2)</tt> = <tt>(-1,-2)</tt>.
Therefore, the kick translations for the ''J'' rotation 0->R, relative to "true rotation" (which is conveniently the same as "basic rotation" for the ''J'' tetromino), are: <tt>(&nbsp;0,&nbsp;0)</tt>, <tt>(-1,&nbsp;0)</tt>, <tt>(-1,+1)</tt>, <tt>(&nbsp;0,-2)</tt>, <tt>(-1,-2)</tt>.


==External links==
==External links==
*[http://www.tetrisconcept.com/tdsg.txt Tetris DS Systems Guide]
*[http://web.archive.org/web/20071015224359/www.the-shell.net/img/srs_study.html Jagorochi's analysis] of SRS wall kicks (web archive)
*[http://epictetris2.ytmnd.com/ T-SPIN]
*[http://www.the-shell.net/img/srs_study.html Jagorochi's analysis] of SRS wall kicks




[[Category:Game Mechanics]]
[[Category:Gameplay Components]]
[[Category:Rotation Systems]]
[[Category:Rotation Systems]]

Revision as of 20:36, 8 January 2019

The Super Rotation System, or SRS is the current Tetris Guideline standard for how tetrominoes rotate and what wall kicks they may perform. SRS traces its roots back to 1991 when BPS introduced third and fourth rotation states for the S, Z, and I tetrominoes in the game Tetris 2 + Bombliss. Two years later, in the game Tetris Battle Gaiden, BPS altered the spawn orientation of the T, L, and J tetrominoes so that they spawned flat-side first. It was not until the 2001 game, Tetris Worlds, that the wall kick system was introduced, and SRS took its final form. Henk Rogers, in his effort to unify all new Tetris games into the Tetris Guideline, required Arika to include a form of SRS in their 2005 game, Tetris The Grand Master 3 Terror-Instinct, where it is called "World" rule, in reference to Tetris Worlds.

Spawn Orientation and Location

The 4 rotation states of all 7 tetrominoes. Starting with the spawn state on the left, the 4 rotation states resulting from successive clockwise rotations are shown in order. The circles merely help to illustrate rotation centers and do not appear in-game.

The spawn orientations are included in the diagram on the right.

  • All tetrominoes spawn horizontally.
  • The I and O tetrominoes spawn centrally, and the other, 3-cell wide tetrominoes spawn rounded to the left.
  • The J, L and T spawn flat-side first, while I, S and Z spawn in their upper horizontal orientation.
  • In Tetris Worlds, the tetrominoes spawn in rows 22 and 23 (or just row 22 in the case of the "I" tetromino), however, in later games the tetrominoes spawn 1 row lower. Some games spawn the tetrominoes another row lower (in rows 20 and 21), such as Tetris Effect.

Basic Rotation

The basic rotation states are shown in the diagram on the right. Some points to note:

  • When unobstructed, the tetrominoes all appear to rotate purely about a single point. These apparent rotation centers are shown as circles in the diagram.
  • It is a pure rotation in a mathematical sense, as opposed to the combination of rotation and translation found in other systems such as Sega Rotation and Atari Rotation.
  • As a direct consequence, the J, L, S, T and Z tetrominoes have 1 of their 4 states (the spawn state) in a "floating" position where they are not in contact with the bottom of their bounding box.
  • This allows the bounding box to descend below the surface of the stack (or the floor of the playing field) making it impossible for the tetrominoes to be rotated without the aid of floor kicks.
  • The S, Z and I tetrominoes have two horizontally oriented states and two vertically oriented states. It can be argued that having two vertical states leads to faster finesse.
  • For the I and O tetrominoes, the apparent rotation center is at the intersection of gridlines, whereas for the J, L, S, T and Z tetrominoes, the rotation center coincides with the center of one of the four constituent minos.

Wall Kicks

When the player attempts to rotate a tetromino, but the position it would normally occupy after basic rotation is obstructed, (either by the wall or floor of the playfield, or by the stack), the game will attempt to "kick" the tetromino into an alternative position nearby. Some points to note:

  • When a rotation is attempted, 5 positions are sequentially tested (inclusive of basic rotation); if none are available, the rotation fails completely.
  • Which positions are tested is determined by the initial rotation state, and the desired final rotation state. Because it is possible to rotate both clockwise and counter-clockwise, for each of the 4 initial states there are 2 final states. Therefore there are a total of 8 possible rotations for each tetromino and 8 sets of wall kick data need to be described.
  • The positions are commonly described as a sequence of ( x, y) kick values representing translations relative to basic rotation; a convention of positive x rightwards, positive y upwards is used, e.g. (-1,+2) would indicate a kick of 1 cell left and 2 cells up.
  • The J, L, S, T and Z tetrominoes all share the same kick values, the I tetromino has its own set of kick values, and the O tetromino does not kick.
  • Several different conventions are commonly used for the naming of the rotation states. On this page, the following convention will be used:
    • 0 = spawn state
    • R = state resulting from a clockwise rotation ("right") from spawn
    • L = state resulting from a counter-clockwise ("left") rotation from spawn
    • 2 = state resulting from 2 successive rotations in either direction from spawn.


J, L, S, T, Z Tetromino Wall Kick Data
Test 1 Test 2 Test 3 Test 4 Test 5
0->R ( 0, 0) (-1, 0) (-1,+1) ( 0,-2) (-1,-2)
R->0 ( 0, 0) (+1, 0) (+1,-1) ( 0,+2) (+1,+2)
R->2 ( 0, 0) (+1, 0) (+1,-1) ( 0,+2) (+1,+2)
2->R ( 0, 0) (-1, 0) (-1,+1) ( 0,-2) (-1,-2)
2->L ( 0, 0) (+1, 0) (+1,+1) ( 0,-2) (+1,-2)
L->2 ( 0, 0) (-1, 0) (-1,-1) ( 0,+2) (-1,+2)
L->0 ( 0, 0) (-1, 0) (-1,-1) ( 0,+2) (-1,+2)
0->L ( 0, 0) (+1, 0) (+1,+1) ( 0,-2) (+1,-2)


I Tetromino Wall Kick Data
Test 1 Test 2 Test 3 Test 4 Test 5
0->R ( 0, 0) (-2, 0) (+1, 0) (-2,-1) (+1,+2)
R->0 ( 0, 0) (+2, 0) (-1, 0) (+2,+1) (-1,-2)
R->2 ( 0, 0) (-1, 0) (+2, 0) (-1,+2) (+2,-1)
2->R ( 0, 0) (+1, 0) (-2, 0) (+1,-2) (-2,+1)
2->L ( 0, 0) (+2, 0) (-1, 0) (+2,+1) (-1,-2)
L->2 ( 0, 0) (-2, 0) (+1, 0) (-2,-1) (+1,+2)
L->0 ( 0, 0) (+1, 0) (-2, 0) (+1,-2) (-2,+1)
0->L ( 0, 0) (-1, 0) (+2, 0) (-1,+2) (+2,-1)


A wall kick example:
The desired rotation is 0->L, and from the table above, the wall kick test order is ( 0, 0), (+1, 0), (+1,+1), ( 0,-2), (+1,-2).

..........
....GG....
...J.GGG..
...JJJGGGG
.GGG...GGG
GG....GGGG
GGGG..GGGG
GGGGG.GGGG

1. Initial position.
Attempt to rotate 0->L.

..........
....GG....
....JGGG..
....J.GGGG
.GGXJ..GGG
GG....GGGG
GGGG..GGGG
GGGGG.GGGG

2. Test 1, ( 0, 0) fails.
(Basic rotation fails.)

..........
....GG....
.....XGG..
.....JGGGG
.GGGJJ.GGG
GG....GGGG
GGGG..GGGG
GGGGG.GGGG

3. Test 2, (+1, 0) fails.

..........
....GX....
.....XGG..
....JJGGGG
.GGG...GGG
GG....GGGG
GGGG..GGGG
GGGGG.GGGG

4. Test 3, (+1,+1) fails.

..........
....GG....
.....GGG..
......GGGG
.GGGJ..GGG
GG..J.GGGG
GGGXJ.GGGG
GGGGG.GGGG

5. Test 4, ( 0,-2) fails.

..........
....GG....
.....GGG..
......GGGG
.GGG.J.GGG
GG...JGGGG
GGGGJJGGGG
GGGGG.GGGG

6. Final position.
Test 5, (+1,-2) succeeds.

Arika SRS

In their games Tetris The Grand Master 3 Terror-Instinct and Tetris The Grand Master Ace, Arika were required to include a form of SRS as the default rotation system, in order to conform more closely to The Tetris Company's Tetris Guideline. Arika's implementation of SRS uses the exact same wall kick data for the J, L, S, T and Z tetrominoes as the Guideline's standard; however, the I tetromino uses the wall kick data shown below, with differences highlighted:

Arika I Tetromino Wall Kick Data
Test 1 Test 2 Test 3 Test 4 Test 5
0->R ( 0, 0) (-2, 0) (+1, 0) (+1,+2) (-2,-1)
R->0 ( 0, 0) (+2, 0) (-1, 0) (+2,+1) (-1,-2)
R->2 ( 0, 0) (-1, 0) (+2, 0) (-1,+2) (+2,-1)
2->R ( 0, 0) (-2, 0) (+1, 0) (-2,+1) (+1,-1)
2->L ( 0, 0) (+2, 0) (-1, 0) (+2,+1) (-1,-1)
L->2 ( 0, 0) (+1, 0) (-2, 0) (+1,+2) (-2,-1)
L->0 ( 0, 0) (-2, 0) (+1, 0) (-2,+1) (+1,-2)
0->L ( 0, 0) (+2, 0) (-1, 0) (-1,+2) (+2,-1)

The logic behind Arika's modifications is that the I wall kicks are now symmetric about the y-axis when rotating from or to a horizontal orientation. One noticeable consequence of this is illustrated in the following example:

..........
----......
.GG.GGGGGG
.GG.GGGGGG
IGGGGGGGGG
IGGGGGGGGG
IGGGGGGGGG
IGGGGGGGGG
From the dotted position, it is possible to clear 4 lines with both Guideline and Arika SRS by rotating clockwise.
..........
......----
GGGGGG.GG.
GGGGGG.GG.
GGGGGGGGGI
GGGGGGGGGI
GGGGGGGGGI
GGGGGGGGGI
In the symmetric position, only Arika SRS allows the clearing of 4 lines by rotating counter-clockwise.
......I...
......I---
GGGGGGIGG.
GGGGGGIGG.
GGGGGGGGG.
GGGGGGGGG.
GGGGGGGGG.
GGGGGGGGG.
Arika SRS also allows for this position to be achieved by rotating clockwise. However, with Guideline SRS, this is the only position achievable, regardless of which direction the player rotates.

How Guideline SRS Really Works

The internal true rotations used in Guideline SRS; offsets are applied to these.


Instead of directly assigning a set of ( x, y) kick translations to each of the 8 possible rotations, TTC actually employed a different approach, and instead assigned a set of ( x, y) "offset" values to the 4 rotation states. The kick translations are then derived by taking the difference between pairs of offset data. When rotating from A to B, subtracting B's values from A's will give the kick translation for the rotation one way; and subtracting A's values from B's will give the kick translation for rotating back the other way.

There is another complexity to TTC's implementation: the derived translations are relative to a different datum. So far on this page, kick translations have been defined relative to "basic rotation", but TTC uses what forum user nightmareci has named "true rotation". "True rotation" is still a mathematical pure rotation with no translation involved; however, the rotation center always coincides with the center of one of the four constituent minos. (Recall that the apparent rotation center of the I and O tetrominoes in basic rotation coincided with the intersection of gridlines). This means that for "true rotation", the rotation center for the O piece is not at the geometric center, so the piece will have a "wobble" when rotated. The first kick translation has to be used to correct for this wobble.


J, L, S, T, Z Tetromino Offset Data
Offset 1 Offset 2 Offset 3 Offset 4 Offset 5
0 ( 0, 0) ( 0, 0) ( 0, 0) ( 0, 0) ( 0, 0)
R ( 0, 0) (+1, 0) (+1,-1) ( 0,+2) (+1,+2)
2 ( 0, 0) ( 0, 0) ( 0, 0) ( 0, 0) ( 0, 0)
L ( 0, 0) (-1, 0) (-1,-1) ( 0,+2) (-1,+2)


I Tetromino Offset Data
Offset 1 Offset 2 Offset 3 Offset 4 Offset 5
0 ( 0, 0) (-1, 0) (+2, 0) (-1, 0) (+2, 0)
R (-1, 0) ( 0, 0) ( 0, 0) ( 0,+1) ( 0,-2)
2 (-1,+1) (+1,+1) (-2,+1) (+1, 0) (-2, 0)
L ( 0,+1) ( 0,+1) ( 0,+1) ( 0,-1) ( 0,+2)


O Tetromino Offset Data
Offset 1 Offset 2 Offset 3 Offset 4 Offset 5
0 ( 0, 0) No further offset data required
R ( 0,-1)
2 (-1,-1)
L (-1, 0)


An example of deriving kick translations from the offsets:

The offsets for J, rotation state 0 are: ( 0, 0), ( 0, 0), ( 0, 0), ( 0, 0), ( 0, 0).
The offsets for J, rotation state R are: ( 0, 0), (+1, 0), (+1,-1), ( 0,+2), (+1,+2).

( 0, 0) - ( 0, 0) = ( 0, 0),
( 0, 0) - (+1, 0) = (-1, 0),
( 0, 0) - (+1,-1) = (-1,+1),
( 0, 0) - ( 0,+2) = ( 0,-2),
( 0, 0) - (+1,+2) = (-1,-2).

Therefore, the kick translations for the J rotation 0->R, relative to "true rotation" (which is conveniently the same as "basic rotation" for the J tetromino), are: ( 0, 0), (-1, 0), (-1,+1), ( 0,-2), (-1,-2).


External links