pokered/scripts/LoreleisRoom.asm

150 lines
3.7 KiB
NASM

LoreleisRoom_Script:
call LoreleiShowOrHideExitBlock
call EnableAutoTextBoxDrawing
ld hl, LoreleisRoomTrainerHeaders
ld de, LoreleisRoom_ScriptPointers
ld a, [wLoreleisRoomCurScript]
call ExecuteCurMapScriptInTable
ld [wLoreleisRoomCurScript], a
ret
LoreleiShowOrHideExitBlock:
; Blocks or clears the exit to the next room.
ld hl, wCurrentMapScriptFlags
bit BIT_CUR_MAP_LOADED_1, [hl]
res BIT_CUR_MAP_LOADED_1, [hl]
ret z
ld hl, wElite4Flags
set BIT_STARTED_ELITE_4, [hl]
CheckEvent EVENT_BEAT_LORELEIS_ROOM_TRAINER_0
jr z, .blockExitToNextRoom
ld a, $5
jr .setExitBlock
.blockExitToNextRoom
ld a, $24
.setExitBlock
ld [wNewTileBlockID], a
lb bc, 0, 2
predef_jump ReplaceTileBlock
ResetLoreleiScript:
xor a ; SCRIPT_LORELEISROOM_DEFAULT
ld [wLoreleisRoomCurScript], a
ret
LoreleisRoom_ScriptPointers:
def_script_pointers
dw_const LoreleisRoomDefaultScript, SCRIPT_LORELEISROOM_DEFAULT
dw_const DisplayEnemyTrainerTextAndStartBattle, SCRIPT_LORELEISROOM_LORELEI_START_BATTLE
dw_const LoreleisRoomLoreleiEndBattleScript, SCRIPT_LORELEISROOM_LORELEI_END_BATTLE
dw_const LoreleisRoomPlayerIsMovingScript, SCRIPT_LORELEISROOM_PLAYER_IS_MOVING
dw_const LoreleisRoomNoopScript, SCRIPT_LORELEISROOM_NOOP
LoreleisRoomNoopScript:
ret
LoreleiScriptWalkIntoRoom:
; Walk six steps upward.
ld hl, wSimulatedJoypadStatesEnd
ld a, D_UP
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
ld a, $6
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, SCRIPT_LORELEISROOM_PLAYER_IS_MOVING
ld [wLoreleisRoomCurScript], a
ld [wCurMapScript], a
ret
LoreleisRoomDefaultScript:
ld hl, LoreleiEntranceCoords
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
ldh [hJoyPressed], a
ldh [hJoyHeld], a
ld [wSimulatedJoypadStatesEnd], a
ld [wSimulatedJoypadStatesIndex], a
ld a, [wCoordIndex]
cp $3 ; Is player standing one tile above the exit?
jr c, .stopPlayerFromLeaving
CheckAndSetEvent EVENT_AUTOWALKED_INTO_LORELEIS_ROOM
jr z, LoreleiScriptWalkIntoRoom
.stopPlayerFromLeaving
ld a, TEXT_LORELEISROOM_DONT_RUN_AWAY
ldh [hTextID], a
call DisplayTextID ; "Don't run away!"
ld a, D_UP
ld [wSimulatedJoypadStatesEnd], a
ld a, $1
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, SCRIPT_LORELEISROOM_PLAYER_IS_MOVING
ld [wLoreleisRoomCurScript], a
ld [wCurMapScript], a
ret
LoreleiEntranceCoords:
dbmapcoord 4, 10
dbmapcoord 5, 10
dbmapcoord 4, 11
dbmapcoord 5, 11
db -1 ; end
LoreleisRoomPlayerIsMovingScript:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
call Delay3
xor a
ld [wJoyIgnore], a
ld [wLoreleisRoomCurScript], a
ld [wCurMapScript], a
ret
LoreleisRoomLoreleiEndBattleScript:
call EndTrainerBattle
ld a, [wIsInBattle]
cp $ff
jp z, ResetLoreleiScript
ld a, TEXT_LORELEISROOM_LORELEI
ldh [hTextID], a
jp DisplayTextID
LoreleisRoom_TextPointers:
def_text_pointers
dw_const LoreleisRoomLoreleiText, TEXT_LORELEISROOM_LORELEI
dw_const LoreleisRoomLoreleiDontRunAwayText, TEXT_LORELEISROOM_DONT_RUN_AWAY
LoreleisRoomTrainerHeaders:
def_trainers
LoreleisRoomTrainerHeader0:
trainer EVENT_BEAT_LORELEIS_ROOM_TRAINER_0, 0, LoreleisRoomLoreleiBeforeBattleText, LoreleisRoomLoreleiEndBattleText, LoreleisRoomLoreleiAfterBattleText
db -1 ; end
LoreleisRoomLoreleiText:
text_asm
ld hl, LoreleisRoomTrainerHeader0
call TalkToTrainer
jp TextScriptEnd
LoreleisRoomLoreleiBeforeBattleText:
text_far _LoreleisRoomLoreleiBeforeBattleText
text_end
LoreleisRoomLoreleiEndBattleText:
text_far _LoreleisRoomLoreleiEndBattleText
text_end
LoreleisRoomLoreleiAfterBattleText:
text_far _LoreleisRoomLoreleiAfterBattleText
text_end
LoreleisRoomLoreleiDontRunAwayText:
text_far _LoreleisRoomLoreleiDontRunAwayText
text_end