Merge pull request #19 from PikalaxALT/master

File modes and HOME splitting
This commit is contained in:
Marcus Huderle 2017-07-09 10:24:07 -07:00 committed by GitHub
commit c3c25e3a11
39 changed files with 1482 additions and 1468 deletions

0
data/queued_tiledata/ball_upgrade.asm Executable file → Normal file
View File

View File

View File

0
data/queued_tiledata/blue_field/bumpers.asm Executable file → Normal file
View File

0
data/queued_tiledata/blue_field/cave_lights.asm Executable file → Normal file
View File

0
data/queued_tiledata/blue_field/force_field.asm Executable file → Normal file
View File

0
data/queued_tiledata/blue_field/poliwag_psyduck.asm Executable file → Normal file
View File

0
data/queued_tiledata/blue_field/spinner.asm Executable file → Normal file
View File

View File

View File

0
data/queued_tiledata/red_field/bumpers.asm Executable file → Normal file
View File

0
data/queued_tiledata/red_field/cave_lights.asm Executable file → Normal file
View File

0
data/queued_tiledata/red_field/diglett.asm Executable file → Normal file
View File

0
data/queued_tiledata/red_field/spinner.asm Executable file → Normal file
View File

View File

@ -21,7 +21,7 @@ FadeInCopyrightScreen: ; 0x8228
call LoadVideoData
call ClearOAMBuffer
call Func_b66
call Func_588
call EnableLCD
call SGBNormal
ld bc, $0050
call AdvanceFrames
@ -68,7 +68,7 @@ DisplayCopyrightScreen: ; 0x8290
FadeOutCopyrightScreenAndLoadData: ; 0x82a8
call FadeOut
call Func_576
call DisableLCD
ld hl, sHighScores
ld de, wRedHighScore1Points
ld bc, $0082

View File

@ -29,7 +29,7 @@ CheckForResetButtonCombo: ; 0x8167
call LoadVideoData
call ClearOAMBuffer
call Func_b66
call Func_588
call EnableLCD
call SGBNormal
call FadeIn
ld hl, wScreenState
@ -107,7 +107,7 @@ HandleEraseAllDataInput: ; 0x81d4
ExitEraseAllDataMenu: ; 0x820f
call FadeOut
call Func_576
call DisableLCD
ld hl, wCurrentScreen
inc [hl]
xor a

View File

@ -28,7 +28,7 @@ LoadFieldSelectScreen: ; 0xd6dd
call SetSongBank
ld de, $0003
call PlaySong
call Func_588
call EnableLCD
call FadeIn
ld hl, wScreenState
inc [hl]
@ -82,7 +82,7 @@ ExitFieldSelectScreen: ; 0xd774
ld a, [hJoypadState]
push af
call FadeOut
call Func_576
call DisableLCD
ld a, [wd8f6]
bit BIT_A_BUTTON, a
jr z, .pressedB

View File

@ -164,7 +164,7 @@ Func_cb14: ; 0xcb14
ld de, $0002
call PlaySong
.asm_cba6
call Func_588
call EnableLCD
ld bc, $0009
call Func_d68a
ld bc, $03c9
@ -179,7 +179,7 @@ Func_cb14: ; 0xcb14
call SetSongBank
ld de, $0004
call PlaySong
call Func_588
call EnableLCD
ld bc, $0009
call Func_d68a
ld bc, $03c9
@ -944,7 +944,7 @@ Func_d159: ; 0xd159
ExitHighScoresScreen: ; 0xd171
call FadeOut
call Func_576
call DisableLCD
ld hl, hSTAT
res 6, [hl]
ld hl, rIE

View File

@ -36,7 +36,7 @@ Func_c35a: ; 0xc35a
call SetSongBank
ld de, $0002
call PlaySong
call Func_588
call EnableLCD
ld a, [wSoundTestCurrentBackgroundMusic]
hlCoord 7, 11, vBGMap
call RedrawSoundTestID
@ -146,7 +146,7 @@ Func_c447: ; 0xc447
Func_c483: ; 0xc483
call FadeOut
call Func_576
call DisableLCD
ld a, SCREEN_TITLESCREEN
ld [wCurrentScreen], a
xor a

View File

@ -60,7 +60,7 @@ GameScreenFunction_StartBall: ; 0xd87f
xor a
ld [wd7c1], a
call Func_b66
call Func_588
call EnableLCD
call FadeIn
ld hl, wScreenState
inc [hl]
@ -234,7 +234,7 @@ GameScreenFunction_EndBall: ; 0xdab2
ld a, [wd849]
and a
call z, Func_e5d
call Func_576
call DisableLCD
ld hl, hSTAT
res 6, [hl]
ld hl, rIE
@ -252,7 +252,7 @@ GameScreenFunction_EndBall: ; 0xdab2
ld a, [wd849]
and a
call nz, Func_e5d
call Func_576
call DisableLCD
ld hl, hSTAT
res 6, [hl]
ld hl, rIE
@ -279,7 +279,7 @@ GameScreenFunction_EndBall: ; 0xdab2
ld a, [wd849]
and a
call nz, Func_e5d
call Func_576
call DisableLCD
ld hl, hSTAT
res 6, [hl]
ld hl, rIE
@ -300,7 +300,7 @@ TransitionToHighScoresScreen: ; 0xdb5d
ld bc, $0004
call AdvanceFrames
call FadeOut
call Func_576
call DisableLCD
ld hl, hSTAT
res 6, [hl]
ld hl, rIE

View File

@ -350,7 +350,7 @@ Func_1c3ee: ; 0x1c3ee
ld hl, PaletteData_dd188
ld de, $0070
ld bc, $0010
call Func_6fd
call FarCopyCGBPals
ret
Func_1c43c: ; 0x1c43c

View File

@ -299,7 +299,7 @@ Func_14234: ; 0x14234
ld hl, PaletteData_dd188
ld de, $0070
ld bc, $0010
call Func_6fd
call FarCopyCGBPals
ret
Func_14282: ; 0x14282
@ -403,7 +403,7 @@ Func_142fc: ; 0x142fc
ld hl, PokeBallObjPalette
ld de, $0040
ld bc, $0008
call Func_6fd
call FarCopyCGBPals
ret
.notPokeball
@ -413,7 +413,7 @@ Func_142fc: ; 0x142fc
ld hl, GreatBallObjPalette
ld de, $0040
ld bc, $0008
call Func_6fd
call FarCopyCGBPals
ret
.notGreatball
@ -423,7 +423,7 @@ Func_142fc: ; 0x142fc
ld hl, UltraBallObjPalette
ld de, $0040
ld bc, $0008
call Func_6fd
call FarCopyCGBPals
ret
.notUltraball
@ -431,7 +431,7 @@ Func_142fc: ; 0x142fc
ld hl, MasterBallObjPalette
ld de, $0040
ld bc, $0008
call Func_6fd
call FarCopyCGBPals
ret
Func_14377: ; 0x14377

View File

@ -1440,7 +1440,7 @@ Func_18d34: ; 0x18d34
ld a, $80
ld [wFlipperCollision], a
ld de, $002f
call Func_4d8
call PlaySFXIfNoneActive
.asm_18d71
ret

View File

@ -7,7 +7,7 @@ SaveGame: ; 0xda05
ld a, [wd849]
and a
call nz, Func_e5d
call Func_576
call DisableLCD
ld hl, hSTAT
res 6, [hl]
ld hl, rIE

View File

@ -10,14 +10,14 @@ InitializeCurrentStage: ; 0x8311
ld hl, vBGWin
ld bc, $0400
ld a, $0
call Func_63e
call __memset_8
jr .asm_833c
.asm_8331
ld hl, vBGWin
ld bc, $0400
ld a, $8
call Func_63e
call __memset_8
.asm_833c
xor a
ld [rVBK], a

View File

@ -17,13 +17,13 @@ FieldVerticalTransition: ; 0xe674
ld [hOBP1], a
rst AdvanceFrame
call Func_e5d
call Func_576
call DisableLCD
call ClearOAMBuffer
call Func_1129
call LoadStageCollisionAttributes
call LoadStageData
call Func_e5d
call Func_588
call EnableLCD
ld a, $e4
ld [hBGP], a
ld a, $e1

View File

@ -64,7 +64,7 @@ LoadPokedexScreen: ; 0x2800e
call SetSongBank
ld de, $0004
call PlaySong
call Func_588
call EnableLCD
call FadeIn
ld hl, wScreenState
inc [hl]
@ -711,7 +711,7 @@ Func_284bc: ; 0x284bc
ExitPokedexScreen: ; 0x284f9
call FadeOut
call Func_576
call DisableLCD
ld hl, hSTAT
res 6, [hl]
ld hl, rIE

View File

@ -40,7 +40,7 @@ InitSelectGameboyTargetMenu: ; 0x800a
call LoadGameboyTargetMenuGfx
call ClearOAMBuffer
call Func_b66
call Func_588
call EnableLCD
call FadeIn
ld hl, wScreenState
inc [hl]
@ -230,7 +230,7 @@ CGBSelected_TileData: ; 0x8144
EndSelectGameboyTargetMenu: ; 0x414e
call FadeOut
call Func_576
call DisableLCD
ld hl, wCurrentScreen
inc [hl] ; set to SCREEN_ERASE_ALL_DATA
xor a

View File

@ -34,7 +34,7 @@ FadeInTitlescreen: ; 0xc00e
call SetSongBank
ld de, $0004
call PlaySong
call Func_588
call EnableLCD
call FadeIn
ld hl, wScreenState
inc [hl]
@ -148,7 +148,7 @@ Func_c10e: ; 0xc10e
and a
jr z, .asm_c177
call FadeOut
call Func_576
call DisableLCD
ld a, [wd7c2]
and a
jr z, .asm_c173
@ -224,7 +224,7 @@ Func_c1b1: ; 0xc1b1
Func_c1cb: ; 0c1cb
call FadeOut
call Func_576
call DisableLCD
ld a, [wTitleScreenCursorSelection]
ld c, a
ld b, $0
@ -243,7 +243,7 @@ Data_c1e4: ; 0xc1e4
GoToHighScoresFromTitlescreen: ; 0xc1e7
call FadeOut
call Func_576
call DisableLCD
ld a, SCREEN_HIGH_SCORES
ld [wCurrentScreen], a
ld a, $1

1439
home.asm

File diff suppressed because it is too large Load Diff

101
home/audio.asm Normal file
View File

@ -0,0 +1,101 @@
PlaySong: ; 0x490
ld a, [hLoadedROMBank]
push af
ld a, [wCurrentSongBank]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ld a, e
ld [wStageSong], a
ld a, [wCurrentSongBank]
ld [wStageSongBank], a
call PlaySong_BankF ; this function is replicated in multiple banks.
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
PlaySoundEffect: ; 0x4af
; u8 d = duration
; u8 e = SFX ID
ld a, [wdead]
and a
ret nz
ld a, [wSFXTimer]
and a
jr z, .asm_4bd
ld a, d
and a
ret z
.asm_4bd
ld a, d
ld [wSFXTimer], a
ld d, $0
ld a, [hLoadedROMBank]
push af
ld a, [wCurrentSongBank]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
call PlaySoundEffect_BankF ; this function is replicated in multiple banks
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
PlaySFXIfNoneActive: ; 0x4d8
push bc
push de
push hl
ld a, [wChannel4 + 2]
ld hl, wChannel5 + 2
or [hl]
ld hl, wChannel6 + 2
or [hl]
and $1
call z, PlaySoundEffect
pop hl
pop de
pop bc
ret
PlayCry: ; 0x4ef
; Plays a Pokemon cry.
; Input: e = mon id
ld a, [hLoadedROMBank]
push af
ld a, [wCurrentSongBank]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
call PlayCry_BankF ; this function is replicated in multiple banks
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
UpdateSFX: ; 0x504
ld a, [hLoadedROMBank]
push af
ld a, [wCurrentSongBank]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
call Func_3c180
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ld a, [wd801]
inc a
ld [wd801], a
and $3
ret nz
ld a, [wSFXTimer]
and a
ret z
dec a
ld [wSFXTimer], a
ret
SetSongBank: ; 0x52c
di
ld [wCurrentSongBank], a
ei
ret

591
home/copy.asm Normal file
View File

@ -0,0 +1,591 @@
__memset_8: ; 0xc3e
dec bc
.asm_63f
ld [hli], a
dec bc
bit 7, b
jr z, .asm_63f
ret
__memset_16:
srl b
rr c
.asm_064a
ld a, e
ld [hli], a
ld a, d
ld [hli], a
dec bc
ld a, b
or c
jr nz, .asm_064a
ret
ClearData: ; 0x654
; Clears bc bytes starting at hl.
; bc can be a maximum of $7fff, since it checks bit 7 of b when looping.
xor a
dec bc
.clearLoop
ld [hli], a
dec bc
bit 7, b
jr z, .clearLoop
ret
LocalCopyData: ; 0x65d
ld a, [hli]
ld [de], a
inc de
dec bc
ld a, c
or b
jr nz, LocalCopyData
ret
FarCopyData: ; 0x666 spooky
; Copies data from any bank to either working RAM or video RAM
; Input: hl = address of data to copy
; a = bank of data to copy
; de = destination for data
; bc = number of bytes to copy
bit 7, h
jr nz, .copyFromSRAM
ld [hROMBankBuffer], a
ld a, [hLoadedROMBank]
push af
ld a, [hROMBankBuffer]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
scf
jr .copyData
.copyFromSRAM
ld [MBC5SRamBank], a
and a
.copyData
push af
.copyLoop
ld a, [hli]
ld [de], a
inc de
dec bc
ld a, c
or b
jr nz, .copyLoop
pop af
ret nc
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
ReadByteFromBank: ; 0x68f
; Input: a = bank
; hl = address of byte to read
; Output: a = byte at a:hl
push de
ld d, a
ld a, [hLoadedROMBank]
ld e, a
ld a, d
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ld d, [hl]
ld a, e
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ld a, d
pop de
ret
LoadVideoData: ; 0x6a4
; Input:
; hl = address of pointer table
; a = index of item to load in pointer table
; This needs more documentation. It loads things like graphics and palettes.
sla a
ld c, a
ld b, $0
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
.loadItem
ld a, [hli]
ld c, a
and [hl]
cp $ff ; two consecutive $ff bytes terminate the array
ret z
ld a, [hli]
ld b, a ; bc contains pointer to data to be loaded
push hl
push bc
ld a, [hli] ; a contains bank of data to be loaded
ld e, [hl]
inc hl
ld d, [hl] ; de contains destination address or palette offset for data
inc hl
ld c, [hl]
inc hl
ld b, [hl] ; bc contains size and flags
inc hl ; this is a wasted instruction
pop hl
call .autoCopyVideoData
pop hl
ld bc, $0005
add hl, bc
jr .loadItem
.autoCopyVideoData
; a: bank
; hl: source
; bc: flags and size rolled into one
; bit 0: CGB palette data if set, tile data else
; If tile data:
; bit 1: VBank
; de = dest
; Else:
; de = palette offset
; remaining bits: size
srl b
rr c
jp c, FarCopyCGBPals ; if lowest bit of bc is set
jp @ + 2
ld [hROMBankBuffer], a ; save bank of data to be loaded
ld a, [hLoadedROMBank]
push af
ld a, [hROMBankBuffer] ; a contains bank of data to be loaded
ld [hLoadedROMBank], a
ld [MBC5RomBank], a ; switch bank to the bank of data to be loaded
srl b
rr c
rl a
and $1 ; checks bit 1 of the last word in the data struct
ld [rVBK], a ; set VRAM Bank
.copyByte
ld a, [hli]
ld [de], a
inc de
dec bc
ld a, c
or b ; does bc = 0?
jr nz, .copyByte
xor a
ld [rVBK], a ; set VRAM Bank to Bank 0
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a ; reload the previous ROM Bank
ret
FarCopyCGBPals: ; 0x6fd
; a: bank
; hl: source
; e: dest offset
; bc: size
ld [hROMBankBuffer], a ; save bank of data to be loaded
ld a, [hLoadedROMBank]
push af
ld a, [hROMBankBuffer] ; a contains bank of data to be loaded
ld [hLoadedROMBank], a
ld [MBC5RomBank], a ; switch bank to the bank of data to be loaded
ld a, e
bit 6, a
jr nz, .do_obp
ld de, rBGPI
call .copyPaletteData
jr z, .no_obp
xor a
.do_obp
ld de, rOBPI
call .copyPaletteData
.no_obp
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
.copyPaletteData
res 6, a ; only 64 bytes fit here
ld b, a
set 7, a ; auto-increment
ld [de], a
inc de
.copyByte
ld a, [hli]
ld [de], a
inc b
dec c
ret z
bit 6, b
jr z, .copyByte
ret
LoadOrCopyVRAMData: ; 0x735
push hl
ld hl, rLCDC
bit 7, [hl]
pop hl
jp z, FarCopyData
; fall through
LoadVRAMData: ; 0x73f
; This loads some data into VRAM. It waits for the LCD H-Blank to copy the data 4 bytes at a time.
; input: hl = source of data
; a = bank of data to load
; de = destination of data
; bc = number of bytes to copy
bit 7, h
jr nz, .asm_752
ld [hROMBankBuffer], a
ld a, [hLoadedROMBank]
push af
ld a, [hROMBankBuffer]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
scf
jr .asm_756
.asm_752
ld [MBC5SRamBank], a
and a
.asm_756
push af
call WaitForLCD
.loop
call Func_61b
.waitForHBlank
ld a, [rSTAT]
and $3
jr nz, .waitForHBlank
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
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
dec bc
dec bc
dec bc
dec bc
nop
nop
nop
nop
ld a, b
or c
jr nz, .loop
pop af
ret nc
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
FarCopyPalettes: ; 0x790
push hl
ld hl, rLCDC
bit 7, [hl]
pop hl
jp nz, Func_7dc
bit 7, h
jr nz, .asm_7ad
ld [hROMBankBuffer], a
ld a, [hLoadedROMBank]
push af
ld a, [hROMBankBuffer]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
scf
jr .asm_7b1
.asm_7ad
ld [MBC5SRamBank], a
and a
.asm_7b1
push af
ld a, e
bit 6, e
ld de, rBGPI
jr z, .asm_7bf
res 6, a
ld de, rOBPI
.asm_7bf
set 7, a
ld [de], a
inc de
.asm_7c3
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
dec bc
dec bc
dec bc
dec bc
ld a, b
or c
jr nz, .asm_7c3
pop af
ret nc
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
Func_7dc: ; 0x7dc
bit 7, h
jr nz, .asm_7ef
ld [hROMBankBuffer], a
ld a, [hLoadedROMBank]
push af
ld a, [hROMBankBuffer]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
scf
jr .asm_7f3
.asm_7ef
ld [MBC5SRamBank], a
and a
.asm_7f3
push af
ld a, e
bit 6, e
ld de, rBGPI
jr z, .asm_801
res 6, a
ld de, rOBPI
.asm_801
push hl
ld h, d
ld l, e
set 7, a
call PutTileInVRAM
inc de
pop hl
call WaitForLCD
.asm_80e
call Func_61b
.asm_811
ld a, [rSTAT]
and $3
jr nz, .asm_811
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
ld a, [hli]
ld [de], a
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
dec bc
dec bc
dec bc
dec bc
nop
nop
nop
nop
ld a, b
or c
jr nz, .asm_80e
pop af
ret nc
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
PutTileInVRAM: ; 0x848
; Puts a tile in VRAM.
; input: a = tile number
; hl = pointer to VRAM location where tile should be placed
push af
call WaitForLCD
call Func_61b
.asm_84f
ld a, [rSTAT]
and $3
jr nz, .asm_84f ; wait for lcd controller to finish transferring data
pop af
ld [hl], a ; Store tile number in VRAM background map
ret
Func_858: ; 0x858
push af
call WaitForLCD
call Func_61b
.asm_85f
ld a, [rSTAT]
and $3
jr nz, .asm_85f
ld a, $1
ld [rVBK], a
pop af
ld [hl], a
xor a
ld [rVBK], a
ret
LoadBillboardPaletteMap: ; 0x86f
; Loads the background palette map for a 6x4-tile billboard picture.
ld [hROMBankBuffer], a
ld a, [hLoadedROMBank]
push af
ld a, [hROMBankBuffer]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ld a, [rLCDC]
bit 7, a
jr nz, .asm_8ac
ld a, $1
ld [rVBK], a
ld b, $4
.loop
push bc
ld a, [de]
ld [hli], a
inc de
ld a, [de]
ld [hli], a
inc de
ld a, [de]
ld [hli], a
inc de
ld a, [de]
ld [hli], a
inc de
ld a, [de]
ld [hli], a
inc de
ld a, [de]
ld [hli], a
inc de
ld bc, $001a
add hl, bc
pop bc
dec b
jr nz, .loop
xor a
ld [rVBK], a
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
.asm_8ac
ld b, $4
.asm_8ae
push bc
ld a, [de]
call Func_858
inc hl
inc de
ld a, [de]
call Func_858
inc hl
inc de
ld a, [de]
call Func_858
inc hl
inc de
ld a, [de]
call Func_858
inc hl
inc de
ld a, [de]
call Func_858
inc hl
inc de
ld a, [de]
call Func_858
inc de
ld bc, $001b
add hl, bc
pop bc
dec b
jr nz, .asm_8ae
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
Func_8e1: ; 0x8e1
ld [hROMBankBuffer], a
ld a, [hLoadedROMBank]
push af
ld a, [hROMBankBuffer]
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ld a, [rLCDC]
bit 7, a
jr nz, .asm_902
ld a, c
ld [hli], a
.asm_8f5
ld a, [de]
ld [hl], a
inc de
dec b
jr nz, .asm_8f5
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret
.asm_902
ld a, c
call PutTileInVRAM
inc hl
.asm_907
ld a, [de]
call PutTileInVRAM
inc de
dec b
jr nz, .asm_907
pop af
ld [hLoadedROMBank], a
ld [MBC5RomBank], a
ret

457
home/ir.asm Normal file
View File

@ -0,0 +1,457 @@
Func_1be3: ; 0x1be3
ld a, $c0
ld [rRP], a
ld a, $ff
ld [wd8ea], a
xor a
ld b, a
.loop
inc a
jr nz, .loop
inc b
jr nz, .loop
ld hl, wd8eb
ld a, [rKEY1]
bit 7, a
jr z, .normalSpeed
ld [hl], $e
inc hl
ld [hl], $12
inc hl
ld [hl], $8
inc hl
ld [hl], $c
inc hl
ld [hl], $c
ret
.normalSpeed
ld [hl], $6
inc hl
ld [hl], $8
inc hl
ld [hl], $2
inc hl
ld [hl], $4
inc hl
ld [hl], $5
ret
Func_1c1b: ; 0x1c1b
inc d
ret z
ld a, [$ff00+c]
bit 1, a
jr z, Func_1c1b
ret
Func_1c23: ; 0x1c23
inc d
ret z
ld a, [$ff00+c]
bit 1, a
jr nz, Func_1c23
ret
Func_1c2b: ; 0x1c2b
ld a, $c1
ld [$ff00+c], a
.asm_1c2e
dec d
jr nz, .asm_1c2e
ret
Func_1c32: ; 0x1c32
ld a, $c0
ld [$ff00+c], a
.asm_1c35
dec d
jr nz, .asm_1c35
ret
Func_1c39:
xor a
ld [hNumFramesSinceLastVBlank], a
ld a, $1
ld [wd8e9], a
.asm_1c41
ld b, $2
ld c, rRP % $100
ld a, [$ff00+c]
and b
jr z, Func_1c50
ld a, [hNumFramesSinceLastVBlank]
and a
jr nz, Func_1ca1
jr .asm_1c41
Func_1c50: ; 0x1c50
ld a, $1
ld [wd8e9], a
ld b, $1a
ld c, rRP % $100
ld d, $0
ld e, d
call Func_1c23
ld a, d
and a
jp z, Func_1dc2
ld d, e
call Func_1c1b
ld a, d
and a
jp z, Func_1dc2
call Func_1c23
ld a, d
and a
jp z, Func_1dc2
call Func_1c1b
ld a, d
and a
jp z, Func_1dc2
cp $8
jp c, Func_1dc2
cp $2a
jp nc, Func_1dc2
ld a, $0
ld [wd8ea], a
ld d, b
call Func_1c32
ld d, b
call Func_1c2b
ld d, b
call Func_1c32
ld d, b
call Func_1c2b
ld d, b
call Func_1c32
ret
Func_1ca1: ; 0x1ca1
ld a, $2
ld [wd8e9], a
ld b, $1a
ld c, rRP % $100
ld d, b
ld e, $0
call Func_1c32
ld d, b
call Func_1c2b
ld d, b
call Func_1c32
ld d, b
call Func_1c2b
ld d, b
call Func_1c32
ld d, e
call Func_1c23
ld a, d
and a
jp z, Func_1dc2
ld d, e
call Func_1c1b
ld a, d
and a
jp z, Func_1dc2
ld d, e
call Func_1c23
ld a, d
and a
jp z, Func_1dc2
ld d, e
call Func_1c1b
ld a, d
and a
jp z, Func_1dc2
ld d, $1a
call Func_1c32
ld a, $0
ld [wd8ea], a
ret
Func_1cef:
xor a
ld [rRP], a
ld a, $ff
ld [wd8ea], a
ret
Func_1cf8: ; 0x1cf8
xor a
ld [wd8e4], a
ld [wd8e5], a
push hl
push bc
ld hl, wd8e6
ld a, $5a
ld [hli], a
ld [hl], b
dec hl
ld b, $2
ld d, $1e
call Func_1c32
call Func_1d44
pop bc
pop hl
call Func_1ed3
call Func_1d44
ld a, [wd8e4]
ld [wd8e6], a
ld a, [wd8e5]
ld [wd8e7], a
ld hl, wd8e6
ld b, $2
call Func_1d44
ld hl, wd8ea
ld b, $1
call Func_1e3b
ld a, [wd8e6]
ld [wd8e4], a
ld a, [wd8e7]
ld [wd8e5], a
ret
Func_1d44: ; 0x1d44
ld a, [wd8ea]
cp $0
ret nz
ld c, rRP % $100
ld d, $16
call Func_1c2b
ld d, $16
call Func_1c32
ld a, b
cpl
ld b, a
.asm_1d59
inc b
jr z, .asm_1dae
ld a, $8
ld [wd8e3], a
ld a, [hli]
ld e, a
ld a, [wd8e4]
add e
ld [wd8e4], a
jr nc, .asm_1d75
ld a, [wd8e5]
inc a
ld [wd8e5], a
jr .asm_1d78
.asm_1d75
call Func_1ed3
.asm_1d78
ld a, e
rlca
ld e, a
jr nc, .asm_1d8d
ld a, [wd8eb]
ld d, a
call Func_1c2b
ld a, [wd8ec]
ld d, a
call Func_1c32
jr .asm_1d9b
.asm_1d8d
ld a, [wd8ed]
ld d, a
call Func_1c2b
ld a, [wd8ee]
ld d, a
call Func_1c32
.asm_1d9b
ld a, [wd8e3]
dec a
ld [wd8e3], a
jr z, .asm_1dac
call Func_1ed4
call Func_1ed4
jr .asm_1d78
.asm_1dac
jr .asm_1d59
.asm_1dae
call Func_1ed3
call Func_1ed3
call Func_1ed4
ld d, $16
call Func_1c2b
ld d, $16
call Func_1c32
ret
Func_1dc2: ; 0x1dc2
ld a, $2
ld [wd8ea], a
ret
Func_1dc8:
ld a, [wd8ea]
or $1
ld [wd8ea], a
ret
Func_1dd1: ; 0x1dd1
ld a, [wd8ea]
or $4
ld [wd8ea], a
ret
Func_1dda: ; 0x1dda
xor a
ld [wd8e4], a
ld [wd8e5], a
push hl
ld hl, wd8e6
ld b, $2
call Func_1e3b
ld a, [wd8e7]
ld [wd8e8], a
ld b, a
pop hl
ld a, [wd8e6]
cp $5a
jp nz, Func_1dd1
call Func_1e3b
ld a, [wd8e4]
ld d, a
ld a, [wd8e5]
ld e, a
push de
ld hl, wd8e6
ld b, $2
call Func_1e3b
pop de
ld hl, wd8e6
ld a, [hli]
xor d
ld b, a
ld a, [hl]
xor e
or b
jr z, .asm_1e22
ld a, [wd8ea]
or $1
ld [wd8ea], a
.asm_1e22
push de
ld hl, wd8ea
ld b, $1
call Func_1d44
pop de
ld a, d
ld [wd8e4], a
ld a, e
ld [wd8e5], a
ld a, [wd8e8]
cp $82
ret z
ret
Func_1e3b: ; 0x1e3b
ld a, [wd8ea]
cp $0
ret nz
ld c, rRP % $100
ld d, $0
call Func_1c23
ld a, d
or a
jp z, Func_1dc2
ld d, $0
call Func_1c1b
ld a, d
or a
jp z, Func_1dc2
ld d, $0
call Func_1c23
ld a, d
or a
jp z, Func_1dc2
call Func_1ed4
call Func_1ed4
push af
pop af
ld a, b
cpl
ld b, a
.asm_1e6c
inc b
jr z, .asm_1eb9
ld a, $8
ld [wd8e3], a
.asm_1e74
ld d, $0
call Func_1c1b
call Func_1c23
ld a, [wd8ef]
cp d
jr nc, .asm_1e88
ld a, e
set 0, a
ld e, a
jr .asm_1e8c
.asm_1e88
ld a, e
res 0, a
ld e, a
.asm_1e8c
ld a, [wd8e3]
dec a
ld [wd8e3], a
jr z, .asm_1ea0
ld a, e
rlca
ld e, a
call Func_1ed4
call Func_1ed4
jr .asm_1e74
.asm_1ea0
ld a, e
ld [hli], a
ld a, [wd8e4]
add e
ld [wd8e4], a
jr nc, .asm_1eb4
ld a, [wd8e5]
inc a
ld [wd8e5], a
jr .asm_1eb7
.asm_1eb4
call Func_1ed3
.asm_1eb7
jr .asm_1e6c
.asm_1eb9
ld d, $0
call Func_1c1b
ld a, d
and a
jp z, Func_1dc2
ld d, $11
call Func_1c32
ret
Func_1ec9:
ld b, $00
jp Func_1cf8
Func_1ece:
ld b, $00
jp Func_1dda
Func_1ed3: ; 0x1ed3
ret
Func_1ed4: ; 0x1ed4
jr z, .asm_1ed6
.asm_1ed6
jr nz, .asm_1ed8
.asm_1ed8
ret

131
home/joypad.asm Normal file
View File

@ -0,0 +1,131 @@
ReadJoypad: ; 0xab8
; Reads the current state of the joypad and saves the state into
; some registers the game uses during gameplay. It remembers the joypad state
; from the current frame, previous frame, and two frames ago.
ld a, $20
ld [rJOYP], a
ld a, [rJOYP]
ld a, [rJOYP]
and $f
swap a
ld b, a
ld a, $30
ld [rJOYP], a
ld a, $10
ld [rJOYP], a
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
ld a, [rJOYP]
and $f
or b
cpl ; a contains currently-pressed buttons
ld [hJoypadState], a
ld a, $30
ld [rJOYP], a
ld a, [hJoypadState]
ld hl, hPreviousJoypadState
xor [hl] ; a contains buttons that are different from previous frame
push af
ld hl, hJoypadState
and [hl] ; a contains newly-pressed buttons compared to last frame
ld [hNewlyPressedButtons], a
ld [hPressedButtons], a
pop af
ld hl, hPreviousJoypadState
and [hl] ; a contains newly-pressed buttons compared to two frames ago
ld [hPrevPreviousJoypadState], a
ld a, [hJoypadState]
and a
jr z, .asm_b15
ld hl, hPreviousJoypadState
cp [hl]
jr nz, .asm_b15
; button(s) is pressed, and they're identical to the buttons pressed last frame.
; this code is related to holding down a button for an extended period of time.
ld hl, hJoyRepeatDelay
dec [hl]
jr nz, .asm_b1a
ld a, [hJoypadState]
ld [hPressedButtons], a
ld a, [wd807]
ld [hJoyRepeatDelay], a
jr .asm_b1a
.asm_b15
ld a, [wd806]
ld [hJoyRepeatDelay], a
.asm_b1a
ld a, [hJoypadState]
ld [hPreviousJoypadState], a
ld hl, wJoypadStatesPersistent
ld a, [hJoypadState]
or [hl]
ld [hli], a
ld a, [hNewlyPressedButtons]
or [hl]
ld [hli], a
ld a, [hPressedButtons]
or [hl]
ld [hli], a
ret
ClearPersistentJoypadStates: ; 0xb2e
ld hl, wJoypadStatesPersistent
xor a
ld [hli], a
ld [hli], a
ld [hl], a
ret
IsKeyPressed2: ; 0xb36
ld a, [hJoypadState]
and [hl]
jr z, .asm_b3e
cp [hl]
jr z, .asm_b48
.asm_b3e
inc hl
ld a, [hJoypadState]
and [hl]
ret z
cp [hl]
jr z, .asm_b48
xor a
ret
.asm_b48
ld a, $1
and a
ret
IsKeyPressed: ; 0xb4c
; Checks if a key for the specified key config is pressed.
; input: hl = pointer to key config byte pair (e.g. wKeyConfigLeftFlipper)
; output: zero flag is set if a corresponding key is pressed
; zero flag is reset if no corresponding key is pressed
ld a, [hJoypadState]
and [hl]
jr z, .asm_b58
cp [hl]
jr nz, .asm_b58
ld a, [hNewlyPressedButtons]
and [hl]
ret nz
.asm_b58
inc hl
ld a, [hJoypadState]
and [hl]
ret z
cp [hl]
jr nz, .asm_b64
ld a, [hNewlyPressedButtons]
and [hl]
ret
.asm_b64
xor a
ret

129
home/random.asm Normal file
View File

@ -0,0 +1,129 @@
GenRandom: ; 0x959
push bc
push de
push hl
ld a, [wd811]
ld c, a
ld b, $0
inc a
cp 54 + 1
jr nz, .asm_96e
call Func_9fa
xor a
ld bc, $0000
.asm_96e
ld [wd811], a
ld hl, wd812
add hl, bc
ld a, [hl]
pop hl
pop de
pop bc
ret
Func_97a: ; 0x97a
ld a, [wd810]
ld d, a
ld a, $0
ld a, [sRNGMod]
.asm_983
cp d
jr c, .asm_989
sub d
jr .asm_983
.asm_989
ld [wd80f], a
ld [wd848], a
ld e, $1
ld hl, Data_9c4
ld a, $36
.asm_996
push af
ld c, [hl]
inc hl
ld b, $0
push hl
ld hl, wd812
add hl, bc
ld [hl], e
ld a, [wd80f]
sub e
jr nc, .asm_9a8
add d
.asm_9a8
ld e, a
ld a, [hl]
ld [wd80f], a
pop hl
pop af
dec a
jr nz, .asm_996
call Func_9fa
call Func_9fa
call Func_9fa
ld a, $0
call GenRandom
ld [sRNGMod], a
ret
Data_9c4:
db $14, $29, $07, $1c, $31, $0f, $24, $02, $17
db $2c, $0a, $1f, $34, $12, $27, $05, $1a, $2f
db $0d, $22, $00, $15, $2a, $08, $1d, $32, $10
db $25, $03, $18, $2d, $0b, $20, $35, $13, $28
db $06, $1b, $30, $0e, $23, $01, $16, $2b, $09
db $1e, $33, $11, $26, $04, $19, $2e, $0c, $21
Func_9fa: ; 0x9fa
ld a, [wd810]
ld d, a
ld bc, wd812
ld hl, wd812 + $1f
ld e, $18
.asm_a06
ld a, [bc]
sub [hl]
jr nc, .asm_a0b
add d
.asm_a0b
ld [bc], a
dec e
jr nz, .asm_a06
ld bc, wd812 + $18
ld hl, wd812
ld e, $1f
.asm_a17
ld a, [bc]
sub [hl]
jr nc, .asm_a1c
add d
.asm_a1c
ld [bc], a
dec e
jr nz, .asm_a17
ret
Func_a21: ; 0xa21
push bc
push hl
ld c, a
ld b, $0
ld hl, Data_a38
add hl, bc
ld l, [hl]
call GenRandom
call Func_dd4
inc h
srl h
ld a, h
pop hl
pop bc
ret
Data_a38:
x = 0
REPT 128
db x | ((x >> 7) & 1)
x = x + 2
ENDR

View File

@ -2,6 +2,7 @@ INCLUDE "macros/sound.asm"
AdvanceFrame EQUS "$10"
JumpTable EQUS "$18"
ReadHalfword EQUS "$20"
dex_text EQUS "db " ; Start beginning of pokedex description
dex_line EQUS "db $0d," ; Start new line in pokedex description

@ -1 +1 @@
Subproject commit 74c620d01ad59bfb09cf4111ace549b925fcb9ab
Subproject commit 979c98a7c0f67ad6b9685b2d532c66a1f76ffb22

View File

@ -9,7 +9,11 @@ saved_data: MACRO
\1BackupChecksum:: dw
ENDM
saved_data sHighScores, $82
saved_data sPokedexFlags, $98
saved_data sKeyConfigs, $e
saved_data sSaveGame, $4c3
saved_data sHighScores, $82 ; a000
saved_data sPokedexFlags, $98 ; a10c
saved_data sKeyConfigs, $e ; a244
saved_data sSaveGame, $4c3 ; a268
; abf6
ds $409
sRNGMod:: ; afff

View File

@ -1873,19 +1873,7 @@ wd811:: ; 0xd811
ds $1
wd812:: ; 0xd812
ds $18
wd82a:: ; 0xd82a
ds $7
wd831:: ; 0xd831
ds $c
wd83d:: ; 0xd83d
ds $9
wd846:: ; 0xd846
ds $2
ds $36
wd848:: ; 0xd848
ds $1
@ -2155,6 +2143,7 @@ wd8e9:: ; 0xd8e9
ds $1
wd8ea:: ; 0xd8ea
; IR status flags?
ds $1
wd8eb:: ; 0xd8eb