I did this run on a Powerpak (my previous speedruns were done on the original cartridge though, but I have since sold my copy of it). In case it matters for future reference, I used a ROM with checksum 731b764f201e31c5b250c67acf835fb3.
24-Nov-2017 - 0:26:35 by ktwo (http://archive.org/download/2018-02-19-SDA_Speed_Runs/
For information about speedrunning Ikari Warriors and to get a better understanding of what's going on in this run, go to the guide in the SDA knowledge base (referred to as sdakb in my comments below):
I thought that my previous submission in this category would be the last contribution in this game from my side. The previous run was very improvable, but without anything really major that stood out in my eyes, so I felt it was decent enough and a good demonstration of the route.
Fast forward to the following year (2018). I decided to give Ikari Warriors a try in the Best of NES marathon in October that year. How well that went is debatable (but I did at least, eventually, reach the end).
Although I tried to follow an as safe route as possible for the marathon, I found first one and then a second improvement to my speedrun route during the preparations. The first one was something that had bugged me for a long time. I got a better understanding of the flying glitch mechanics, which allowed me to avoid some unnecessary movements in the helicopter for a save of ~20 frames. Not a lot, but it was annoying to see my previous run include such an oversight. The second improvement came in the section before the helicopter in area 4. It was worth a full second and looked much smoother overall. This was the tipping point and after the marathon I therefore started to work on lowering the time. A realistic goal time at that point was around 26:30.
Things were looking fairly good at the beginning. I found a few small time savers here and there and I had a good amount of attempts going into area 3 and eventually also area 4. A little before the Christmas break, it finally led to an attempt that was on pace for a 26:25. It ended literally a couple of seconds before the helicopter in area 4 (at which point the run is essentially in the bag) by an incredibly unfortunate blue soldier spawn. I did finish out the run for a time of 26:31 though, but felt pretty discouraged despite getting a new pb. 26:25 seemed like good goal time with the route I had back then and I would most likely have stopped there if I hadn't taken the unintentional death.
The remedy that works best for me in those situations is to go back to the drawing table and find new time savers. Every new finding cheers me up until the lost attempt is all but forgotten and I'm actually happy that I didn't finish it without all the new findings. I didn't come up with any major things, but I did continue to find one small time saver after the other and also added a few riskier strats used in the TAS for some additional saves. While this focused effort on improving the route paid off by making the 26:31 run look more and more obsolete, the success rate during attempts took a bad turn from the added risk and having to tweak the new strats to come up with the most consistent methods in attempts. Strats derived from a save state in this game don't always turn out well in actual attempts, where the RNG can be very different from the save state you practiced on.
Eventually, by just keeping at it, things started to look brighter again and I was suddenly reaching area 3 every once in a while. A few more close calls that ended in unfortunate ways, followed by more route tweaks and then I finally achieved a 26:25. While I felt there weren't any too major mistakes in that run, I also knew that I had been on pace for around 26:20 before. With attempts going well and even more tiny time savers trickling in at a regular pace, I decided to keep at it.
One and a half weeks later, I had another good attempt going that I believe was on pace for a 26:17 or 18. Again, an unfortunate event ended it right before the helicopter in area 4. I think it goes without saying that it felt like an uphill battle at that point... The next day started excellently though and I found a great new line through the water section of area 4 for half a second saved. Nice! Forget about yesterday's attempts and try again! The first and only attempt on that day is what became this submission.
Well, that was maybe a bit long-winded about how this run came to be, but hopefully there are people out there who enjoy reading some of the background story to how a speedrun like this evolved.
In this section, I'll go into some detail about what has changed since my previous submission (the 26:35 run) and comment on some noteworthy things. Probably in too much detail for most readers, but I'm interested in this overview myself, so I might just as well share it. If something in my comments appear to lack an explanation, chances are that it's described in the sdakb guide linked above.
* There is a global timer that starts as soon as the start screen shows (the one where you select 1 or 2 players). This timer runs in a predictable way and is the only input for the starting x-position of the airstrikes and the position of the stairs to area 4. In total, there are 12 events in the run that depend on this timer, which makes it difficult to find the ideal start value. I chose to start the game as soon as possible to start the game with a low value. This starting position seems to overall give good patterns, but there is likely some optimization potential left here (the cycle is ~17 secs). This new knowledge didn't necessarily save any time compared to the previous run, but decreased the risk of getting hit by an airstrike. More information about this timer is found in the sdakb.
* In the new run, I tried to divide diagonal movements into as many segments as my thumb and controller allowed. This is easily visible from the stuttering effect seen in many places. The first and last frames of diagonal movement are geometrically more efficient than the standard diagonal movement. Very roughly, you save 1/100 sec every time you add an extra segment to a diagonal movement. I haven't counted how many times I do this in a run, but I'm guessing that I have divided up the diagonal movements into 200 additional segments, give or take, so probably a time gain of 2 secs or so over the course of the run. More information about this mechanic and movement speeds are found in the sdakb.
* There is a bit of RNG with the L and S pink guys near the beginning. With good RNG, they will slightly home in towards you and thereby require less diagonal movement when collecting the drops. I didn't get any such movement in this run. That's by far the most common case, but also the worst. I think you can maybe save 0.2-0.3 secs by optimal RNG (very rare though).
* Throughout the run, you'll see me make brief pauses in seemingly random places. This is to release some pressure on the thumb from pressing too long on the d-pad and are pure time losses. Unfortunately, they are unavoidable for me. When possible, i do try to plan pauses to minimize the time impact though. It can for example be by holding out until the game anyways forces me to pause or to use a direction change for relief. This hasn't changed from my previous run though.
* I got an additional blue gun soldier in the water section that forced me to make a small detour in the tank. I've seen this countless of times, but it's still a low probability event. Looking at my splits, I must have lost a few tenths of a second from this additional manoeuver.
* I finally figured out more about what happens during the flying glitch. This resulted in that I could avoid a bit of diagonal flying that I did for my previous run. Time save 20 frames. The sdakb contains more information about the flying glitch. * Overall, 0.9 secs saved. It could quite easily have been a few tenths of a sec more though (my average was probably 0.3-0.4 secs faster), if it hadn't been for the unfortunate spawn in the water section.
* At 7:37, I tossed a grenade and started firing the gun. This section can sometimes have blue gun soldiers that pose a threat. Even though it's not directly a time save, trying to take out enemies here has been a good way to increase the success rate during attempts. Also, in my previous run I got somewhat distracted by bad spawns and ended up wasting 2 secs (the same pattern would probably have been taken care of with the new grenade toss and firing).
* If an airstrike doesn't hit its target plate before it's scrolled off-screen, the airstrike will go haywire and likely become a major threat (more info on this in ths sdakb). This can be mitigated by briefly pausing to allow the target plate to stay on screen for a little longer. This is the reason for the pause at the first airstrike. The later I arrive here, the worse the initial position of the airstrike. With the newly acquired knowledge about how the global timer impacts the airstrikes, I can nromally get through here without stopping, but the minor time losses in area 1 most likely made me arrive here a little late.
* Change of route at 8:38. Instead of taking a small detour to the left to collect the knife, I took the center route, which is faster. This route is used in the TAS, so not a new discovery, but definitely one of the major new improvements compared to the previous run, around 1.5 secs.
* New route at 10:11. Taking the left route over the bridge instead of going to the right saved half a second.
* Tiny, tiny change at 11:22. The new route doesn't save time, but seems to provide better consistency. Blue gun soldiers can sometimes appear from the right and are likely to be better taken care of with the new route.
* Another very small tweak, at 11:42. It's slightly better to perform diagonal movement on land than in the water, so I walked straight ahead to reach land. This still seems to have been equally fast or maybe even 0.1 secs slower than my previous run. I don't have an explanation for that, but it's too minor for me to study now after the fact.
* Half a second saved at 12:07 by not wasting time shooting the stationary machine gun soldier. This type of soldier always fires in a predictable pattern.
* At 12:19, I got unlucky with a spawn in the center and had to wait for the wall explosion to take it out. Ideally, you want to get no enemies or only enemies on the right side, which can be disposed of by the grenade as you approach without time loss. It seems to basically be a coin toss whether or not there are soldiers in the center though. I lost one second compared to the previous run and this was easily the single biggest time loss in the run.
* Minor change at 12:52. By entering the water from the center, i got to walk a bit more on land. The new method is 0.2 secs faster. Although the sample size might be too small to say anything with certainty about the consistency, I have the feeling that the new method is safer. It does take care of some blue soldiers that I previously had trouble with from time to time and I haven't encountered any downsides with it yet.
* 0.2 secs saved at 13:17 by not tossing a grenade at the tank. You still need to make a pause though, or the tank will fire the second shell horizontally, forcing you to wait longer.
* Area 2 was overall 4.8 secs faster than my previous run, but still pretty improvable as I've had quite a few attempts on a better pace at this point.
* Minor tweak to take out the green tanks at 14:18 without stopping. A tenth of a second saved.
* The section with the hero enemies (with the same sprite as the player) is one of the more critical in area 3. There are many possible enemy patterns that are in practice unavoidable. Any pattern that allows you to get through alive is good, but I still had to include a minor dodge to the left for a minor time loss (0.1 sec).
* I walked around the explosion around 14:48, instead of walking straight ahead and waiting for the explosion to disappear. 0.3 secs saved.
* Very unfortunate with the rocket soldier firing at 15:14, which forced me to dodge. Even though the time loss is very minor (0.2 secs), it's a very uncommon event and therefore feels a bit unnecessary.
* 0.4 secs saved from a more direct route without stopping around the rail turret at 16:09. Could have been a little more by avoiding walking into the wall on the right, but it's risky to pass closer to the explosion so I usually run all the way to the wall.
* The section behind the grids at around 16:34 is always stressful. There are so many possible variations to the enemy patterns that I haven't found a consistent way through. I just follow my route, hope for the best and accept that a fair amount of attempts will end here no matter what. I did make some small changes to route, but I'm honestly not sure if it made any difference for the consistency.
* I found a pretty cool-looking new path through the barrel section around 16:57. Instead of going around on the left side and waiting for explosions, I press on along the center path, dodging machine gun fire for a time save of 1.3 secs. The bullet patterns from the barrel enemies are predictable, so the new method is consistent.
* Around one second saved in the boss fight by starting to throw grenades earlier.
* The location of the stairs is technically predictable. It only depends on the global timer that starts on the start screen. So if you always press start on the start screen at roughly the same time, know what pace you're on before reaching the boss and are consistent enough when fighting the boss, you'll get a good idea of where the stairs will be. A problem is that the locations cycle through around every two seconds, so there is not that much margin of error and the time loss of a wrong prediction can be pretty costly. I found out about this not long before this run, so I didn't get the chance to apply and optimize it much in actual attempts. I got the 3rd best position (out of eight), which is around what I was aiming for in terms of when to start the game and target pace. The most favorable position is of course for the stairs to be as far right as possible, which would have saved 0.7-0.8 secs. More information about the stairs can be found in the sdakb guide.
* 7 seconds saved in area 3 compared with my previous submission. There were no particular execution mistakes, even though time could of course still be saved by tighter cornering etc. A little over a second more could have been saved with perfect RNG though, but I'm still satisfied with the result.
* Throughout area 4, I tossed more grenades and fired more than in my previous submission. I won't comment on all of these cases, but they have been included in the route to take out potential blue soldier spawns that can become a threat.
* The execution at the start of area 4 was rough in my previous submission, but I managed to correct it in the new run.
* I changed up the route a bit around 20:52. The new route is safer because it eliminates the risk of getting hit by the rail turret and also puts you in a better position in case of a blue gun soldier spawning behind the turret. When I tested it, it was more or less equally fast with the previous route, but I still lost 0.3 secs compared to the previous run. It looks like I could have pressed a bit closer to the exploding turret without risking too much.
* I was quite conservative around 21:14. It's in my opinion the most risky section of area 4, so I'm ok with trading a little time for safety though.
* By veering a bit to the right at 22:10, I got out of range for the remaining enemies in the water section and could just proceed in a straight line instead of adding diagonal movement to toss grenades at enemies. 0.2 secs saved, but also set me up for the next point.
* Shooting the barrel at 22:24 requires a very precise x-position. However, with the route described in the point above, you're guaranteed to get the correct position. In the previous run, I had to use a grenade for this barrel and then wait for the explosion to disappear, which was 0.6 secs slower.
* At 22:38, I continued straight ahead instead of moving left to take out the rail turret. The new route saves one second, but generally also puts you in a more difficult position when approaching the helicopter. In this attempt, I lost back a few tenths of a second by having to wait for missiles from the second rail turret. There is quite a bit of RNG in how the turrets spawn and some patterns allow you to pass the last section without stopping, while others force you to stop.
* I initiated the flying glitch earlier in this run. Thanks to understanding how the teleportation works when leaving the glitch, I saved 1.4 secs by getting a better teleportation jump at 26:14. More information about this can be found in the sdakb.
* I saved 2.8 secs on the boss fight thanks to two new technciques. The first one has to do with the boss damage. The boss takes 10 hits to kill, but one or more of the grenades frequently doesn't register as a hit. I'm not sure why this is, but I did find out that the y-position from where you toss grenades seems to have an influence. While there is some variation to this, I did find a range that has always produced 10 grenade kills for me. Fortunately, it worked this time as well and avoided the additional grenade tosses I had in my previous run. The second new technique was to extend the invincibility period until the end by standing within the explosion radius of the boss's projectiles. This allowed me to walk into the final explosion of the boss and grab the golden heart earlier than in my previous run.
* 6.4 secs saved over the previous run in area 4. The execution was fine in my eyes, even though I did play it safe in a few risky sections. The RNG usually doesn't impact the time in this level too much. Bad RNG tends to lead to a reset. I did lose a few tenths of a second to an unoptimal rail turret pattern right before the helicopter though. Overall, still a good level by my standards.
When I finally decided to improve my old run, I was hoping for a relatively painless process. It did however take a lot longer than I had anticipated. As I found new time savers, my intermediate pbs always looked more and more unoptimized. This sucked me in maybe more than I had first wanted, but I couldn't really let go either and settle with what I had. Seeing how things came together in the final run (both in terms of execution and route) and the final time, I'm now very happy that I kept at it, even though there were some ups and downs along the way.
This run can be improved by a few seconds with the current route, but there are also some riskier strats that might be worth trying out if someone would like to push the time lower. Most notably, there are three rail turrets along the route that can be run past instead of destroying them and having to wait for the explosion (2 in area 3 and one in area 4). The potential time gain is around one second per turret. I did investigate this possibility, but the problem is that their firing pattern dpesn't seem to be determined by local timers (= when they are loaded in memory), which makes it hard to come up with consistent strats for how to run past them. More knowledge in how the turrets work might open up for ideas on increasing the success rate though.