Change Default Battle Theme (Map Flag)
General Information[edit]
Chrono Trigger[edit]
Thanks to PowerPanda
What makes this possible: Chrono Trigger does something rather odd in its code. Rather than direct-referencing the ROM for what the random battle theme is, it instead loads the theme's Index # into a RAM Byte (7E/01FA), and refreshes this value on every map load.
I have taken advantage of that and put in a hook that checks the Map Index # against a lookup table, allowing you to define a different random battle theme on a map-by-map basis. While many of the maps in the game do not have any random battles, they are included anyway to make this ASM compatible with any future romhack.
At C0/0C58 (00x0C58), the following code is in the base rom: A9 45 LDA #$45 ;Load song $45 - Battle 1 85 FA STA 7E/01FA ;Write song to the "current battle theme" RAM byte
You will want to replace those 4 bytes with the following: 22 ?? ?? ?? JSL !freespace ;Jump to the new subroutine
Then, in the freespace area, add this code: !freespace DA PHX Store the old X value, to be safe AE 00 01 LDX $7E/0100 Load the current map number to X BF ?? ?? ?? LDA,X !battletable Look up map's battle theme in the battle table 85 FA STA $7E/01FA Save "Current battle theme" FA PLX Retrieve the old X value 6B RTL Return
!battletable [This table consists of $200 bytes, one corresponding to each map)</pre>
Vanilla Bug[edit]
This is a vanilla bug that never actually shows up in the original game. As such, it's main use is for hackers and people who want to use my other ASM that allows you to set random battle music on a map-by-map basis. Anyway, the bug is that if your random battle music matches the music already playing on the field, and the battle itself is not set to use the field music, the game never switches sound effect banks. Credit to Reld on this one. I found the bug itself, but he found the cause of the bug.
It's easy to reproduce. In Temporal Flux, set Guardia Forest (Present) to have the field music of "$45 - Battle 1" and get into a random battle. Make sure to bring Frog, not because it's important for recreating the bug, but because his sword strike sound effect gets turned into a cat's meow.
To fix this, we just need to compare the battle music with the field music, and say that if they match the game should treat it like the random battle had the flag set to not use battle music. That flag causes the code to skip to a seperate routine that loads the sound effects, but not the music.
;Starting at C0/1BBF JML $46/1EFC 5C FC 1E 46 ;C0/1BBF Jump to "Music Check" NOP EA ;C0/1BC3 This byte is never called ;Music Check LDA $FA A5 FA ;46/1EFC Load the battle music index number CMP $7E/29AE CF AE 29 7E ;46/1EFE Is it the same as the current song? BEQ $1F11 F0 0D ;46/1F02 If so, jump to "Same Song" CMP $C7/0AE9 CF E9 0A C7 ;46/1F04 Is it outside the maximum song range? BCS $1F11 B0 07 ;46/1F08 If so, jump to "Same Song" STA $1E01 8D 01 1E ;46/1F0A Save the (different) battle music JML C0/1BC4 5C C4 1B C0 ;46/1F0D Jump to "Different Song" ;Same Song LDA #$40 A9 40 ;46/1F11 Flag: Skip Battle Music Transition STA $7E/2A1F 8F 1F 2A 7E ;46/1F13 Save to correct RAM value JML C0/1BD5 5C D5 1B C0 ;46/1417 Process like battle with no music change ;Different Song LDA #$FF A9 FF ;C0/1BC4 Original code, relocated STA $1E10 8D 10 1E ;C0/1BC6 Original code, relocated
From: Modification