MarbleousDave
He/Him
Player (13)
Joined: 9/12/2009
Posts: 1559
A T-Spin Tetris with the topmost row is impossible. Lilla Oshisaure did a behind-the-scenes demonstration of a T-Spin Triple with the topmost row. I experimented with Game Genie codes and I tweaked the DAS code for the PAL version of Tetris.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Hello comrades! The world is changed. I feel it in the water. I feel it in the earth. I smell it in the air. It is time to make new Tetris TAS. I developed new strategy for fastest 999999 points TAS. Here some details regarding improvements: FT - First Tetris For first tetris we need to build shape equivalent to this: This shape uses 17 pieces in total. Acmlm used 18 pieces to reach his first tetris in published TAS. Estimated improvement about 25-30 frames. "Tree#1" must have 15 blocks high and have 3 blocks flat top (it is T, L, or J tetraminos.) At the right branch two blocks at rightmost down corner must be empty. Last piece to burn tetris is L. SRNG - Starting RNG It is possible to try take extra advantage of using different starting RNG if to start at other frames. If find lucky starting RNG maybe some additional frames can be saved. Estimated improvement about 0-10 frames. CH18/CH19 - Chessboard build Instead of doing one long hole is better to build chessboard with knee after each 4 layers. It allow burn faster becouse of long "I" tetramino will travel for shorter distance to ground. At level 18 speed "Chessboard build" can save 48 frames (8 + 16 + 24) At level 19 speed "Chessboard build" can save 40 frames (7 + 13 + 20) T3Skip - Tree#3 skip Tree#3 can be skipped completely. It mean we need five full teramino less! So it will save about (25-30) * 5 = (125-150) frames. To do so after transition we do not burn all field, instead of tree#3 is possible to use 12-lines ground. HBB - High Build Bonus Additional betefit of skipping Tree #3 is that possible to continue building immidetely after transition. See picture above. I dont estimate how much it will save, lets say about 10-20 frames. EM - Extra movement There is a pausing trick that allow to move teetramino to one extra block futher than expected normally. This trick not used in previous TAS. Not sure will it save something or not. But at least we have more freedom for build. EIE - End imput earlier End of imput can be done as soon as last "I" tetramino is rorated. Estimated improvement about 65 frames. Well, it is not pure improvement it is more alternative ending timing method. After reaching 999999 points Acmlm also reached top of screen to finish game faster. But i disagree this this decision, in my opinion shortest input time is universal goal for all TAS. And so Tetris should not be an exception of this rule. EP - Ending problems Besides pros, my new strategy has one serious difficulty at the very end. For perect ending we need 4 long pieces "I-I-I-I" in row at very end. It is extrimly difficult to achive. EP0 - I think if re-solve last segment many times sooner or later right RNG with 4 "I" at the end can be found. For case if it would be impossible (or too long) to get 4 "I" there are two possibility: EP1 - It possible to waste one piece like I-X-I-I-I or I-I-X-I-I or I-I-I-X-I But i strongly not like idea of wasting piece. EP1-solution is not an option for good TAS. EP2 - To avoid wasting piece there is alternative "smart end" by using incomplete upper tetris: it require only long pieces "I-I-I" in row. For example like this. I-O-O-I-I-I. Or something similar. It slower than 4 "I" but 3 "I" seems more or less possible to achive. Estimated worsening for EP1/2 about 25-50 frames. Summary: IMP = FT + SRNG + CH18 + T3Skip + HBB + CH19 + EM* + EIE - EP (25-30) + (0-10) + 48 + (125-150) + (10-20) + 0* + 40 + 65 - (0/25-50) = 263-373 frames can be saved +/- something. Playaround I also think that would be nice to improve not only "fastest 999999" but also "playaround" and beat both remaining TASes at the same time. To do so after completing "fastest 999999" with improvement we will dont stop here. No! Instead we start doing bonus "playaround" and play additional 2-3 minutes. For playaround my idea is to draw pixel art. Pixelart1 -> Burn -> Pixelart2 -> Burn -> Pixelart3 -> Burn -> ... Final product can be called "fastest 999999 + playaround" or simply "Mode A". But it too early to discuss. Since fastest 999999 is the hardest part.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
NES Tetris is great game, so i think it deserved to have great TAS. Not just with best strategy but also with best tactic. Unfortunately my own skills is not enough to optimise tactic in this TAS as good as it can be done. Main problem with optimisation of tactics is that each tetris (3- or 4- lines) as individual puzzle can be solved in many multiple ways. How to choose the fastest solution among these opportunities!? It is pure RNG hell. I do not have brutforce tools or something equally powerfull. So i need help with execution. If someone interested in this project and have enough skills to be helpfull your are welcome to join "Mode A" team. --- Here rough test of first knee of my new strat (first three 3-lines tetris). http://tasvideos.org/userfiles/info/63971629207143480 Currently about 20 frames ahead published TAS. As i said my tactics optimisation is far from perfect, for sure it can be done faster. I am waiting volontaires.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
I'd want to make a Lua script that can tell you the earliest possible frame for the "next" piece you get to be each of the possibilities. The easiest way I can think of making that is to just test pausing/unpausing x number of frames and seeing what the next piece is by hand. But to do it only 1 piece at time probably isn't good enough for a work of this scale. When it comes to building these triple-tetris setups as fast as possible, it would be better to make a full on simulation of the RNG, and... have a list of all usable piece sequences? And it can spit out which should take the least RNG manipulation frames? Though it'd have to account for the minimum time it takes to place a piece. I don't think I'd want to manually try to RNG manip for usable sequences, but if a script like this could happen, it could greatly ease the process. This page should help immensely with getting an RNG simulation going: https://meatfighter.com/nintendotetrisai/#Picking_Tetriminos I'm not sure just how long a list of valid piece orders would be though (especially since, with your chessboard build, if i'm understanding it right, each of the 10 different spots we could place our hole on the fourth row would be a totally different set of usable piece orders).
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Here approach that was used in old TAS according to submission text:
Acmlm wrote:
I made this easier by bruteforcing again! Overall, it went like this: Find all possible ways to fit blocks into each side (or as many as I can, I got a few dozen) Get the player input for each of them (and how many frames it takes to place each block) Also get the input to delay the next block by any amount of frames (up to about 10, and pausing when left+right+down isn't enough) Using the above, code the bruteforcer in C, and use it for a (mostly) easy ride to level 19 and above And the bruteforcing: (instant, too) Go through each left/right block sequence (for a single tetris), and each way to alternate sides For each of them, find how long it'd take to manipulate and place all blocks Keep the shortest one, display it and generate .fm2 data to copy-paste into the run
It would be really nice to re-create something similar to this.
Blazephlozard wrote:
I'm not sure just how long a list of valid piece orders would be though (especially since, with your chessboard build, if i'm understanding it right, each of the 10 different spots we could place our hole on the fourth row would be a totally different set of usable piece orders).
For chessboard build only 3* types of holes would be enough. Rightmost hole (10). Central hole (6) And yet one hole (X). That third alternative hole can be in any other place excluding leftmost. *Actually even 2 types of holes is enough (6&10) but it would be unhandy to play after 19-speed transition with hole#10 on top. So alternative hole is used to change parity and have hole#6 at top after transition. So we need to have only 3 sets of usable piece orders. For Central hole we can use data for piece orders from old TAS (+ add few new cases with using EM trick). For Rightmost hole and Alternative hole it would be not too hard to make similar set-lists.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
It would be nice to get access to those lists of "left side" and "right side" valid piece orders as a base. I wonder how many more could be found. I was thinking of a more complex parent-child system that could account for all the possible variations in piece order through code rather than listing each one. Like, in this, the O goes on top of I, then O and T go on top of that O. poss[1] = { { I, null }, {O, {1}}, {O, {2}}, {T, {2}}, {J, null}, {T, null}, etc
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Blazephlozard wrote:
It would be nice to get access to those lists of "left side" and "right side" valid piece orders as a base. I wonder how many more could be found.
Ok. In next few days i will try to create such lists of valid piece orders for left and right sides for hole#10. Then you will try to extend my lists. Later we repeat these procedure for hole#6. And at last when we will choose what third hole will be used we will need to repeat this work once again.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
I've got a basic RNG and piece-picking simulator coded. (Basically just the code from that website) Was debating on what format I want the piece sequences table to be in. Although it will make more more total patterns, a "left side / right side in order" approach seems the easiest to actually write down, as opposed to a parent-child system. I do want a 'minimum frames' value for each piece too, which complicates it a bit. I think I'll keep those in a separate table to aid in actually writing the tables. The final piece requires both left and right side to be done, so right now I'm thinking something like:
seq[6][1] = { {I, O, O, I, I}, {L, Z, Z, T}, {J} }
frm[6][1] = { {x, x, x, x, x}, {x, x, x, x}, {x} }
Unless there's a better idea. (I, O, Z, T, etc. will be constants for either a piece ID number or just the string equivalent) Frame lengths will be easier to get if I make a Lua that can forcibly give you a certain piece (using keyboard keys for which piece you want) rather than manipulating RNG for the needed pieces. I want those timings to be as accurate as possible to prevent false positives. The best way actually would be, to allow this program to watch the spawn count var, and actually give you a specific sequence of pieces. That'll make it very easy to test specific sequences. Oh, I should also mention, please keep in mind that the faster soft drop strats will reduce the points gained from soft drops, since you have to hold Down to get those. But it looks like the current TAS gets 12k points extra so that should be fine. This will be getting the same total number of Tetrises, right?
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Extra points from pressing down is completely irrelevant for current strategy. We need to do the same amount of tetrises as old TAS. (Gap for the next usefull score is too big, even no chance to try use triple at the end instead of tetris.) Tomorrow i will post lists of valid piece cases sequences for hole#10. I classificated cases for 4 subgroups "L+1", "L+0", "R+1", "R+0". L and R means left and right sides, +1 mean 1 block above top, +0 mean 0 block above top. Currently i keep them as simple text format and picture for each case, here for example one of cases from L+1 subgroup (and two alternative packing orders for same shape):
I-J-Z-J-I-I

I-J-I-Z-J-I
I-J-Z-I-J-I
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
Ah, that's interesting, that because of the shift in the fourth row's gap, an I block is now a valid choice for doing a triple-tetris. Does the top block actually end up left over? Normally any blocks off the top cease to exist once the piece is placed, but I could see this triple-tetris being a special case. Sounds like you have a good handle of the data we need. I'm definitely happy to double-check that data (try to come up with missing ones) and run the brute force part. Actually putting the blocks in will be annoying, maybe I'll try to Lua something up for that as well, since it sounds like Ac automated his block placing.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Blazephlozard wrote:
Ah, that's interesting, that because of the shift in the fourth row's gap, an I block is now a valid choice for doing a triple-tetris. Does the top block actually end up left over? Normally any blocks off the top cease to exist once the piece is placed, but I could see this triple-tetris being a special case.
All blocks that above the top are disappear. That upper part of I-piece at the end is not an exception. Four complete layers is 10 tetrominoes = 40 blocks but we need to build extra hole at 4th layer so it is only 39 blocks need to be used it means for each triple tetris one block always* must disappear. *There are also two special cases after Tree#1 and after Tree#2 when enough space to place all 10 tetrominoes and build hole at 4th layer without piece-cutting. Interesting observation is that for holes at right side (#7-10) last piece to burn 3-tetris can be "I" or "L". For holes at left side (#2-5) it is "I" or "J". For the most balanced central hole (#6) it is "J" and "L". For leftmost hole (#1) at level 18 speed 3-tetris is impossible to build.
Blazephlozard wrote:
Actually putting the blocks in will be annoying
I suspect it will be even more annoying because there are some unique movements when already placed tetrominoes are obstacle or/and when pausing extra movement trick is used.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Finally finished testing. Here lists of valid piece cases sequences for hole#10 that i found and verified: R+1:
J-J-Z-T

J-J-Z-Z
L+0:
I-I-I-I-L-L	I-I-I-L-S-L	I-I-I-J-S-L
X-X-X-X-X-X	X-X-X-X-X-X	I-I-J-I-S-L
X-X-X-X-X-X	X-X-X-X-X-X	I-J-I-I-S-L
X-X-X-X-X-X	X-X-X-X-X-X	J-I-I-I-S-L
		
I-L-L-T-T-L	I-L-L-I-L-L	I-L-L-J-S-L
T-I-L-L-T-L	X-X-X-X-X-X	X-X-X-X-X-X
I-T-L-L-T-L	X-X-X-X-X-X	X-X-X-X-X-X
I-L-T-L-T-L	X-X-X-X-X-X	X-X-X-X-X-X
		
I-I-I-T-T-L	I-I-L-L-L-L	I-I-I-J-O-L
I-I-T-I-T-L	X-X-X-X-X-X	X-X-X-X-X-X
I-T-I-I-T-L	X-X-X-X-X-X	X-X-X-X-X-X
T-I-I-I-T-L	X-X-X-X-X-X	X-X-X-X-X-X
			
I-I-O-O-L-L	I-I-L-Z-Z-L	I-I-I-J-Z-L
R+0:
I-I-L-L

T-T-L-L
T-L-T-L
T-L-L-T

S-S-L-L
S-L-S-L
S-L-L-S

I-J-Z-J

I-J-J-O

I-J-S-L
L+1:
I-I-I-I-I-I	I-L-L-J-J-I	I-I-J-L-O-I	I-I-J-J-L-L	I-J-Z-L-I-I	I-I-I-J-O-L
X-X-X-X-X-X	L-I-L-J-J-I	X-X-X-X-X-X	X-X-X-X-X-X	I-J-Z-I-L-I	X-X-X-X-X-X
						
I-I-O-O-I-I	I-J-J-J-J-I	I-I-O-L-L-I	I-L-L-O-L-L	I-J-T-T-I-I	I-I-L-J-J-I
I-I-O-I-O-I	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X	I-J-T-I-T-I	X-X-X-X-X-X
					
I-O-O-I-I-I	I-I-I-J-J-I	I-I-L-O-J-I	I-I-I-O-L-L	I-I-J-O-L-I	I-J-J-O-I-I
I-O-I-O-I-I	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X	I-J-I-J-O-I
I-O-I-I-O-I	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X
					
I-I-I-O-O-I	I-O-O-J-J-I	I-I-J-O-J-I	I-I-L-I-T-L	I-I-J-Z-J-I	I-I-J-J-O-I
I-I-O-I-O-I	I-O-J-O-J-I	X-X-X-X-X-X	I-L-I-I-T-L	X-X-X-X-X-X	X-X-X-X-X-X
X-X-X-X-X-X	I-O-J-J-O-I	X-X-X-X-X-X	L-I-I-I-T-L	X-X-X-X-X-X	X-X-X-X-X-X
					
I-J-J-I-I-I	I-I-J-J-I-I	I-T-T-J-I-I	I-I-T-T-L-L	I-I-L-T-T-L	I-I-T-T-J-L
X-X-X-X-X-X	I-I-J-I-J-I	I-T-T-I-J-I	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X
X-X-X-X-X-X	X-X-X-X-X-X	I-T-I-T-J-I	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X
					
I-L-L-I-I-I	I-I-L-L-I-I	I-T-L-T-I-I	I-L-L-J-I-L	I-I-L-Z-J-I	I-I-L-T-T-L
X-X-X-X-X-X	I-I-L-I-L-I	L-I-T-T-I-I	I-L-J-L-I-L	X-X-X-X-X-X	X-X-X-X-X-X
X-X-X-X-X-X	X-X-X-X-X-X	I-L-T-T-I-I	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X
					
I-I-T-L-T-I	I-I-J-Z-J-I	I-L-S-L-I-I	I-I-T-T-J-I	I-L-Z-I-J-I	J-I-I-I-I-L
I-I-T-T-L-I	X-X-X-X-X-X	I-L-S-L-I-I	X-X-X-X-X-X	I-L-I-Z-J-I	I-J-I-I-I-L
X-X-X-X-X-X	X-X-X-X-X-X	I-L-I-S-L-I	X-X-X-X-X-X	X-X-X-X-X-X	I-I-J-I-I-L
X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X	I-I-I-J-I-L
					
I-L-L-L-L-I	I-I-J-S-L-I	I-J-Z-J-I-I	I-I-L-L-I-I	I-I-L-O-J-I	I-I-I-L-S-L
X-X-X-X-X-X	X-X-X-X-X-X	I-J-Z-I-J-I	X-X-X-X-X-X	I-L-I-O-J-I	X-X-X-X-X-X
X-X-X-X-X-X	X-X-X-X-X-X	I-J-I-Z-J-I	X-X-X-X-X-X	L-I-I-O-J-I	X-X-X-X-X-X
					
I-L-L-I-I-I	I-L-L-O-O-I	I-I-L-S-L-I	X-X-X-X-X-X	X-X-X-X-X-X	X-X-X-X-X-X
Here also special subgroup that can be used for very first 3-tetris: Theoretically it also be can useful for exotic two-phase builds. L-1:
I-L-L-T-T-L	I-L-L-I-I-L	I-I-J-J-O-L
I-L-T-L-T-L	X-X-X-X-X-X	J-I-I-J-O-L
I-T-L-L-T-L	X-X-X-X-X-X	X-X-X-X-X-X
T-I-L-L-T-L	X-X-X-X-X-X	X-X-X-X-X-X
		
I-I-T-T-Z-L	I-I-I-I-I-L	I-I-J-J-Z-L
I-T-I-T-Z-L	X-X-X-X-X-X	J-I-I-J-Z-L
T-I-I-T-Z-L	X-X-X-X-X-X	X-X-X-X-X-X
		
I-I-I-T-T-L	I-I-L-L-I-L	I-L-L-S-S-L
I-I-T-I-T-L	X-X-X-X-X-X	X-X-X-X-X-X
I-T-I-I-T-L	X-X-X-X-X-X	X-X-X-X-X-X
T-I-I-I-T-L	X-X-X-X-X-X	X-X-X-X-X-X
		
I-I-L-L-Z-L	I-I-O-O-I-L	I-I-I-S-S-L
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
Ok, wow, very impressive, and makes a lot of sense... So, you did verify all these are actually possible at Level 18 speed to build? (Some only with Pausing probably.) And a R+0 has to go with L+1, and vice versa. I see... Evidently it's extremely convenient for the +1 to be on the final I piece in this hole setup. I'll try and get something going some time soon, my life is very odd at the moment... For now this is a Lua script that can cheat a piece sequence by pressing Space (hold it down, then frame advance, for the input to be read). the sequence has to be manually edited in the .lua https://pastebin.com/serTG9NV By the way, I'm not really down with the "obsolete the playaround" part, it's a bit odd to combine the two goals for one, and also playaround TASes in general don't feel like something that should be obsoleted. They are, often literally, art.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Blazephlozard wrote:
So, you did verify all these are actually possible at Level 18 speed to build? (Some only with Pausing probably.)
Yes i verified that all these cases are constructible at level 18 speed. Perhaps you can find yet a few new cases, especially in L+1 subgroup. Meanwhile i will start slowly aggregate next lists of valid piece sequences for central hole.
Blazephlozard wrote:
And a R+0 has to go with L+1, and vice versa. I see... Evidently it's extremely convenient for the +1 to be on the final I piece in this hole setup.
True R+0 has to go with L+1, and vice versa. L-1 for very first 3-tetris is also has go with R+0. Indeed a lot of "I"-pieces required for many cases. It is defenitely the most useful piece.
Blazephlozard wrote:
I'll try and get something going some time soon, my life is very odd at the moment...
There are no reasons to hurry. Good TAS required time. Better to spent another month or few at testing and theory than to complete whole thing within week but with unnecessary flaws. Highest quality is main priority.
Blazephlozard wrote:
By the way, I'm not really down with the "obsolete the playaround" part, it's a bit odd to combine the two goals for one, and also playaround TASes in general don't feel like something that should be obsoleted. They are, often literally, art.
Ok, we can do not touch playaround if you don't want to do so. I do not insist. Although i see nothing bad if new more entertainment playaround TAS will obsoleted old playaround TAS. Art can beat art. Many playaround TASes were obsoleted, for example Mortal Kombat II: http://tasvideos.org/702M.html For NES Tetris main benefit of combining both goals instead of doing separate new TAS for playaround is that after completing fastest 999999 we will be much closer to level 29 when speed is increased twice. In any case at first we need to complete fastest 999999 part. Lets discuss playaround after.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
Is there a reason to specifically use the central hole? Aside from wanting the topmost hole close enough to reach at high speed, it's probably best to go for the holes with the most potential piece orders. Of course, we don't know which that is. But it seems like holes that allow I's to do triple-tetrises might be better than only J's and L's.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Good question. For chessboard build is only important to change hole after each knee (1 knee = when growing hole is became 4 lines deep). It is completely insignificant which holes will be used for each knee excluding very first which should be strictly hole#10. Central hole has most balanced right and left sides so i guess it is can have the most potential piece orders as well. But it is just assumtion. I am not sure about it. To answer definitely we need to figured out lists of piece orders for all nine holes. And even better to make tests with different holes and compare average times between tetris for each hole.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Some update: 1)Here lists of valid piece cases sequences for central hole#6: R+1:
I-I-O-J		I-J-Z-T		I-J-T-T
				
J-J-O-J		I-T-Z-J		I-T-T-J
				
I-L-L-J		L-Z-Z-T		L-Z-T-T
				
I-J-S-O		I-L-S-O		I-O-S-J
				
I-J-I-T					
L+0:
Note: It the same list of cases as part of L+1 list for hole#10 where "I" piece was used at the end, only now with "J" at end instead. 
R+0:
I-I-I-I		I-J-S-L		L-L-L-L		I-L-L-O
						
I-I-O-O		I-J-J-O		L-Z-Z-L		I-L-O-J
						
J-J-I-I		I-J-Z-J		I-I-L-L		I-L-S-L
						
J-J-O-O		L-Z-J-I		O-O-L-L		I-L-S-L
						
I-J-J-I		L-Z-T-T		J-J-L-L		I-O-J-J
						
I-T-T-J		I-T-T-L		I-J-Z-L		I-J-T-T
L+1:
Note: It the same list of cases as part of L+1 list for hole#10 where "L" piece was used at the end.
--- 2)While i searched packing sequences for central hole i suddenly discovered one new possible configuration for right side of hole#10. R+1b:
I-J-S-O
Pair to this single R+1b case for hole#10 is list of L+0 cases for central hole#6 (that finished with "J" pieces at end). So my observation that only two tetromino can be used at end for each hole turn out to be incorrect. In reality for some holes particularly for hole#10 is possible to use all three "long" tetromino "I", "L" and "J" to burn 3-tetris! --- 3)I thought about your recent question once again and made some testing that show that central hole is definitely the best, indeed central hole has many cases at both sides while all other holes has limited amout of case for one sides. So hole#6 is supreme choice and should be used as often as possble. Also building Tree#2 (between 4th and 5th knee) turn to important factor. It not handy to use holes#2-5 for first four knee becuse Tree#2 can became obstracle to burning. In other words most optimal game plan for TAS is should to be like this: Tree#1 1st knee - hole#10 2nd knee - hole#6 3rd knee - hole#7-10 4th knee - hole#6 Tree#2 5th knee - hole#6 6th knee - hole#2-5 or 7-10 7th knee - hole#2-5 or 7-10 but not equal with 6th knee hole 8th knee - hole#6 Transition
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
Alright, I did some great work towards the brute forcer today. Put simply, I've been doing testing using a specific sequence from the old TAS, and I was able to successfully output this:
{"I","L","Z","L","L","O","O","Z","T","J"}: 28 ({7,2,0,0,5,3,0,5,4,2})
{"I","L","Z","L","L","O","Z","O","T","J"}: 26 ({7,2,0,0,5,3,3,0,2,4})
{"I","L","Z","L","L","O","Z","T","O","J"}: 25 ({7,2,0,0,5,3,3,1,3,1})
{"I","L","Z","L","L","Z","O","O","T","J"}: 35 ({7,2,0,0,5,2,1,14,3,1})
{"I","L","Z","L","L","Z","O","T","O","J"}: 25 ({7,2,0,0,5,2,1,6,1,1})
{"I","L","Z","L","Z","L","O","T","O","J"}: 26 ({7,2,0,0,0,5,2,8,1,1})
{"L","I","L","L","O","Z","O","Z","T","J"}: 35 ({0,5,1,12,11,2,0,1,2,1})
{"L","I","L","L","O","Z","Z","O","T","J"}: 43 ({0,5,1,12,11,2,1,8,0,3})
{"L","I","L","L","O","Z","Z","T","O","J"}: 38 ({0,5,1,12,11,2,1,0,2,4})
{"L","I","L","L","Z","Z","O","O","T","J"}: 45 ({0,5,1,12,2,11,6,6,1,1})
{"L","I","L","L","Z","Z","O","T","O","J"}: 41 ({0,5,1,12,2,11,6,0,4,0})
{"L","I","L","L","Z","Z","T","O","O","J"}: 59 ({0,5,1,12,2,11,9,1,13,5})
{"L","I","L","Z","L","O","O","Z","T","J"}: 29 ({0,5,1,2,3,7,0,5,4,2})
{"L","I","L","Z","L","O","Z","O","T","J"}: 27 ({0,5,1,2,3,7,3,0,2,4})
{"L","I","L","Z","L","O","Z","T","O","J"}: 26 ({0,5,1,2,3,7,3,1,3,1})
{"L","I","L","Z","L","Z","O","O","T","J"}: 36 ({0,5,1,2,3,6,1,14,3,1})
{"L","I","L","Z","L","Z","O","T","O","J"}: 26 ({0,5,1,2,3,6,1,6,1,1})
{"L","I","Z","L","L","O","O","Z","T","J"}: 27 ({0,5,3,0,5,3,0,5,4,2})
{"L","I","Z","L","L","O","Z","O","T","J"}: 25 ({0,5,3,0,5,3,3,0,2,4})
{"L","I","Z","L","L","O","Z","T","O","J"}: 24 ({0,5,3,0,5,3,3,1,3,1})
{"L","I","Z","L","L","Z","O","O","T","J"}: 34 ({0,5,3,0,5,2,1,14,3,1})
{"L","I","Z","L","L","Z","O","T","O","J"}: 24 ({0,5,3,0,5,2,1,6,1,1})
{"L","I","Z","L","Z","L","O","T","O","J"}: 25 ({0,5,3,0,0,5,2,8,1,1})
{"L","Z","I","Z","L","L","O","O","T","J"}: 36 ({0,0,2,0,2,14,3,11,3,1})
{"L","Z","I","Z","L","L","O","T","O","J"}: 26 ({0,0,2,0,2,14,3,3,1,1})
{"L","Z","I","Z","L","T","L","O","O","J"}: 10 ({0,0,2,0,2,0,1,1,2,2})
I had an upper limit of max 15 frames wait, which is why not every permutation is here. That last piece order, with only 10 frames of delay, is indeed the one used in the old TAS, and the delay numbers seem mostly accurate (the last 2 should be a 1? I'll have to look into that...) (edit: I gave that O a 23 frame count instead of 24. it's perfect now!) So, I have very high hopes for the future. I'm worried there's something more to the RNG than I have, since the old TAS ends up desyncing on today's BizHawk? But we'll see. Right now turning your incredible work into proper data form will be a big timesink. And I'm still unsure if I should try to code a way to do the inputs automatically. It'd probably save time in the long run...
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Great news! Your brute forcer looks really cool and promising. Such tool is exactly what we needed to optimise new TAS! Now to use full potential of BF need somehow to transform "Left" and "Right" sides sequences lists into one complete "United" list for each hole. And then feed that data to BF algorithm. Some troubles to apply BF can be only during building trees#1 and #2 since search space is not so trivial. But this problem is solvable.
Blazephlozard wrote:
And I'm still unsure if I should try to code a way to do the inputs automatically. It'd probably save time in the long run...
To have inputs automatically can be very useful. In this case we be able to apply even deeper optimisation methods. Recurrent multi-tetris optimisation: It would be possible to try minimize average delay for several tetrises by better conjunction between them. For example if for one tetris delay is small 10 frames, but delay for next one is long 37 frames. 10+37=47. We can check second best option 26 delay for first tetris and look what delay for next tetris it can be like 13. So 26+13=39 summay delay is lower = better. And so on for each tetris conjunction. Or even minimize delay for several tetrises D_min(D1+D2+D3+Dn). Well of course we can try to do the same without inputs automatically too, but to do such recurrent multi-tetris optimisation by hands many many times in row be tedious.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
I should have no problems with combining every possible sequence of L0 and R1 lists, and L1 and R0, for each hole, once they're made. Though corner cases might be tricky to deal with. (I'm not sure I fully understand what your one "R+1b" fits into.) And I do not know just how lengthy the process will be when there's that many permutations. But since this method isn't an in-game simulation (isn't bound by advancing frames), I don't think it will take too long. This current one-permutation test takes less than a second.
Archanfel wrote:
To have inputs automatically it can be very useful. In this case we be able to apply even deeper optimisation methods. Recurrent multi-tetris optimisation: It would be possible to try minimize average delay for several tetrises by better conjunction between them. For example if for one tetris delay is small 10 frames, but delay for next one is long 37 frames. 10+37=47. We can check second best option 26 delay for first tetris and look what delay for next tetris it can be like 13. So 26+13=39 summay delay is lower = better. And so on for each tetris conjunction. Or even minimize delay for several tetrises D_min(D1+D2+D3+Dn). Well of course we try to do the same without inputs automatically too, but to do such recurrent multi-tetris optimisation by hands many many times in row be very tedious.
Well, since the piece RNG is generally sequential, I'm not if such a major frame difference will be possible. The only factor that can really change the sequence is if it has to do a reroll, which depends on what the current next piece is. The piece selection is made like this: Step 1. Add the piece total to the top byte of the RNG. Modulo 8 (so a number from 0 to 7). If result equals the current next piece or 7, reroll in step 2. Otherwise, that's the new piece Step 2. Advance RNG once. Add piece total and modulo 8 again. Add the current next piece's ID (this is a bit odd because those IDs are 02, 07, 08, 0A, 0B, 0E, or 12, not 0-6). Modulo 7. That's the new piece So if it has to do the reroll, RNG would advance an extra time besides the once per frame, which could save frames. And also the last piece and first piece of sequences will have an effect on the piece-picking process. (Also note that the game does make you far less likely to get the same piece twice in a row.) Well, we'll see how quickly the whole brute force process ends up being when all the data is there. If it's quick, and I can figure out a way to automatically place a given piece sequence, then sure, we can try to go crazy and try some '2nd place' branching paths. Especially if we run into a terrible '1st place' like 37. The 4-frame-rule on line clear animations, and the fact that the previous sequence has to RNG manip for the first piece of the next sequence (which we don't know at the time), is going to make full automation difficult. I'm trying to think of how to handle these things.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Blazephlozard wrote:
I should have no problems with combining every possible sequence of L0 and R1 lists, and L1 and R0, for each hole, once they're made.
Great. I was worried that it can be problematic.
Blazephlozard wrote:
And I do not know just how lengthy the process will be when there's that many permutations. But since this method isn't an in-game simulation (isn't bound by advancing frames), I don't think it will take too long. This current one-permutation test takes less than a second.
If i counted combinatoric correctly there are possible 9!/(4!*5!)=126 unique completion ways for each pair of Right + Left sides cases. So for example for central hole 13*39*126 + 24*12*126 = 100 170 cases. Probably about over 99.9+% of these cases will be duplicates. I guess after removal of duplicates only few hunderds trully unique cases will left (and even less than it for other holes). Not too big number to became big problem to calculate all permutations. Well, in worst case i can run long simulations at nights :)
Blazephlozard wrote:
I'm not sure I fully understand what your one "R+1b" fits into.
Pair to this odd R+1b single case for hole#10 are these L+0 cases.
Blazephlozard wrote:
Well, since the piece RNG is generally sequential, I'm not if such a major frame difference will be possible.
In old TAS average time for 3-tetris was 277.3 frames. With minimum of 268 frames and maximum of 296 frames. So some fluctuations of bad/good RNG happens even for central hole. Other holes has less available cases so i expect they can have even wider fluctuations. And may be opportunity to use 2nd place or 3rd place branching paths can be useful sometimes. At least it will be worth to try in case if we will meet really bad RNG with too long delays.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
It's a good point that there will be duplicates. I could keep a table of attempted piece sequences, though I'm not sure if the memory overhead to keep that table and check it would be worth it compared to just, doing the sequence again. I'm sure there's many many ways to try to speed up the program if it turns out to be too unruly, but I think it'll be decent enough. I think I should open your input file up finally, and see about getting the "very first 3-tetris" builds in, do input manually for now, and see how the program goes searching for them. Do we want to try to brute force the initial stack building at all? That part seems ok to do by hand but theoretically I could also test a list of usable piece orders for it too.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Blazephlozard wrote:
Do we want to try to brute force the initial stack building at all? That part seems ok to do by hand but theoretically I could also test a list of usable piece orders for it too.
Tree#1 itself is easy enough to do by hands. Only requirements is to have 5 pieces with correct summary height (=15 blocks) and have flat top (at least 3 blocks = L, T, J, or I pieces). Problems starts above tree. Need to fil one extra layer comparing to all other succeeding tetrises (all other 16 blocks height) so there are some additional opportunities. For exampe right branch can be done not only by "I" but also by "J"-"J". Or even more exotic builds if top is 4 flat block. Left branch is special L-1 subgroup. And do not forget about special spins. But main difficulty with first tertris is that need to check many different starting RNG to find best start. If be exact not only first tetris important, but whole first knee (when 3 3-tetrises burned). At this point we be able to properly compare how many frames was saved above old TAS and move forward to the next knee.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)
Blazephlozard
He/Him
Banned User
Joined: 2/27/2013
Posts: 175
Location: Ohio
Hmm, I think I'm a bit confused about the start, at least as far as your "L-1" builds go. If we're filling in 5 lines instead of 4 then, do they all require two additional I pieces in the fifth line? Other than that, after a thorough reread of your strategy, I think I finally get all of it, so that's good. (There is a bit of a language barrier sometimes) Where the old TAS hits Level 19 with 4 Tetrises ready to go and then does them all, you want to only do 1 of those 4 Tetrises, keeping the other 3 as the finale, to save vertical piece travel.
Skilled player (1458)
Joined: 11/26/2011
Posts: 656
Location: RU
Blazephlozard wrote:
Hmm, I think I'm a bit confused about the start, at least as far as your "L-1" builds go. If we're filling in 5 lines instead of 4 then, do they all require two additional I pieces in the fifth line?
Indeed simplest way to fill that extra layer is to use two additional "I"-pieces. For left branch is always "I"-piece at bottom. And special "L-1 subgroup" builds above it (or together with it if I-spin was used). Right branch slightly more complexity. First option for right branch can be also "I"-piece at bottom. In this case above need to build standart "R+0 subgroup" for hole#10 above it. Second option for right branch is to use two "J"-pieces at bottom. In this case above it need to build 3x4 square. (I used this option in my test attempt for first knee.) And at last third option for right branch available only in case if top of Tree has not 3 but 4 flat blocks - is possible to use more exotic builds.
I show you how deep the rabbit hole goes. Current projects: NES: Tetris "fastest 999999" (improvement, with r57shell) Genesis: Adventures of Batman & Robin (with Truncated); Pocahontas; Comix Zone (improvement); Mickey Mania (improvement); RoboCop versus The Terminator (improvement); Gargoyles (with feos)