TASVideos

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

Submission #6850: hellagels & klmz's GBA Castlevania: Harmony of Dissonance in 04:58.45

Console: Game Boy Advance
Game name: Castlevania: Harmony of Dissonance
Game version: USA
ROM filename: Castlevania - Harmony of Dissonance (U) [!].gba
Branch:
Emulator: VBA-rr v23.6
Movie length: 04:58.45
FrameCount: 17826
Re-record count: 39738
Author's real name: 刘容僖 & K.H.
Author's nickname: hellagels & klmz
Submitter: hellagels
Submitted at: 2020-08-22 12:50:22
Text last edited at: 2020-09-04 15:44:12
Text last edited by: hellagels
Download: Download (1221 bytes)
Status: judging underway
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:
This is a 10251 frame, or 2:51.63, improvement over the current movie.

Goal

  • Aims for good ending
  • Abuses programming errors
  • Uses warps
  • Manipulates luck

Encode

Glitches

Talos Skip
Do a low jump, jump attack, and then get hit by Talos, Juste could dive into the floor and then wrong warp happens, skipping the whole section of being chased by Talos. There are several possible destinations of this wrong warp. Whether the glitch happens and the destination of wrong warp depend on sub-X and sub-Y. The side effect of the skip is that the camera stop moving. Objects, including candles, doors, and enemies, outside the camera do not get loaded.

In-event State
When an event is triggered, Juste get invincible and cannot freely move, and the game does not load other rooms even if Juste move outside the current room, except the case that the name of the region is showed on the screen. If a room is loaded while in event, taking advantage of region name display, the in-event flag would be still set, but Juste could do some move now. In such a state, the game will not load other rooms when being outside the current room, which make memory corruption possible, and you...
  • can slide and use the sub weapon of fist, but both these two will immediately suspend;
  • cannot double jump, high jump, or float by using floating boots;
  • can dive kick.

Memory Corruption
Do not try this glitch on real cartridge, it will turn your cartridge into garbage if the demo version flag is set. 0200008C-0200030B is a bitfield that records which rooms are visited. According to whether you are in Castle A or Castle B, the coordinate of the room to the map, the coordinate of Juste to the room, the game continually set the corresponding bit's value to 1. By moving extremely far outside the current room, which require in-event state, memory corruption happens if the corresponding bit is outside the bitfield interval.

Details of minimap RAM area

Please read this section after watching the embedded encode, it gives a good visualization to the RAM map.

The minimap is separated into left half and right half. Each chunk records a 32*40*2 (=2560 blocks/ bits) rectangle region, a double word is used for the whole horizontal line of Castle A in that rectangle region, the next double word is for the same line in Castle B, lines are records from top to bottom. 0200008C-020001CB is for left half and 020001CC-0200030B is for right half. RAM outside the minimap RAM area is also divided into chunks of same size. We can move to prior chunk by crossing the top and left border of the current chunk, and move to next chunk by crossing the bottom and right border.

Double words with address's last digit 4 or C can only be corrupted from Castle A, and those with address's last digit 0 or 8 can only be corrupted from Castle B. Luckily those flags need to be set in this run is in Castle A.

Route comments

We delay 21 frames at the dialog with Maxim, for manipulating luck. The rain animation calls up the RNG routine around 80 times per frame, much more frequent than other routines. We need two big heart drops and massive critical hits to reduce one round of multiple hit in Pike Master fight, and suitable RNG is very rare.

After skipping Talos, we pick axe. Axe is necessary for the whip launch which warp to Castle B, and it speeds up the Pike Master fight.

In the memory corruption section, we inevitably corrupt save room ID. Bit 0 of 0200030C, where save room ID is stored, is for whether the room is in Castle A or B, bits 1-7 are for X position of the room, bits 8-13 are for Y position of the room, bits 14-15 are unused. A illegal save room ID will cause the game freeze when loading the state. In the encode we only list one block (the game over trigger) not to visit, in fact there are lots of blocks need to avoid, those are mainly pointers. Corrupting those pointers can cause soft lock/freeze or reset. 0200043D's value is 0 in normal state and 1 underwater, we set this value to 3 so that the Y speed reduces to 1/8 of normal state, just low enough to set Maxim, Dracula, and Dracula Wraith fights' ending flags in a row.

After good ending's flag and the three bosses' flags are set, save and reset the game and head to final boss room. (Normally Maxim's Ring is required for good ending.) Since all three boss fights' flags are set, no boss fight happens there, and the movie ends after dialog.

Lua Scripts

Map Viewer

https://drive.google.com/file/d/1sTynqxAoef3Fjd8mXYyeESTSSXTKVGX_/view?usp=sharing
You need Lua-GD to run this script. Lua-GD can be download here. Decompress it and you get some .dll files, place them at the same directory of VBA-rr.exe.

Memory Corruption Visualizer

http://tasvideos.org/userfiles/info/65650966036547896
Address display is very awkward because there is no enough room for that.

History Runs

There are two finished runs that we did not submit here.

Any% in 5:30.38 by hellagels & klmz:

Niconico
Bilibili

We did not know how to skip Talos until a week after this run is upload to Niconico and Bilibili. We did some multiple hits without sub weapon. Still worth watching.

Any% in 5:00.16 by hellagels & klmz:

Niconico
Bilibili

Pretty much the same as this submission, the only difference is that we did not manipulated luck by taking advantage of the rain animation.


GoddessMaria: Castlevania... Judgement? Nah, just judging.


Similar submissions (by title and categories where applicable):