summaryrefslogtreecommitdiff
path: root/engine/main
diff options
context:
space:
mode:
Diffstat (limited to 'engine/main')
-rwxr-xr-xengine/main/ball_init/ball_init.asm85
-rwxr-xr-xengine/main/ball_init/ball_init_blue_field.asm90
-rwxr-xr-xengine/main/ball_init/ball_init_diglett_bonus.asm32
-rwxr-xr-xengine/main/ball_init/ball_init_gengar_bonus.asm24
-rwxr-xr-xengine/main/ball_init/ball_init_meowth_bonus.asm85
-rwxr-xr-xengine/main/ball_init/ball_init_mewtwo_bonus.asm21
-rwxr-xr-xengine/main/ball_init/ball_init_red_field.asm95
-rwxr-xr-xengine/main/ball_init/ball_init_seel_bonus.asm65
-rwxr-xr-xengine/main/ball_init/ball_init_unused_stage.asm11
9 files changed, 508 insertions, 0 deletions
diff --git a/engine/main/ball_init/ball_init.asm b/engine/main/ball_init/ball_init.asm
new file mode 100755
index 0000000..e938748
--- /dev/null
+++ b/engine/main/ball_init/ball_init.asm
@@ -0,0 +1,85 @@
+InitBallForStage: ; 0x83ba
+ ld a, [wd7c1]
+ and a
+ jr z, .asm_83c7
+ call TryLoadWildMonCollisionMask
+ call RestartStageMusic
+ ret
+
+.asm_83c7
+ xor a
+ ld [wBallXVelocity], a
+ ld [wBallXVelocity + 1], a
+ ld [wBallYVelocity], a
+ ld [wBallYVelocity + 1], a
+ ld [wd7ae], a
+ ld [wd7af], a
+ ld [wd7b2], a
+ ld [wd7b3], a
+ ld [wd7b0], a
+ ld [wd7b1], a
+ ld [wd7b4], a
+ ld [wd7b5], a
+ ld [wBallSpin], a
+ ld [wBallRotation], a
+ inc a
+ ld [wd548], a
+ ld [wd549], a
+ ld a, $20
+ ld [wSCX], a
+ ld a, [wCurrentStage]
+ call CallInFollowingTable
+CallTable_8404: ; 0x8404
+ ; STAGE_RED_FIELD_TOP
+ padded_dab InitBallRedField
+ ; STAGE_RED_FIELD_BOTTOM
+ padded_dab InitBallRedField
+ padded_dab Func_1804a
+ padded_dab Func_1804a
+ ; STAGE_BLUE_FIELD_TOP
+ padded_dab InitBallBlueField
+ ; STAGE_BLUE_FIELD_BOTTOM
+ padded_dab InitBallBlueField
+ ; STAGE_GENGAR_BONUS
+ padded_dab InitBallGengarBonusStage
+ ; STAGE_GENGAR_BONUS
+ padded_dab InitBallGengarBonusStage
+ ; STAGE_MEWTWO_BONUS
+ padded_dab InitBallMewtwoBonusStage
+ ; STAGE_MEWTWO_BONUS
+ padded_dab InitBallMewtwoBonusStage
+ ; STAGE_MEOWTH_BONUS
+ padded_dab InitBallMeowthBonusStage
+ ; STAGE_MEOWTH_BONUS
+ padded_dab InitBallMeowthBonusStage
+ ; STAGE_DIGLETT_BONUS
+ padded_dab InitBallDiglettBonusStage
+ ; STAGE_DIGLETT_BONUS
+ padded_dab InitBallDiglettBonusStage
+ ; STAGE_SEEL_BONUS
+ padded_dab InitBallSeelBonusStage
+ ; STAGE_SEEL_BONUS
+ padded_dab InitBallSeelBonusStage
+
+TryLoadWildMonCollisionMask: ; 0x8444
+ ld a, [wInSpecialMode]
+ and a
+ jr z, .done
+ ld a, [wSpecialMode]
+ and a ; Is the current special mode "Catch 'Em" mode?
+ jr nz, .done
+ ld a, [wWildMonIsHittable]
+ and a
+ jr z, .done
+ callba LoadWildMonCollisionMask
+.done
+ ret
+
+RestartStageMusic: ; 0x8461
+ ld a, [wStageSongBank]
+ call SetSongBank
+ ld a, [wStageSong]
+ ld e, a
+ ld d, $0
+ call PlaySong
+ ret
diff --git a/engine/main/ball_init/ball_init_blue_field.asm b/engine/main/ball_init/ball_init_blue_field.asm
new file mode 100755
index 0000000..6aa88c1
--- /dev/null
+++ b/engine/main/ball_init/ball_init_blue_field.asm
@@ -0,0 +1,90 @@
+InitBallBlueField: ; 0x1c08d
+ ld a, [wd496]
+ and a
+ jp nz, StartBallAfterBonusStageBlueField
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $a7
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $98
+ ld [wBallYPos + 1], a
+ xor a
+ ld [wd549], a
+ ld [wd580], a
+ call Func_1c7c7
+ ld a, [wd4c9]
+ and a
+ ret z
+ xor a
+ ld [wd4c9], a
+ xor a
+ ld [wd50b], a
+ ld [wd50c], a
+ ld [wd51d], a
+ ld [wd51e], a
+ ld [wd517], a
+ ld hl, wd50f
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [wLeftMapMoveCounter], a
+ ld [wRightMapMoveCounter], a
+ ld hl, wd5f9
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [wBallType], a
+ ld [wd611], a
+ ld [wd612], a
+ ld [wd628], a
+ ld [wd629], a
+ ld [wd62a], a
+ ld [wd62b], a
+ ld [wd62c], a
+ ld [wd63a], a
+ ld [wd63b], a
+ ld [wd63d], a
+ ld [wd63c], a
+ ld [wd62d], a
+ ld [wd62e], a
+ ld [wd613], a
+ inc a
+ ld [wd482], a
+ ld [wd4ef], a
+ ld [wd4f1], a
+ ld a, $3
+ ld [wd610], a
+ call Func_1d65f
+ ld a, $10
+ call SetSongBank
+ ld de, $0001
+ call PlaySong
+ ret
+
+StartBallAfterBonusStageBlueField: ; 0x1c129
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $50
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $16
+ ld [wBallYPos + 1], a
+ xor a
+ ld [wBallYVelocity], a
+ ld [wBallYVelocity + 1], a
+ ld [wBallXVelocity], a
+ ld [wBallXVelocity + 1], a
+ ld [wd496], a
+ ld [wSCX], a
+ ld [wd7be], a
+ ld a, [wBallTypeBackup]
+ ld [wBallType], a
+ ld a, $10
+ call SetSongBank
+ ld de, $0001
+ call PlaySong
+ ret
diff --git a/engine/main/ball_init/ball_init_diglett_bonus.asm b/engine/main/ball_init/ball_init_diglett_bonus.asm
new file mode 100755
index 0000000..ef12950
--- /dev/null
+++ b/engine/main/ball_init/ball_init_diglett_bonus.asm
@@ -0,0 +1,32 @@
+InitBallDiglettBonusStage: ; 0x19a38
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $a6
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $56
+ ld [wBallYPos + 1], a
+ ld a, $40
+ ld [wBallXVelocity], a
+ xor a
+ ld [wSCX], a
+ ld [wStageCollisionState], a
+ ld [wd73a], a
+ ld hl, wDiglettStates
+ ld b, NUM_DIGLETTS
+.asm_19a60
+ ld a, [hl]
+ and a
+ jr z, .asm_19a67
+ ld a, $1 ; hiding diglett state
+ ld [hl], a
+.asm_19a67
+ inc hl
+ dec b
+ jr nz, .asm_19a60
+ xor a
+ ld [wCurrentDiglett], a
+ ld [wDiglettsInitializedFlag], a
+ ld [wd765], a
+ ret
diff --git a/engine/main/ball_init/ball_init_gengar_bonus.asm b/engine/main/ball_init/ball_init_gengar_bonus.asm
new file mode 100755
index 0000000..065a1ca
--- /dev/null
+++ b/engine/main/ball_init/ball_init_gengar_bonus.asm
@@ -0,0 +1,24 @@
+InitBallGengarBonusStage: ; 0x18157
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $a6
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $56
+ ld [wBallYPos + 1], a
+ xor a
+ ld [wSCX], a
+ ld [wStageCollisionState], a
+ ld [wd653], a
+ xor a
+ ld [wd674], a
+ ld a, $8
+ ld [wd690], a
+ ld [wd6a1], a
+ ld a, [wd4c9]
+ and a
+ ret z
+ xor a
+ ld [wd4c9], a
+ ret
diff --git a/engine/main/ball_init/ball_init_meowth_bonus.asm b/engine/main/ball_init/ball_init_meowth_bonus.asm
new file mode 100755
index 0000000..9747d42
--- /dev/null
+++ b/engine/main/ball_init/ball_init_meowth_bonus.asm
@@ -0,0 +1,85 @@
+InitBallMeowthBonusStage: ; 0x24059
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $a6
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $56
+ ld [wBallYPos + 1], a
+ ld a, $40
+ ld [wBallXVelocity], a
+ xor a
+ ld [wSCX], a
+ ld [wStageCollisionState], a
+ ld [wd6e6], a
+ ld hl, wd6f3
+ ld b, $16
+.asm_24081
+ ld a, [hl]
+ and a
+ jr z, .asm_24088
+ ld a, $1
+ ld [hl], a
+.asm_24088
+ inc hl
+ dec b
+ jr nz, .asm_24081
+ ld a, $1
+ ld [wd7ac], a
+ ld a, $40
+ ld [wMeowthXPosition], a
+ ld a, $20
+ ld [wMeowthYPosition], a
+ ld a, $10
+ ld [wMeowthAnimationFrameCounter], a
+ ld a, $ff ; walk left
+ ld [wMeowthXMovement], a
+ xor a
+ ld [wMeowthAnimationFrame], a
+ ld [wd6ec], a
+ ld [wMeowthAnimationFrameIndex], a
+ ld [wd70b], a
+ ld [wd70c], a
+ ld a, $c8
+ ld [wd71a], a
+ ld [wd727], a
+ ld [wd71b], a
+ ld [wd728], a
+ ld [wd71c], a
+ ld [wd729], a
+ ld [wd724], a
+ ld [wd731], a
+ ld [wd725], a
+ ld [wd732], a
+ ld [wd726], a
+ ld [wd733], a
+ xor a
+ ld [wd717], a
+ ld [wd718], a
+ ld [wd719], a
+ ld [wd721], a
+ ld [wd722], a
+ ld [wd723], a
+ ld [wd714], a
+ ld [wd715], a
+ ld [wd716], a
+ ld [wd71e], a
+ ld [wd71f], a
+ ld [wd720], a
+ ld [wd64e], a
+ ld [wd64f], a
+ ld [wd650], a
+ ld [wd651], a
+ ld [wd795], a
+ ld [wd796], a
+ ld [wd797], a
+ ld [wd798], a
+ ld [wd799], a
+ ld [wd79a], a
+ ld a, [wd4c9]
+ and a
+ ret z
+ xor a
+ ld [wd4c9], a
+ ret
diff --git a/engine/main/ball_init/ball_init_mewtwo_bonus.asm b/engine/main/ball_init/ball_init_mewtwo_bonus.asm
new file mode 100755
index 0000000..c95d283
--- /dev/null
+++ b/engine/main/ball_init/ball_init_mewtwo_bonus.asm
@@ -0,0 +1,21 @@
+InitBallMewtwoBonusStage: ; 0x192e3
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $a6
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $56
+ ld [wBallYPos + 1], a
+ ld a, $80
+ ld [wBallXVelocity], a
+ xor a
+ ld [wSCX], a
+ ld [wStageCollisionState], a
+ ld [wd6a9], a
+ ld a, [wd4c9]
+ and a
+ ret z
+ xor a
+ ld [wd4c9], a
+ ret
diff --git a/engine/main/ball_init/ball_init_red_field.asm b/engine/main/ball_init/ball_init_red_field.asm
new file mode 100755
index 0000000..78c3c8f
--- /dev/null
+++ b/engine/main/ball_init/ball_init_red_field.asm
@@ -0,0 +1,95 @@
+InitBallRedField: ; 0x3007d
+ ld a, [wd496]
+ and a
+ jp nz, StartBallAfterBonusStageRedField
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $a7
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $98
+ ld [wBallYPos + 1], a
+ xor a
+ ld [wd549], a
+ ld [wd580], a
+ ld a, [wd7ad]
+ bit 7, a
+ jr z, .asm_300ae
+ ld a, [wStageCollisionState]
+ res 0, a
+ ld [wd7ad], a
+.asm_300ae
+ ld a, [wStageCollisionState]
+ and $1
+ ld [wStageCollisionState], a
+ ld a, [wd4c9]
+ and a
+ ret z
+ xor a
+ ld [wd4c9], a
+ xor a
+ ld [wd50b], a
+ ld [wd50c], a
+ ld [wd51d], a
+ ld [wd517], a
+ ld [wd51e], a
+ ld hl, wd50f
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [wLeftMapMoveCounter], a
+ ld [wRightMapMoveCounter], a
+ ld hl, wd5f9
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [wBallType], a
+ ld [wd611], a
+ ld [wd612], a
+ ld [wd628], a
+ ld [wd629], a
+ ld [wd62a], a
+ ld [wd62b], a
+ ld [wd62c], a
+ ld [wd62d], a
+ ld [wd62e], a
+ ld [wd613], a
+ inc a
+ ld [wd482], a
+ ld [wd4ef], a
+ ld [wd4f1], a
+ ld a, $3
+ ld [wd610], a
+ callba Func_16f95
+ ld a, $f
+ call SetSongBank
+ ld de, $0001
+ call PlaySong
+ ret
+
+StartBallAfterBonusStageRedField: ; 0x30128
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $50
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $16
+ ld [wBallYPos + 1], a
+ xor a
+ ld [wBallYVelocity], a
+ ld [wBallYVelocity + 1], a
+ ld [wBallXVelocity], a
+ ld [wBallXVelocity + 1], a
+ ld [wd496], a
+ ld [wSCX], a
+ ld [wd7be], a
+ ld a, [wBallTypeBackup]
+ ld [wBallType], a
+ ld a, $f
+ call SetSongBank
+ ld de, $0001
+ call PlaySong
+ ret
diff --git a/engine/main/ball_init/ball_init_seel_bonus.asm b/engine/main/ball_init/ball_init_seel_bonus.asm
new file mode 100755
index 0000000..84343d1
--- /dev/null
+++ b/engine/main/ball_init/ball_init_seel_bonus.asm
@@ -0,0 +1,65 @@
+InitBallSeelBonusStage: ; 0x25af1
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $a6
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $56
+ ld [wBallYPos + 1], a
+ ld a, $80
+ ld [wBallXVelocity], a
+ xor a
+ ld [wSCX], a
+ ld [wStageCollisionState], a
+ ld [wd766], a
+ ld a, $0
+ ld [wd772], a
+ ld a, $1
+ ld [wd77c], a
+ ld a, $0
+ ld [wd786], a
+ ld a, $4
+ ld [wd775], a
+ ld [wd77f], a
+ ld [wd76b], a
+ ld a, $1
+ ld [wd76c], a
+ ld a, $4
+ ld [wd776], a
+ ld a, $1
+ ld [wd780], a
+ ld a, $5
+ ld [wd771], a
+ ld [wd77b], a
+ ld [wd785], a
+ ld a, $ff
+ ld [wd79a], a
+ xor a
+ ld [wd792], a
+ ld [wd791], a
+ ld [wd64e], a
+ ld [wd64f], a
+ ld [wd650], a
+ ld [wd651], a
+ ld [wd795], a
+ ld [wd796], a
+ ld [wd797], a
+ ld [wd798], a
+ ld [wd799], a
+ ld [wd79a], a
+ ld de, wd76b
+ ld a, [wd76c]
+ call Func_26137
+ ld de, wd775
+ ld a, [wd776]
+ call Func_26137
+ ld de, wd77f
+ ld a, [wd780]
+ call Func_26137
+ ld a, [wd4c9]
+ and a
+ ret z
+ xor a
+ ld [wd4c9], a
+ ret
diff --git a/engine/main/ball_init/ball_init_unused_stage.asm b/engine/main/ball_init/ball_init_unused_stage.asm
new file mode 100755
index 0000000..656ce44
--- /dev/null
+++ b/engine/main/ball_init/ball_init_unused_stage.asm
@@ -0,0 +1,11 @@
+Func_1804a: ; 0x1804a
+; Unused -- Init ball routine for unused stage.
+ ld a, $0
+ ld [wBallXPos], a
+ ld a, $b0
+ ld [wBallXPos + 1], a
+ ld a, $0
+ ld [wBallYPos], a
+ ld a, $98
+ ld [wBallYPos + 1], a
+ ret