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
151
|
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, 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_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, PAD_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
|