Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
New category wrong warps from a game over in MG1 to MH1, but it requires some setup.
Link to videoSummary from Eandis:
drown on score tally for act 1 in act 2 glitch is a reference to
Link to video
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
Temporary encode:
Link to video
For reference, the RTA WR is 1:11:15 currently. My favorite level was 59 because it was so clean. Easy yes vote!
+1 for hearing the special fanfare
Edit: Replaced video with encode of User movie #637798894512418864
Edit edit: Replaced video with encode of User movie #637806096666496015
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
Great work! I've been looking forward to this since [2818] N64 Paper Mario by Malleoz in 1:30:40.15.
Would you consider posting the Twitch VOD to YouTube? From my limited perspective, it had good commentary. The submission seems to cover everything else, just in case.
Suggested screenshots: 1, 2
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
It's great to see an improvement to this category! Now for the important question: Does this movie minimize the number of A presses necessary to complete the game?
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
Warepire wrote:
You will need to do some sort of API replacement to achieve the necessary determinism required to do input replay etc across systems.
That is recreating a lot of things that linux containers have already achieved. Being more strict, requiring the TASer to simplify his own environment or play a game in a lxc may not be nice, but it simplifies the process of recreating Hourglass for Linux. Hourglass for Windows accepts most executables and fails 95% of the time.
Warepire wrote:
Thirdly ... how did you end up requiring sudo? gdb doesn't and it can do the same things.
Running everything in userspace might take awhile because you start using tricks like "LD_PRELOAD" before you hit any dead ends. If he starts top-down, using linux containers, he can keep requiring sudo without exposing his system.
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
YamiAmarillo wrote:
feos wrote:
What does the difficulty level affect other than amount of Puppy Love rounds?
Easy gives you 3 rounds, normal is 4, and difficult is 5. Btw, any chance you could send me the Lua file you have for puppy love? I want to mess around with it.
I was debating using a Rom hack a friend made that gets rid of all the puppy loves, but I didn't know if that is allowed
Difficulty level also affects how fast Psy-Crow runs in the final stage. In the hardest difficulty, he runs faster than you.
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
Great job, this blows other TASing attempts I've seen out of the water. Your RNG manipulation managed to make even Puppy Love watchable, EWJ2 speedruns never show the player getting mauled by the mother... multiple times.
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
A major frustration I have come across while TASing this game has been the 2-frame delay between inputs and display. I have made a set of scripts that removes this delay. Use them
https://gitgud.io/scahfy/Tetris_DS_Visualizer/tree/0.1.1
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
I will be interested to see how this plays out. For the first time, it might make sense to use console verifications as the primary publication videos, when possible. Console verification videos are generally camera footage of the whole playback setup, including the bot and the TV, to emphasize the process for the viewer's benefit. As a legal response, though, nothing but the game footage should be necessary.
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
I am unable to watch addresses using the GDB stub in 0366 - Tetris DS (U).nds. When the watch is supposed to break execution, I instead get the following message in GDB:
Can't send signals to this remote system. SIGABRT not sent.
I can write a small GDB script that imitates watching and breaks when certain conditions are met, but that option runs very slowly. I am using arm-none-eabi-gdb on Arch Linux and running Desmume 0.9.11 in Wine.
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
jlun2 wrote:
How exactly does this game's RNG work? Time/input/frame?
The initial RNG value comes directly from the system time.
The original algorithm that generates the first RNG value is too long to paste for how simple it is so I'll just say that the last word (at 0x207F3EC) is always 0x00000000, and the first word is the system time at frame 222, calculated from the replay file's rtcStartNew parameter as follows: 0x00000003 + 0x01000000 * year + 0x00100000 * month + 0x00008000 * day + 0x00000e10 * hour + 0x00000036 * minute + 0x00000001 * second. Year ranges from 0-99, month ranges from 1-12, day ranges from 1-31, hour ranges from 0-23, minute ranges from 0-59, and second ranges from 0-59. The offset 0x00000003 comes from the fact that frame 222 is about 3 seconds in. For example, May 25 2012 at 00:00:00 becomes 0x00000003 + 0x01000000 * 12 + 0x00100000 * 5 + 0x8000 * 25 + 0x00000e10 * 0 + 0x00000036 * 0 + 0x00000001 * 0 = 0x0c5c8003.
The RNG cycles once at frame 222 (Desmume 0.9.11), 30 times for each bag sequence that is generated, and one extra time between the first and second bags of the game.
Starting with the sequence {0, 1, 2, 3, 4, 5, 6}, each bag is generated by swapping bag elements a total of 15 times (once for every two RNG cycles). At 0x02028894, the first index is stored in r7 and the second is stored in r0.
Language: asm
0x02027280: 94 20 81 10 umullne r2, r1, r4, r0 ; where r0 = 7 and r4 is the first word of most recent calculation of the RNG
;... for the first RNG cycle, r1 -> r7
;... for the first RNG cycle, r1 -> r0
0x02028894: 07 30 86 e0 add r3, r6, r7 ; r6 points to the next bag of pieces
0x02028898: 00 10 86 e0 add r1, r6, r0
0x0202889c: 01 50 85 e2 add r5, r5, #1
0x020288a0: 04 20 d3 e5 ldrb r2, [r3, #4]
0x020288a4: 04 00 d1 e5 ldrb r0, [r1, #4]
0x020288a8: 0f 00 55 e3 cmp r5, #15
0x020288ac: 04 00 c3 e5 strb r0, [r3, #4]
0x020288b0: 04 20 c1 e5 strb r2, [r1, #4]
After rewriting the RNG algorithm in C and brute-forcing all system times, I can say that changing the movie's "rtcStartNew" date to May 25, 2012 makes veup's movies sync in Desmume 0.9.8. That is the only startup system time that produces the correct RNG.
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin
Experienced Forum User, Published Author, Player
(56)
Joined: 11/28/2013
Posts: 119
Okay, good news and bad news. The bad news is that the RNG is an 8-byte value (ranging from 0x0207F3E8 to 0x0207F3EF) and I have no intention of brute-forcing it. The good news is that I wrote a Lua script that injects the correct piece sequence in the memory so veup's 200-line run can sync.
The script can be found here. If you use Desmume v0.9.8, you can use veup's original movie file. I have also uploaded a version of his movie optimized for 0.9.11.
Projects:
Tetris DS
Genesis Toys: Let the Toy Wars Begin