|
|
(11 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| == Definitions ==
| | Hey. I edit stuff on this wiki and program things. I'm sysop, so if there's administrative tasks that need doing, like page deletion or moving, just ask me. I have [[User:NightmareciBot | a bot]], so if you find something that would be done best by a bot, I can probably hook something up to make it happen. |
| In this page, row numbering follows this convention:
| |
|
| |
|
| <ol start=0>
| | == Various Contributions == |
| <li>[[Playfield#Vanish_zone|Vanish zone]]</li>
| | * Using [[User:NightmareciBot | my bot]] and [http://botwiki.sno.cc/wiki/Main_Page pywikipedia], I converted pages using [[Template:Pfstart | playfield templates]] to the new [[Help:Playfield | playfield parser extension]]; this is easier on the server and wiki editors. |
| <li>First visible row</li>
| |
| <li>Second visible row</li>
| |
| ...
| |
| <li value=19>Nineteenth visible row</li>
| |
| <li>Twentieth visible row (last)</li>
| |
| </ol>
| |
|
| |
|
| Row number 0 is the topmost row and successive rows are beneath it. In the listing above (which is TGM1's row configuration), there is a total of 21 usable rows.
| | == My Own Pages == |
| | [[User:Nightmareci/Detailed description of Tetris The Grand Master | Detailed description of Tetris The Grand Master]] |
|
| |
|
| == Tetris The Grand Master ==
| | [[User:Nightmareci/SRS | SRS]] |
| Some of the following information may not be consistent with other wiki pages; where this applies, simply ignore the information elsewhere in the wiki. Corrections to this information by others are only accepted if supported by examples. Information here is still work in progress.
| |
| === Gravity ===
| |
| Directly from [[Tetris The Grand Master]], here is the gravity curve:
| |
| {| border="2" cellpadding="2" cellspacing="0" style="margin-top:1em; margin-bottom:1em; background:#f9f9f9; border:3px #999999 solid; border-collapse:collapse;"
| |
| |+'''Internal Gravity'''[http://www.tetrisconcept.com/forum/viewtopic.php?p=11130#11130]
| |
| !bgcolor="#80A3F8"|Level||bgcolor="#BBBBBB"|Interal Gravity<br>(1/256 G)||bgcolor="#80A3F8"|Level||bgcolor="#BBBBBB"|Internal Gravity<br>(1/256 G)
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|0||4||bgcolor="#C4E8E8"|220|||32
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|30||6||bgcolor="#C4E8E8"|230||64
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|35||8||bgcolor="#C4E8E8"|233||96
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|40||10||bgcolor="#C4E8E8"|236||128
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|50||12||bgcolor="#C4E8E8"|239||160
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|60||16||bgcolor="#C4E8E8"|243||192
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|70||32||bgcolor="#C4E8E8"|247||224
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|80||48||bgcolor="#C4E8E8"|251||256 (1G)
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|90||64||bgcolor="#C4E8E8"|300||512 (2G)
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|100||80||bgcolor="#C4E8E8"|330||768 (3G)
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|120||96||bgcolor="#C4E8E8"|360||1024 (4G)
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|140||112||bgcolor="#C4E8E8"|400||1280 (5G)
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|160||128||bgcolor="#C4E8E8"|420||1024 (4G)
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|170||144||bgcolor="#C4E8E8"|450||768 (3G)
| |
| |-align = center
| |
| |bgcolor="#C4E8E8"|200||4||bgcolor="#C4E8E8"|500||5120 (20G)
| |
| |}
| |
| This is also based on a timings table in [[Tetris The Grand Master]], but is modified to better fit observations I've made:
| |
| {| border="2" cellpadding="2" cellspacing="0" style="margin-top:1em; margin-bottom:1em; background:#f9f9f9; border:3px #999999 solid; border-collapse:collapse;"
| |
| |+'''Delays'''
| |
| ! |Level
| |
| ! |[[DAS]]<br>(frames)
| |
| ! |[[Lock delay|Lock]]<br>(frames)
| |
| ! |Lock flash<br>(frames)
| |
| ! |[[Line clear]]<br>(frames)
| |
| ! |[[ARE]]<br>(frames)
| |
| |- align = center
| |
| | |000 - 999 || |14 || |29 || |4 || |41 || |27
| |
| |}
| |
| The different ordering is chosen such that it somewhat represents the order in which each delay happens, left being first, right being last, although DAS charging can occur during ARE.
| |
|
| |
|
| In the following, "gravity_count" is the current Gravity Count; "gravity" is the current Gravity Speed, and is equal to one of the Internal Gravity entries in the above table; das_counter is the current count of DAS charge frames; lock_frames is the current number of lock delay frames. A % is used to represent a "remainder of division" operator (commonly known as "modulo", i.e. 13 % 5 == 3). All division has the fractional part truncated, as in ISO C (60/256 == 0, 252/256 == 0, 260/256 == 1).
| | [[User:Nightmareci/Vaguely Tetris-like Games | Vaguely Tetris-like Games]] |
|
| |
|
| When I say uninteractive, I mean that any input the player sends results in no observable behavioral changes with the game. ARE is technically an interactive period of the game, as you can charge DAS. IRS is not processed in ARE, but on the very first frame of piece display.
| | == Other Stuff == |
|
| |
|
| TGM1 only accepts 1 rotation input per frame; if multiple rotation inputs are pressed down on the same frame, then no rotation input is registered. The only way to send a rotation input with no empty frames between inputs is to alternate between separate rotation buttons, be it A/B or A/C.
| | Nothing right now. |
|
| |
|
| At the start of a game, there is a single "READY, GO" sequence; it is a special case, in this description:
| | <playfield> |
| # Begin "READY, GO" sequence:
| | ZZZ. |
| ## 170 frames of uninteractive display until the first pieces' first frame TODO: Expand this after more observations (how long "READY" displays, etc.)
| | Z..Z |
| ## das_counter = 0
| | ZZZ. |
| | | Z..Z |
| After the "READY, GO" sequence, every frame the following is processed from top to bottom, until the game ends:
| | </playfield> |
| # If this is in-field play:
| |
| <!-- Begin In-Field --> | |
| <!-- Begin First Frame -->
| |
| ## If this is the first frame of this piece:
| |
| ### Set gravity to the correct value
| |
| ### If gravity > 256:
| |
| #### gravity_count = gravity % 256
| |
| ### Else:
| |
| #### gravity_count = 0
| |
| ### lock_frames = 0
| |
| ### Place the piece in row number 1
| |
| ### If a single rotation input is pressed down this frame:
| |
| #### Basic Rotation (Sega Rotation, essentially)
| |
| #### If the piece is not intersecting the stack rotated:
| |
| ##### Play IRS sound
| |
| #### Else:
| |
| ##### Switch back to initial spawn orientation
| |
| ### If the piece is not intersecting the stack:
| |
| #### While the piece is in a row number < (gravity % 256 + 1):
| |
| ##### If placing the piece 1 row down would cause stack intersection:
| |
| ###### Break out of this loop
| |
| ##### Else:
| |
| ###### Place the piece in the next row
| |
| ### Else:
| |
| #### Game over
| |
| <!-- End First Frame -->
| |
| ## Else:
| |
| <!-- Begin Other Frames -->
| |
| <!-- Begin Rotation -->
| |
| ### If a single rotation input is pressed down this frame:
| |
| #### TGM Rotation
| |
| <!-- End Rotation -->
| |
| <!-- Begin Shift -->
| |
| ### If left/right shift is read:
| |
| #### If this input does not match the previous frame's:
| |
| ##### das_counter = 0
| |
| #### If das_counter == 0 or das_counter > 14:
| |
| ##### Shift left/right 1 column
| |
| #### If das_counter <= 14:
| |
| ##### Increment das_counter by 1
| |
| ### Else:
| |
| #### das_counter = 0
| |
| <!-- End Shift -->
| |
| <!-- Begin Soft Drop and Gravity -->
| |
| ### If soft drop is read:
| |
| #### If gravity < 256:
| |
| ##### Attempt to drop one line
| |
| #### If the piece has blocks beneath it now:
| |
| ##### Lock the piece, end in-field play
| |
| ### Else:
| |
| #### gravity_count += gravity
| |
| <!-- End Soft Drop and Gravity -->
| |
| <!-- Begin Gravity and Lock Delay -->
| |
| ### If this piece was on a different line in the previous frame:
| |
| #### lock = 0
| |
| ### If there are blocks below this piece:
| |
| #### If lock == 0:
| |
| ##### Play the Secchi 1 sound
| |
| #### If lock < 29:
| |
| ##### lock++
| |
| #### Else:
| |
| ##### Lock the piece, end in-field play
| |
| #### gravity_count = gravity
| |
| ### If gravity_count >= 256:
| |
| #### Attempt to drop gravity_count / 256 lines
| |
| #### gravity_count %= 256
| |
| <!-- End Gravity -->
| |
| <!-- End In-Field -->
| |
| # Else:
| |
| <!-- Begin ARE -->
| |
| ##
| |
| <!-- End ARE -->
| |
| # Render frame
| |
| | |
| VERY BIG TODO: Create a ton of examples showing specific points of behavior, i.e. interaction of gravity/soft drop.
| |
Hey. I edit stuff on this wiki and program things. I'm sysop, so if there's administrative tasks that need doing, like page deletion or moving, just ask me. I have a bot, so if you find something that would be done best by a bot, I can probably hook something up to make it happen.
Various Contributions
My Own Pages
Detailed description of Tetris The Grand Master
SRS
Vaguely Tetris-like Games
Other Stuff
Nothing right now.