Introduction

The Golden Warpship is the most powerful spacecraft in the "good side's" fleet. But aliens have abducted the spaceship and scattered its parts on 12 planets throughout the galaxy.
It's now Solar Jetman's task to recover the parts and then confront the evil alien mastermind behind this plot. On each planet, the task consists of first finding enough fuel cells for the mothership to ensure a safe trip to the next planet with a golden warpship part. Fuel cells are found by exploring the often huge planet interiors and are then either directly brought back to the mothership, or teleported back to the mothership by delivering fuel cells to "small wormholes".
Once enough fuel cells have been collected, the aliens graciously open up the access to the secret room on the planet containing the golden warpship part (referred to as "large wormhole" in the game). Rinse and repeat until the warpship has been fully assembled.
An alternative way of making progress is to use hidden warps to skip planets ahead. It requires some imagination to understand how the warpship can be assembled without the parts from the planets that were skipped. The acute observer might also wonder how the bonus planet 13 fits into this equation. The game however does not concern itself with such insignificant details and simply hands the player any parts from planets that were skipped (and conveniently places one of the parts on planet 13).
Once assembled, it's time for an autoscroller (with absolutely dreadful controls), at the end of which the boss fight awaits. Apparently, the aliens took such a beating as to never recover. This game didn't get any sequels.

Objectives

  • Aims for shortest movie (no time-entertainment trade-offs)
  • Heavy luck manipulation
  • Uses warps

Story

Already when [2533] NES Solar Jetman: Hunt for the Golden Warpship by FatRatKnight in 16:16.64 was made, it was known that despawning the top eye of the final boss was possible to do during the autoscroller (see the original discussion). However, the game mechanics for this are complex and no method was developed for triggering this event. Because of the difficulties reproducing this glitch, the previous TAS was submitted and published without including it. Since a TAS makes short work of the final boss, the time saved from despawning the top eye is relatively small. It was still a fairly glaring omission and it was nagging in the back of the head of at least one person on this earth.
About 5 years after the previous TAS was published (so in 2019), ‘ktwo' accidentally got a second warp to appear in planet 1 during console attempts. The regular and intended warp on planet 1 leads to planet 7, but this second warp turned out to lead to planet 8. The "double-warp" was reproduced a handful of times and even recorded on emu and shared in the forum thread. The discussion that ensued did not completely conclude on what was going on, but it was obvious that warping from planet 1 to 8 would save several minutes over the published TAS. It was also clear that it was a very low-probability event. Again, at least one person in the world very much wanted to see a TAS that used all known time savers in this game.
I (‘ktwo', and yes, it's me who cared about this TAS all the way back since 2014) knew that before work on a new TAS could begin, either a better understanding and methods for how to produce these two tricks would be needed, or throw some kind of bot at them. "Manual" trial-and-error TASing seemed to have too low chance of success to even bother trying. In 2022, I took notice of TASer eien86, who published several TASes based on a bot he created, Jaffar. To see if I finally could get peace of mind and give this game an updated TAS, I decided to reach out and explain my predicament. Before long, Jaffar was put to work and soon started to produce interesting results. However, I was still almost in disbelief when eien86 shared an optimized runthrough of planet 1 that produced the elusive “double-warp”. After years of biding my time, the door to Solar Jetman had finally been opened!

Software + Hardware

Rom Information

  • Name: Solar Jetman: Hunt for the Golden Warpship
  • SHA1: CAA4D1AB710BD766F8505EF24F5702DAC6E988AF
  • MD5: 45757BDF0D1A0E9DE8F9590FB692DA55

Emulator

  • EmuHawk 2.8.0 (Core: NesHawk)

Routing Bot

  • Bot: Jaffar
  • Routing Core: QuickNES - Save states manually transplanted from a Bizhawk state.
  • Platform 1: AMD Ryzen Threadripper 3990X Processor (64 cores, 128 threads) + 256Gb RAM (Average Exploration Performance: 1.0M States/s)
  • Platform 2: 2 x AMD EPYC 7742 Processor (128 cores, 256 threads) + 1024Gb RAM (Average Exploration Performance: 1.75M States/s)

Timing

Comparison Movie

Below is a comparison movie between [2533] NES Solar Jetman: Hunt for the Golden Warpship by FatRatKnight in 16:16.64 and the current submission.

Criteria

For a more precise comparison with the previous movie and future work, we use the following addresses for timing:
0x005D - Game Timer
0x003B - Current Planet Indicator (Value 0 equals Planet 1)
0x004C - (2 bytes) Screen Scroll X
And the following criteria:
  • Boot. All the frames from power-up until the start of the first planet.
  • Planet. Solving a planet starts as soon as both the (Game Timer) is reset to zero and the player takes control of the ship.
  • Transition / Shop. A transition starts as soon as the player escapes a planet, which happens as soon as the (Current Planet Indicator) increases by one or the lag frames start. Shopping happens at even numbered planets and is considered also a transition, but it is indicated as 'Shop'.
  • Autoscroller. Is the stage that starts after planet 12 is finished. Same criteria for a normal planet's start apply here.
  • Boss Fight. A special case is considered for the boss fight, which is useful to evaluate any future improvements on this section. We arbitrarily design the start of the fight to the point of the Autoscroller at which the (Screen Scroll X) equals 6645.
  • Movie End. This movie's end time is taken at the frame of the last input.

Time Table

In the following table we use the criteria above to compare the timing of our movie against the currently published TAS.
                      New                 Old                  Diff
         Stage   Initial     Total   Initial      Total      Stage      Total
          Boot          0       176         0        177         -1         -1
      Planet 1        176       711       177        715         -4         -5
    Transition        887         0       892         77        -77        -81
      Planet 7        887         0       969      15313     -15313     -15394
          Shop        887       398     16282       1106       -708     -16102
      Planet 8       1285      1445     17388       1455        -10     -16112
    Transition       2730        78     18843         78          0     -16112
     Planet 13       2808     13964     18921      12438      +1526     -14586
    Transition      16772      1242     31359        923       +319     -14267
     Planet 12      18014     19378     32282      17714      +1664     -12603
    Transition      37392       274     49996        274          0     -12603
  Autoscroller      37666      8053     50270       8053          0     -12603
    Boss Fight      45719       265     58323        371       -106     -12709
     Movie End      45984               58694                           -12710

Level-by-level comments

Please note that this game has a game resource page on the site that describes some of the game mechanics in more detail.
Planets 8, 13 and 12 and finally most of the autoscroller (after planet 12) were manually TASed by ‘ktwo'. Producing the “double-warp” on planet 1, the beginning of the autoscroller (to despawn the top eye of the last boss) and part of the final boss fight were botted by eien86.

Planet 1

(eien86:) This was the start of the whole new adventure; a make or break moment just at the beginning of this project. At this point, ktwo wasn't sure whether the bot could help at all, but decided to give me a chance. He gave me links to two movies (1) the currently published TAS, where this planet is played to perfection but warps into planet 7, and; (2) a manually recorded movie where a warp into planet 8 is demonstrated but had a lot of detours and was around a minute slower.
The fact that the planet-8-warp movie was slow was not due to ktwo's lack of ability (on the contrary, he's a talented speedrunner himself), but because it was the only instance in which he was able to attain such a warp. The question at this point was: is there a way to obtain this warp without any detours?
So then my work on this TAS started with the usual tasks: finding all relevant RAM variables, understanding the game mechanics, scripting and calibrating the bot, troubleshooting, etc. After some analysis and discussion with ktwo, I reached the conclusion that the most likely precursor of the warp was the fact that new objects of type 0x0A (warp circles) were created.
After programming the bot to find routes that maximized the count of such objects, it was a matter of starting the engines. And indeed, not long after starting, the bot was able to find both (1) a way to activate the planet-8-warp, and; (2) how to make it move towards the ship for a quicker warp. This was one of the best moments of my TASing life.
We still don't know exactly why the warps are activated, but it was pretty much to do with shooting at the correct times. Hitting certain objects at given frames, the game glitches the object types and gives you a wrong warp. However, I'm still not convinced this is a glitch. I have the suspicion this is some kind of easter egg or debug mechanism that was not correctly taken out of the game. Regardless, it worked like a charm.

Planet 8

For the shop discussion, see comments for planet 13. Planet 8 is just a quick transport to the warp and was therefore assumed to already be optimized. But by making a detour to tether a crystal and then use it to speed up from the tethering mechanics (see the game resource page for information about movement speeds), 10 frames were saved.

Planet 13

Planet 13 is a bonus planet and can only be reached by warp from planet 8. Upon completing this planet, you go to planet 12, the last one of the game.
There was a shop before planet 8 (there is a shop before each even-numbered planet). Since planet 8 was just a short transport to another warp, it didn't require any ship upgrades. However, planet 13 has so strong gravity that some kind of ship upgrade is needed. The two upgrades that help dealing with gravity are "double-strength boosters" and "anti-gravity". The boosters help with acceleration and just simply overcoming gravity and tethering objects around. Anti-gravity shuts off gravity, but doesn't improve acceleration or the default boosters' poor performance when tethering objects. Anti-gravity also opens up the opportunity for using the tethering speed-up in vertical sections. As a bonus, anti-gravity saves around 5 seconds by quicker shop menuing.
Both of these items cost 1000 credits, which coincidentally is the money the player is awarded at the start of the game. The preferred choice between boosters and anti-gravity is not immediately apparent. It turned out the boosters were the better choice by far, but a movie attempting the start of planet 13 with anti-gravity has been uploaded in the user files for reference.
The general route of planet 13 hasn't undergone any major changes. Other than in specific sections, comparison with the previous TAS is difficult though, since it had collected enough money on planet 7 to buy an upgraded pod that could tether "small wormholes" (the blinking things the fuel cells are delivered at). With the standard pod, you need to follow the already established route that both older TASes and real-time speedrunners have used. When possible, tether speed-ups were used, including a fairly big detour at the bottom of the planet to collect a crystal to set up for a long section of tethered speed-up to the large wormhole.

Planet 12

In the shop before planet 12, we bought one anti-gravity and one double-strength booster. There are several interesting weapons and ship upgrades to discover in a casual playthrough, but with the money available in this TAS, there really aren't any other alternatives that provide the same benefits.
The next question is when to use the anti-gravity. It's already been well established long ago that the fastest route through planet 12 includes destroying the pod in the far NE of the planet and teleport back to the mothership. However, destroying the pod means any temporary pod upgrades will also be lost. Since we have two boosters, losing one of them is no problem. But with only one anti-gravity upgrade, it can only be used either for the first half of planet 12 or for the second half. FatRatKnight's TAS had more money available (from playing through planet 7) and could afford two anti-gravity for planet 12. The benefits from anti-gravity in the different sections could therefore be estimated fairly well and pointed in favor of using it for the second half of the planet. The decision was clear enough that TASing both options was not deemed necessary.
A small detour to collect a crystal was made before the first fuel cell. This detour was more than made up for by being able to use the crystal for tether speed-up. There are two other objects that could have potentially been used instead of the crystal. One is located up and to the left of the mothership, but a quick look at a planet map makes it easy to dismiss this option as being too far out of the way. The other option is shortly before turning left and starting the climb towards the first fuel cell. This one is closer timewise, but was tested and turned out to be clearly slower than the crystal.
The second fuel cell looks like it could have been left below the small wormhole and delivered at the same time as the third fuel cell instead of being delivered directly on the first pass of the small wormhole. The idea would then be to allow for taking a straighter path towards the third fuel cell. However, this was tested and found to be slightly slower. The reason being the tether mechanics work against this idea. When starting to tether an object, it will be tethered at a much more vertical angle than what "everyday logic" would suggest. This means the second fuel cell would have to be left quite far to the right below the small wormhole to successfully deliver both fuel cells, one after the other. Moving far enough right before descending towards the third fuel cell ultimately resulted in a slower solution than delivering the fuel cells separately.
Even a casual observer might note that connecting with the third fuel cell looked nonoptimal. It's correct that it could have been tethered away quicker, but the method used ensured the right tethering movements on the way to the small wormhole for an overall faster solution.
Right after delivering the fourth fuel cell, the pod's fuel meter (not related in any way to the fuel cells that are collected for the mothership!) had been carefully set up to be one thrust away from being exhausted (from a starting state of 0xE000/57344...), which resulted in destroying the pod. When the pod is destroyed, Solar Jetman exits in his spacesuit and in this state he can use small wormholes to teleport back to the mothership.
For the next part, we finally get to play around with anti-gravity while navigating the rest of the planet and then the maze to the large wormhole. Along the way, a small detour was made to collect yet another crystal (another, slower, option exists and was tested and documented for reference). The tether mechanics were then used for both horizontal and vertical speed-ups, but also to help brake more quickly around some corners.
In the large wormhole, we work the warpship part to move in a very deliberate way that results in speeding us up horizontally, while also pushing us down enough through the tunnel to avoid crashing into the ceiling. There are other options for how to tether the warpship part (some that are initially faster), but they were discarded because of not providing any possibility to avoid the ceiling in the tunnel.

Autoscroller

(eien86:) Way back, ktwo published that it is possible to despawn the top-most eye by doing some precise movements during this part. This glitch has the potential of saving around a 1/5 of the time required in the boss fight.
Since we didn't know exactly what triggered the glitch, or whether it was possible to make other eyes disappear, I programmed the criteria for eye disappearance into the bot, i.e., how many values between 0x0460 - 0x0464 turned into zero, each meaning the status of each of the 5 eyes. After some testing we came to two conclusions: (1) only eye 0 (topmost) can be made to disappear, and; (2) this can be achieved in the first 300 frames of the autoscroller.
Since the autoscroller always takes the same time to complete, there was nothing left to do after triggering the eye glitch but to add entertainment movements here, which is what ktwo did.

Boss

As described on the game resource page, the initial opening sequence seems to be set (but slight variations have been observed), while subsequent eye openings can be manipulated via RNG. Since the top-most eye was despawned, we used a slightly different order to shoot the eyes in than FatRatKnight. The general pattern was TASed by ktwo and then the last 100 frames were 'polished' by the bot saving a dozen more frames or so by bringing the ship to be as close as technically possible to the eyes.

Future Work

(eien86:) Normally, I would say that a better bot exploration would achieve a better result, but in this case I'm pretty happy with its performance. I'm also very impressed by ktwo's solution of the interim planet, so unless another glitch is found, or some way to farm money before the shop in planet 8 is discovered, this is in my eyes a perfect movie.
(ktwo:) The x- and y-speed in this game are independent of each other. So moving from A to B without any obstacles in the way is straight-forward. However, every single corner is a battle of sub-pixels and getting out on the other side with as high speed as possible. There are several parameters involved that make this very challenging to perfect. Sometimes even the general concept for how to negotiate a corner can be difficult to find. As a result, sub-pixels are bled in almost every direction change. Not all of them count though. When delivering a fuel cell to a small wormhole, the game places the pod in a grid of 8x8 pixels, depending on its initial position. Lost sub-pixels are therefore reset every time a fuel cell is delivered.
This TAS builds on the work of previous TASes, uses all tricks and timesavers currently known to us and the route is executed as well as we believe we reasonably could. There is still most likely room for improvement by grinding the execution of every corner into perfection and extending the search for manipulating the speed boosts from tethering objects as efficiently as possible. The bugs/glitches/physical oddities already known also suggest that more things could be found in the future if more players took an interest in the game. But I guess the same could be said about many non-popular games in the same tier as Solar Jetman?

Acknowledgements and Attributions

  • FatRatKnight: Author of the previous TAS. Even though comparisons were sometimes difficult to make due to different upgrades being available in the two TASes, it was still very helpful in showing clever ways of solving certain sections. The level of execution in the published TAS was also an inspiration to strive towards when working on this improvement. Also a huge thanks for documenting so much of the progress and findings in this game as it made our work a lot smoother. We hope that our submission is a worthy successor and not simply an improvement because of including glitches that were not obtainable when FatRatKnight worked on this game.

feos: Claiming for judging.
Don't know if it would make sense to label the existing runs "warps", and we don't know if anyone is ever making "warpless"...

despoa: Processing...


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15576
Location: 127.0.0.1
ShesChardcore
She/Her
Skilled player (1591)
Joined: 2/23/2022
Posts: 132
Location: MN
Seeing a childhood favorite game get torn apart is always a yes vote from me. Love it.
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3821)
Joined: 11/30/2014
Posts: 2829
Location: US
Console Verified! Link to video Really cool to see a mystery solved through the power of Jaffar bot, and bring together a known improvement on top of that. I wonder if there are any other mysteries that could be resolved in this way, I couldn't think of / remember any off the top of my head though.
Patashu
He/Him
Joined: 10/2/2005
Posts: 4043
Groundbreaking! I wasn't sure this would be maxed out in my lifetime. Nice collaboration. EDIT:
Alyosha wrote:
I wonder if there are any other mysteries that could be resolved in this way, I couldn't think of / remember any off the top of my head though.
Probably lots of game-end-glitch/crash type stuff. Isn't there some glitchy warp stuff in Battletoads that isn't fully maxed out, or did it all get figured out by now?
My Chiptune music, made in Famitracker: http://soundcloud.com/patashu My twitch. I stream mostly shmups & rhythm games http://twitch.tv/patashu My youtube, again shmups and rhythm games and misc stuff: http://youtube.com/user/patashu
Site Admin, Skilled player (1254)
Joined: 4/17/2010
Posts: 11475
Location: Lake Char­gogg­a­gogg­man­chaugg­a­gogg­chau­bun­a­gung­a­maugg
I'd really like to know what happens in the code that makes the eye despawn, tho I don't have the time to look into it myself. Can somebody explain?
Warning: When making decisions, I try to collect as much data as possible before actually deciding. I try to abstract away and see the principles behind real world events and people's opinions. I try to generalize them and turn into something clear and reusable. I hate depending on unpredictable and having to make lottery guesses. Any problem can be solved by systems thinking and acting.
eien86
He/Him
Judge, Skilled player (1873)
Joined: 3/21/2021
Posts: 262
Location: Switzerland
@ShesChardcore Thanks for your comment! @Alyosha Thanks as always for your console verifications and nice comments! @Patashu I'm open to receiving other challenges, as long as they are somewhat well defined. Hope to make more discoveries in the future. @ feos I don't have much of an idea myself, but it seems to be an incorrectly indexed access. When you destroy the asteroids, they turn into smaller pieces -- so object deletion and creation happens in the same frame. One of these indexes must, upon death, override the access to the next object in line (the first eye) putting it's object type to zero. @ ktwo I found FatRatKnight in gamefaqs, and he asks:
Also, a brief look over the Solar Jetman run has a single question in mind: Any particular reason why you took the full damage terrain bumps in the maze of P12? At about frame 34200, just shy of 9 minutes on the video, there is what I call a "wrong deflect" off the corner of the terrain, in order to slow the downward momentum. Unlike what I've done in my TAS, the damage was not prevented by a light bump into a convenient wall just before the wrong deflection. I've made use of the temporary terrain invincibility from a weak hit to stop a much worse one.
Editor, Skilled player (1202)
Joined: 9/27/2008
Posts: 1085
Indeed, a message on GameFAQs got to me. My interests have drifted over time, so it took a PM there to find me. I do have one more thought in mind, beyond the one question about the terrain bumps in P12... It's about depositing fuel into the wormholes. Specifically, the amount of time the message screen is up. I never did figure out why the message locks us from clearing it for variable amounts of time. The comparison video does a great job displaying the effect of this difference on P13, on the first fuel pickup. (Good job on fiddling with the tether boost on the way there) Parts of my prior TAS is also visible in the comparison video. Well, it's pretty clear at the times the jetpod is moving in exactly the same way. That, at least, tells me the optimization I did then was pretty solid up until the two runs differ. Neat, my "really slow shot that blows up a turret" early in P13 is still there! As for the warp to P8, I'm convinced of some CPU timing problems around an interrupt that the code doesn't handle appropriately which allowed it to skip over P7, though I can't recall many details of my assembly diving. Good work obsoleting my TAS!
Alyosha
He/Him
Editor, Emulator Coder, Expert player (3821)
Joined: 11/30/2014
Posts: 2829
Location: US
Patashu wrote:
Probably lots of game-end-glitch/crash type stuff. Isn't there some glitchy warp stuff in Battletoads that isn't fully maxed out, or did it all get figured out by now?
I'm not sure there is anything noteworthy left in battletoads (game end glitch run already verified, so probably nothing time saving anyway.) Here is a SMB3 glitch that would be cool to replicate (around 5:30 in the video): Link to video Also I recall a boss despawn in blaster master: https://www.twitch.tv/gamesdonequick/clip/OilyTiredPorpoiseNomNom?lang=it Of course with no movie backing them up these could be hardware error, but it would be amazing if they really are re-creatable.
Active player (251)
Joined: 8/10/2008
Posts: 116
About the "wrong deflect" around 32400 (not 34200), looking at that section again and comparing with FatRatKnight's movie, I see what you mean. Getting a minor bump there would have allowed to take a (minor) bump also around the next corner, which would have been faster. Enough faster to actually save time, but we're talking about single frames. FatRatKnight, we didn't specifically look into why the splash screens appear for a certain amount of time. They were just pressed away on the first possible frame without attempting to manipulate them. However, the last splash screen on each planet (the one with the message saying that you have collected enough fuel cells) have two separate periods during which it can be pressed away. In your TAS, they were pressed away on the first frame of the second period (after the full text has appeared). The new TAS saved a little time by pressing them away during the first period (before the full text has appeared). You're absolutely right that part of your inputs are still found in the new TAS. The beginning of p1, p8 and p13 are your inputs (or based on them). When starting this project, I thought much of it would be a copy-paste. When I realized the TAS desynched by basically just looking at it the wrong way (even during sections that should just be about pure geometry), I wish we had started from a clean sheet. In my opinion, the sections that were based on or copy-pasted your inputs are not critical enough in nature to warrant a co-authorship. Had I had the opportunity, I would however have asked for your opinion (I wrote a pm to you, but I understand you don't often log in to the forum, so maybe you didn't see it). If you want to be listed as co-author, we'd be happy to add you.
Editor, Skilled player (1202)
Joined: 9/27/2008
Posts: 1085
How did I get my numbers backward? At least my video time was right, even if a bit off on the frames. As far as authorship goes, I don't consider that amount of input to be a big factor. If anything, I'm pretty ambivalent on the credit. If you think enough of this TAS is based on my work, enough to deserve an extra name in the author list, go ahead. Regardless of the decision, I'm still enjoying seeing the effects of my past, and I get to see another of my runs obsoleted. I absolutely don't want to stand in the way of any progress made. Sorry I wasn't around to help during the production, but again, drifting interests has me elsewhere now.
Active player (251)
Joined: 8/10/2008
Posts: 116
I looked into the idea of another corner deflection in the p12 maze again (around frames 32400-32600) to see if I could get a better estimate of a potential time gain. Unfortunately, I wasn't able to convert the idea to any time save. Another corner deflection would mean starting the vertical movement earlier (good) and also the opportunity to speed up the vertical movement before the corner (also good). But what counts the most is building speed in the vertical shaft after the second corner (around f32600). By deviating from the route in the submitted movie, the tethering rotation is negatively impacted, which means less speed. The reason why this worked in the published TAS was because we're tethering different objects with different tethering properties. The published TAS had an advantage here. There are quite a few options in a section like this and I'm hesitant to definitvely say that there is no time save to be found. But I can say that I've tried the ideas I had and they all lost time compared to the submitted movie.
Challenger
He/Him
Skilled player (1689)
Joined: 2/23/2016
Posts: 1061
Great work solving a mystery through the power of Jaffar bot and achieving this new warp, as well as finding more optimizations for this game. Yes vote.
My homepage --Currently not much motived for TASing as before...-- But I'm still working.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 15576
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [4879] NES Solar Jetman: Hunt for the Golden Warpship by ktwo & eien86 in 12:45.16