[TAS] NES Tetris - "Maxdrought"
The S in TAS can have a lot of meanings. Here, I'd say this is a Tool Assisted Superplay. It's not really intended to be a speedrun, but for the constraints I have given it does achieve the goal relatively quickly.
- no long pieces can spawn
- you may not pause the game
The goal: 999999 points (a maxout)
A Tetris scores 4x the points of a triple, and thus 3x the points-per-line. NES Tetris has an extreme speed increase at level 29, so as a human player one is usually unable to score any significant points after hitting level 29. It's generally the case then that to max out as a human player, you need 60% or more of your lines cleared prior to level 29 to be part of tetrises. Otherwise, you need to survive much further into the "killscreen" than anyone currently has. (level 29 lines record at time of publishing is 51 lines by Joseph Saelee).
The killscreen will still advance the level counter, but it does not sample memory the developers intended it to sample. For the post-29 levels shown in this video, the pattern consists of adding 10 in hexadecimal for every level cleared, starting with "00" at 30.
NES Tetris also does not use the "7-bag" randomization present in most modern tetris. In a game of 959 pieces in modern tetris, you would always have 137 of each type. Here, each piece is randomly selected. This gives rise to "droughts," which are extended periods without any long pieces, the necessary final block of a tetris. A reasonable game might include a drought of length 30 or more; droughts of over 80 pieces have been observed. This video illustrates a 959 piece drought.
How do I prevent long pieces from spawning?
Every time a piece spawns, the game will poll a pseudorandom number generator (pRNG) and use that to determine what new piece fills the next box. The pRNG advances on every frame of gameplay, so the only control over the next piece comes from which frame you lock the previous one. It does NOT sample all button presses - there is no merit to, say, spamming the useless "up" button to alter the pRNG state. It is exclusively dependent on timing. For this reason, the NES Tetris TAS videos I have watched prior to this will often pause and unpause the game for a few frames to control that. I strongly disliked the strobing effect of these short pauses, so I set the constraint of no pausing the game. I hope others find it more watchable for this as well.
Instead of pausing, I use 3 methods to control the timing:
1) On levels 28 and below, I can press down for 3 frames to make the piece land one frame earlier.
2) On levels 29 and above, I can press the (invalid) combo down+left+right, which causes the drawing to stutter and the game to effectively skip a frame. This causes the piece to land one frame later, and gives rise to the occasional flickering of the falling piece and the next box.
3) If those do not prevent a long piece, I find a new position that will lock enough earlier/later to avoid the long piece. This leads to some funky misdrops! But it's a TAS, it can handle it.
Were this to be a speedrun, it would play as high as possible to minimize the fall time of pieces, and it would only score triples as they have the highest points-per-line during a drought. I instead opted to try to make enjoyable maneuvers - there are multiple T- and Z- spins and spin tucks, some double tucks, some killscreen Z-spins, some holes and bizarre cleanup routes. Prior to the killscreen it is entirely triples - 77 of them. During the killscreen, I was forced into other types of line clear, but I still kept a decent ratio with 39 triples, 11 doubles and 10 singles. I also top out with as few pieces on the board as I could manage, and snuck in a long piece in the next box (but it never spawned!).
Thanks to the classic Tetris community for inspiring me to make it, and special thanks to Alex Kerr for sharing his technical knowledge of the ins and outs of NES Tetris.