pokered/scripts/AgathasRoom.asm

151 lines
3.6 KiB
NASM

AgathasRoom_Script:
call AgathaShowOrHideExitBlock
call EnableAutoTextBoxDrawing
ld hl, AgathasRoomTrainerHeaders
ld de, AgathasRoom_ScriptPointers
ld a, [wAgathasRoomCurScript]
call ExecuteCurMapScriptInTable
ld [wAgathasRoomCurScript], a
ret
AgathaShowOrHideExitBlock:
; 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
CheckEvent EVENT_BEAT_AGATHAS_ROOM_TRAINER_0
jr z, .blockExitToNextRoom
ld a, $e
jp .setExitBlock
.blockExitToNextRoom
ld a, $3b
.setExitBlock
ld [wNewTileBlockID], a
lb bc, 0, 2
predef_jump ReplaceTileBlock
ResetAgathaScript:
xor a ; SCRIPT_AGATHASROOM_DEFAULT
ld [wAgathasRoomCurScript], a
ret
AgathasRoom_ScriptPointers:
def_script_pointers
dw_const AgathasRoomDefaultScript, SCRIPT_AGATHASROOM_DEFAULT
dw_const DisplayEnemyTrainerTextAndStartBattle, SCRIPT_AGATHASROOM_AGATHA_START_BATTLE
dw_const AgathasRoomAgathaEndBattleScript, SCRIPT_AGATHASROOM_AGATHA_END_BATTLE
dw_const AgathasRoomPlayerIsMovingScript, SCRIPT_AGATHASROOM_PLAYER_IS_MOVING
dw_const AgathasRoomNoopScript, SCRIPT_AGATHASROOM_NOOP
AgathasRoomNoopScript:
ret
AgathaScriptWalkIntoRoom:
; 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_AGATHASROOM_PLAYER_IS_MOVING
ld [wAgathasRoomCurScript], a
ld [wCurMapScript], a
ret
AgathasRoomDefaultScript:
ld hl, AgathaEntranceCoords
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_AGATHAS_ROOM
jr z, AgathaScriptWalkIntoRoom
.stopPlayerFromLeaving
ld a, TEXT_AGATHASROOM_AGATHA_DONT_RUN_AWAY
ldh [hTextID], a
call DisplayTextID
ld a, D_UP
ld [wSimulatedJoypadStatesEnd], a
ld a, $1
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, SCRIPT_AGATHASROOM_PLAYER_IS_MOVING
ld [wAgathasRoomCurScript], a
ld [wCurMapScript], a
ret
AgathaEntranceCoords:
dbmapcoord 4, 10
dbmapcoord 5, 10
dbmapcoord 4, 11
dbmapcoord 5, 11
db -1 ; end
AgathasRoomPlayerIsMovingScript:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
call Delay3
xor a
ld [wJoyIgnore], a
ld [wAgathasRoomCurScript], a
ld [wCurMapScript], a
ret
AgathasRoomAgathaEndBattleScript:
call EndTrainerBattle
ld a, [wIsInBattle]
cp $ff
jp z, ResetAgathaScript
ld a, TEXT_AGATHASROOM_AGATHA
ldh [hTextID], a
call DisplayTextID
ld a, SCRIPT_CHAMPIONSROOM_PLAYER_ENTERS
ld [wChampionsRoomCurScript], a
ret
AgathasRoom_TextPointers:
def_text_pointers
dw_const AgathasRoomAgathaText, TEXT_AGATHASROOM_AGATHA
dw_const AgathasRoomAgathaDontRunAwayText, TEXT_AGATHASROOM_AGATHA_DONT_RUN_AWAY
AgathasRoomTrainerHeaders:
def_trainers
AgathasRoomTrainerHeader0:
trainer EVENT_BEAT_AGATHAS_ROOM_TRAINER_0, 0, AgathaBeforeBattleText, AgathaEndBattleText, AgathaAfterBattleText
db -1 ; end
AgathasRoomAgathaText:
text_asm
ld hl, AgathasRoomTrainerHeader0
call TalkToTrainer
jp TextScriptEnd
AgathaBeforeBattleText:
text_far _AgathaBeforeBattleText
text_end
AgathaEndBattleText:
text_far _AgathaEndBattleText
text_end
AgathaAfterBattleText:
text_far _AgathaAfterBattleText
text_end
AgathasRoomAgathaDontRunAwayText:
text_far _AgathasRoomAgathaDontRunAwayText
text_end