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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
SeafoamIslandsB4F_Script:
call EnableAutoTextBoxDrawing
ld a, [wSeafoamIslandsB4FCurScript]
ld hl, SeafoamIslandsB4F_ScriptPointers
jp CallFunctionInTable
SeafoamIslandsB4FResetScript:
xor a
ld [wJoyIgnore], a
ld [wSeafoamIslandsB4FCurScript], a
ld [wCurMapScript], a
ret
SeafoamIslandsB4F_ScriptPointers:
def_script_pointers
dw_const SeafoamIslandsB4FDefaultScript, SCRIPT_SEAFOAMISLANDSB4F_DEFAULT
dw_const SeafoamIslandsB4FObjectMoving1Script, SCRIPT_SEAFOAMISLANDSB4F_OBJECT_MOVING1
dw_const SeafoamIslandsB4FMoveObjectScript, SCRIPT_SEAFOAMISLANDSB4F_MOVE_OBJECT
dw_const SeafoamIslandsB4FObjectMoving2Script, SCRIPT_SEAFOAMISLANDSB4F_OBJECT_MOVING2
dw_const SeafoamIslandsB4FObjectMoving3Script, SCRIPT_SEAFOAMISLANDSB4F_OBJECT_MOVING3
EXPORT SCRIPT_SEAFOAMISLANDSB4F_MOVE_OBJECT ; used by engine/overworld/player_state.asm
SeafoamIslandsB4FObjectMoving3Script:
ld a, [wIsInBattle]
cp $ff
jr z, SeafoamIslandsB4FResetScript
call EndTrainerBattle
ld a, SCRIPT_SEAFOAMISLANDSB4F_DEFAULT
ld [wSeafoamIslandsB4FCurScript], a
ret
SeafoamIslandsB4FDefaultScript:
CheckBothEventsSet EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE
ret z
ld hl, .Coords
call ArePlayerCoordsInArray
ret nc
ld a, [wCoordIndex]
cp $3
jr nc, .only1UpInputNeeded
ld a, PAD_UP
ld [wSimulatedJoypadStatesEnd + 1], a
ld a, 2
jr .forcePlayerUpFromSurfExit
.only1UpInputNeeded
ld a, 1
.forcePlayerUpFromSurfExit
ld [wSimulatedJoypadStatesIndex], a
ld a, PAD_UP
ld [wSimulatedJoypadStatesEnd], a
call StartSimulatingJoypadStates
ld hl, wStatusFlags7
res BIT_FORCED_WARP, [hl]
ld a, SCRIPT_SEAFOAMISLANDSB4F_OBJECT_MOVING1
ld [wSeafoamIslandsB4FCurScript], a
ret
.Coords
dbmapcoord 20, 17
dbmapcoord 21, 17
dbmapcoord 20, 16
dbmapcoord 21, 16
db -1 ; end
SeafoamIslandsB4FObjectMoving1Script:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
xor a
ld [wJoyIgnore], a
ld a, SCRIPT_SEAFOAMISLANDSB4F_DEFAULT
ld [wSeafoamIslandsB4FCurScript], a
ret
SeafoamIslandsB4FMoveObjectScript:
CheckBothEventsSet EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE
ld a, SCRIPT_SEAFOAMISLANDSB4F_DEFAULT
jr z, .playerNotInStrongCurrent
ld hl, .Coords
call ArePlayerCoordsInArray
ld a, SCRIPT_SEAFOAMISLANDSB4F_DEFAULT
jr nc, .playerNotInStrongCurrent
ld a, [wCoordIndex]
cp $1
jr nz, .nearRightBoulder
ld de, .RLEList_StrongCurrentNearLeftBoulder
jr .forceSurfMovement
.nearRightBoulder
ld de, .RLEList_StrongCurrentNearRightBoulder
.forceSurfMovement
ld hl, wSimulatedJoypadStatesEnd
call DecodeRLEList
dec a
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, SCRIPT_SEAFOAMISLANDSB4F_OBJECT_MOVING2
.playerNotInStrongCurrent
ld [wSeafoamIslandsB4FCurScript], a
ret
.Coords
dbmapcoord 4, 14
dbmapcoord 5, 14
db -1 ; end
.RLEList_StrongCurrentNearRightBoulder:
db PAD_UP, 3
db PAD_RIGHT, 2
db PAD_UP, 1
db -1 ; end
.RLEList_StrongCurrentNearLeftBoulder:
db PAD_UP, 3
db PAD_RIGHT, 3
db PAD_UP, 1
db -1 ; end
SeafoamIslandsB4FObjectMoving2Script:
ld a, [wSimulatedJoypadStatesIndex]
ld b, a
cp $1
call z, .doneForcedSurfMovement
ld a, b
and a
ret nz
ld a, SCRIPT_SEAFOAMISLANDSB4F_DEFAULT
ld [wSeafoamIslandsB4FCurScript], a
ret
.doneForcedSurfMovement:
xor a
ld [wWalkBikeSurfState], a
ld [wWalkBikeSurfStateCopy], a
jp ForceBikeOrSurf
SeafoamIslandsB4F_TextPointers:
def_text_pointers
dw_const BoulderText, TEXT_SEAFOAMISLANDSB4F_BOULDER1
dw_const BoulderText, TEXT_SEAFOAMISLANDSB4F_BOULDER2
dw_const SeafoamIslandsB4FArticunoText, TEXT_SEAFOAMISLANDSB4F_ARTICUNO
dw_const SeafoamIslandsB4FBouldersSignText, TEXT_SEAFOAMISLANDSB4F_BOULDERS_SIGN
dw_const SeafoamIslandsB4FDangerSignText, TEXT_SEAFOAMISLANDSB4F_DANGER_SIGN
; Articuno is object 3, but its event flag is bit 2.
; This is not a problem because its sight range is 0, and
; trainer headers were not stored by ExecuteCurMapScriptInTable.
def_trainers 2
ArticunoTrainerHeader:
trainer EVENT_BEAT_ARTICUNO, 0, SeafoamIslandsB4FArticunoBattleText, SeafoamIslandsB4FArticunoBattleText, SeafoamIslandsB4FArticunoBattleText
db -1 ; end
SeafoamIslandsB4FArticunoText:
text_asm
ld hl, ArticunoTrainerHeader
call TalkToTrainer
ld a, SCRIPT_SEAFOAMISLANDSB4F_OBJECT_MOVING3
ld [wSeafoamIslandsB4FCurScript], a
jp TextScriptEnd
SeafoamIslandsB4FArticunoBattleText:
text_far _SeafoamIslandsB4FArticunoBattleText
text_asm
ld a, ARTICUNO
call PlayCry
call WaitForSoundToFinish
jp TextScriptEnd
SeafoamIslandsB4FBouldersSignText:
text_far _SeafoamIslandsB4FBouldersSignText
text_end
SeafoamIslandsB4FDangerSignText:
text_far _SeafoamIslandsB4FDangerSignText
text_end
|