summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rwxr-xr-xengine/main/stage_init/init_blue_field.asm55
-rwxr-xr-xengine/main/stage_init/init_diglett_bonus.asm34
-rwxr-xr-xengine/main/stage_init/init_gengar_bonus.asm107
-rwxr-xr-xengine/main/stage_init/init_meowth_bonus.asm34
-rwxr-xr-xengine/main/stage_init/init_mewtwo_bonus.asm65
-rwxr-xr-xengine/main/stage_init/init_red_field.asm49
-rwxr-xr-xengine/main/stage_init/init_seel_bonus.asm60
-rwxr-xr-xengine/main/stage_init/init_stages.asm81
-rwxr-xr-xengine/main/stage_init/init_unused_stage.asm32
9 files changed, 517 insertions, 0 deletions
diff --git a/engine/main/stage_init/init_blue_field.asm b/engine/main/stage_init/init_blue_field.asm
new file mode 100755
index 0000000..62d2e8b
--- /dev/null
+++ b/engine/main/stage_init/init_blue_field.asm
@@ -0,0 +1,55 @@
+InitBlueField: ; 0x1c000
+ ld a, [wd7c1]
+ and a
+ ret nz
+ xor a
+ ld hl, wScore + $5
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hl], a
+ ld [wNumPartyMons], a
+ ld [wd49b], a
+ ld [wd4c9], a
+ ld [wBallType], a
+ ld [wd4c8], a
+ ld hl, wd624
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [wd7ac], a
+ ld [wd7be], a
+ ld [wCurrentMap], a ; PALLET_TOWN
+ ld a, $1
+ ld [wd49d], a
+ ld [wd482], a
+ ld a, $2
+ ld [wRightAlleyCount], a
+ ld a, $3
+ ld [wd49e], a
+ ld [wd610], a
+ ld a, $2
+ ld [wd498], a
+ ld [wd499], a
+ ld a, $80
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 3], a
+ ld a, $82
+ ld [wIndicatorStates + 1], a
+ xor a
+ ld [wd648], a
+ ld [wd649], a
+ ld [wd64a], a
+ ld [wd643], a
+ ld [wd644], a
+ ld [wd645], a
+ ld [wd646], a
+ callba Start20SecondSaverTimer
+ callba Func_1d65f
+ ld a, $10
+ call SetSongBank
+ ld de, $0001
+ call PlaySong
+ ret
diff --git a/engine/main/stage_init/init_diglett_bonus.asm b/engine/main/stage_init/init_diglett_bonus.asm
new file mode 100755
index 0000000..b68501c
--- /dev/null
+++ b/engine/main/stage_init/init_diglett_bonus.asm
@@ -0,0 +1,34 @@
+InitDiglettBonusStage: ; 0x199f2
+ ld a, [wd7c1]
+ and a
+ ret nz
+ xor a
+ ld [wStageCollisionState], a
+ ld a, $1
+ ld [wd7ac], a
+ ld a, [wBallType]
+ ld [wBallTypeBackup], a
+ xor a
+ ld [wd4c8], a
+ ld [wBallType], a
+ ld [wd49a], a
+ ; initialize all digletts to hiding
+ ld a, $1 ; hiding diglett state
+ ld hl, wDiglettStates
+ ld b, NUM_DIGLETTS
+.initDiglettsLoop
+ ld [hli], a
+ dec b
+ jr nz, .initDiglettsLoop
+ ld a, $1
+ ld [wDugtrioAnimationFrameCounter], a
+ ld a, $c
+ ld [wDugtrioAnimationFrame], a
+ xor a
+ ld [wDugtrioAnimationFrameIndex], a
+ ld [wDugrioState], a
+ ld a, $11
+ call SetSongBank
+ ld de, $0001
+ call PlaySong
+ ret
diff --git a/engine/main/stage_init/init_gengar_bonus.asm b/engine/main/stage_init/init_gengar_bonus.asm
new file mode 100755
index 0000000..4f7da3b
--- /dev/null
+++ b/engine/main/stage_init/init_gengar_bonus.asm
@@ -0,0 +1,107 @@
+InitGengarBonusStage: ; 0x18099
+ ld a, [wd7c1]
+ and a
+ jr z, .asm_180ac
+ xor a
+ ld [wd674], a
+ ld a, $8
+ ld [wd690], a
+ ld [wd6a1], a
+ ret
+.asm_180ac
+ ld a, $1
+ ld [wd7ac], a
+ ld a, [wBallType]
+ ld [wBallTypeBackup], a
+ xor a
+ ld [wd4c8], a
+ ld [wBallType], a
+ ld [wd49a], a
+ ld hl, GastlyInitialData
+ ld de, wd659
+ call Copy9BytesToDE
+ call Copy9BytesToDE
+ call Copy9BytesToDE
+ ld hl, HaunterInitialData
+ ld de, wd67e
+ call Copy9BytesToDE
+ call Copy9BytesToDE
+ ld hl, GengarInitialData
+ ld de, wd698
+ call Copy9BytesToDE
+ xor a
+ ld [wd67b], a
+ ld [wd695], a
+ ld hl, wd6a2
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [wd656], a
+ ld bc, $0130 ; 1 minute 30 seconds
+ callba StartTimer
+ ld a, $f
+ call SetSongBank
+ ld de, $0005
+ call PlaySong
+ ret
+
+Copy9BytesToDE: ; 0x18112
+ ld b, $3
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop
+ ret
+
+GastlyInitialData: ; 0x18121
+; Gastly 1
+ db $01, $01
+ db $00, $00 ; wGastly1AnimationState
+ db $00
+ db $00, $08 ; wGastly1XPos
+ db $00, $08 ; wGastly1YPos
+; Gastly 2
+ db $01, $01
+ db $00, $00 ; wGastly2AnimationState
+ db $00
+ db $00, $50 ; wGastly2XPos
+ db $00, $20 ; wGastly2YPos
+; Gastly 3
+ db $01, $01
+ db $00, $00 ; wGastly2AnimationState
+ db $00
+ db $00, $30 ; wGastly3XPos
+ db $00, $38 ; wGastly3YPos
+
+HaunterInitialData: ; 0x1813c
+; Haunter 1
+ db $00, $01
+ db $00, $00 ; wHaunter1AnimationState
+ db $00
+ db $00, $50 ; wHaunter1XPos
+ db $00, $10 ; wHaunter1YPos
+; Haunter 2
+ db $00, $01
+ db $00, $00 ; wHaunter2AnimationState
+ db $00
+ db $00, $10 ; wHaunter2XPos
+ db $00, $34 ; wHaunter2YPos
+
+GengarInitialData: ; 0x1814e
+ db $00, $01
+ db $00, $00 ; wGengarAnimationState
+ db $04
+ db $00, $38 ; wGengarXPos
+ db $00, $F8 ; wGengarYPos
diff --git a/engine/main/stage_init/init_meowth_bonus.asm b/engine/main/stage_init/init_meowth_bonus.asm
new file mode 100755
index 0000000..c001b20
--- /dev/null
+++ b/engine/main/stage_init/init_meowth_bonus.asm
@@ -0,0 +1,34 @@
+InitMeowthBonusStage: ; 0x24000
+ ld a, [wd7c1]
+ and a
+ ret nz
+ xor a
+ ld [wd4c8], a
+ ld [wStageCollisionState], a
+ ld a, [wBallType]
+ ld [wBallTypeBackup], a
+ xor a
+ ld [wd4c8], a
+ ld [wBallType], a
+ ld [wd49a], a
+ ld a, $1
+ ld [wd7ac], a
+ ld a, $40
+ ld [wMeowthXPosition], a
+ ld a, $20
+ ld [wMeowthYPosition], a
+ ld a, $10
+ ld [wMeowthAnimationFrameCounter], a
+ xor a
+ ld [wMeowthStageScore], a
+ ld [wd70b], a
+ ld [wMeowthStageBonusCounter], a
+ ld [wd713], a
+ ld [wd739], a
+ ld bc, $0100 ; 1 minute 0 seconds
+ callba StartTimer
+ ld a, $12
+ call SetSongBank
+ ld de, $0004
+ call PlaySong
+ ret
diff --git a/engine/main/stage_init/init_mewtwo_bonus.asm b/engine/main/stage_init/init_mewtwo_bonus.asm
new file mode 100755
index 0000000..44d7417
--- /dev/null
+++ b/engine/main/stage_init/init_mewtwo_bonus.asm
@@ -0,0 +1,65 @@
+InitMewtwoBonusStage: ; 0x1924f
+ ld a, [wd7c1]
+ and a
+ ret nz
+ xor a
+ ld [wStageCollisionState], a
+ ld a, $1
+ ld [wd7ac], a
+ ld a, [wBallType]
+ ld [wBallTypeBackup], a
+ xor a
+ ld [wd4c8], a
+ ld [wBallType], a
+ ld [wd49a], a
+ ld hl, Data_192ab
+ ld de, wd6b6
+ ld b, $c
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop
+ ld hl, Data_192db
+ ld de, wd6ac
+ ld b, $8
+.loop2
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop2
+ ld bc, $0200 ; 2 minutes 0 seconds
+ callba StartTimer
+ ld a, $12
+ call SetSongBank
+ ld de, $0001
+ call PlaySong
+ ret
+
+Data_192ab:
+ db $01, $01, $00, $00
+ db $00, $62, $08, $00
+ db $01, $01, $00, $00
+ db $00, $55, $1F, $0C
+ db $01, $01, $00, $00
+ db $00, $3B, $1F, $18
+ db $01, $01, $00, $00
+ db $00, $2E, $08, $24
+ db $01, $01, $00, $00
+ db $00, $3B, $F1, $30
+ db $01, $01, $00, $00
+ db $00, $55, $F1, $3C
+
+Data_192db:
+ db $01, $00, $00, $00, $00, $00, $00, $00
diff --git a/engine/main/stage_init/init_red_field.asm b/engine/main/stage_init/init_red_field.asm
new file mode 100755
index 0000000..d92d54e
--- /dev/null
+++ b/engine/main/stage_init/init_red_field.asm
@@ -0,0 +1,49 @@
+InitRedField: ; 0x30000
+ ld a, [wd7c1]
+ and a
+ ret nz
+ xor a
+ ld hl, wScore + $5
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hl], a
+ ld [wNumPartyMons], a
+ ld [wd49b], a
+ ld [wd4c9], a
+ ld [wBallType], a
+ ld [wd4c8], a
+ ld hl, wd624
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [wd7ac], a
+ ld [wd7be], a
+ ld [wCurrentMap], a ; PALLET_TOWN
+ ld a, $1
+ ld [wd49d], a
+ ld [wd482], a
+ ld a, $2
+ ld [wRightAlleyCount], a
+ ld a, $3
+ ld [wd49e], a
+ ld [wd610], a
+ ld [wd498], a
+ ld [wd499], a
+ ld a, $4
+ ld [wStageCollisionState], a
+ ld [wd7ad], a
+ ld a, $80
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 3], a
+ ld a, $82
+ ld [wIndicatorStates + 1], a
+ callba Start20SecondSaverTimer
+ callba Func_16f95
+ ld a, $f
+ call SetSongBank
+ ld de, $0001
+ call PlaySong
+ ret
diff --git a/engine/main/stage_init/init_seel_bonus.asm b/engine/main/stage_init/init_seel_bonus.asm
new file mode 100755
index 0000000..50a25b8
--- /dev/null
+++ b/engine/main/stage_init/init_seel_bonus.asm
@@ -0,0 +1,60 @@
+InitSeelBonusStage: ; 0x25a7c
+ ld a, [wd7c1]
+ and a
+ ret nz
+ xor a
+ ld [wd4c8], a
+ ld [wStageCollisionState], a
+ ld a, $1
+ ld [wd7ac], a
+ ld a, [wBallType]
+ ld [wBallTypeBackup], a
+ xor a
+ ld [wd4c8], a
+ ld [wBallType], a
+ ld [wd49a], a
+ ld hl, InitialSeelCoords
+ ld de, wd76d
+ call InitSeelPosition
+ ld de, wd777
+ call InitSeelPosition
+ ld de, wd781
+ call InitSeelPosition
+ xor a
+ ld [wd793], a
+ ld [wd791], a
+ ld [wd792], a
+ ld [wd739], a
+ ld bc, $0130 ; 1 minute 30 seconds
+ callba StartTimer
+ ld a, $11
+ call SetSongBank
+ ld de, $0003
+ call PlaySong
+ ret
+
+InitSeelPosition: ; 0x25ad8
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ret
+
+InitialSeelCoords:
+; Seel 1
+ db $00, $60 ; x coordinate
+ db $00, $00 ; y coordinate
+; Seel 2
+ db $00, $20 ; x coordinate
+ db $00, $1A ; y coordinate
+; Seel 3
+ db $00, $40 ; x coordinate
+ db $00, $34 ; y coordinate
diff --git a/engine/main/stage_init/init_stages.asm b/engine/main/stage_init/init_stages.asm
new file mode 100755
index 0000000..948919f
--- /dev/null
+++ b/engine/main/stage_init/init_stages.asm
@@ -0,0 +1,81 @@
+InitializeStage: ; 0x8311
+ ld hl, wc000
+ ld bc, $0a00
+ call ClearData
+ ld a, $1
+ ld [rVBK], a
+ ld a, [wd805]
+ and a
+ jr nz, .asm_8331
+ ld hl, vBGWin
+ ld bc, $0400
+ ld a, $0
+ call Func_63e
+ jr .asm_833c
+
+.asm_8331
+ ld hl, vBGWin
+ ld bc, $0400
+ ld a, $8
+ call Func_63e
+.asm_833c
+ xor a
+ ld [rVBK], a
+ call ResetDataForStageInitialization
+ ld a, [wCurrentStage]
+ call CallInFollowingTable
+CallTable_8348: ; 0x8348
+ ; STAGE_RED_FIELD_TOP
+ padded_dab InitRedField
+ ; STAGE_RED_FIELD_BOTTOM
+ padded_dab InitRedField
+ padded_dab Func_18000
+ padded_dab Func_18000
+ ; STAGE_BLUE_FIELD_TOP
+ padded_dab InitBlueField
+ ; STAGE_BLUE_FIELD_BOTTOM
+ padded_dab InitBlueField
+ ; STAGE_GENGAR_BONUS
+ padded_dab InitGengarBonusStage
+ ; STAGE_GENGAR_BONUS
+ padded_dab InitGengarBonusStage
+ ; STAGE_MEWTWO_BONUS
+ padded_dab InitMewtwoBonusStage
+ ; STAGE_MEWTWO_BONUS
+ padded_dab InitMewtwoBonusStage
+ ; STAGE_MEOWTH_BONUS
+ padded_dab InitMeowthBonusStage
+ ; STAGE_MEOWTH_BONUS
+ padded_dab InitMeowthBonusStage
+ ; STAGE_DIGLETT_BONUS
+ padded_dab InitDiglettBonusStage
+ ; STAGE_DIGLETT_BONUS
+ padded_dab InitDiglettBonusStage
+ ; STAGE_SEEL_BONUS
+ padded_dab InitSeelBonusStage
+ ; STAGE_SEEL_BONUS
+ padded_dab InitSeelBonusStage
+
+ResetDataForStageInitialization: ; 0x8388
+; Resets some game data, depending on which stage is being initialized.
+ ld a, [wd7c1]
+ and a
+ jr z, .asm_8398
+ ld hl, wSubTileBallXPos
+ ld bc, $0037
+ call ClearData
+ ret
+.asm_8398
+ ld a, [wCurrentStage]
+ cp STAGE_BLUE_FIELD_BOTTOM + 1
+ ret nc ; Check if bonus stage
+ ld hl, wPartyMons
+ ld bc, $0170
+ call ClearData
+ ld hl, wd473
+ ld bc, $0039
+ call ClearData
+ ld hl, wd4ad
+ ld bc, $034d
+ call ClearData
+ ret
diff --git a/engine/main/stage_init/init_unused_stage.asm b/engine/main/stage_init/init_unused_stage.asm
new file mode 100755
index 0000000..4fac82d
--- /dev/null
+++ b/engine/main/stage_init/init_unused_stage.asm
@@ -0,0 +1,32 @@
+Func_18000: ; 0x18000
+; unused -- Stage init function for unused stage.
+ ld hl, wc000
+ ld bc, $0a00
+ call ClearData
+ ld a, $1
+ ld [rVBK], a
+ hlCoord 0, 0, vBGWin
+ ld bc, $0400
+ call ClearData
+ xor a
+ ld [rVBK], a
+ ld hl, wWhichVoltorb
+ ld bc, $032e
+ call ClearData
+ xor a
+ ld hl, wScore + $5
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hld], a
+ ld [hl], a
+ ld [wNumPartyMons], a
+ ld [wd49b], a
+ ld [wd4c9], a
+ ld a, $1
+ ld [wd49d], a
+ ld a, $3
+ ld [wd49e], a
+ callba Start20SecondSaverTimer
+ ret