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

Submission #6175: scrimpeh's GB Castlevania II: Belmont's Revenge in 24:41.18

Console: Game Boy
Game name: Castlevania II: Belmont's Revenge
Game version: JPN
ROM filename: Dracula Densetsu II (J).gb
Emulator: BizHawk 2.3.0
Movie length: 24:41.18
FrameCount: 88467
Re-record count: 98419
Author's real name: JPT
Author's nickname: scrimpeh
Submitter: scrimpeh
Submitted at: 2018-12-02 14:08:43
Text last edited at: 2018-12-16 13:11:42
Text last edited by: scrimpeh
Download: Download (21416 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:
Castlevania II: Belmont's Revenge is the second Castlevania game on GameBoy and the sequel to Castlevania: The Adventure. This movie aims to complete the game as fast as possible, saving over 20 seconds over the previous run.

Game objectives

  • Emulator used: BizHawk 2.3.0, Gambatte Core
  • Aims for fastest time
  • Takes damage to save time
  • Ends input early
  • Genre: Platformer

(Link to video)

Temp Encode for your viewing pleasure


This is Castlevania: The Adventure 2: Belmont's Revenge. Or something. I can never quite recall the name of this game properly. You take control of Christopher Belmont, who's out to vanquish Dracula once more, because once wasn't enough. This is also an improvement of 1876 frames over the previous run of this game by zggzdydp, owing to new strategies, damage routes and better optimization. Comparing exact timing is difficult however, as VBA-rr appears to run at 60fps, whereas BizHawk runs at about 59.7fps, adding some seven seconds to the total completion time over the course of the run. Additionally, I lose about 330 frames from the GameBoy BIOS screen, making the improvement look smaller than it really is.

This run plays on the J version of the game. The main difference between the J and the U versions is the cross subweapon, which has been replaced with the axe in U. The cross works more or less like you would expect it to, but I can only have one on screen out at a time. Due to the small screen size and long hit invulnerability times for enemies, the difference between the cross and the axe are really not as large as you would expect. While there are some points where the axe's trajectory comes in handy, the cross still overall comes out ahead as the more versatile and useful of the two subweapons, mainly due to the boss fights. There's also the holy water in the game, but it's worthless. It arcs too high to be useful for hitting things below you, and too low to be used as a pseudo-axe. It also does no damage whatsoever, so I never bother with it.

Movement optimization

This game has subpixels. Christopher's movement speed while going forward is a brisk 144 subpx/frame, and climbing up ropes it's a blazing 96 subpx/frame. At least, you can slide down ropes fast at 2px/frame. When you move this slow, subpixels really begin to matter, as there can be up to two frames between the best and the worst subpixel position. Christopher's Y subpixel component is not reset when landing on the ground, so I need to make sure I approach ropes with a Y subpixel component of 0 - 9 to not lose frames. When Christopher whips in midair, his Y speed is suspended for one frame. Not only does this extend his jump height, but it also allows me to control his subpixels on landing. On each frame in midair, 37 subpixels are added to Christopher's Y speed, so by using the whip on different frames, I can adjust his subpixels in increments of 37 subpixels. Landing from a jump normally costs a frame, but if Christopher's feet get embedded in the ground on landing, the game puts his feet back on the ground, which often (but not always) costs an extra frame. Because of this, I need to carefully route out my vertical subpixels in many sections, such that I never clip into the ground, while still having exactly the right subpixel position at the end of the section to climb up some rope. If you see me jump and whip in the air for seemingly no reason, adjusting my Y subpixels is usually why. It's not always possible to get the optimal subpixel route, forcing me to lose a frame to either a rope climb, or clipping into the ground.

As for horizontal subpixels, there are only few ways to adjust them, but it can be important sometimes. Jumping onto ropes will change Christopher's X subpixels, as will jumping into doors at different frames. The latter usually costs some frames, so I don't use it in this run. Lastly, vertical and horizontal moving platforms can be used to adjust Christopher's Y and X subpixels, respectively.

Attacking Optimization

Enemies have stupidly long hit invulnerability times, such that it's actually possible to whip faster than they can take damage. Because of this, it's often faster to just damage boost through them than to fight them, making damage routing cruical to the run. If you take damage as you clip into the ground, you avoid all knockback, allowing to lose just 1 - 2 frames to a damage boost. This is not always possible, such as if the enemy is moving toward you, or if there's not enough space to jump before it. At this point, the next fastest option is to turn around right before the enemy and take damage backwards, which typically loses 3 frames.

If you stand on the ground as you take damage, you get knocked back in a high arc, whereas if you jump, Christopher will be knocked straight down. Christopher has a very short hit invulnerability period, but it only starts once he lands on the ground, so sometimes, I deliberately use the ground knockback to make my i-frames last longer.

A lot of enemies have several attack patterns, which depend on what frame they come on screen on. This may result in me delaying entering a room for one or two frames to get a more favorable pattern.

Like zggzdydp, I don't bother with the whip fireball upgrade at all in this run. It does much less damage than your regular whip, and it has the possibility of hitting the enemy before your whip hits it, triggering its invulnerability early, thus inadvertently gimping your whip.

It's also worth noting that your hitbox follows your visual sprite very closely, which means that whipping in midair actually extends your hitbox both up and down. This sometimes prevents me from using my whip when I want to.


Subweapon Delay

If you get hit while throwing a subweapon, your subweapon throw animation is interrupted, but the subweapon is still primed to fire. You can then fire the subweapon by walking uninterrupted for a specific amount of time, climbing, or instantly unleash it by using the whip. Jumping, or stopping your walking/climbing animation for a frame delays the subweapon throw. This allows me to prime a subweapon and hold it for a moment where it would be inconvenient to go through the animation again. This has a couple of applications throughout the run. Going through a screen transition discards the primed subweapon.

Platform Shuffling

This only works in rooms where the camera can scroll. The position of all objects in the level, including Christopher, is stored as a combination of Camera Position + Camera Offset, with individual subpixel components for each. When riding on a horizontal platform, it's possible to abuse how the game calculates the postion of Christopher, the platform and the camera relative to eachother to make the platform move faster than it is supposed to. This saves up to 50 frames on every platform it's used.


Jumping on ropes moves Christopher forward several pixels, saving between 8 - 10 frames for every rope. Christopher also gets moved further toward the edge of the camera, which may or may not be useful.

Stage by stage comments

Cloud Castle

The stage routing mostly came down to which stage I can get a cross in the easiest. I experimented with various stages, but in the end, like with zggzdydp, going to Cloud Castle first won out. Going to Rock Castle first to get a cross is also possible, but likely slower. After this, it's just down to following the default cursor position on the map screen.

Right off the bat, I have a room with crows and lag to deal with. Jumping manipulates the first crow to go higher, missing me, while the jump after that is for minimizing lag.

I choose to forego the damage boosts against the knights, as picking up the porkchop later is slower. I also have one more health point overall, which I can use later to get past the Knife Enemy faster.

Whipping in midair allows me to beat the spike floor cycle, saving a bunch of time.

The boss goes down much quicker with the cross, since I can use it to hit one of the heads, while working the other with the whip. It's still lag city, but the fight goes much faster than in the previous run.

Crystal Castle

By landing in the water on even frames, it's possible to avoid the current pushing you backwards. Careful manipulation of vertical subpixels is required for this. I lose 3 frames from not being able to kill the crow with the axe.

The damage route ended up being the same as with zggzdydp, but with more tricks to go on

The boss pattern is entirely fixed, and his invulnerability time is just barely too long to allow for a 2-cycle.

Rock Castle

Not much to mention about this stage. I destroy a candle at the end of the of the third section to make the screen go dark. Somewhat counterintuitively, this prevents a bat from waking up, allowing me to save a jump.

For the boss, I want to prevent him from swinging his sword, because that delays him from walking to the center, which he needs to do anyway for the second phase to start. It doesn't matter if I delay my hits for this, as the boss will walk to the center of the screen regardless. I also delay my final hit to save some lag. The second phase is all about having a source of damage in his hitbox as his invulnerability runs out. I need to save 2 HP for this, as it's not possible to stay on him otherwise.

Plant Castle

Awful stage, this. Full of annoying enemies, difficult planning, and lag. To begin with, going the upper route in the third screen is slightly faster, although having to kill the eye with a cross kills most of the improvement.

In the vertical climbing section, I use the skeletons for some vertical damage boosts up the rope, which is slightly faster than climbing. There's plenty of health in the stage, so I can afford to be loose with HP.

The spiders are peculiar. Each spider will activate once it comes fully on screen, after which point it will lower after a set amount of frames has passed, which is unique to each spider. Because of this, I forego doing rope boosts in the early part of this screen, as that wouldn't advance the camera anyway. I liberally use damage here to make it onto the ropes quicker. There's also a secret block containing a 1-up. Destroying it allows me to jump off the rope quicker, saving time overall.

Using a cross to destroy the Spitter projectile saves a frame of lag as the boss activates.

Castle I

This stage features a significant new shortcut. I tried so hard to find a way to beat the spike cycle in the second section, and, under the absolute optimum circumstances, it's just barely possible. To begin with, I need to have the optimal X subpixel position going into this room. I then need to take damage on the rope from one of the spitters to get up the rope quicker, but even then, the jump just barely falls short by some 16 subpixels. Thankfully, this is where I have an ace up my sleeve: By pausing the game, it's possible to delay the spike timer by some 3 frames, which just barely gives me the extra distance that I need to clear the gap.

Clearing the spike cycle saves 6 seconds, but it comes at some significant costs: I need to sacrifice 61 frames worth of damage boosts at the beginning of the level, the damage from the spitter projectile downgrades much whip, which I must reacquire for 65 frames, and pausing itself costs 61 frames. Overall, doing this skip saves 3 seconds though, and it avoids a ton of waiting.

The boss is entirely fixed, but making each cycle is very difficult due to the wide distances you have to cover. It is also very laggy, so several actions are taken to minimize lag during this section.

Castle II

At this point, the game becomes insane with everything that it throws at you. To begin with, I make use of several hidden porkchops, which allow me to take damage from the crushers, getting past both of them much quicker.

In the second half of the stage, I entirely follow zggzdydp's damage route. The big rope room is very laggy, and I have to slow down ocassionally, as cutting lag is faster overall than climbing. At the end of the stage, you come across a handful of spiders. I make sure to scroll all of them on the screen as fast as possible, making them drop down significantly quicker than previously. I also directly kill a spider without waiting for it. Christopher can't hold on to the rope, but you can jump from it on the first frame that you grab on to it.

Finally, we reach Soleiyu, the stage boss. He's very tough and mobile, and hard to hit. If you are within a certain distance to him, he will stop and whip, otherwise, he will move across the screen and throw knives occasionally. If you are on the lower parts of the stage, your whip won't reach him, but your crosses will. My objectuve thus is to get him to the right edge of the screen as quick as possible, and keep him there, so that I can pelt him with crosses.

You also get a really short timeframe between Soleiyu dying and the stage ending, so I don't have a lot of time to get rid of excess crosses, making heart planning cruical for this stage.


This is the final boss, Dracula. He spawns in fixed locations, where he remains for a fixed amount of time. The orbs he spawns around himself act as a shield which block the whip. They also produce an ungodly amount of lag doing so, so minimizing lag is imperative for this section.

I decided to end input on throwing the final cross. This delays his final hit for a bit, but shortens the overall completion time of the movie. With all that, Dracula is vanquished once more, and the game ends.

Other comments

And that was Christopher Castlevania 2: Electric Boogaloo. I'm overall pleased with how the movie came together, but there are a bunch of loose ends that bother me. If you want to improve this movie, here are a few places where you might want to start looking:

  • It might possibly be faster to go to Rock Castle first after all. Getting a cross there loses 11 frames, but it might possibly make up that time against the knights in Cloud Castle.

  • If there's many enemies left on screen, there may be an extra frame of screen transition lag. I didn't account for this until late in the movie.

  • Take more damage boosts on ropes, in particular in the big vertical room in Plant Castle

  • Taking damage from the Sickle Guy in the spike room in Castle I in a better way could allow Christopher to make the spike cycle without having to pause. This would save 61 frames

  • There's another damage boost in Castle I that I didn't go for, in the third room of the third section. By taking damage from the large bat in the room before, it's possible to go through the spitter. By then taking damage from the spitter itself in an optimal way, it's possible to clear the jump to the moving platform early, which would save around 20 frames. However, to do this, I would need an optimal X subpixel position, which is incompatible with the spike room strat before it. There's no fast way to adjust X subpixels after the spike room, so I had to forego it.

Nevertheless, I hope that you enjoy watching the movie. I'd like to thank zggzdydp for his previous run of the game, which served as inspiration and reference to mine many times over. I'd also like to thank Nach, who originally suggested the game to me on IRC. Lastly, shoutouts also go to FerretWarlord for listening to me yammer on about how much I hate this game on IRC. If you have any questions about the run, be sure to ask them, and I'll be happy to answer.

Until next time


Nach: This is a great improvement. There's a lot less down time waiting for stuff in this run, and it's more entertaining too. Great feedback. Accepting to Moons.

fsvgm777: Processing.

Similar submissions (by title and categories where applicable):