pokecrystal-board/engine/overworld/map_setup.asm

207 lines
2.8 KiB
NASM

RunMapSetupScript::
ldh a, [hMapEntryMethod]
and $f
dec a
ld c, a
ld b, 0
ld hl, MapSetupScripts
add hl, bc
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
call ReadMapSetupScript
ret
INCLUDE "data/maps/setup_scripts.asm"
ReadMapSetupScript:
.loop
ld a, [hli]
cp -1 ; end?
ret z
push hl
ld c, a
ld b, 0
ld hl, MapSetupCommands
add hl, bc
add hl, bc
add hl, bc
; bank
ld b, [hl]
inc hl
; address
ld a, [hli]
ld h, [hl]
ld l, a
; Bit 7 of the bank indicates a parameter.
; This is left unused.
bit 7, b
jr z, .go
pop de
ld a, [de]
ld c, a
inc de
push de
.go
ld a, b
and $7f
rst FarCall
pop hl
jr .loop
INCLUDE "data/maps/setup_script_pointers.asm"
EnableTextAcceleration:
xor a
ld [wDisableTextAcceleration], a
ret
ActivateMapAnims:
ld a, TRUE
ldh [hMapAnims], a
ret
SuspendMapAnims:
xor a ; FALSE
ldh [hMapAnims], a
ret
LoadMapObjects:
ld a, MAPCALLBACK_OBJECTS
call RunMapCallback
farcall LoadObjectMasks
farcall InitializeVisibleSprites
ret
ResetPlayerObjectAction:
ld hl, wPlayerSpriteSetupFlags
set PLAYERSPRITESETUP_RESET_ACTION_F, [hl]
ret
SkipUpdateMapSprites:
ld hl, wPlayerSpriteSetupFlags
set PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F, [hl]
ret
CheckUpdatePlayerSprite:
call .CheckForcedBiking
jr c, .ok
call .CheckSurfing
jr c, .ok
call .ResetSurfingOrBikingState
jr c, .ok
ret
.ok
call UpdatePlayerSprite
ret
.CheckForcedBiking:
and a
ld hl, wBikeFlags
bit BIKEFLAGS_ALWAYS_ON_BIKE_F, [hl]
ret z
ld a, PLAYER_BIKE
ld [wPlayerState], a
scf
ret
.ResetSurfingOrBikingState:
ld a, [wPlayerState]
cp PLAYER_NORMAL
jr z, .nope
cp PLAYER_SKATE
jr z, .nope
cp PLAYER_SURF
jr z, .surfing
cp PLAYER_SURF_PIKA
jr z, .surfing
call GetMapEnvironment
cp INDOOR_BUILDING
jr z, .no_biking
jr .nope
.no_biking
ld a, [wPlayerState]
cp PLAYER_BIKE
jr nz, .nope
.surfing
ld a, PLAYER_NORMAL
ld [wPlayerState], a
scf
ret
.nope
and a
ret
.CheckSurfing:
call CheckOnWater
jr nz, .nope2
ld a, [wPlayerState]
cp PLAYER_SURF
jr z, .is_surfing
cp PLAYER_SURF_PIKA
jr z, .is_surfing
ld a, PLAYER_SURF
ld [wPlayerState], a
.is_surfing
scf
ret
.nope2
and a
ret
FadeOutMapMusic:
ld a, 6
call SkipMusic
ret
ApplyMapPalettes:
farcall _UpdateTimePals
ret
FadeMapMusicAndPalettes:
ld e, LOW(MUSIC_NONE)
ld a, [wMusicFadeID]
ld d, HIGH(MUSIC_NONE)
ld a, [wMusicFadeID + 1]
ld a, $4
ld [wMusicFade], a
call RotateThreePalettesRight
ret
ForceMapMusic:
ld a, [wPlayerState]
cp PLAYER_BIKE
jr nz, .notbiking
call MinVolume
ld a, $88
ld [wMusicFade], a
.notbiking
call TryRestartMapMusic
ret
ResetLevelScopedEventFlags:
ld hl, wEventFlags + EVENT_LEVEL_SCOPED_FLAGS_START / 8
ld c, (EVENT_LEVEL_SCOPED_FLAGS_END / 8) - (EVENT_LEVEL_SCOPED_FLAGS_START / 8)
xor a
.loop
ld [hli], a
dec c
jr nz, .loop
ret
MapCallbackAtEndMapSetup:
ld a, MAPCALLBACK_ENDMAPSETUP
jp RunMapCallback