Skip to content

Maps that require Flash

Whatever-Man edited this page Apr 16, 2022 · 9 revisions

This tutorial is for how to edit which maps require FLASH to see in.

Contents

Location of original code

The location of where this is found is in home/overworld.asm. Credits go to wrulfy on the pret Discord server for finding the location, and Drush for correction with asm logic.

Specifically it is under the WarpFound2:: section

Original code:

WarpFound2::
	ld a, [wNumberOfWarps]
	sub c
	ld [wWarpedFromWhichWarp], a ; save ID of used warp
	ld a, [wCurMap]
	ld [wWarpedFromWhichMap], a
	call CheckIfInOutsideMap
	jr nz, .indoorMaps
; this is for handling "outside" maps that can't have the 0xFF destination map
	ld a, [wCurMap]
	ld [wLastMap], a
	ld a, [wCurMapWidth]
	ld [wUnusedD366], a ; not read
	ldh a, [hWarpDestinationMap]
	ld [wCurMap], a
	cp ROCK_TUNNEL_1F
	jr nz, .notRockTunnel
	ld a, $06
	ld [wMapPalOffset], a
	call GBFadeOutToBlack
.notRockTunnel
	call PlayMapChangeSound
	jr .done

1. Understanding the code setup for what needs FLASH

What matters to us are the few lines at and after "cp ROCK_TUNNEL_1F" which are shown here below for simplification.

	cp ROCK_TUNNEL_1F
	jr nz, .notRockTunnel
	ld a, $06
	ld [wMapPalOffset], a
	call GBFadeOutToBlack
.notRockTunnel
	call PlayMapChangeSound
	jr .done

Now to understand, I'm going to separate it up even more.

When entering a new map, this line checks if the new map is ROCK_TUNNEL_1F or more simply maps\RockTunnel1F.blk

	cp ROCK_TUNNEL_1F

The next line gives a divergent destination based on if yes/no. "jr" means "Jump to close location". "nz" means "If equals zero", or in other words, "If not RockTunnel", since that is what we checked for. It translates to "If not ROCK_TUNNEL_1F, then skip the next few lines and go to the sub-section ".notRockTunnel"

	jr nz, .notRockTunnel

If it is yes ROCK_TUNNEL_1F, then it continues down the command list and loads the next 3 lines that have as an effect to create the "FLASH needed" state.

	ld a, $06
	ld [wMapPalOffset], a
	call GBFadeOutToBlack

If it is sent to the sub-section ".notRockTunnel", then it jumps (jr) here.

.notRockTunnel

Nothing fancy, just loads PlayMapChangeSound. Whether iit skips down or continues down both will complete with the last 2 lines. These are musical notation and completion.

	call PlayMapChangeSound
	jr .done

2. Implementing a map

This is the editing part. All we have to do is add in a new "check & jump" to the section.

For example, if I wanted to make the Power Plant require FLASH then I would need to create and insert the following.

	cp POWER_PLANT               ; Checks if POWER_PLANT
	jr z, .needsFlash            ; If yes, then jump to .needsFlash
.needsFlash

We just have to insert the check before the Rock Tunnel check and the jump location after the .needsFlash location. This applies the FLASH-needed states before it checks for notRockTunnel.

+	cp POWER_PLANT               ; Checks if POWER_PLANT
+	jr z, .needsFlash            ; If yes, then jump to .needsFlash
	cp ROCK_TUNNEL_1F            ; Checks if ROCK_TUNNEL_1F
	jr nz, .notRockTunnel        ; If not, then jump to .notRockTunnel 
+.needsFlash
	ld a, $06                    ; needs FLASH
	ld [wMapPalOffset], a        ; needs FLASH
	call GBFadeOutToBlack        ; needs FLASH
.notRockTunnel                   ; Jump-to location if skipping apply-FLASH
	call PlayMapChangeSound
	jr .done

Add as many location as you want, with the requirement being, it must be entered from the Overworld.

Clone this wiki locally