summaryrefslogtreecommitdiff
path: root/scripts/LoreleisRoom.asm
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/LoreleisRoom.asm')
-rwxr-xr-xscripts/LoreleisRoom.asm153
1 files changed, 153 insertions, 0 deletions
diff --git a/scripts/LoreleisRoom.asm b/scripts/LoreleisRoom.asm
new file mode 100755
index 00000000..81142377
--- /dev/null
+++ b/scripts/LoreleisRoom.asm
@@ -0,0 +1,153 @@
+LoreleisRoom_Script:
+ call LoreleiShowOrHideExitBlock
+ call EnableAutoTextBoxDrawing
+ ld hl, LoreleiTrainerHeader0
+ 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 5, [hl]
+ res 5, [hl]
+ ret z
+ ld hl, wBeatLorelei
+ set 1, [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
+ ld [wLoreleisRoomCurScript], a
+ ret
+
+LoreleisRoom_ScriptPointers:
+ dw LoreleiScript0
+ dw DisplayEnemyTrainerTextAndStartBattle
+ dw LoreleiScript2
+ dw LoreleiScript3
+ dw LoreleiScript4
+
+LoreleiScript4:
+ 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, $3
+ ld [wLoreleisRoomCurScript], a
+ ld [wCurMapScript], a
+ ret
+
+LoreleiScript0:
+ ld hl, LoreleiEntranceCoords
+ call ArePlayerCoordsInArray
+ jp nc, CheckFightingMapTrainers
+ xor a
+ ld [hJoyPressed], a
+ ld [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, $2
+ ld [hSpriteIndexOrTextID], a
+ call DisplayTextID ; "Don't run away!"
+ ld a, D_UP
+ ld [wSimulatedJoypadStatesEnd], a
+ ld a, $1
+ ld [wSimulatedJoypadStatesIndex], a
+ call StartSimulatingJoypadStates
+ ld a, $3
+ ld [wLoreleisRoomCurScript], a
+ ld [wCurMapScript], a
+ ret
+
+LoreleiEntranceCoords:
+ db $0A,$04
+ db $0A,$05
+ db $0B,$04
+ db $0B,$05
+ db $FF
+
+LoreleiScript3:
+ ld a, [wSimulatedJoypadStatesIndex]
+ and a
+ ret nz
+ call Delay3
+ xor a
+ ld [wJoyIgnore], a
+ ld [wLoreleisRoomCurScript], a
+ ld [wCurMapScript], a
+ ret
+
+LoreleiScript2:
+ call EndTrainerBattle
+ ld a, [wIsInBattle]
+ cp $ff
+ jp z, ResetLoreleiScript
+ ld a, $1
+ ld [hSpriteIndexOrTextID], a
+ jp DisplayTextID
+
+LoreleisRoom_TextPointers:
+ dw LoreleiText1
+ dw LoreleiDontRunAwayText
+
+LoreleiTrainerHeader0:
+ dbEventFlagBit EVENT_BEAT_LORELEIS_ROOM_TRAINER_0
+ db ($0 << 4) ; trainer's view range
+ dwEventFlagAddress EVENT_BEAT_LORELEIS_ROOM_TRAINER_0
+ dw LoreleiBeforeBattleText ; TextBeforeBattle
+ dw LoreleiAfterBattleText ; TextAfterBattle
+ dw LoreleiEndBattleText ; TextEndBattle
+ dw LoreleiEndBattleText ; TextEndBattle
+
+ db $ff
+
+LoreleiText1:
+ TX_ASM
+ ld hl, LoreleiTrainerHeader0
+ call TalkToTrainer
+ jp TextScriptEnd
+
+LoreleiBeforeBattleText:
+ TX_FAR _LoreleiBeforeBattleText
+ db "@"
+
+LoreleiEndBattleText:
+ TX_FAR _LoreleiEndBattleText
+ db "@"
+
+LoreleiAfterBattleText:
+ TX_FAR _LoreleiAfterBattleText
+ db "@"
+
+LoreleiDontRunAwayText:
+ TX_FAR _LoreleiDontRunAwayText
+ db "@"