Tool-assisted game movies
When human skills are just not enough

Submission #4712: TehBerral's GB Last Action Hero in 11:03.48

Console: Game Boy
Game name: Last Action Hero
Game version: USA/Europe
ROM filename: Last Action Hero (USA, Europe).gb
Emulator: BizHawk 1.9.4
Movie length: 11:03.48
FrameCount: 39628
Re-record count: 11582
Author's real name: Matt B.
Author's nickname: TehBerral
Submitter: TehBerral
Submitted at: 2015-06-04 15:10:47
Text last edited at: 2015-06-14 10:50:30
Text last edited by: fsvgm777
Download: Download (4419 bytes)
Status: published
Click to view the actual publication
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:
Going back to improve on my first submission.

Game Objectives

(Link to video)


If you press “A” once Jack will do a single punch, which does 1 HP of damage each punch.

If you hold “A” Jack will do 3 punches before doing a super punch which does enough damage to kill any mook in the game. The downside is that this is slow overall.

By holding up and pressing “A” Jack will do a roundhouse kick which does 2 HP of damage. This attack can be chained fairly quickly and as such, it’s quicker to take out an enemy with 6HP with three kicks as opposed to six punches or three punches before a super sexy hadouken attack.

Useful Addresses All of these addresses are WRAM and 1 byte unsigned

Address Name
0107 IGT
0109 Tickets Left
010D Jack's HP
010F Inventory
0172 Helicopter HP
0191 Last Boss HP
0805 Jack's Sprite
0808 X
0809 X 2nd Byte
080A Y
080B Y 2nd Byte
08AA Limo Y
08AB Limo Y 2nd Byte


Tickets fall 1 pixel every 36 frames provided Jack is standing perfectly still. Moving at all slows up the ticket's falling animation - actually, whenever Address $0805 value changes the ticket is slowed for a frame each time it changes (that means if you press forward for one frame the ticket pauses for the frame Jack moves forward, and one frame moving back to a stationary position). Mirrored sprites don't call on this value and are treated like the same sprite that it's mirroring. So if you twitch back and forth in mid-air it won't make the tickets fall any slower (besides jumping and landing in the first place).

The only exception to this I have found, oddly, is the idle animation where Jack looks behind him. I have a theory that it might be the bottom part of the sprite that causes this effect since the sprites in the memory are split in half, but I have no real way to test this.

This same effect happens with Jack’s special items, explosions and the final boss (except for its small pellets).

Scene 1 Double Missile Strat

On the top level of Scene 1 once Jack collects enough tickets he’ll gain a missile launcher. This is intended to be used on the barriers in the stage. It’s intended that you collect a certain amount of tickets, use the missile launcher to destroy one barrier and repeat the process for the second gate. (See: current publication)

Instead, if you can place a missile tank and fire a missile, despawn the tank without despawning the missile itself Jack can place a second missile. Despawning objects is based on proximity.

This strat saves time not only through not having to wait to place a second missile, but I also save time on not having to jump to grab tickets for the second missile tank, Additionally, I avoid a lag frame with the second barrier being destroyed off-screen.

Driving Stage Luck Manipulation

The ticket spawns, along with almost everything else in the driving stages, are randomly generated. The ticket spawns are manipulated by: - Movement (i.e. How you load the next area of the screen – X and Y positions and specific frames affect this) - Destroyed enemies/ spawned objects Given how slow the car accelerates and stops, there’s only so much you can do to manipulate ticket drops without wasting time. The optimization for these stages is in finding the best ratio between the distance traveled to tickets collected.

The GPU viewer in Bizhawk is a big help with knowing what has been spawned/despawned in the memory.

The cardinal left and right movement done at the very beginning of the stage is important. This not only spawns the first two tickets into place, but it also spawns and despawns several cars which also affects the drops in a positive way.

In Scene 6 you have to chase down a limo. This limo has a fair bit of rubberband AI so it’ll never outrun you, especially if you obtain the booster quickly.

Small creation note: I’m somewhat proud how hard it was for me to optimize Scene 6. It took me a little over a week of work to gain a net total of 11 frames in the stage. I had to sit down and study what loaded into the memory given every movement and spawn situation. In order to do this I used several different instances of Bizhawk and their accompanying GPU viwers and RAM watches, and chose the best option. As such the rerecord count could be considered lower than what was actually put into the movie, but this reflects what went into the most optimal option.

Helicopter Boss

First thing to note is that this boss’ damage isn’t calculated until after its invulnerability frames have worn off. The boss’ health address is $0172 and the boss has 8 HP.

So optimally I want shots to connect after the last one was registered (as mentioned, after the I-frames have worn off). You can constantly stun lock the boss by firing another missile as soon as possible, but that only extends the invulnerability period from the last damage, while not counting the shot you just fired.

Another thing to keep in mind is that this boss' pattern is based on not only how you move once you move up to it, but it's also affected by how you load the enemy in the memory (like most enemies). This is important since I need the helicopter to move into the missile that Jack fires so that it can be stunlocked. It's faster to jump up the ladder the way I did in order to load the top of the map differently (the map will load diagonally in a way that allows Jack to jump to collect the ticket, fire as soon as he lands, and the boss will move right into it) than it is to simply run up and end up having to turn around and place a missile that will connect.

Last Boss

Standing still in the center of the stage is not only to illustrate how utterly broken the boss is, but the boss’ firing speed is also affected by movement like the tickets. So standing still is actually part of the optimality.

Mothrayas: Accepting as an improvement to the published movie.

fsvgm777: Processing.

Similar submissions (by title and categories where applicable):