Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
Thank you!
CoolKirby wrote:
Just a guess, but this sounds like input lag. As in, tap the screen, game takes 2 frames to read the press, then it registers, instead of on the frame you pressed it. This can have many causes including double/triple buffering used by the game's graphics. I'm glad you found a scripty way to get around it, and I might adapt yours to do something similar in a DS/3DS game I want to make.
You raise an interesting point which I'm inclined to agree with: in minigame 14 I was able to get a touch input in on the last "red frame" in TAStudio between the first and second screen. And there were also a handful of instances like that in the TAS of the prequel, although I didn't know such a thing was possible until you brought it up. So thanks for that!
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
I just used the output logger for the first time in order to display some coordinates in TAStudio, and I just wanted to leave an appreciation post to say that I think this is a fantastic tool and that it worked like a charm. Keep it up! :)
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
Of course I'm biased because I'm one of the people in the reveal/commentary video, but as Sands of Time was my main speedgame for many years I still have to stress what an outstanding effort this TAS is. Any% Zipless is the most fun and well-respected, but also the most challenging category for RTA runs. Over the years, many incredibly difficult skips have been found, making for a very high skill ceiling. This was also the reason why back in 2018 the community created the segmented run GMP mentioned in the submission notes, and seeing that come together was already truly gratifying. Still, there were still more than enough tricks which were not even viable for segmented, partially because they're frame perfect (in a 60 FPS game) or it is unknown how to replicate them, and partially because the length of some of the segments allowed to pack only so much difficulty into them.
As such, seeing everything we currently know come together with all this (RTA) impossible movement, these impossible tricks, and an overall great level of optimization was everything the Prince of Persia community had hoped for ever since GMP announced that he's working on this, shortly after he finished the NMG TAS. The only drawback—which is not the fault of GMP or this TAS, but rather is due to the ever-lasting difficulty of TASing PC games—is that the Gamecube version of this game differs from the PC version (which RTA runs are done on exclusively) in that some of the coolest skips become impossible due to collision and other differences, as also detailed in the submission notes. That being said, because RTA this game is run exclusively on the PC version many of these version differences were not known and at most suspected, and at least to me, closing these gaps in our knowledge just highlights GMP's efforts even more.
Overall, despite the possible improvements GMP detailed at the end of the submission notes (which I certainly second) this is a truly phenomenal showcase of Sands of Time Any% Zipless, and I'm incredibly happy to see it finally realized!
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
Temp encode (plays back with FCEUX 2.6.6, as indicated by the author):
Link to video
RTA time is 3:11.541, so this beats the RTA record by 2 seconds, as well as the sum of best shown in said video by a bit over 1 second
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
The 2008 NDS game Emma at the Farm features rather simplistic gameplay, which makes sense given that it's clearly aimed at young children. To beat the game and get to the credits you have to play through 16 farming-themed minigames (and skip a lot of dialogue).
Footnote: while there is a PC version of this game—which I even played back in 2013—that one seems to be German-exclusive.
This is one of the games on my to-TAS list because this is one of the few non-PC games I ever ran (although I last did so over 10 years ago). Because I didn't want the next game I'll TAS to get out of hand in terms of preparation and research (coughMax Paynecough) I decided to give this game a shot; here's v1 of the TAS so I have a baseline to compare against:
Link to video and bk2 fileGame version & language comparison
As far as I can tell there are three different ROMs; two EU versions and one US version:
The US ROM features the languages English, French, and Spanish:
Emma at the Farm (USA) (En,Fr,Es)
SHA1:468FB4690372AA49918C59C59A8AB14CB4C17975
MD5:8C1D268D66DA8B0AF917FB042BBC875E
One EU ROM features the languages English, French, German, Italian, Spanish, Portuguese, and Dutch:
Emma at the Farm (Europe) (En,Fr,De,Es,It,Nl,Pt)
SHA1:9B4CCF98D4CE439C6C5C6CAB8F1A2A38F64CFA5A
MD5:852BB00B96C1D2780AD19C02D52D5704
And the other EU ROM features the languages English, German, Danish, Swedish, Finnish, and Norwegian:
Emma at the Farm (Europe) (En,De,Sv,No,Da,Fi)
SHA1:6CEC318FFB82B445CA20332763AE243480715BD7
MD5:B004B5BA9B1B9874BD61C5D79CB9A0C9
Given that the majority of the run is spent skipping dialogues the first thing I tested was which languages are fastest, resp. have the least dialogue. While for this site, regional differences such as text and cutscene length are completely discounted when considering improvements this (a) was still valuable information for RTA runs, and (b) because I got all of this information by TASing each language individually I learned a lot about how the game works. For example, almost every minigame can be copy-pasted from one language to another without de-syncing. Also I ended up finding a variable memory address that changes always 2 frames after a dialogue can be skipped (likely related to the green skip button appearing) which allowed me to write a simple Lua script which insert these dialogue-skip-inputs automatically.
I summarized the results of this investigation over on the speedrun.com leaderboard (backup)—which is itself based on this spreadsheet—but the tl;dr of that is that the dialogue in Norwegian is fastest, followed by Danish (+1.9s) and English (+6.0s). The slowest languages for dialogue are French (+31.0s) and Portuguese (+33.4s).
Also, for the languages that overlap between different ROMs there seems to be no difference in gameplay (e.g., I did not observe any gameplay/TAS differences between the EU ROM in English and the US ROM in English). So given that English is only a few seconds slower & because the majority of this game is text, I'll probably end up TASing the same version again as in v1 (i.e., English for entertainment reasons).
Notable minigames
While some of the minigames are trivial to optimize, this is certainly not true for all of them. Here are the minigames where I see the most optimization potential for v2:
Minigame 1: Egg search: The main activity here is to use the touchscreen to clear some hay so you can find the egg hidden underneath. The obvious thing to optimize here is to minimize the time/touch inputs to uncover the egg. However, in v1 I encountered something strange: the third egg was already uncovered, that is, I did not have to clear and hay & was just able to pick it up. I have never seen this in any RTA run before, and I was also not able to make this happen for any of the other eggs. So this is on my to-do list
Minigame 2: Catch the eggs: Maybe you can manipulate RNG here to make the eggs appear on screen faster? I did manage to change where the eggs appear, but I haven't yet tried any targeted manipulation
Minigame 7: Milk the cow: There are two variables here: which of the two teats to milk, and how long to move the stylus each time. Or maybe it's fastest to alternate between the left and the right one? To be investigated
Minigame 10: Catch the piglets: Here you have to catch three piglets by tapping them and following their movement. What I already know is that go from bottom to top (because the bottom pig takes longest to get to the trough). However, I did observe that different inputs (or maybe different times when to let go?) did change the piglets' trajectories. So I'll have to figure out what movements gets the bottom piglet to the trough the fastest
Minigame 13: Water the plants: From my testing the game's logic here is quite rigid, i.e., it seems that you cannot turn the tap off early & that you cannot even skip the "You have already watered there" message (which comes with a ~1s forced wait time). Maybe I'll find something if I play around with this more
Other to-dos
Aside from seeing how much I can optimize the minigames, after I finished v1 I noticed an NDS/melonDS setting "Stylus interpolation" which is turned on by default. It seems to me that this game rarely needs this interpolation, which is why I think that turning it off for v2 should save a couple of frames in total.
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
Dimon12321 wrote:
I've been following your WIPs from the very beginning, and I'm happy you overcame that locked door issue on Level 2. When the annual voting campaign starts, I'll certainly nominate this TAS in GBA category. Not just because of the result, but because of the effort put into making it.
Yes vote
Oh, that’s very kind, much appreciated! I'm glad you enjoyed the final result, even more so given your continuous involvement and feedback in the game's subforum :)
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
Before I forget, I finally got around to finalizing the submission comments and thus to submitting my TAS. I won't go into detail regarding levels 11 and 12 here, all I'll mention is that I managed to save a whopping 1235 frames combined (826 in level 11 from being able to use the Dual Ingram all the way, and 409 in level 12 from grenade animation cancelling); for the detailed submission comments refer to the bottom of the submissions page. In any case I'm glad this project is finally done; thanks again to everybody who was part of this journey in any way, shape, or form!
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
RetroEdit wrote:
When watching Level 10 - Room M11, I sort of wondered if taking out the enemies in the first pass would have been faster for lag reduction, but I guess your weapons probably don't have enough range for that to be efficient.
Thanks for verifying the sync so quickly! And yeah you're right, killing the enemies in the 10/M11-first pass would mean I'd have to go down to the second pillar from the bottom for the shots to land, and then all the way back up again to go to the room where the exit key is. Not a bad idea though!
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
Link to video
Level 9 done, 94 frames saved. With the exception of four quick fights, this level is mostly a walking simulator; the upside of this is that it allowed me make extensive use of AdvancedBot here, while the "downside" is that it was clear from the beginning that I'd save less time here than in the previous levels (also because this level is not affected by the new weapon route in any way). As such, the list of notable rooms is shorter than in my previous posts.
Room M2 (4s video time): 35 frames saved because I don't have to switch weapons here (I was able to do that at the end of the last level "for free" when I had to wait for the elevator)
Room M3 (8s video time): 21 frames saved from optimizing the fight
Room M11 (1m23s video time): In v1 I needed one painkiller in this room to damage boost through the mines. And while there are three viable painkillers to get in this level, they all require some enemy manipulation (and thus timeloss, if just a few frames)—so when I got to this room I was curious how much this damage boost even saves. And it turns out that strat... is slower. Shooting the mine normally and exiting after it explodes save 13 frames (bonus points for it not requiring a painkiller either). The reason I didn't test this back in v1 is that the damage boost is the RTA strat because it is safer/more consistent. And only here in v2 did the thought "wait, how much does this even save?" occur to me lol
Edit: Instead of making a new post for level 10, seeing how the two levels are quite similar in terms of what changed, I decided to merge them into one post
Link to video
In total I saved 44 frames here: 79 frames of pure timesave minus 35 frames of timeloss from having to underflow at the end so the ammo route for levels 11 and 12 works out. Details:
Room M1 (start): Through small changes like delaying the turn at the start, or manipulating the second enemy into missing me, I gradually got the timesave up to 26 frames. Through similar delays I also saved 21f in room M2
Room A1 (42s video time): I have to delay killing the second enemy because I cannot pick up the Ingram ammo he drops. Coincidentally, this seems to be faster; overall I saved 12f in this room
Room M11 (54s video time): Without the underflow, the fastest I was able to finish this room was 1f faster than in v1 (interestingly, the room inputs from v1—adjusted for lag—are 2f slower than what I got here). However, underflowing cost me 35 frames in this room (but doing so is necessary & will save me a lot of time at the end of level 11 because in v1 I ran out of Ingram ammo there)
Also you may have noticed that I shot a handful of times right before exiting a room. The reason for this is also the underflow: because the elevator wait time at the end of level 8 was too short I have to waste an additional 6 Dual Ingram shots (12 ammo) in this level for the underflow to work out. This is best done on a room exit (because letting go of the shoot button sets your speed to 0) where it loses only ~1f each, so the ammo waste in this level cost me another 6f
Experienced Forum User, Published Author, Player
(149)
Location: 🇪🇺 Europe
Joined: 6/27/2017
Posts: 54
Location: 🇪🇺 Europe
Link to video
Another day, another level where I managed to save 327 frames. Now this one is a bit of a special case because half of that timesave comes from just one room: In v1 of the TAS I had to pick up an extra Ingram in Room C2 which lost 163 frames as it is one of the slowest Ingrams to get; and this time around I already have all the Ingrams I need so I can just exit right away. Now for the other notable timesaves in this level:
Room M1 (10s video time): Right at the beginning I saved 14 frames by cancelling the forced weapon animation (indicated by the 1 frame of weapon menu appearing on screen; blink and you'll miss it!)
Room M12 (49s video time): More timesave by omission. In v1 I had to break a box in this room and grab an extra painkiller for the upcoming damage boost, but it turns out that if you plan ahead you don't have to take such detours, resulting in 39 saved frames.
Room M20 (1m32s video time): 38 saved frames from finding a way to exit the room without having to kill the bottom enemy. Thanks, AdvancedBot!
Room M23, second half (1m49s video time): Overall I save 20 frames in this room, but this timesave has two aspects to it:
I saved 36 frames from optimizing the room exit. The condition for the fade-out to happen is kind of weird; it seems to be related to be in a moving state while being close enough to the exit. So what I do is move in parallel to the door for the briefest time while shooting the last enemy, which leads to the aforementioned timesave. I did test a number of paths but many of them ended on frame 38855 and I couldn't get below that, so I took the liberty to conclude that this is how far this particular mechanic can be optimized
As a result of the whole weapon route I have to waste 54 Ingram ammo between level 7 and level 10, else I cannot underflow the Ingram at the end of level 10 & the ammo for level 11 does not work out (and there is no viable way around this constraint). Anyway, right here is the one spot where (a) I have the Dual Ingram out, (b) my inputs aren't locked, and (c) I have to wait for an event: the time between calling the elevator and the door opening & the two enemies spawning. While the time is just slightly too short—it allows me to waste only 44 ammo instead of 54—this is still very worth it as all these shots lost only 16 frames (as opposed to other spots where this loses ~40-50f). Overall this makes the double-underflow route ~2-3s faster than if I had picked up all the Ingram ammo I need along the way
One strat I tried to implement but which I didn't get to work is the door clip in rooms M19 and M20. I theorized about those in my posts about door clipping (1, 2). These two clips would save ~11 and ~5 seconds, respectively, but they were less likely to be possible for multiple reasons. First, unlike in level 2 there is less manipulation potential here as there are no boxes right before the room where the clips happen. Second, and more importantly, the door clip in M19 needs the uninitialized byte in the box section of RAM to have a value of 0x02 (instead of 0x01, like in level 2) which is just less likely statistically (compared to the more likely bool values 0 and 1). All this is to say, while these door clips are theoretically possible, practically I could not get them to work because testing them is a lot more difficult than in level 2 (which itself is already hard to get to work, but the testing space here is much much larger. And it also doesn't help that the uninitialized byte jumps around in memory so targeted manipulation is impossible either way. Hence all I can do is test random things and hope they work which, for these two clips, they unfortunately didn't...)