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
|
SeafoamIslandsB3F_Script:
call EnableAutoTextBoxDrawing
ld hl, wMiscFlags
bit BIT_PUSHED_BOULDER, [hl]
res BIT_PUSHED_BOULDER, [hl]
jr z, .noBoulderWasPushed
ld hl, Seafoam4HolesCoords
call CheckBoulderCoords
ret nc
EventFlagAddress hl, EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE
ld a, [wCoordIndex]
cp $1
jr nz, .boulder2FellDownHole
SetEventReuseHL EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE
ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_1
ld [wObjectToHide], a
ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_1
ld [wObjectToShow], a
jr .hideAndShowBoulderObjects
.boulder2FellDownHole
SetEventAfterBranchReuseHL EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE
ld a, TOGGLE_SEAFOAM_ISLANDS_B3F_BOULDER_2
ld [wObjectToHide], a
ld a, TOGGLE_SEAFOAM_ISLANDS_B4F_BOULDER_2
ld [wObjectToShow], a
.hideAndShowBoulderObjects
ld a, [wObjectToHide]
ld [wToggleableObjectIndex], a
predef HideObject
ld a, [wObjectToShow]
ld [wToggleableObjectIndex], a
predef ShowObject
jr .runCurrentMapScript
.noBoulderWasPushed
ld a, SEAFOAM_ISLANDS_B4F
ld [wDungeonWarpDestinationMap], a
ld hl, Seafoam4HolesCoords
call IsPlayerOnDungeonWarp
ld a, [wStatusFlags6]
bit BIT_DUNGEON_WARP, a
ret nz
.runCurrentMapScript
ld hl, SeafoamIslandsB3F_ScriptPointers
ld a, [wSeafoamIslandsB3FCurScript]
jp CallFunctionInTable
Seafoam4HolesCoords:
dbmapcoord 3, 16
dbmapcoord 6, 16
db -1 ; end
SeafoamIslandsB3F_ScriptPointers:
def_script_pointers
dw_const SeafoamIslandsB3FDefaultScript, SCRIPT_SEAFOAMISLANDSB3F_DEFAULT
dw_const SeafoamIslandsB3FObjectMoving1Script, SCRIPT_SEAFOAMISLANDSB3F_OBJECT_MOVING1
dw_const SeafoamIslandsB3FMoveObjectScript, SCRIPT_SEAFOAMISLANDSB3F_MOVE_OBJECT
dw_const SeafoamIslandsB3FObjectMoving2Script, SCRIPT_SEAFOAMISLANDSB3F_OBJECT_MOVING2
EXPORT SCRIPT_SEAFOAMISLANDSB3F_MOVE_OBJECT ; used by engine/overworld/player_state.asm
SeafoamIslandsB3FDefaultScript:
CheckBothEventsSet EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE
ret z
ld a, [wYCoord]
cp 8
ret nz
ld a, [wXCoord]
cp 15
ret nz
ld hl, wSimulatedJoypadStatesEnd
ld de, RLEList_ForcedSurfingStrongCurrentNearSteps
call DecodeRLEList
dec a
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld hl, wStatusFlags7
set BIT_FORCED_WARP, [hl]
ld a, SCRIPT_SEAFOAMISLANDSB3F_OBJECT_MOVING1
ld [wSeafoamIslandsB3FCurScript], a
ret
RLEList_ForcedSurfingStrongCurrentNearSteps:
db PAD_DOWN, 6
db PAD_RIGHT, 5
db PAD_DOWN, 3
db -1 ; end
SeafoamIslandsB3FObjectMoving1Script:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
ld a, SCRIPT_SEAFOAMISLANDSB3F_DEFAULT
ld [wSeafoamIslandsB3FCurScript], a
ret
SeafoamIslandsB3FMoveObjectScript:
CheckBothEventsSet EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE
ret z
ld a, [wXCoord]
cp 18
jr z, .playerFellThroughHoleLeft
cp 19
ld a, SCRIPT_SEAFOAMISLANDSB3F_DEFAULT
jr nz, .playerNotInStrongCurrent
ld de, .RLEList_StrongCurrentNearRightBoulder
jr .forceSurfMovement
.playerFellThroughHoleLeft
ld de, .RLEList_StrongCurrentNearLeftBoulder
.forceSurfMovement
ld hl, wSimulatedJoypadStatesEnd
call DecodeRLEList
dec a
ld [wSimulatedJoypadStatesIndex], a
xor a
ld [wSpritePlayerStateData2MovementByte1], a
ld hl, wStatusFlags5
set BIT_SCRIPTED_MOVEMENT_STATE, [hl]
ld hl, wStatusFlags7
set BIT_FORCED_WARP, [hl]
ld a, SCRIPT_SEAFOAMISLANDSB3F_OBJECT_MOVING2
.playerNotInStrongCurrent
ld [wSeafoamIslandsB3FCurScript], a
ret
.RLEList_StrongCurrentNearRightBoulder:
db PAD_DOWN, 6
db PAD_RIGHT, 2
db PAD_DOWN, 4
db PAD_LEFT, 1
db -1 ; end
.RLEList_StrongCurrentNearLeftBoulder:
db PAD_DOWN, 6
db PAD_RIGHT, 2
db PAD_DOWN, 4
db -1 ; end
SeafoamIslandsB3FObjectMoving2Script:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
ld a, SCRIPT_SEAFOAMISLANDSB3F_DEFAULT
ld [wSeafoamIslandsB3FCurScript], a
ret
SeafoamIslandsB3F_TextPointers:
def_text_pointers
dw_const BoulderText, TEXT_SEAFOAMISLANDSB3F_BOULDER1
dw_const BoulderText, TEXT_SEAFOAMISLANDSB3F_BOULDER2
dw_const BoulderText, TEXT_SEAFOAMISLANDSB3F_BOULDER3
dw_const BoulderText, TEXT_SEAFOAMISLANDSB3F_BOULDER4
dw_const BoulderText, TEXT_SEAFOAMISLANDSB3F_BOULDER5
dw_const BoulderText, TEXT_SEAFOAMISLANDSB3F_BOULDER6
|