summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xconstants.asm1
-rwxr-xr-xconstants/stage_constants.asm16
-rwxr-xr-xmain.asm207
3 files changed, 207 insertions, 17 deletions
diff --git a/constants.asm b/constants.asm
index 8fa60c3..0c63cd3 100755
--- a/constants.asm
+++ b/constants.asm
@@ -8,3 +8,4 @@ INCLUDE "constants/pokemon_constants.asm"
INCLUDE "constants/screen_constants.asm"
INCLUDE "constants/song_constants.asm"
INCLUDE "constants/sound_effect_constants.asm"
+INCLUDE "constants/stage_constants.asm"
diff --git a/constants/stage_constants.asm b/constants/stage_constants.asm
new file mode 100755
index 0000000..600abf9
--- /dev/null
+++ b/constants/stage_constants.asm
@@ -0,0 +1,16 @@
+STAGE_RED_FIELD_TOP EQU $0
+STAGE_RED_FIELD_BOTTOM EQU $1
+; XXX EQU $2
+; XXX EQU $3
+STAGE_BLUE_FIELD_TOP EQU $4
+STAGE_BLUE_FIELD_BOTTOM EQU $5
+; STAGE_GENGAR_BONUS EQU $6 ; buggy
+STAGE_GENGAR_BONUS EQU $7
+; STAGE_MEWTWO_BONUS EQU $8 ; buggy
+STAGE_MEWTWO_BONUS EQU $9
+; STAGE_MEOWTH_BONUS EQU $a ; buggy
+STAGE_MEOWTH_BONUS EQU $b
+; STAGE_DIGLETT_BONUS EQU $c ; buggy
+STAGE_DIGLETT_BONUS EQU $d
+; STAGE_SEEL_BONUS EQU $e ; buggy
+STAGE_SEEL_BONUS EQU $f
diff --git a/main.asm b/main.asm
index d70f9ec..a942b6a 100755
--- a/main.asm
+++ b/main.asm
@@ -3758,8 +3758,8 @@ CallTable_2049: ; 0x2049
db Bank(HandleHighScoresScreen), $00
; SCREEN_FIELD_SELECT
- dw $56D3
- db $03, $00
+ dw HandleFieldSelectScreen
+ db Bank(HandleFieldSelectScreen), $00
; end of call table
Func_206d: ; 0x206d
@@ -8373,9 +8373,9 @@ Func_cb14: ; 0xcb14
ld [$d80d], a
ld [$d80e], a
xor a
- ld [$ffa1], a
+ ld [hBoardXShift], a
ld [$ffab], a
- ld [$ffa0], a
+ ld [hBoardYShift], a
ld [$ffad], a
ld a, $e
ld [$ffa2], a
@@ -9663,7 +9663,7 @@ Func_d4cf: ; 0xd4cf
xor a
ld [$ffa6], a
ld a, $2
- ld [$ffa1], a
+ ld [hBoardXShift], a
ld hl, $ff9e
set 5, [hl]
ld b, $27
@@ -9678,7 +9678,7 @@ Func_d4cf: ; 0xd4cf
dec [hl]
dec [hl]
dec [hl]
- ld hl, $ffa1
+ ld hl, hBoardXShift
inc [hl]
inc [hl]
inc [hl]
@@ -9688,7 +9688,7 @@ Func_d4cf: ; 0xd4cf
dec b
jr nz, .asm_d508
xor a
- ld [$ffa1], a
+ ld [hBoardXShift], a
ld hl, $ff9e
res 5, [hl]
set 3, [hl]
@@ -9704,7 +9704,7 @@ Func_d4cf: ; 0xd4cf
xor a
ld [$ffa6], a
ld a, $a0
- ld [$ffa1], a
+ ld [hBoardXShift], a
ld hl, $ff9e
set 5, [hl]
res 3, [hl]
@@ -9719,7 +9719,7 @@ Func_d4cf: ; 0xd4cf
inc [hl]
inc [hl]
inc [hl]
- ld hl, $ffa1
+ ld hl, hBoardXShift
dec [hl]
dec [hl]
dec [hl]
@@ -9729,7 +9729,7 @@ Func_d4cf: ; 0xd4cf
dec b
jr nz, .asm_d551
xor a
- ld [$ffa1], a
+ ld [hBoardXShift], a
ld hl, $ff9e
res 5, [hl]
xor a
@@ -9790,13 +9790,47 @@ Func_d6b6: ; 0xd6b6
ld [hli], a
ret
-INCBIN "baserom.gbc",$d6d3,$d71c - $d6d3
+HandleFieldSelectScreen: ; 0xd6d3
+ ld a, [wScreenState]
+ rst $18
+PointerTable_d6d7: ; 0xd6d7
+ dw LoadFieldSelectScreen
+ dw ChooseFieldToPlay
+ dw ExitFieldSelectScreen
+
+LoadFieldSelectScreen: ; 0xd6dd
+ ld a, $43
+ ld [$ff9e], a
+ ld a, $e4
+ ld [$d80c], a
+ ld a, $d2
+ ld [$d80d], a
+ ld [$d80e], a
+ xor a
+ ld [hBoardXShift], a
+ ld [hBoardYShift], a
+ ld hl, FieldSelectGfxPointers
+ ld a, [hGameBoyColorFlag]
+ call LoadVideoData
+ call ClearOAMBuffer
+ ld a, $8
+ ld [$d914], a
+ call Func_b66
+ ld a, $12
+ call Func_52c
+ ld de, $0003
+ call Func_490
+ call Func_588
+ call Func_bbe
+ ld hl, wScreenState
+ inc [hl]
+ ret
-PointerTable_d71c: ; 0xd71c
- dw DataArray_d720
- dw DataArray_d730
+FieldSelectGfxPointers: ; 0xd71c
+ dw FieldSelectGfx_GameBoy
+ dw FieldSelectGfx_GameBoyColor
-DataArray_d720: ; 0xd720
+FieldSelectGfx_GameBoy: ; 0xd720
dw FieldSelectScreenGfx
db Bank(FieldSelectScreenGfx)
dw vTiles1 - $100
@@ -9809,7 +9843,7 @@ DataArray_d720: ; 0xd720
db $FF, $FF ; terminators
-DataArray_d730: ; 0xd730
+FieldSelectGfx_GameBoyColor: ; 0xd730
dw FieldSelectScreenGfx
db Bank(FieldSelectScreenGfx)
dw vTiles1 - $100
@@ -9832,7 +9866,146 @@ DataArray_d730: ; 0xd730
db $FF, $FF ; terminators
-INCBIN "baserom.gbc",$d74e,$d853 - $d74e
+ChooseFieldToPlay: ; 0xd74e
+ call Func_d7d3
+ ld hl, $583d ; todo
+ call Func_d7fb
+ ld a, [hNewlyPressedButtons]
+ and (A_BUTTON | B_BUTTON)
+ ret z
+ ld [$d8f6], a
+ ld a, $18
+ ld [$d912], a
+ ld a, $1
+ ld [$d914], a
+ ld de, $0001
+ call PlaySoundEffect
+ ld hl, wScreenState
+ inc [hl]
+ ret
+
+ExitFieldSelectScreen: ; 0xd774
+ ld a, [$d8f6] ; this holds the button that was pressed (A or B)
+ bit BIT_A_BUTTON, a
+ jr z, .didntPressA
+ ld hl, $5846
+ call Func_d7fb
+ ld a, [$d912]
+ dec a
+ ld [$d912], a
+ ret nz
+.didntPressA
+ ld a, [hJoypadState]
+ push af
+ call Func_cb5
+ call Func_576
+ ld a, [$d8f6]
+ bit BIT_A_BUTTON, a
+ jr z, .pressedB
+ ld a, [$d913]
+ ld c, a
+ ld b, $0
+ ld hl, StartingStages
+ add hl, bc
+ ld a, [hl]
+ ld [$d4ac], a
+ pop af
+ xor a
+ ld [$d7c2], a
+ ld hl, $d300
+ ld de, $a268
+ ld bc, $04c3
+ call Func_f1a
+ xor a
+ ld [$d7c1], a
+ ; Start a round of Pinball! Yayy
+ ld a, SCREEN_PINBALL_GAME
+ ld [wCurrentScreen], a
+ xor a
+ ld [wScreenState], a
+ ret
+.pressedB
+ pop af
+ ld a, SCREEN_TITLESCREEN
+ ld [wCurrentScreen], a
+ xor a
+ ld [wScreenState], a
+ ret
+
+StartingStages: ; 0xd7d1
+ db STAGE_RED_FIELD_BOTTOM, STAGE_BLUE_FIELD_BOTTOM
+
+Func_d7d3: ; 0x57d3
+ ld a, [$ff9a]
+ ld b, a
+ ld a, [$d913]
+ bit 5, b
+ jr z, .asm_d7ea
+ and a
+ ret z
+ dec a
+ ld [$d913], a
+ ld de, $003c
+ call PlaySoundEffect
+ ret
+.asm_d7ea
+ bit 4, b
+ ret z
+ cp $1
+ ret z
+ inc a
+ ld [$d913], a
+ ld de, $003d
+ call PlaySoundEffect
+ ret
+
+Func_d7fb: ; 0xd7fb
+ push hl
+ ld a, [$d913]
+ sla a
+ ld c, a
+ ld b, $0
+ ld hl, $584f ; todo
+ add hl, bc
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ ld a, [$d915]
+ sla a
+ ld e, a
+ ld d, $0
+ pop hl
+ push hl
+ add hl, de
+ ld a, [hl]
+ call LoadOAMData
+ ld a, [$d914]
+ dec a
+ jr nz, .asm_d838
+ inc hl
+ inc hl
+ ld a, [hl]
+ and a
+ jr z, .asm_d82b
+ ld a, [$d915]
+ inc a
+.asm_d82b
+ ld [$d915], a
+ sla a
+ ld c, a
+ ld b, $0
+ pop hl
+ push hl
+ inc hl
+ add hl, bc
+ ld a, [hl]
+.asm_d838
+ ld [$d914], a
+ pop hl
+ ret
+
+INCBIN "baserom.gbc",$d83d,$d853 - $d83d
Func_d853: ; 0xd853
ld a, [wScreenState]