From 193da33375ecc37d2fd326deef4bc3b5720c49dd Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 30 Jun 2017 12:48:52 -0700 Subject: Move ball initialization routines to engine/main/ball_init/ --- engine/main/ball_init/ball_init.asm | 85 ++++++++++++++++++++ engine/main/ball_init/ball_init_blue_field.asm | 90 +++++++++++++++++++++ engine/main/ball_init/ball_init_diglett_bonus.asm | 32 ++++++++ engine/main/ball_init/ball_init_gengar_bonus.asm | 24 ++++++ engine/main/ball_init/ball_init_meowth_bonus.asm | 85 ++++++++++++++++++++ engine/main/ball_init/ball_init_mewtwo_bonus.asm | 21 +++++ engine/main/ball_init/ball_init_red_field.asm | 95 +++++++++++++++++++++++ engine/main/ball_init/ball_init_seel_bonus.asm | 65 ++++++++++++++++ engine/main/ball_init/ball_init_unused_stage.asm | 11 +++ 9 files changed, 508 insertions(+) create mode 100755 engine/main/ball_init/ball_init.asm create mode 100755 engine/main/ball_init/ball_init_blue_field.asm create mode 100755 engine/main/ball_init/ball_init_diglett_bonus.asm create mode 100755 engine/main/ball_init/ball_init_gengar_bonus.asm create mode 100755 engine/main/ball_init/ball_init_meowth_bonus.asm create mode 100755 engine/main/ball_init/ball_init_mewtwo_bonus.asm create mode 100755 engine/main/ball_init/ball_init_red_field.asm create mode 100755 engine/main/ball_init/ball_init_seel_bonus.asm create mode 100755 engine/main/ball_init/ball_init_unused_stage.asm (limited to 'engine') 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 -- cgit v1.2.3