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
|
BrunosRoom_Script:
call BrunoShowOrHideExitBlock
call EnableAutoTextBoxDrawing
ld hl, BrunosRoomTrainerHeaders
ld de, BrunosRoom_ScriptPointers
ld a, [wBrunosRoomCurScript]
call ExecuteCurMapScriptInTable
ld [wBrunosRoomCurScript], a
ret
BrunoShowOrHideExitBlock:
; Blocks or clears the exit to the next room.
ld hl, wCurrentMapScriptFlags
bit 5, [hl]
res 5, [hl]
ret z
CheckEvent EVENT_BEAT_BRUNOS_ROOM_TRAINER_0
jr z, .blockExitToNextRoom
ld a, $5
jp .setExitBlock
.blockExitToNextRoom
ld a, $24
.setExitBlock
ld [wNewTileBlockID], a
lb bc, 0, 2
predef_jump ReplaceTileBlock
ResetBrunoScript:
xor a ; SCRIPT_BRUNOSROOM_DEFAULT
ld [wBrunosRoomCurScript], a
ret
BrunosRoom_ScriptPointers:
def_script_pointers
dw_const BrunosRoomDefaultScript, SCRIPT_BRUNOSROOM_DEFAULT
dw_const DisplayEnemyTrainerTextAndStartBattle, SCRIPT_BRUNOSROOM_BRUNO_START_BATTLE
dw_const BrunosRoomBrunoEndBattleScript, SCRIPT_BRUNOSROOM_BRUNO_END_BATTLE
dw_const BrunosRoomPlayerIsMovingScript, SCRIPT_BRUNOSROOM_PLAYER_IS_MOVING
dw_const BrunosRoomNoopScript, SCRIPT_BRUNOSROOM_NOOP
BrunosRoomNoopScript:
ret
BrunoScriptWalkIntoRoom:
; 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_BRUNOSROOM_PLAYER_IS_MOVING
ld [wBrunosRoomCurScript], a
ld [wCurMapScript], a
ret
BrunosRoomDefaultScript:
ld hl, BrunoEntranceCoords
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_BRUNOS_ROOM
jr z, BrunoScriptWalkIntoRoom
.stopPlayerFromLeaving
ld a, TEXT_BRUNOSROOM_BRUNO_DONT_RUN_AWAY
ldh [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, SCRIPT_BRUNOSROOM_PLAYER_IS_MOVING
ld [wBrunosRoomCurScript], a
ld [wCurMapScript], a
ret
BrunoEntranceCoords:
dbmapcoord 4, 10
dbmapcoord 5, 10
dbmapcoord 4, 11
dbmapcoord 5, 11
db -1 ; end
BrunosRoomPlayerIsMovingScript:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
call Delay3
xor a ; SCRIPT_BRUNOSROOM_DEFAULT
ld [wJoyIgnore], a
ld [wBrunosRoomCurScript], a
ld [wCurMapScript], a
ret
BrunosRoomBrunoEndBattleScript:
call EndTrainerBattle
ld a, [wIsInBattle]
cp $ff
jp z, ResetBrunoScript
ld a, TEXT_BRUNOSROOM_BRUNO
ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
BrunosRoom_TextPointers:
def_text_pointers
dw_const BrunosRoomBrunoText, TEXT_BRUNOSROOM_BRUNO
dw_const BrunosRoomBrunoDontRunAwayText, TEXT_BRUNOSROOM_BRUNO_DONT_RUN_AWAY
BrunosRoomTrainerHeaders:
def_trainers
BrunosRoomTrainerHeader0:
trainer EVENT_BEAT_BRUNOS_ROOM_TRAINER_0, 0, BrunoBeforeBattleText, BrunoEndBattleText, BrunoAfterBattleText
db -1 ; end
BrunosRoomBrunoText:
text_asm
ld hl, BrunosRoomTrainerHeader0
call TalkToTrainer
jp TextScriptEnd
BrunoBeforeBattleText:
text_far _BrunoBeforeBattleText
text_end
BrunoEndBattleText:
text_far _BrunoEndBattleText
text_end
BrunoAfterBattleText:
text_far _BrunoAfterBattleText
text_end
BrunosRoomBrunoDontRunAwayText:
text_far _BrunosRoomBrunoDontRunAwayText
text_end
|