1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
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, PAD_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, PAD_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
|