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

Game Boy
baseline
(Submitted: Last Action Hero (USA, Europe).gb USA/Europe)
BizHawk 1.9.4
39628
59.7275005696058
11582
Unknown
Submitted by TehBerral on 6/4/2015 3:10 PM
Submission Comments
Going back to improve on my first submission.
Game Objectives
  • Genre: Platform
  • Very minor glitch abuse
  • Manipulates luck
  • No damage taken and collects all hearts (mostly for "why not?" sake)
Movement
  • Jack runs at a constant 2 p/f.
  • Jumping should be kept to a minimum. Movement in mid-air alternates between 1 and 2 p/f. Besides that, Jack is stopped for a few frames before jumping (more on this in a moment) and 10 frames once Jack lands.
  • When Jack has to ascend multiple platforms running before jumping is much faster than jumping immediately after landing. It takes 3 frames to jump from running – 1 frame to run forward, 1 frame to jump and one frame to get in mid-air. From a standstill, it takes 11 frames to get off the ground.
  • You also can’t control the height of Jack’s jumps.
  • Jack has multiple attacks: punches and kicks.
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
AddressName
0107IGT
0109Tickets Left
010DJack's HP
010FInventory
0172Helicopter HP
0191Last Boss HP
0805Jack's Sprite
0808X
0809X 2nd Byte
080AY
080BY 2nd Byte
08AALimo Y
08ABLimo Y 2nd Byte
Tickets
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.
  • As a small note, moving diagonally through objects so that the corner of the car’s hit box crosses with the corner of the hit box of the object you want to pass through can get you through the object unharmed. This is mostly relevant to the potholes throughout the stage, but as shown in both driving stages you can clip into the side walls (this doesn’t work for the medians throughout the stages though).
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.

Noxxa: Accepting as an improvement to the published movie.
fsvgm777: Processing.
Last Edited by adelikat on 10/14/2023 2:45 AM
Page History Latest diff List referrers