Pulseman is a great game. It's got varied bosses, beautiful levels, a wide range of enemies and a main character that's the result of an unfortunate cybersex incident. Thanks, Japan.
The good Dr. Yoshiyama made an AI, fell in love with it and somehow managed to merge his DNA and her program core. The process created Pulseman, who can move freely between the real world and the virtual and can channel electricity through his body. Unfortunately, the process flipped the good doctor's evil bit and he became the bad Dr. Waruyama. He started the Galaxy Gang with the goal of spreading digital and analog chaos. Now Pulseman is forced to travel the globe fighting against his own father to save the world.
* takes no damage (during the movie) * abuses programming errors (except one) * uses robot * aims for fastest time * made with custom hacked Gens (should be 9Z compatible)
Pulseman has several useful powers. Apart from the typical running and jumping, he has charged and uncharged special abilities. He can charge by running or dashing. When uncharged, he can:
- punch: This creates an arc of electricity that destroys any enemies and blocks nearby.
- flash: This creates a short flash of electricity that destroys any very nearby enemies. It also gives Pulseman temporary invincibility. This is unbelievably useful at times.
- low kick: This destroys any enemies on the ground nearby. It's not especially useful.
- jump kick: Pulseman jumps straight up and does a flip kick. While he's in the air he is invincible and can damage enemies.
- dash: By tapping left or right twice, Pulseman will dash. This is faster than running over short distances and will charge him. It also allows him to temporarily ignore gravity and enemies.
- wire catch: When a wire is nearby, Pulseman can flash to catch the wire and move at volteccer speed along its track.
When charged, Pulseman can:
- flash arrow: This shoots an electric projectile that destroys enemies. Blocks are not affected.
- volteccer: Pulseman will turn into a ball of electricity and move at high speed. He is invincible while he's in this form. It lasts for a short while but he can keep going if he bounces off a wall.
When enemies die, there are two types of explosions. Fiery explosions spawn one object and create no lag. Electrical explosions spawn 17 explosion-related objects and cause a guaranteed 14-16 frames of lag. I try to avoid destroying the electrical enemies unless it would cost even more time.
The only unusual enemies are the water monsters. These are floating green blobs that like to get close to Pulseman. They don't hurt him but they do slow him down and neutralize his charge. They can't be killed except by destroying certain inconveniently lightning boxes.
Nitsuja found a severe motion glitch in this game. A movie by Twisted Eye which abuses this glitch has been published. I have intentionally avoided all instances of this glitch in order to make the game easier to follow and more entertaining. I hope that Bisqwit won't mind having both versions of the game published. There are several other glitches and unexpected behaviors that I have abused freely. There is a discussion on this topic here. Please don't vote no because of this decision.
Wherever possible I've improved over Twisted Eye's times. The main improvements are in the bosses, bonus stages and autoscrollers.
Pulseman loses his charge when firing or touching water. If he loses his charge while jumping but maintains full speed, he will regain it when he lands.
It's possible to fall through certain floors. See Pulseman Tricks and the fallthrough bot section for more information.
During the Veil (Dark Pulseman) fight, it's possible to stay in a volteccer by mashing the A button the right way during the collision. This keeps me from always needing to charge but makes the fight much more difficult to optimize. This is because the effectiveness of all hits utilizing the glitch depend on Pulseman's position when he makes the first hit, plus the choice of whether to go left or right after each glitched hit.
Some of the Mini-Waruyamas will fall off the screen under the right conditions. The only factors that effect this are the mini's starting position and the first direction it moves in. I tried to make this happen as often as possible.
Many of the bosses in this game take damage in non-obvious ways. Hitting them on the first possible frame may do 2 HP but hitting them a few frames later may do 10. I believe the programmers intended this to happen. I've used a RAM watcher to optimize boss damage with this in mind.
Since it was hard to immediately tell whether a hit with the boss had connected, the RAM watch was handy. (sorry)
The second area in this stage is black due to a graphical glitch. It consists of a maze of wires that Pulseman has to find his way through. The glitch occurs because I catch onto a wire while the screen is still flashing. Encoding a tas as graphically complex as this into a reasonable avi will be difficult. This area will help lower the compression ratio.
In the forest area, I introduce the wire jump. This is a nice little technique that lets me switch wires and change direction, which I'm not supposed to be able to do. It's not hard with frame-advance but it looks strange if you don't know what it is.
The tree boss takes 5 volteccer hits even though it looks like I only hit him 3 times. I stumbled onto the technique of hitting him twice per volteccer by bouncing against the edge of the screen. It takes a little longer to use this technique so I do the middle hit normally.
A volteccer is the only way to damage this boss. Flashing, punching, kicking (both kinds) and flash arrows don't work.
America - Southwest
The intro boss here takes enough damage to be defeated in the first three hits. The last two hits get him down to -6 HP. See the byte at 0x00FFE314 for details.
The area immediately before the boss is unique in that it ends when Pulseman touches the edge of the screen. This means I can dash to leave the area. A dash will usually stop at the edge of the screen.
America - Alaska
The first area in this stage was a good experience in optimization. It started out several seconds slower than Twisted Eye's version and eventually got within 1 frame of his time. He missed a few optimizations and I don't doubt that it's possible to the glitched time faster than is possible with out the glitch.
The area before the boss held up this tas for a very long time. I found that it was possible to fall through diagonal floor when I did some fuzz testing. After playing with it some more, I found out it was also possible, although extremely rare, to fall through a flat floor. See the secion about the fallthrough bot for more information.
The Veil (Pulseman's evil twin) battle was also difficult to optimize. Most of my hits were later than or equal to Twisted Eye's but I ended up beating him in the last hit by a few frames. A robot might do even better here.
The frog enemies are usually very difficult to get around because they jump when Pulseman gets near them. For added fun, try it yourself. It makes the parts of the tas when I run past them much more entertaining.
The part of the mechanical stage when I'm jumping on the gears is one of my favorite sections of this movie. During normal play, the gears mess up Pulseman's movement and force him to go very slowly and bumpily. Here I maintain full speed.
The boss here has 4 different forms that he can morph into. I recommend fighting against him manually just to see them. It's too bad I destroy him before he gets half way through his first sweep. There's another fun graphical glitch during his defeat.
Water is a pain. This stage would be better without it.
The abstract area before the missiles is one of the more disorienting parts of the game.
The first 4 areas are outer space-themed autoscrollers. If you notice that my playing style differs here, it's because I wrote/used a robot to play all of the first 4 areas, apart from the last few seconds of each. (The boss was also beaten manually.) At first I thought it would just be a demonstration of a cool hack, but by constraining the robot to avoid lag I saved 407 frames (~6.8 sec) total over Twisted Eye's movie. See the autoscroller bot section for more information.
The maze level is tough. It's not too bad for making a tas but I wouldn't want to play it in realtime. It doesn't help to have all those water monsters and that the level turns invisible when volteccering.
In the mini fight, there are 6 or 7 minis that will fall of the screen in the right circumstances. 4 of them do here which is why I leave some of them alone. I had to give them little nametags to tell them apart.
The final battle is fast and furious, as such fights usually are. I take damage, but it's after the movie ends like in the published movie.
I wrote a couple robots to help optimize this tas. A decent low-glitch movie of this game seems to require some sort of semi-intelligent automation.
I used this robot to exploit the thin floor fallthrough glitch. A very patient human might be able to find one sub-optimal instance of this glitch, but finding an optimal instance (or 14 of them like in this movie) requires a robot.
I was stuck on this for a long time until Nitsuja gave me the values for Pulseman's X and Y location. This allowed me to get started on a robot that would perform the fallthrough glitch on demand. I had searched for the values myself but didn't think that they might be the sum of two separate values.
The robot usually takes about half a day to settle on a fastest instance of this glitch on my 1.6 gHz Core Duo laptop. I'd estimate that the area where I used this glitch took at least 10 million robotic rerecords over several weeks and a two attempts. This wasn't helped by the fact that many of the successful instances desynched. I ended up adding code to verify each successful instance just so I wouldn't need to sift through them myself.
I also added some IPC code so mulitple instances of Gens could work cooperatively on my dual core system. This had the added bonus that I could use a separate program to watch the robots and dynamically change their behavior.
The area where this robot was used is probably not optimal because my robot and I aren't smart enough to be sufficiently exhaustive. If someone wants to beat it, you'll have my respect. I wouldn't anticipate saving more than a second or two.
This glitch is only interesting on thin floors, i.e. floors that can be passed through from below. It's possible to expoit this glitch on any floor but the only effect is a few pixels (i.e. to the next tile border) of zipping on thick floors.
I originally wrote this robot because I wanted to see a published movie that made extensive use of such a robot. Some of the inspiration came from Bisqit's Bisqbot run of SMB1. Bisqbot does some very unusual and risky things. Even though Bisqbot isn't even close to optimal, the wip is entertaining. The ROM is the standard SMB1 ROM and the wip gets to 4-1. (The walljump at the end of 2-1 had to be added manually, iirc.)
In my case, I had an autoscroller working in my favor. The nice thing about fixed-speed autoscrollers is that the character is forced to move. As long as he doesn't die, progress will be optimal. This makes it relatively easy to write a robot that will yield an optimal tas.
I wrote this robot to meet 3 constraints: don't lose health, don't allow lag and don't let enemies escape. The enemies constraint required a little analysis of the object system. The other constraints were easy to check. Everything was done by having the robot watch RAM. As it turns out, the robot found some unusual ways to meet its constraints.
These levels should be technically perfect. I can make the source code available if people want it, but I didn't write it with reuse in mind.
The following are failure breakdowns for the autoscrollers, i.e. reasons that the robot had to backtrack. "Enemy" means the robot restarted because an enemy escaped from the screen. "Health" means that Pulseman's health changed, either from death or damage. "Lag" means that the camera's X-coordinate failed to change. The improvement how many frames I saved compared to Twisted Eye's tas. The total is about 3.2 million rerecords.
I'm very happy with the results of this robot. I hope robots will start to have a larger role in movies here.
In the process of making this tas, I ran into many amusing glitches and oddities that wouldn't fit in a publication-quality tas. Here are some saved states that I found amusing:
- I found a lot of these infinite cycles.
- Some of the cycles can be quite long. This is one of them.
- The Veil battle was very difficult to optimize. It didn't help when something like this happened.
- I'm still trying to figure this one out. If you duck or move, you live. Otherwise you die instantly.
- I've had days like this.
- This bug made me very suspicious, but nothing ever came of it. It's also possible to do something similar in the first area of Southwest America.
- This is a difficult-to-reproduce bug my robot found a couple times. I'd post a movie of it, but both times I found it the frame count got set to 0 and the button presses that lead up to the glitch were overwritten. Note the frame count.
- I'm not entirely sure why these guys survive.
- This would make a great screenshot if it were part of the tas. It's from one the Thailand boss's alternate forms.
- This is a screenshot of what I spent a lot of time staring at. It's got the map I used to plan my route, two Gens instances and an example of their output as other robot instances join and leave. Each bunch of numbers represents a successful glitch instance.
- I added code to Gens that puts the number of each object on the screen over that object. It helped me keep track of the minis. It also shows revealing information about the game's internals. Here is what an electric explosion looks like. Here is what some bonus stage confetti looks like.
- This happened while I was doing a little save-state hacking. Can you spot the difference?
Any tas is a community effort. I made the tas itself but support from the community gave me the tools and inspiration I needed.
- Bisqwit - Thanks for starting and running this site and for permission to mention and link to your Bisqbot wip.
- Nitsuja - Thanks for finding the motion glitch and getting me started with Pulseman's X and Y coordinates. Thanks for looking for walljump glitches. If you didn't find any I can be fairly confident that there aren't any.
- Twisted Eye - Thanks for doing the glitched-out tas and for giving me something to compare against. Anyone who's done a tas knows how valuable that is. Your continuing interest has also been encouraging. Also thanks for the Veil fight glitch.
- Iriasu - Thanks for mentioning this gem of a Game.
- Truncated - Thanks for the speedy translations of the intro.
- upthorn - Thanks for being a way better coder than me. I'm glad someone competent is maintaining Gens/win32. It needs the love.
- Fabianx - Thanks for writing the SWIG patch for snes9x. I obviously didn't use it but making emulator scripting more accessible can only lead to improved movies.
- DeHackEd - Thanks for providing Microstorage and adding GMV support. Stable movie storage is so nice to have.
adelikat: Accepting for publication along side the current published run. Comments are posted in the discussion thread.