summaryrefslogtreecommitdiff
path: root/scripts/SeafoamIslandsB3F.asm
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/SeafoamIslandsB3F.asm')
-rwxr-xr-xscripts/SeafoamIslandsB3F.asm149
1 files changed, 149 insertions, 0 deletions
diff --git a/scripts/SeafoamIslandsB3F.asm b/scripts/SeafoamIslandsB3F.asm
new file mode 100755
index 00000000..c8fec338
--- /dev/null
+++ b/scripts/SeafoamIslandsB3F.asm
@@ -0,0 +1,149 @@
+SeafoamIslandsB3F_Script:
+ call EnableAutoTextBoxDrawing
+ ld hl, wFlags_0xcd60
+ bit 7, [hl]
+ res 7, [hl]
+ jr z, .asm_465dc
+ ld hl, Seafoam4HolesCoords
+ call CheckBoulderCoords
+ ret nc
+ EventFlagAddress hl, EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE
+ ld a, [wCoordIndex]
+ cp $1
+ jr nz, .asm_465b8
+ SetEventReuseHL EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE
+ ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_1
+ ld [wObjectToHide], a
+ ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_1
+ ld [wObjectToShow], a
+ jr .asm_465c4
+.asm_465b8
+ SetEventAfterBranchReuseHL EVENT_SEAFOAM4_BOULDER2_DOWN_HOLE, EVENT_SEAFOAM4_BOULDER1_DOWN_HOLE
+ ld a, HS_SEAFOAM_ISLANDS_B3F_BOULDER_2
+ ld [wObjectToHide], a
+ ld a, HS_SEAFOAM_ISLANDS_B4F_BOULDER_2
+ ld [wObjectToShow], a
+.asm_465c4
+ ld a, [wObjectToHide]
+ ld [wMissableObjectIndex], a
+ predef HideObject
+ ld a, [wObjectToShow]
+ ld [wMissableObjectIndex], a
+ predef ShowObject
+ jr .asm_465ed
+.asm_465dc
+ ld a, SEAFOAM_ISLANDS_B4F
+ ld [wDungeonWarpDestinationMap], a
+ ld hl, Seafoam4HolesCoords
+ call IsPlayerOnDungeonWarp
+ ld a, [wd732]
+ bit 4, a
+ ret nz
+.asm_465ed
+ ld hl, SeafoamIslandsB3F_ScriptPointers
+ ld a, [wSeafoamIslandsB3FCurScript]
+ jp CallFunctionInTable
+
+Seafoam4HolesCoords:
+ db $10,$03
+ db $10,$06
+ db $ff
+
+SeafoamIslandsB3F_ScriptPointers:
+ dw SeafoamIslands4Script0
+ dw SeafoamIslands4Script1
+ dw SeafoamIslands4Script2
+ dw SeafoamIslands4Script3
+
+SeafoamIslands4Script0:
+ CheckBothEventsSet EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE
+ ret z
+ ld a, [wYCoord]
+ cp $8
+ ret nz
+ ld a, [wXCoord]
+ cp $f
+ ret nz
+ ld hl, wSimulatedJoypadStatesEnd
+ ld de, RLEMovement46632
+ call DecodeRLEList
+ dec a
+ ld [wSimulatedJoypadStatesIndex], a
+ call StartSimulatingJoypadStates
+ ld hl, wFlags_D733
+ set 2, [hl]
+ ld a, $1
+ ld [wSeafoamIslandsB3FCurScript], a
+ ret
+
+RLEMovement46632:
+ db D_DOWN,6
+ db D_RIGHT,5
+ db D_DOWN,3
+ db $ff
+
+SeafoamIslands4Script1:
+ ld a, [wSimulatedJoypadStatesIndex]
+ and a
+ ret nz
+ ld a, $0
+ ld [wSeafoamIslandsB3FCurScript], a
+ ret
+
+SeafoamIslands4Script2:
+ CheckBothEventsSet EVENT_SEAFOAM3_BOULDER1_DOWN_HOLE, EVENT_SEAFOAM3_BOULDER2_DOWN_HOLE
+ ret z
+ ld a, [wXCoord]
+ cp $12
+ jr z, .asm_4665e
+ cp $13
+ ld a, $0
+ jr nz, .asm_4667b
+ ld de, RLEData_4667f
+ jr .asm_46661
+.asm_4665e
+ ld de, RLEData_46688
+.asm_46661
+ ld hl, wSimulatedJoypadStatesEnd
+ call DecodeRLEList
+ dec a
+ ld [wSimulatedJoypadStatesIndex], a
+ xor a
+ ld [wSpriteStateData2 + $06], a
+ ld hl, wd730
+ set 7, [hl]
+ ld hl, wFlags_D733
+ set 2, [hl]
+ ld a, $3
+.asm_4667b
+ ld [wSeafoamIslandsB3FCurScript], a
+ ret
+
+RLEData_4667f:
+ db D_DOWN,$06
+ db D_RIGHT,$02
+ db D_DOWN,$04
+ db D_LEFT,$01
+ db $FF
+
+RLEData_46688:
+ db D_DOWN,$06
+ db D_RIGHT,$02
+ db D_DOWN,$04
+ db $FF
+
+SeafoamIslands4Script3:
+ ld a, [wSimulatedJoypadStatesIndex]
+ and a
+ ret nz
+ ld a, $0
+ ld [wSeafoamIslandsB3FCurScript], a
+ ret
+
+SeafoamIslandsB3F_TextPointers:
+ dw BoulderText
+ dw BoulderText
+ dw BoulderText
+ dw BoulderText
+ dw BoulderText
+ dw BoulderText