|
|
(33 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, the very top row is row number 0, the row below the top row is row number 1, and so on, until 20 (TGM1 has 20 visible rows + 1 vanish zone row).
| |
| == Tetris The Grand Master ==
| |
| 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 || |30 || |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. 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).
| | == Various Contributions == |
| | * 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. |
|
| |
|
| On the first frame of piece display, all inputs are ignored, and read as "not pressed", even if in reality input is being sent on that frame.
| | == My Own Pages == |
| | [[User:Nightmareci/Detailed description of Tetris The Grand Master | Detailed description of Tetris The Grand Master]] |
|
| |
|
| At the start of a game, there is a single "READY, GO" sequence; it is a special case, in this description:
| | [[User:Nightmareci/SRS | SRS]] |
| # Begin "READY, GO" sequence:
| |
| #* 170 frames of uninteractive display until the first pieces' first frame TODO: Expand this after more observations (how long "READY" displays, etc.)
| |
|
| |
|
| After the "READY, GO" sequence, every frame the following is processed from top to bottom, until the game ends:
| | [[User:Nightmareci/Vaguely Tetris-like Games | Vaguely Tetris-like Games]] |
| # Interactive gameplay (piece is in field and in control):
| |
| #* If this is the first frame of this piece:
| |
| #** If a rotation input is read:
| |
| #*** TGM Rotation
| |
| #* Else:
| |
| #** If left/right shift is read this frame:
| |
| #*** If das_counter == 0 or das_counter > 14:
| |
| #**** Shift left/right 1 column
| |
| #*** Else if das_counter <= 14:
| |
| #***** Increment das_counter by 1
| |
| #** Else:
| |
| #*** das_counter = 0
| |
|
| |
|
| | == Other Stuff == |
|
| |
|
| # Uninteractive delays (lock flash, line clear, ARE):
| | Nothing right now. |
| #* TODO: Fill this up (have enough data currently, just sort it out)
| |
|
| |
|
| | | <playfield> |
| Ignore the following (it'll be shoved into the above sooner or later):
| | ZZZ. |
| # Preparation for the pieces' first displayed frame (such as during ARE):
| | Z..Z |
| #* If Gspeed > 256:
| | ZZZ. |
| #** Gcount = Gspeed % 256
| | Z..Z |
| #* Else:
| | </playfield> |
| #** Gcount = 0
| |
| #* Gspeed is set to the appropriate value for the current level
| |
| #* Attempt to place the piece in row number 1 + Gspeed / 256, higher if necessary
| |
| # Every frame this piece is displayed:
| |
| #* If soft drop is pressed:
| |
| #** If Gspeed < 256:
| |
| #*** Attempt to drop one line
| |
| #** If the piece has blocks beneath it now:
| |
| #*** Lock the piece
| |
| #** Go to 3.
| |
| #* If there are blocks below this piece:
| |
| #** Set Gcount to Gspeed
| |
| #* If Gcount is greater than or equal to 256:
| |
| #** Attempt to drop Gcount / 256 lines
| |
| #** Gcount %= 256
| |
| #* Increase Gcount by Gspeed
| |
| #* Go to 3.
| |
| # Further processing after gravity (processing will come back to 2. if the piece hasn't locked)
| |
| In the above, the first If...Else sequence may appear curious, as all Internal Gravity values in the TGM series are either <256 or an even multiple of 256, but it's purpose is to properly support gravity speeds such as 4.5G; none of the TGM games have gravity like this, but this makes this description more general. If your implementation is only conforming to actual TGM gravity, the sequence can be replaced with "Gcount = 0".
| |
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.