pokecrystal-board/engine/board/spaces.asm

217 lines
4.1 KiB
NASM
Executable File

BoardSpaceScripts:: ; used only for BANK(BoardSpaceScripts)
BlueSpaceScript::
scall ArriveToRegularSpaceScript
iftrue .not_landed
wait 400
scall LandedInRegularSpaceScript
.not_landed
end
RedSpaceScript::
scall ArriveToRegularSpaceScript
iftrue .not_landed
wait 400
scall LandedInRegularSpaceScript
.not_landed
end
GreenSpaceScript::
scall ArriveToRegularSpaceScript
iftrue .not_landed
wait 400
scall LandedInRegularSpaceScript
.not_landed
end
ItemSpaceScript::
scall ArriveToRegularSpaceScript
iftrue .not_landed
wait 400
scall LandedInRegularSpaceScript
.not_landed
end
PokemonSpaceScript::
scall ArriveToRegularSpaceScript
iftrue .not_landed
wait 600
loadpikachudata
startbattle
reloadmapafterbattle
wait 100
scall LandedInRegularSpaceScript
.not_landed
end
MinigameSpaceScript::
scall ArriveToRegularSpaceScript
iftrue .not_landed
wait 600
scall LandedInRegularSpaceScript
.not_landed
end
EndSpaceScript::
; fading out will kick before reaching HandleMapBackground, so update sprites after any change
scall ArriveToRegularSpaceScript
wait 400
playmusic MUSIC_TRAINER_VICTORY
wait 600
callasm .FadeOutSlow ; 800 ms
wait 400
exitoverworld CLEARED_LEVEL
endall
.FadeOutSlow:
; clear spaces left sprites
ld hl, wDisplaySecondarySprites
res SECONDARYSPRITES_SPACES_LEFT_F, [hl]
call UpdateActiveSprites
; fade out slow to white
ld b, RGBFADE_TO_WHITE_8BGP_8OBP
jp DoRGBFadeEffect
GreySpaceScript::
scall ArriveToRegularSpaceScript
iftrue .not_landed
scall LandedInRegularSpaceScript
.not_landed
end
ArriveToRegularSpaceScript:
playsound SFX_PRESENT
callasm ArriveToRegularSpace
end
ArriveToRegularSpace:
; load new space
ld a, [wCurSpaceNextSpace]
ld [wCurSpace], a
call LoadCurSpaceData
; decrease wSpacesLeft and copy to hScriptVar
ld hl, wSpacesLeft
dec [hl]
ld a, [hl]
ld [hScriptVar], a
; if landed, clear spaces left sprites
and a
jr nz, .not_landed
ld hl, wDisplaySecondarySprites
res SECONDARYSPRITES_SPACES_LEFT_F, [hl]
.not_landed
; update sprites
jp UpdateActiveSprites
LandedInRegularSpaceScript:
callasm LandedInRegularSpace
end
LandedInRegularSpace:
; disable the space effect (turn the space into a grey space)
ld a, [wCurSpaceXCoord]
add 4
ld d, a
ld a, [wCurSpaceYCoord]
add 4
ld e, a
call GetBlockLocation
ld a, [hl]
and UNIQUE_SPACE_METATILES_MASK
add FIRST_GREY_SPACE_METATILE
ld [hl], a
; trigger end of turn
ld a, BOARDEVENT_END_TURN
ldh [hCurBoardEvent], a
ret
BranchSpaceScript::
scall .ArriveToBranchSpaceScript
callasm .PromptPlayerToChooseDirection
wait 200
end
.ArriveToBranchSpaceScript:
playsound SFX_TWINKLE
wait 400
callasm .ArriveToBranchSpace
end
.ArriveToBranchSpace:
; load new space
ld a, [wCurSpaceNextSpace]
ld [wCurSpace], a
call LoadCurSpaceData
; load its branch data
call LoadTempSpaceBranchData
call .DisableDirectionsRequiringLockedTechniques
; draw arrows for valid directions
farcall LoadBranchArrowsGFX
ld hl, wDisplaySecondarySprites
set SECONDARYSPRITES_BRANCH_ARROWS_F, [hl]
; update sprites
jp UpdateActiveSprites
.DisableDirectionsRequiringLockedTechniques:
ret
.PromptPlayerToChooseDirection:
; compute available directions in b as joypad dpad flags
ld hl, wTempSpaceBranchStruct
ld b, 0
ld a, [hli]
cp -1
jr z, .not_right
set D_RIGHT_F, b
.not_right
ld a, [hli]
cp -1
jr z, .not_left
set D_LEFT_F, b
.not_left
ld a, [hli]
cp -1
jr z, .not_up
set D_UP_F, b
.not_up
ld a, [hli]
cp -1
jr z, .joypad_loop
set D_DOWN_F, b
; sample input of an available direction
.joypad_loop
call GetJoypad
ldh a, [hJoyPressed]
and b
jr z, .joypad_loop
; load the next space for the chosen direction
ld hl, wTempSpaceBranchStruct
bit D_RIGHT_F, a
jr nz, .ok
inc hl
bit D_LEFT_F, a
jr nz, .ok
inc hl
bit D_UP_F, a
jr nz, .ok
inc hl
.ok
ld a, [hl]
ld [wCurSpaceNextSpace], a
ld hl, wDisplaySecondarySprites
res SECONDARYSPRITES_BRANCH_ARROWS_F, [hl]
jp PlayClickSFX
UnionSpaceScript::
callasm .ArriveToUnionSpace
end
.ArriveToUnionSpace:
; these are just transition spaces, so simply load the next space
ld a, [wCurSpaceNextSpace]
ld [wCurSpace], a
call LoadCurSpaceData
end