mirror of
https://github.com/thornAvery/kep-hack.git
synced 2026-03-26 06:19:20 +13:00
Merge branch 'master' of https://github.com/yenatch/pokered
This commit is contained in:
commit
d266f788b4
18 changed files with 5384 additions and 5227 deletions
2
Makefile
2
Makefile
|
|
@ -50,7 +50,7 @@ $(all_obj): $$*.tx $$(patsubst %.asm, %.tx, $$($$*_dep))
|
||||||
@$(gfx) 2bpp $(2bppq); $(eval 2bppq :=)
|
@$(gfx) 2bpp $(2bppq); $(eval 2bppq :=)
|
||||||
@$(gfx) 1bpp $(1bppq); $(eval 1bppq :=)
|
@$(gfx) 1bpp $(1bppq); $(eval 1bppq :=)
|
||||||
@$(pic) compress $(picq); $(eval picq :=)
|
@$(pic) compress $(picq); $(eval picq :=)
|
||||||
rgbasm -o $@ $*.tx
|
rgbasm -h -o $@ $*.tx
|
||||||
|
|
||||||
|
|
||||||
link := rgblink -n $*.sym -m $*.map
|
link := rgblink -n $*.sym -m $*.map
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ STARYU EQU $1B
|
||||||
BLASTOISE EQU $1C
|
BLASTOISE EQU $1C
|
||||||
PINSIR EQU $1D
|
PINSIR EQU $1D
|
||||||
TANGELA EQU $1E
|
TANGELA EQU $1E
|
||||||
|
|
||||||
|
|
||||||
GROWLITHE EQU $21
|
GROWLITHE EQU $21
|
||||||
ONIX EQU $22
|
ONIX EQU $22
|
||||||
FEAROW EQU $23
|
FEAROW EQU $23
|
||||||
|
|
@ -45,17 +47,26 @@ PARASECT EQU $2E
|
||||||
PSYDUCK EQU $2F
|
PSYDUCK EQU $2F
|
||||||
DROWZEE EQU $30
|
DROWZEE EQU $30
|
||||||
GOLEM EQU $31
|
GOLEM EQU $31
|
||||||
|
|
||||||
MAGMAR EQU $33
|
MAGMAR EQU $33
|
||||||
|
|
||||||
ELECTABUZZ EQU $35
|
ELECTABUZZ EQU $35
|
||||||
MAGNETON EQU $36
|
MAGNETON EQU $36
|
||||||
KOFFING EQU $37
|
KOFFING EQU $37
|
||||||
|
|
||||||
MANKEY EQU $39
|
MANKEY EQU $39
|
||||||
SEEL EQU $3A
|
SEEL EQU $3A
|
||||||
DIGLETT EQU $3B
|
DIGLETT EQU $3B
|
||||||
TAUROS EQU $3C
|
TAUROS EQU $3C
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
FARFETCH_D EQU $40
|
FARFETCH_D EQU $40
|
||||||
VENONAT EQU $41
|
VENONAT EQU $41
|
||||||
DRAGONITE EQU $42
|
DRAGONITE EQU $42
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DODUO EQU $46
|
DODUO EQU $46
|
||||||
POLIWAG EQU $47
|
POLIWAG EQU $47
|
||||||
JYNX EQU $48
|
JYNX EQU $48
|
||||||
|
|
@ -65,16 +76,23 @@ ZAPDOS EQU $4B
|
||||||
DITTO EQU $4C
|
DITTO EQU $4C
|
||||||
MEOWTH EQU $4D
|
MEOWTH EQU $4D
|
||||||
KRABBY EQU $4E
|
KRABBY EQU $4E
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VULPIX EQU $52
|
VULPIX EQU $52
|
||||||
NINETALES EQU $53
|
NINETALES EQU $53
|
||||||
PIKACHU EQU $54
|
PIKACHU EQU $54
|
||||||
RAICHU EQU $55
|
RAICHU EQU $55
|
||||||
|
|
||||||
|
|
||||||
DRATINI EQU $58
|
DRATINI EQU $58
|
||||||
DRAGONAIR EQU $59
|
DRAGONAIR EQU $59
|
||||||
KABUTO EQU $5A
|
KABUTO EQU $5A
|
||||||
KABUTOPS EQU $5B
|
KABUTOPS EQU $5B
|
||||||
HORSEA EQU $5C
|
HORSEA EQU $5C
|
||||||
SEADRA EQU $5D
|
SEADRA EQU $5D
|
||||||
|
|
||||||
|
|
||||||
SANDSHREW EQU $60
|
SANDSHREW EQU $60
|
||||||
SANDSLASH EQU $61
|
SANDSLASH EQU $61
|
||||||
OMANYTE EQU $62
|
OMANYTE EQU $62
|
||||||
|
|
@ -94,29 +112,38 @@ POLIWRATH EQU $6F
|
||||||
WEEDLE EQU $70
|
WEEDLE EQU $70
|
||||||
KAKUNA EQU $71
|
KAKUNA EQU $71
|
||||||
BEEDRILL EQU $72
|
BEEDRILL EQU $72
|
||||||
|
|
||||||
DODRIO EQU $74
|
DODRIO EQU $74
|
||||||
PRIMEAPE EQU $75
|
PRIMEAPE EQU $75
|
||||||
DUGTRIO EQU $76
|
DUGTRIO EQU $76
|
||||||
VENOMOTH EQU $77
|
VENOMOTH EQU $77
|
||||||
DEWGONG EQU $78
|
DEWGONG EQU $78
|
||||||
|
|
||||||
|
|
||||||
CATERPIE EQU $7B
|
CATERPIE EQU $7B
|
||||||
METAPOD EQU $7C
|
METAPOD EQU $7C
|
||||||
BUTTERFREE EQU $7D
|
BUTTERFREE EQU $7D
|
||||||
MACHAMP EQU $7E
|
MACHAMP EQU $7E
|
||||||
|
|
||||||
GOLDUCK EQU $80
|
GOLDUCK EQU $80
|
||||||
HYPNO EQU $81
|
HYPNO EQU $81
|
||||||
GOLBAT EQU $82
|
GOLBAT EQU $82
|
||||||
MEWTWO EQU $83
|
MEWTWO EQU $83
|
||||||
SNORLAX EQU $84
|
SNORLAX EQU $84
|
||||||
MAGIKARP EQU $85
|
MAGIKARP EQU $85
|
||||||
|
|
||||||
|
|
||||||
MUK EQU $88
|
MUK EQU $88
|
||||||
|
|
||||||
KINGLER EQU $8A
|
KINGLER EQU $8A
|
||||||
CLOYSTER EQU $8B
|
CLOYSTER EQU $8B
|
||||||
|
|
||||||
ELECTRODE EQU $8D
|
ELECTRODE EQU $8D
|
||||||
CLEFABLE EQU $8E
|
CLEFABLE EQU $8E
|
||||||
WEEZING EQU $8F
|
WEEZING EQU $8F
|
||||||
PERSIAN EQU $90
|
PERSIAN EQU $90
|
||||||
MAROWAK EQU $91
|
MAROWAK EQU $91
|
||||||
|
|
||||||
HAUNTER EQU $93
|
HAUNTER EQU $93
|
||||||
ABRA EQU $94
|
ABRA EQU $94
|
||||||
ALAKAZAM EQU $95
|
ALAKAZAM EQU $95
|
||||||
|
|
@ -126,8 +153,13 @@ STARMIE EQU $98
|
||||||
BULBASAUR EQU $99
|
BULBASAUR EQU $99
|
||||||
VENUSAUR EQU $9A
|
VENUSAUR EQU $9A
|
||||||
TENTACRUEL EQU $9B
|
TENTACRUEL EQU $9B
|
||||||
|
|
||||||
GOLDEEN EQU $9D
|
GOLDEEN EQU $9D
|
||||||
SEAKING EQU $9E
|
SEAKING EQU $9E
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PONYTA EQU $A3
|
PONYTA EQU $A3
|
||||||
RAPIDASH EQU $A4
|
RAPIDASH EQU $A4
|
||||||
RATTATA EQU $A5
|
RATTATA EQU $A5
|
||||||
|
|
@ -137,12 +169,16 @@ NIDORINA EQU $A8
|
||||||
GEODUDE EQU $A9
|
GEODUDE EQU $A9
|
||||||
PORYGON EQU $AA
|
PORYGON EQU $AA
|
||||||
AERODACTYL EQU $AB
|
AERODACTYL EQU $AB
|
||||||
|
|
||||||
MAGNEMITE EQU $AD
|
MAGNEMITE EQU $AD
|
||||||
|
|
||||||
|
|
||||||
CHARMANDER EQU $B0
|
CHARMANDER EQU $B0
|
||||||
SQUIRTLE EQU $B1
|
SQUIRTLE EQU $B1
|
||||||
CHARMELEON EQU $B2
|
CHARMELEON EQU $B2
|
||||||
WARTORTLE EQU $B3
|
WARTORTLE EQU $B3
|
||||||
CHARIZARD EQU $B4
|
CHARIZARD EQU $B4
|
||||||
|
|
||||||
FOSSIL_KABUTOPS EQU $B6
|
FOSSIL_KABUTOPS EQU $B6
|
||||||
FOSSIL_AERODACTYL EQU $B7
|
FOSSIL_AERODACTYL EQU $B7
|
||||||
MON_GHOST EQU $B8
|
MON_GHOST EQU $B8
|
||||||
|
|
@ -151,4 +187,4 @@ GLOOM EQU $BA
|
||||||
VILEPLUME EQU $BB
|
VILEPLUME EQU $BB
|
||||||
BELLSPROUT EQU $BC
|
BELLSPROUT EQU $BC
|
||||||
WEEPINBELL EQU $BD
|
WEEPINBELL EQU $BD
|
||||||
VICTREEBEL EQU $BE
|
VICTREEBEL EQU $BE
|
||||||
|
|
|
||||||
24
data/collision.asm
Normal file
24
data/collision.asm
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
Underground_Coll:: INCBIN "gfx/tilesets/underground.tilecoll"
|
||||||
|
Overworld_Coll:: INCBIN "gfx/tilesets/overworld.tilecoll"
|
||||||
|
RedsHouse1_Coll::
|
||||||
|
RedsHouse2_Coll:: INCBIN "gfx/tilesets/reds_house.tilecoll"
|
||||||
|
Mart_Coll::
|
||||||
|
Pokecenter_Coll:: INCBIN "gfx/tilesets/pokecenter.tilecoll"
|
||||||
|
Dojo_Coll::
|
||||||
|
Gym_Coll:: INCBIN "gfx/tilesets/gym.tilecoll"
|
||||||
|
Forest_Coll:: INCBIN "gfx/tilesets/forest.tilecoll"
|
||||||
|
House_Coll:: INCBIN "gfx/tilesets/house.tilecoll"
|
||||||
|
ForestGate_Coll::
|
||||||
|
Museum_Coll::
|
||||||
|
Gate_Coll:: INCBIN "gfx/tilesets/gate.tilecoll"
|
||||||
|
Ship_Coll:: INCBIN "gfx/tilesets/ship.tilecoll"
|
||||||
|
ShipPort_Coll:: INCBIN "gfx/tilesets/ship_port.tilecoll"
|
||||||
|
Cemetery_Coll:: INCBIN "gfx/tilesets/cemetery.tilecoll"
|
||||||
|
Interior_Coll:: INCBIN "gfx/tilesets/interior.tilecoll"
|
||||||
|
Cavern_Coll:: INCBIN "gfx/tilesets/cavern.tilecoll"
|
||||||
|
Lobby_Coll:: INCBIN "gfx/tilesets/lobby.tilecoll"
|
||||||
|
Mansion_Coll:: INCBIN "gfx/tilesets/mansion.tilecoll"
|
||||||
|
Lab_Coll:: INCBIN "gfx/tilesets/lab.tilecoll"
|
||||||
|
Club_Coll:: INCBIN "gfx/tilesets/club.tilecoll"
|
||||||
|
Facility_Coll:: INCBIN "gfx/tilesets/facility.tilecoll"
|
||||||
|
Plateau_Coll:: INCBIN "gfx/tilesets/plateau.tilecoll"
|
||||||
|
|
@ -1,142 +1,298 @@
|
||||||
|
ATTR_BLK: MACRO
|
||||||
|
; This is a command macro.
|
||||||
|
; Use ATTR_BLK_DATA for data sets.
|
||||||
|
db ($4 << 3) + ((\1 * 6) / 16 + 1)
|
||||||
|
db \1
|
||||||
|
ENDM
|
||||||
|
ATTR_BLK_DATA: MACRO
|
||||||
|
db \1 ; which regions are affected
|
||||||
|
db \2 + (\3 << 2) + (\4 << 4) ; palette for each region
|
||||||
|
db \5, \6, \7, \8 ; x1, y1, x2, y2
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
PAL_SET: MACRO
|
||||||
|
db ($a << 3) + 1
|
||||||
|
dw \1, \2, \3, \4
|
||||||
|
ds 7
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
PAL_TRN: MACRO
|
||||||
|
db ($b<< 3) + 1
|
||||||
|
ds 15
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
MLT_REQ: MACRO
|
||||||
|
db ($11 << 3) + 1
|
||||||
|
db \1 - 1
|
||||||
|
ds 14
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
CHR_TRN: MACRO
|
||||||
|
db ($13 << 3) + 1
|
||||||
|
db \1 + (\2 << 1)
|
||||||
|
ds 14
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
PCT_TRN: MACRO
|
||||||
|
db ($14 << 3) + 1
|
||||||
|
ds 15
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
MASK_EN: MACRO
|
||||||
|
db ($17 << 3) + 1
|
||||||
|
db \1
|
||||||
|
ds 14
|
||||||
|
ENDM
|
||||||
|
|
||||||
|
DATA_SND: MACRO
|
||||||
|
db ($f << 3) + 1
|
||||||
|
dw \1 ; address
|
||||||
|
db \2 ; bank
|
||||||
|
db \3 ; length (1-11)
|
||||||
|
ENDM
|
||||||
|
|
||||||
BlkPacket_WholeScreen: ; 7219e (1c:619e)
|
BlkPacket_WholeScreen: ; 7219e (1c:619e)
|
||||||
db $21,$01,$03,$00,$00,$00,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00
|
ATTR_BLK 1
|
||||||
|
ATTR_BLK_DATA %011, 0,0,0, 00,00, 19,17
|
||||||
|
ds 8
|
||||||
|
|
||||||
db $03,$00,$00,$13,$11,$00,$00
|
db $03,$00,$00,$13,$11,$00,$00
|
||||||
|
|
||||||
BlkPacket_Battle: ; 721b5 (1c:61b5)
|
BlkPacket_Battle: ; 721b5 (1c:61b5)
|
||||||
db $22,$05,$07,$0a,$00,$0c,$13,$11,$03,$05,$01,$00,$0a,$03,$03,$00
|
ATTR_BLK 5
|
||||||
db $0a,$07,$13,$0a,$03,$0a,$00,$04,$08,$0b,$03,$0f,$0b,$00,$13,$06
|
ATTR_BLK_DATA %111, 2,2,0, 00,12, 19,17
|
||||||
db $03,$00,$00,$13,$0b,$00,$03,$00,$0c,$13,$11,$02,$03,$01,$00,$0a
|
ATTR_BLK_DATA %011, 1,1,0, 01,00, 10,03
|
||||||
db $03,$01,$03,$0a,$08,$13,$0a,$00,$03,$00,$04,$08,$0b,$02,$03,$0b
|
ATTR_BLK_DATA %011, 0,0,0, 10,07, 19,10
|
||||||
db $00,$13,$07,$03,$00
|
ATTR_BLK_DATA %011, 2,2,0, 00,04, 08,11
|
||||||
|
ATTR_BLK_DATA %011, 3,3,0, 11,00, 19,06
|
||||||
|
|
||||||
|
db $03,$00,$00,$13,$0b,$00
|
||||||
|
db $03,$00,$0c,$13,$11,$02
|
||||||
|
db $03,$01,$00,$0a,$03,$01
|
||||||
|
db $03,$0a,$08,$13,$0a,$00
|
||||||
|
db $03,$00,$04,$08,$0b,$02
|
||||||
|
db $03,$0b,$00,$13,$07,$03
|
||||||
|
db $00
|
||||||
|
|
||||||
BlkPacket_StatusScreen: ; 721fa (1c:61fa)
|
BlkPacket_StatusScreen: ; 721fa (1c:61fa)
|
||||||
db $21,$01,$07,$05,$01,$00,$07,$06,$00,$00,$00,$00,$00,$00,$00,$00
|
ATTR_BLK 1
|
||||||
db $02,$00,$00,$11,$00,$03,$01,$00,$07,$06,$01,$03,$01,$07,$13,$11
|
ATTR_BLK_DATA %111, 1,1,0, 01,00, 07,06
|
||||||
db $00,$03,$08,$00,$13,$06,$00,$00
|
ds 8
|
||||||
|
|
||||||
|
db $02,$00,$00,$11,$00,$03
|
||||||
|
db $01,$00,$07,$06,$01,$03
|
||||||
|
db $01,$07,$13,$11,$00,$03
|
||||||
|
db $08,$00,$13,$06,$00,$00
|
||||||
|
|
||||||
BlkPacket_Pokedex: ; 72222 (1c:6222)
|
BlkPacket_Pokedex: ; 72222 (1c:6222)
|
||||||
db $21,$01,$07,$05,$01,$01,$08,$08,$00,$00,$00,$00,$00,$00,$00,$00
|
ATTR_BLK 1
|
||||||
db $02,$00,$00,$11,$00,$01,$00,$01,$13,$00,$03,$01,$01,$08,$08,$01
|
ATTR_BLK_DATA %111, 1,1,0, 01,01, 08,08
|
||||||
db $03,$01,$09,$08,$11,$00,$03,$09,$01,$13,$11,$00,$00
|
ds 8
|
||||||
|
|
||||||
|
db $02,$00,$00,$11,$00,$01
|
||||||
|
db $00,$01,$13,$00,$03,$01
|
||||||
|
db $01,$08,$08,$01,$03,$01
|
||||||
|
db $09,$08,$11,$00,$03,$09
|
||||||
|
db $01,$13,$11,$00,$00
|
||||||
|
|
||||||
BlkPacket_Slots: ; 7224f (1c:624f)
|
BlkPacket_Slots: ; 7224f (1c:624f)
|
||||||
db $22,$05,$03,$05,$00,$00,$13,$0b,$03,$0a,$00,$04,$13,$09,$02,$0f
|
ATTR_BLK 5
|
||||||
db $00,$06,$13,$07,$03,$00,$04,$04,$0f,$09,$03,$00,$00,$0c,$13,$11
|
ATTR_BLK_DATA %011, 1,1,0, 00,00, 19,11
|
||||||
db $03,$00,$00,$13,$0b,$01,$03,$00,$04,$13,$09,$02,$03,$00,$06,$13
|
ATTR_BLK_DATA %011, 2,2,0, 00,04, 19,09
|
||||||
db $07,$03,$03,$04,$04,$0f,$09,$00,$03,$00,$0c,$13,$11,$00,$00
|
ATTR_BLK_DATA %010, 3,3,0, 00,06, 19,07
|
||||||
|
ATTR_BLK_DATA %011, 0,0,0, 04,04, 15,09
|
||||||
|
ATTR_BLK_DATA %011, 0,0,0, 00,12, 19,17
|
||||||
|
|
||||||
|
db $03,$00,$00,$13,$0b,$01
|
||||||
|
db $03,$00,$04,$13,$09,$02
|
||||||
|
db $03,$00,$06,$13,$07,$03
|
||||||
|
db $03,$04,$04,$0f,$09,$00
|
||||||
|
db $03,$00,$0c,$13,$11,$00
|
||||||
|
db $00
|
||||||
|
|
||||||
BlkPacket_Titlescreen: ; 7228e (1c:628e)
|
BlkPacket_Titlescreen: ; 7228e (1c:628e)
|
||||||
db $22,$03,$03,$00,$00,$00,$13,$07,$02,$05,$00,$08,$13,$09,$03,$0a
|
ATTR_BLK 3
|
||||||
db $00,$0a,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
ATTR_BLK_DATA %011, 0,0,0, 00,00, 19,07
|
||||||
db $03,$00,$00,$13,$07,$00,$03,$00,$08,$13,$09,$01,$03,$00,$0a,$13
|
ATTR_BLK_DATA %010, 1,1,0, 00,08, 19,09
|
||||||
db $11,$02,$00
|
ATTR_BLK_DATA %011, 2,2,0, 00,10, 19,17
|
||||||
|
ds 12
|
||||||
|
|
||||||
|
db $03,$00,$00,$13,$07,$00
|
||||||
|
db $03,$00,$08,$13,$09,$01
|
||||||
|
db $03,$00,$0a,$13,$11,$02
|
||||||
|
db $00
|
||||||
|
|
||||||
BlkPacket_NidorinoIntro: ; 722c1 (1c:62c1)
|
BlkPacket_NidorinoIntro: ; 722c1 (1c:62c1)
|
||||||
db $22,$03,$03,$05,$00,$00,$13,$03,$03,$00,$00,$04,$13,$0d,$03,$05
|
ATTR_BLK 3
|
||||||
db $00,$0e,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
ATTR_BLK_DATA %011, 1,1,0, 00,00, 19,03
|
||||||
db $03,$00,$00,$13,$03,$01,$03,$00,$04,$13,$0d,$00,$03,$00,$0e,$13
|
ATTR_BLK_DATA %011, 0,0,0, 00,04, 19,13
|
||||||
db $11,$01,$00
|
ATTR_BLK_DATA %011, 1,1,0, 00,14, 19,17
|
||||||
|
ds 12
|
||||||
|
|
||||||
|
db $03,$00,$00,$13,$03,$01
|
||||||
|
db $03,$00,$04,$13,$0d,$00
|
||||||
|
db $03,$00,$0e,$13,$11,$01
|
||||||
|
db $00
|
||||||
|
|
||||||
BlkPacket_PartyMenu: ; 722f4 (1c:62f4)
|
BlkPacket_PartyMenu: ; 722f4 (1c:62f4)
|
||||||
db $23,$07,$06,$10,$01,$00,$02,$0c,$02,$00,$05,$01,$0b,$01,$02,$00
|
ATTR_BLK 7
|
||||||
db $05,$03,$0b,$03,$02,$00,$05,$05,$0b,$05,$02,$00,$05,$07,$0b,$07
|
ATTR_BLK_DATA %110, 0,0,1, 01,00, 02,12
|
||||||
db $02,$00,$05,$09,$0b,$09,$02,$00,$05,$0b,$0b,$0b,$00,$00,$00,$00
|
ATTR_BLK_DATA %010, 0,0,0, 05,01, 11,01
|
||||||
db $02,$00,$00,$11,$01,$03,$01,$00,$02,$0c,$00,$03,$01,$0d,$02,$11
|
ATTR_BLK_DATA %010, 0,0,0, 05,03, 11,03
|
||||||
db $01,$03,$03,$00,$13,$11,$01,$03,$0c,$00,$12,$01,$00,$03,$0c,$02
|
ATTR_BLK_DATA %010, 0,0,0, 05,05, 11,05
|
||||||
db $12,$03,$00,$03,$0c,$04,$12,$05,$00,$03,$0c,$06,$12,$07,$00,$03
|
ATTR_BLK_DATA %010, 0,0,0, 05,07, 11,07
|
||||||
db $0c,$08,$12,$09,$00,$03,$0c,$0a,$12,$0b,$00,$00
|
ATTR_BLK_DATA %010, 0,0,0, 05,09, 11,09
|
||||||
|
ATTR_BLK_DATA %010, 0,0,0, 05,11, 11,11
|
||||||
|
ds 4
|
||||||
|
|
||||||
|
db $02,$00,$00,$11,$01,$03
|
||||||
|
db $01,$00,$02,$0c,$00,$03
|
||||||
|
db $01,$0d,$02,$11,$01,$03
|
||||||
|
db $03,$00,$13,$11,$01,$03
|
||||||
|
db $0c,$00,$12,$01,$00,$03
|
||||||
|
db $0c,$02,$12,$03,$00,$03
|
||||||
|
db $0c,$04,$12,$05,$00,$03
|
||||||
|
db $0c,$06,$12,$07,$00,$03
|
||||||
|
db $0c,$08,$12,$09,$00,$03
|
||||||
|
db $0c,$0a,$12,$0b,$00,$00
|
||||||
|
|
||||||
BlkPacket_TrainerCard: ; 72360 (1c:6360)
|
BlkPacket_TrainerCard: ; 72360 (1c:6360)
|
||||||
db $24,$0a,$02,$00,$03,$0c,$04,$0d,$02,$05,$07,$0c,$08,$0d,$02,$0f
|
ATTR_BLK 10
|
||||||
db $0b,$0c,$0c,$0d,$02,$0a,$10,$0b,$11,$0c,$02,$05,$0e,$0d,$0f,$0e
|
ATTR_BLK_DATA %010, 0,0,0, 03,12, 04,13
|
||||||
db $02,$0f,$10,$0d,$11,$0e,$02,$0a,$03,$0f,$04,$10,$02,$0f,$07,$0f
|
ATTR_BLK_DATA %010, 1,1,0, 07,12, 08,13
|
||||||
db $08,$10,$02,$0a,$0b,$0f,$0c,$10,$02,$05,$0f,$0f,$10,$10,$00,$00
|
ATTR_BLK_DATA %010, 3,3,0, 11,12, 12,13
|
||||||
db $03,$03,$0c,$04,$0d,$00,$03,$07,$0c,$08,$0d,$01,$03,$0b,$0c,$0c
|
ATTR_BLK_DATA %010, 2,2,0, 16,11, 17,12
|
||||||
db $0d,$03,$03,$10,$0b,$11,$0c,$02,$03,$0e,$0d,$0f,$0e,$01,$03,$10
|
ATTR_BLK_DATA %010, 1,1,0, 14,13, 15,14
|
||||||
db $0d,$11,$0e,$03,$03,$03,$0f,$04,$10,$02,$03,$07,$0f,$08,$10,$03
|
ATTR_BLK_DATA %010, 3,3,0, 16,13, 17,14
|
||||||
db $03,$0b,$0f,$0c,$10,$02,$03,$0f,$0f,$10,$10,$01,$00
|
ATTR_BLK_DATA %010, 2,2,0, 03,15, 04,16
|
||||||
|
ATTR_BLK_DATA %010, 3,3,0, 07,15, 08,16
|
||||||
|
ATTR_BLK_DATA %010, 2,2,0, 11,15, 12,16
|
||||||
|
ATTR_BLK_DATA %010, 1,1,0, 15,15, 16,16
|
||||||
|
ds 2
|
||||||
|
|
||||||
|
db $03,$03,$0c,$04,$0d,$00
|
||||||
|
db $03,$07,$0c,$08,$0d,$01
|
||||||
|
db $03,$0b,$0c,$0c,$0d,$03
|
||||||
|
db $03,$10,$0b,$11,$0c,$02
|
||||||
|
db $03,$0e,$0d,$0f,$0e,$01
|
||||||
|
db $03,$10,$0d,$11,$0e,$03
|
||||||
|
db $03,$03,$0f,$04,$10,$02
|
||||||
|
db $03,$07,$0f,$08,$10,$03
|
||||||
|
db $03,$0b,$0f,$0c,$10,$02
|
||||||
|
db $03,$0f,$0f,$10,$10,$01
|
||||||
|
db $00
|
||||||
|
|
||||||
BlkPacket_GameFreakIntro: ; 723dd (1c:63dd)
|
BlkPacket_GameFreakIntro: ; 723dd (1c:63dd)
|
||||||
db $22,$03,$07,$05,$05,$0b,$07,$0d,$02,$0a,$08,$0b,$09,$0d,$03,$0f
|
ATTR_BLK 3
|
||||||
db $0c,$0b,$0e,$0d,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
ATTR_BLK_DATA %111, 1,1,0, 05,11, 07,13
|
||||||
db $03,$00,$00,$13,$0a,$00,$03,$00,$0b,$04,$0d,$00,$03,$05,$0b,$07
|
ATTR_BLK_DATA %010, 2,2,0, 08,11, 09,13
|
||||||
db $0d,$01,$03,$08,$0b,$13,$0d,$00,$03,$00,$0e,$13,$11,$00,$03,$08
|
ATTR_BLK_DATA %011, 3,3,0, 12,11, 14,13
|
||||||
db $0b,$09,$0d,$02,$03,$0c,$0b,$0e,$0d,$03,$00
|
ds 12
|
||||||
|
|
||||||
PalPacket_Empty: ; 72428 (1c:6428)
|
db $03,$00,$00,$13,$0a,$00
|
||||||
db $51,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
db $03,$00,$0b,$04,$0d,$00
|
||||||
|
db $03,$05,$0b,$07,$0d,$01
|
||||||
|
db $03,$08,$0b,$13,$0d,$00
|
||||||
|
db $03,$00,$0e,$13,$11,$00
|
||||||
|
db $03,$08,$0b,$09,$0d,$02
|
||||||
|
db $03,$0c,$0b,$0e,$0d,$03
|
||||||
|
db $00
|
||||||
|
|
||||||
PalPacket_PartyMenu: ; 72438 (1c:6438)
|
|
||||||
db $51,PAL_MEWMON,$00,PAL_GREENBAR,$00,PAL_YELLOWBAR,$00,PAL_REDBAR,$00,$00,$00,$00,$00,$00,$00,$00
|
|
||||||
|
|
||||||
PalPacket_Black: ; 72448 (1c:6448)
|
PalPacket_Empty: PAL_SET 0, 0, 0, 0
|
||||||
db $51,PAL_BLACK,$00,PAL_BLACK,$00,PAL_BLACK,$00,PAL_BLACK,$00,$00,$00,$00,$00,$00,$00,$00
|
PalPacket_PartyMenu: PAL_SET PAL_MEWMON, PAL_GREENBAR, PAL_YELLOWBAR, PAL_REDBAR
|
||||||
|
PalPacket_Black: PAL_SET PAL_BLACK, PAL_BLACK, PAL_BLACK, PAL_BLACK
|
||||||
|
PalPacket_TownMap: PAL_SET PAL_TOWNMAP, 0, 0, 0
|
||||||
|
PalPacket_Pokedex: PAL_SET PAL_BROWNMON, 0, 0, 0
|
||||||
|
PalPacket_Slots: PAL_SET PAL_SLOTS1, PAL_SLOTS2, PAL_SLOTS3, PAL_SLOTS4
|
||||||
|
PalPacket_Titlescreen: PAL_SET PAL_LOGO2, PAL_LOGO1, PAL_MEWMON, PAL_PURPLEMON
|
||||||
|
PalPacket_TrainerCard: PAL_SET PAL_MEWMON, PAL_BADGE, PAL_REDMON, PAL_YELLOWMON
|
||||||
|
PalPacket_Generic: PAL_SET PAL_MEWMON, 0, 0, 0
|
||||||
|
PalPacket_NidorinoIntro: PAL_SET PAL_PURPLEMON, PAL_BLACK, 0, 0
|
||||||
|
PalPacket_GameFreakIntro: PAL_SET PAL_GAMEFREAK, PAL_REDMON, PAL_VIRIDIAN, PAL_BLUEMON
|
||||||
|
|
||||||
PalPacket_TownMap: ; 72458 (1c:6458)
|
PalTrnPacket: PAL_TRN
|
||||||
db $51,PAL_TOWNMAP,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
MltReq1Packet: MLT_REQ 1
|
||||||
|
MltReq2Packet: MLT_REQ 2
|
||||||
|
ChrTrnPacket: CHR_TRN 0, 0
|
||||||
|
PctTrnPacket: PCT_TRN
|
||||||
|
|
||||||
PalPacket_Pokedex: ; 72468 (1c:6468)
|
MaskEnFreezePacket: MASK_EN 1
|
||||||
db $51,PAL_BROWNMON,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
MaskEnCancelPacket: MASK_EN 0
|
||||||
|
|
||||||
PalPacket_Slots: ; 72478 (1c:6478)
|
|
||||||
db $51,PAL_SLOTS1,$00,PAL_SLOTS2,$00,PAL_SLOTS3,$00,PAL_SLOTS4,$00,$00,$00,$00,$00,$00,$00,$00
|
|
||||||
|
|
||||||
PalPacket_Titlescreen: ; 72488 (1c:6488)
|
; These are DATA_SND packets containing SNES code.
|
||||||
db $51,PAL_LOGO2,$00,PAL_LOGO1,$00,PAL_MEWMON,$00,PAL_PURPLEMON,$00,$00,$00,$00,$00,$00,$00,$00
|
; This set of packets is found in several Japanese SGB-compatible titles.
|
||||||
|
; It appears to be part of NCL's SGB devkit.
|
||||||
|
|
||||||
PalPacket_TrainerCard: ; 72498 (1c:6498)
|
DataSnd_72548: DATA_SND $85d, $0, 11
|
||||||
db $51,PAL_MEWMON,$00,PAL_BADGE,$00,PAL_REDMON,$00,PAL_YELLOWMON,$00,$00,$00,$00,$00,$00,$00,$00
|
db $8C ; cpx #$8c (2)
|
||||||
|
db $D0, $F4 ; bne -$0c
|
||||||
|
db $60 ; rts
|
||||||
|
ds 7
|
||||||
|
|
||||||
PalPacket_Generic: ; 724a8 (1c:64a8)
|
DataSnd_72558: DATA_SND $852, $0, 11
|
||||||
db $51,PAL_MEWMON,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
db $A9, $E7 ; lda #$e7
|
||||||
|
db $9F, $01, $C0, $7E ; sta $7ec001, x
|
||||||
|
db $E8 ; inx
|
||||||
|
db $E8 ; inx
|
||||||
|
db $E8 ; inx
|
||||||
|
db $E8 ; inx
|
||||||
|
db $E0 ; cpx #$8c (1)
|
||||||
|
|
||||||
PalPacket_NidorinoIntro: ; 724b8 (1c:64b8)
|
DataSnd_72568: DATA_SND $847, $0, 11
|
||||||
db $51,PAL_PURPLEMON,$00,PAL_BLACK,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
db $C4 ; cmp #$c4 (2)
|
||||||
|
db $D0, $16 ; bne +$16
|
||||||
|
db $A5 ; lda dp
|
||||||
|
db $CB ; wai
|
||||||
|
db $C9, $05 ; cmp #$05
|
||||||
|
db $D0, $10 ; bne +$10
|
||||||
|
db $A2, $28 ; ldx #$28
|
||||||
|
|
||||||
PalPacket_GameFreakIntro: ; 724c8 (1c:64c8)
|
DataSnd_72578: DATA_SND $83c, $0, 11
|
||||||
db $51,PAL_GAMEFREAK,$00,PAL_REDMON,$00,PAL_VIRIDIAN,$00,PAL_BLUEMON,$00,$00,$00,$00,$00,$00,$00,$00
|
db $F0, $12 ; beq +$12
|
||||||
|
db $A5 ; lda dp
|
||||||
|
db $C9, $C9 ; cmp #$c9
|
||||||
|
db $C8 ; iny
|
||||||
|
db $D0, $1C ; bne +$1c
|
||||||
|
db $A5 ; lda dp
|
||||||
|
db $CA ; dex
|
||||||
|
db $C9 ; cmp #$c4 (1)
|
||||||
|
|
||||||
PalPacket_724d8: ; 724d8 (1c:64d8)
|
DataSnd_72588: DATA_SND $831, $0, 11
|
||||||
db $59,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
dbw $0C, $CAA5 ; tsb $caa5
|
||||||
|
db $C9, $7E ; cmp #$7e
|
||||||
|
db $D0, $06 ; bne +$06
|
||||||
|
db $A5 ; lda dp
|
||||||
|
db $CB ; wai
|
||||||
|
db $C9, $7E ; cmp #$7e
|
||||||
|
|
||||||
PalPacket_724e8: ; 724e8 (1c:64e8)
|
DataSnd_72598: DATA_SND $826, $0, 11
|
||||||
db $89,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
db $39 ; bne +$39 (2)
|
||||||
|
dbw $CD, $C48 ; cmp $c48
|
||||||
|
db $D0, $34 ; bne +$34
|
||||||
|
db $A5 ; lda dp
|
||||||
|
db $C9, $C9 ; cmp #$c9
|
||||||
|
db $80, $D0 ; bra -$30
|
||||||
|
|
||||||
PalPacket_724f8: ; 724f8 (1c:64f8)
|
DataSnd_725a8: DATA_SND $81b, $0, 11
|
||||||
db $89,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
db $EA ; nop
|
||||||
|
db $EA ; nop
|
||||||
|
db $EA ; nop
|
||||||
|
db $EA ; nop
|
||||||
|
db $EA ; nop
|
||||||
|
; $820:
|
||||||
|
db $A9,$01 ; lda #01
|
||||||
|
dbw $CD,$C4F ; cmp $c4f
|
||||||
|
db $D0 ; bne +$39 (1)
|
||||||
|
|
||||||
PalPacket_72508: ; 72508 (1c:6508)
|
DataSnd_725b8: DATA_SND $810, $0, 11
|
||||||
db $99,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
dbw $4C, $820 ; jmp $820
|
||||||
|
db $EA ; nop
|
||||||
PalPacket_72518: ; 72518 (1c:6518)
|
db $EA ; nop
|
||||||
db $A1,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
db $EA ; nop
|
||||||
|
db $EA ; nop
|
||||||
PalPacket_72528: ; 72528 (1c:6528)
|
db $EA ; nop
|
||||||
db $B9,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
db $60 ; rts
|
||||||
|
db $EA ; nop
|
||||||
PalPacket_72538: ; 72538 (1c:6538)
|
db $EA ; nop
|
||||||
db $B9,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
|
||||||
|
|
||||||
PalPacket_72548: ; 72548 (1c:6548)
|
|
||||||
db $79,$5D,$08,$00,$0B,$8C,$D0,$F4,$60,$00,$00,$00,$00,$00,$00,$00
|
|
||||||
|
|
||||||
PalPacket_72558: ; 72558 (1c:6558)
|
|
||||||
db $79,$52,$08,$00,$0B,$A9,$E7,$9F,$01,$C0,$7E,$E8,$E8,$E8,$E8,$E0
|
|
||||||
|
|
||||||
PalPacket_72568: ; 72568 (1c:6568)
|
|
||||||
db $79,$47,$08,$00,$0B,$C4,$D0,$16,$A5,$CB,$C9,$05,$D0,$10,$A2,$28
|
|
||||||
|
|
||||||
PalPacket_72578: ; 72578 (1c:6578)
|
|
||||||
db $79,$3C,$08,$00,$0B,$F0,$12,$A5,$C9,$C9,$C8,$D0,$1C,$A5,$CA,$C9
|
|
||||||
|
|
||||||
PalPacket_72588: ; 72588 (1c:6588)
|
|
||||||
db $79,$31,$08,$00,$0B,$0C,$A5,$CA,$C9,$7E,$D0,$06,$A5,$CB,$C9,$7E
|
|
||||||
|
|
||||||
PalPacket_72598: ; 72598 (1c:6598)
|
|
||||||
db $79,$26,$08,$00,$0B,$39,$CD,$48,$0C,$D0,$34,$A5,$C9,$C9,$80,$D0
|
|
||||||
|
|
||||||
PalPacket_725a8: ; 725a8 (1c:65a8)
|
|
||||||
db $79,$1B,$08,$00,$0B,$EA,$EA,$EA,$EA,$EA,$A9,$01,$CD,$4F,$0C,$D0
|
|
||||||
|
|
||||||
PalPacket_725b8: ; 725b8 (1c:65b8)
|
|
||||||
db $79,$10,$08,$00,$0B,$4C,$20,$08,$EA,$EA,$EA,$EA,$EA,$60,$EA,$EA
|
|
||||||
|
|
|
||||||
51
engine/joypad.asm
Normal file
51
engine/joypad.asm
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
_Joypad::
|
||||||
|
ld a, [hJoyInput]
|
||||||
|
cp A_BUTTON + B_BUTTON + SELECT + START ; soft reset
|
||||||
|
jp z, TrySoftReset
|
||||||
|
ld b, a
|
||||||
|
ld a, [hJoyHeldLast]
|
||||||
|
ld e, a
|
||||||
|
xor b
|
||||||
|
ld d, a
|
||||||
|
and e
|
||||||
|
ld [hJoyReleased], a
|
||||||
|
ld a, d
|
||||||
|
and b
|
||||||
|
ld [hJoyPressed], a
|
||||||
|
ld a, b
|
||||||
|
ld [hJoyHeldLast], a
|
||||||
|
ld a, [wd730]
|
||||||
|
bit 5, a
|
||||||
|
jr nz, DiscardButtonPresses
|
||||||
|
ld a, [hJoyHeldLast]
|
||||||
|
ld [hJoyHeld], a
|
||||||
|
ld a, [wJoyIgnore]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
cpl
|
||||||
|
ld b, a
|
||||||
|
ld a, [hJoyHeld]
|
||||||
|
and b
|
||||||
|
ld [hJoyHeld], a
|
||||||
|
ld a, [hJoyPressed]
|
||||||
|
and b
|
||||||
|
ld [hJoyPressed], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
DiscardButtonPresses:
|
||||||
|
xor a
|
||||||
|
ld [hJoyHeld], a
|
||||||
|
ld [hJoyPressed], a
|
||||||
|
ld [hJoyReleased], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
TrySoftReset:
|
||||||
|
call DelayFrame
|
||||||
|
; reset joypad (to make sure the
|
||||||
|
; player is really trying to reset)
|
||||||
|
ld a, $30
|
||||||
|
ld [rJOYP], a
|
||||||
|
ld hl, hSoftReset
|
||||||
|
dec [hl]
|
||||||
|
jp z, SoftReset
|
||||||
|
jp Joypad
|
||||||
|
|
@ -396,21 +396,21 @@ LoadSGBBorderAndPalettes: ; 7202b (1c:602b)
|
||||||
ei
|
ei
|
||||||
ld a, $1
|
ld a, $1
|
||||||
ld [wcf2d], a
|
ld [wcf2d], a
|
||||||
ld de, PalPacket_72508
|
ld de, ChrTrnPacket
|
||||||
ld hl, SGBBorderGraphics
|
ld hl, SGBBorderGraphics
|
||||||
call Func_7210b
|
call Func_7210b
|
||||||
xor a
|
xor a
|
||||||
ld [wcf2d], a
|
ld [wcf2d], a
|
||||||
ld de, PalPacket_72518
|
ld de, PctTrnPacket
|
||||||
ld hl, BorderPalettes
|
ld hl, BorderPalettes
|
||||||
call Func_7210b
|
call Func_7210b
|
||||||
xor a
|
xor a
|
||||||
ld [wcf2d], a
|
ld [wcf2d], a
|
||||||
ld de, PalPacket_724d8
|
ld de, PalTrnPacket
|
||||||
ld hl, SuperPalettes
|
ld hl, SuperPalettes
|
||||||
call Func_7210b
|
call Func_7210b
|
||||||
call ClearVram
|
call ClearVram
|
||||||
ld hl, PalPacket_72538
|
ld hl, MaskEnCancelPacket
|
||||||
jp SendSGBPacket
|
jp SendSGBPacket
|
||||||
|
|
||||||
Func_72075: ; 72075 (1c:6075)
|
Func_72075: ; 72075 (1c:6075)
|
||||||
|
|
@ -431,18 +431,18 @@ Func_72075: ; 72075 (1c:6075)
|
||||||
ret
|
ret
|
||||||
|
|
||||||
PointerTable_72089: ; 72089 (1c:6089)
|
PointerTable_72089: ; 72089 (1c:6089)
|
||||||
dw PalPacket_72528
|
dw MaskEnFreezePacket
|
||||||
dw PalPacket_72548
|
dw DataSnd_72548
|
||||||
dw PalPacket_72558
|
dw DataSnd_72558
|
||||||
dw PalPacket_72568
|
dw DataSnd_72568
|
||||||
dw PalPacket_72578
|
dw DataSnd_72578
|
||||||
dw PalPacket_72588
|
dw DataSnd_72588
|
||||||
dw PalPacket_72598
|
dw DataSnd_72598
|
||||||
dw PalPacket_725a8
|
dw DataSnd_725a8
|
||||||
dw PalPacket_725b8
|
dw DataSnd_725b8
|
||||||
|
|
||||||
Func_7209b: ; 7209b (1c:609b)
|
Func_7209b: ; 7209b (1c:609b)
|
||||||
ld hl, PalPacket_724f8
|
ld hl, MltReq2Packet
|
||||||
di
|
di
|
||||||
call SendSGBPacket
|
call SendSGBPacket
|
||||||
ld a, $1
|
ld a, $1
|
||||||
|
|
@ -493,7 +493,7 @@ Func_7209b: ; 7209b (1c:609b)
|
||||||
ret
|
ret
|
||||||
|
|
||||||
Func_72102: ; 72102 (1c:6102)
|
Func_72102: ; 72102 (1c:6102)
|
||||||
ld hl, PalPacket_724e8
|
ld hl, MltReq1Packet
|
||||||
call SendSGBPacket
|
call SendSGBPacket
|
||||||
jp Wait7000
|
jp Wait7000
|
||||||
|
|
||||||
|
|
|
||||||
183
home/audio.asm
Normal file
183
home/audio.asm
Normal file
|
|
@ -0,0 +1,183 @@
|
||||||
|
Func_2307:: ; 2307 (0:2307)
|
||||||
|
call WaitForSoundToFinish
|
||||||
|
xor a
|
||||||
|
ld c, a
|
||||||
|
ld d, a
|
||||||
|
ld [wcfca], a
|
||||||
|
jr asm_2324
|
||||||
|
|
||||||
|
Func_2312:: ; 2312 (0:2312)
|
||||||
|
ld c, $a
|
||||||
|
ld d, $0
|
||||||
|
ld a, [wd72e]
|
||||||
|
bit 5, a
|
||||||
|
jr z, asm_2324
|
||||||
|
xor a
|
||||||
|
ld [wcfca], a
|
||||||
|
ld c, $8
|
||||||
|
ld d, c
|
||||||
|
asm_2324:: ; 2324 (0:2324)
|
||||||
|
ld a, [wd700]
|
||||||
|
and a
|
||||||
|
jr z, .asm_2343
|
||||||
|
cp $2
|
||||||
|
jr z, .asm_2332
|
||||||
|
ld a, MUSIC_BIKE_RIDING
|
||||||
|
jr .asm_2334
|
||||||
|
.asm_2332
|
||||||
|
ld a, MUSIC_SURFING
|
||||||
|
.asm_2334
|
||||||
|
ld b, a
|
||||||
|
ld a, d
|
||||||
|
and a
|
||||||
|
ld a, Bank(Func_7d8ea)
|
||||||
|
jr nz, .asm_233e
|
||||||
|
ld [wc0ef], a
|
||||||
|
.asm_233e
|
||||||
|
ld [wc0f0], a
|
||||||
|
jr .asm_234c
|
||||||
|
.asm_2343
|
||||||
|
ld a, [wd35b]
|
||||||
|
ld b, a
|
||||||
|
call Func_2385
|
||||||
|
jr c, .asm_2351
|
||||||
|
.asm_234c
|
||||||
|
ld a, [wcfca]
|
||||||
|
cp b
|
||||||
|
ret z
|
||||||
|
.asm_2351
|
||||||
|
ld a, c
|
||||||
|
ld [wMusicHeaderPointer], a
|
||||||
|
ld a, b
|
||||||
|
ld [wcfca], a
|
||||||
|
ld [wc0ee], a
|
||||||
|
jp PlaySound
|
||||||
|
|
||||||
|
Func_235f:: ; 235f (0:235f)
|
||||||
|
ld a, [wc0ef]
|
||||||
|
ld b, a
|
||||||
|
cp $2
|
||||||
|
jr nz, .checkForBank08
|
||||||
|
.bank02
|
||||||
|
ld hl, Func_9103
|
||||||
|
jr .asm_2378
|
||||||
|
.checkForBank08
|
||||||
|
cp $8
|
||||||
|
jr nz, .bank1F
|
||||||
|
.bank08
|
||||||
|
ld hl, Func_21879
|
||||||
|
jr .asm_2378
|
||||||
|
.bank1F
|
||||||
|
ld hl, Func_7d177
|
||||||
|
.asm_2378
|
||||||
|
ld c, $6
|
||||||
|
.asm_237a
|
||||||
|
push bc
|
||||||
|
push hl
|
||||||
|
call Bankswitch
|
||||||
|
pop hl
|
||||||
|
pop bc
|
||||||
|
dec c
|
||||||
|
jr nz, .asm_237a
|
||||||
|
ret
|
||||||
|
|
||||||
|
Func_2385:: ; 2385 (0:2385)
|
||||||
|
ld a, [wd35c]
|
||||||
|
ld e, a
|
||||||
|
ld a, [wc0ef]
|
||||||
|
cp e
|
||||||
|
jr nz, .asm_2394
|
||||||
|
ld [wc0f0], a
|
||||||
|
and a
|
||||||
|
ret
|
||||||
|
.asm_2394
|
||||||
|
ld a, c
|
||||||
|
and a
|
||||||
|
ld a, e
|
||||||
|
jr nz, .asm_239c
|
||||||
|
ld [wc0ef], a
|
||||||
|
.asm_239c
|
||||||
|
ld [wc0f0], a
|
||||||
|
scf
|
||||||
|
ret
|
||||||
|
|
||||||
|
PlayMusic:: ; 23a1 (0:23a1)
|
||||||
|
ld b, a
|
||||||
|
ld [wc0ee], a
|
||||||
|
xor a
|
||||||
|
ld [wMusicHeaderPointer], a
|
||||||
|
ld a, c
|
||||||
|
ld [wc0ef], a
|
||||||
|
ld [wc0f0], a
|
||||||
|
ld a, b
|
||||||
|
|
||||||
|
; plays music specified by a. If value is $ff, music is stopped
|
||||||
|
PlaySound:: ; 23b1 (0:23b1)
|
||||||
|
push hl
|
||||||
|
push de
|
||||||
|
push bc
|
||||||
|
ld b, a
|
||||||
|
ld a, [wc0ee]
|
||||||
|
and a
|
||||||
|
jr z, .asm_23c8
|
||||||
|
xor a
|
||||||
|
ld [wc02a], a
|
||||||
|
ld [wc02b], a
|
||||||
|
ld [wc02c], a
|
||||||
|
ld [wc02d], a
|
||||||
|
.asm_23c8
|
||||||
|
ld a, [wMusicHeaderPointer]
|
||||||
|
and a
|
||||||
|
jr z, .asm_23e3
|
||||||
|
ld a, [wc0ee]
|
||||||
|
and a
|
||||||
|
jr z, .asm_2425
|
||||||
|
xor a
|
||||||
|
ld [wc0ee], a
|
||||||
|
ld a, [wcfca]
|
||||||
|
cp $ff
|
||||||
|
jr nz, .asm_2414
|
||||||
|
xor a
|
||||||
|
ld [wMusicHeaderPointer], a
|
||||||
|
.asm_23e3
|
||||||
|
xor a
|
||||||
|
ld [wc0ee], a
|
||||||
|
ld a, [H_LOADEDROMBANK]
|
||||||
|
ld [$ffb9], a
|
||||||
|
ld a, [wc0ef]
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [$2000], a
|
||||||
|
cp $2
|
||||||
|
jr nz, .checkForBank08
|
||||||
|
.bank02
|
||||||
|
ld a, b
|
||||||
|
call Func_9876
|
||||||
|
jr .asm_240b
|
||||||
|
.checkForBank08
|
||||||
|
cp $8
|
||||||
|
jr nz, .bank1F
|
||||||
|
.bank08
|
||||||
|
ld a, b
|
||||||
|
call Func_22035
|
||||||
|
jr .asm_240b
|
||||||
|
.bank1F
|
||||||
|
ld a, b
|
||||||
|
call Func_7d8ea
|
||||||
|
.asm_240b
|
||||||
|
ld a, [$ffb9]
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [$2000], a
|
||||||
|
jr .asm_2425
|
||||||
|
.asm_2414
|
||||||
|
ld a, b
|
||||||
|
ld [wcfca], a
|
||||||
|
ld a, [wMusicHeaderPointer]
|
||||||
|
ld [wcfc8], a
|
||||||
|
ld [wcfc9], a
|
||||||
|
ld a, b
|
||||||
|
ld [wMusicHeaderPointer], a
|
||||||
|
.asm_2425
|
||||||
|
pop bc
|
||||||
|
pop de
|
||||||
|
pop hl
|
||||||
|
ret
|
||||||
73
home/fade.asm
Normal file
73
home/fade.asm
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
; These routines manage gradual fading
|
||||||
|
; (e.g., entering a doorway)
|
||||||
|
LoadGBPal::
|
||||||
|
ld a, [wd35d] ;tells if cur.map is dark (requires HM5_FLASH?)
|
||||||
|
ld b, a
|
||||||
|
ld hl, FadePal4
|
||||||
|
ld a, l
|
||||||
|
sub b
|
||||||
|
ld l, a
|
||||||
|
jr nc, .ok
|
||||||
|
dec h
|
||||||
|
.ok
|
||||||
|
ld a, [hli]
|
||||||
|
ld [rBGP], a
|
||||||
|
ld a, [hli]
|
||||||
|
ld [rOBP0], a
|
||||||
|
ld a, [hli]
|
||||||
|
ld [rOBP1], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
GBFadeOut1::
|
||||||
|
ld hl, FadePal1
|
||||||
|
ld b, 4
|
||||||
|
jr GBFadeOutCommon
|
||||||
|
|
||||||
|
GBFadeOut2::
|
||||||
|
ld hl, FadePal6
|
||||||
|
ld b, 3
|
||||||
|
|
||||||
|
GBFadeOutCommon::
|
||||||
|
ld a, [hli]
|
||||||
|
ld [rBGP], a
|
||||||
|
ld a, [hli]
|
||||||
|
ld [rOBP0], a
|
||||||
|
ld a, [hli]
|
||||||
|
ld [rOBP1], a
|
||||||
|
ld c, 8
|
||||||
|
call DelayFrames
|
||||||
|
dec b
|
||||||
|
jr nz, GBFadeOutCommon
|
||||||
|
ret
|
||||||
|
|
||||||
|
GBFadeIn1::
|
||||||
|
ld hl, FadePal4 + 2
|
||||||
|
ld b, 4
|
||||||
|
jr GBFadeInCommon
|
||||||
|
|
||||||
|
GBFadeIn2::
|
||||||
|
ld hl, FadePal7 + 2
|
||||||
|
ld b, 3
|
||||||
|
|
||||||
|
GBFadeInCommon::
|
||||||
|
ld a, [hld]
|
||||||
|
ld [rOBP1], a
|
||||||
|
ld a, [hld]
|
||||||
|
ld [rOBP0], a
|
||||||
|
ld a, [hld]
|
||||||
|
ld [rBGP], a
|
||||||
|
ld c, 8
|
||||||
|
call DelayFrames
|
||||||
|
dec b
|
||||||
|
jr nz, GBFadeInCommon
|
||||||
|
ret
|
||||||
|
|
||||||
|
FadePal1:: db %11111111, %11111111, %11111111
|
||||||
|
FadePal2:: db %11111110, %11111110, %11111000
|
||||||
|
FadePal3:: db %11111001, %11100100, %11100100
|
||||||
|
FadePal4:: db %11100100, %11010000, %11100000
|
||||||
|
; rBGP rOBP0 rOBP1
|
||||||
|
FadePal5:: db %11100100, %11010000, %11100000
|
||||||
|
FadePal6:: db %10010000, %10000000, %10010000
|
||||||
|
FadePal7:: db %01000000, %01000000, %01000000
|
||||||
|
FadePal8:: db %00000000, %00000000, %00000000
|
||||||
139
home/init.asm
Normal file
139
home/init.asm
Normal file
|
|
@ -0,0 +1,139 @@
|
||||||
|
SoftReset::
|
||||||
|
call StopAllSounds
|
||||||
|
call GBPalWhiteOut
|
||||||
|
ld c, $20
|
||||||
|
call DelayFrames
|
||||||
|
; fallthrough
|
||||||
|
|
||||||
|
Init::
|
||||||
|
; Program init.
|
||||||
|
|
||||||
|
rLCDC_DEFAULT EQU %11100011
|
||||||
|
; * LCD enabled
|
||||||
|
; * Window tile map at $9C00
|
||||||
|
; * Window display enabled
|
||||||
|
; * BG and window tile data at $8800
|
||||||
|
; * BG tile map at $9800
|
||||||
|
; * 8x8 OBJ size
|
||||||
|
; * OBJ display enabled
|
||||||
|
; * BG display enabled
|
||||||
|
|
||||||
|
di
|
||||||
|
|
||||||
|
xor a
|
||||||
|
ld [rIF], a
|
||||||
|
ld [rIE], a
|
||||||
|
ld [$ff43], a
|
||||||
|
ld [$ff42], a
|
||||||
|
ld [$ff01], a
|
||||||
|
ld [$ff02], a
|
||||||
|
ld [$ff4b], a
|
||||||
|
ld [$ff4a], a
|
||||||
|
ld [$ff06], a
|
||||||
|
ld [$ff07], a
|
||||||
|
ld [$ff47], a
|
||||||
|
ld [$ff48], a
|
||||||
|
ld [$ff49], a
|
||||||
|
|
||||||
|
ld a, rLCDC_ENABLE_MASK
|
||||||
|
ld [rLCDC], a
|
||||||
|
call DisableLCD
|
||||||
|
|
||||||
|
ld sp, wStack
|
||||||
|
|
||||||
|
ld hl, $c000 ; start of WRAM
|
||||||
|
ld bc, $2000 ; size of WRAM
|
||||||
|
.loop
|
||||||
|
ld [hl], 0
|
||||||
|
inc hl
|
||||||
|
dec bc
|
||||||
|
ld a, b
|
||||||
|
or c
|
||||||
|
jr nz, .loop
|
||||||
|
|
||||||
|
call ClearVram
|
||||||
|
|
||||||
|
ld hl, $ff80
|
||||||
|
ld bc, $ffff - $ff80
|
||||||
|
call FillMemory
|
||||||
|
|
||||||
|
call ClearSprites
|
||||||
|
|
||||||
|
ld a, Bank(WriteDMACodeToHRAM)
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [MBC3RomBank], a
|
||||||
|
call WriteDMACodeToHRAM
|
||||||
|
|
||||||
|
xor a
|
||||||
|
ld [$ffd7], a
|
||||||
|
ld [$ff41], a
|
||||||
|
ld [$ffae], a
|
||||||
|
ld [$ffaf], a
|
||||||
|
ld [$ff0f], a
|
||||||
|
ld a, 1 << VBLANK + 1 << TIMER + 1 << SERIAL
|
||||||
|
ld [rIE], a
|
||||||
|
|
||||||
|
ld a, 144 ; move the window off-screen
|
||||||
|
ld [$ffb0], a
|
||||||
|
ld [rWY], a
|
||||||
|
ld a, 7
|
||||||
|
ld [rWX], a
|
||||||
|
|
||||||
|
ld a, $ff
|
||||||
|
ld [$ffaa], a
|
||||||
|
|
||||||
|
ld h, vBGMap0 / $100
|
||||||
|
call ClearBgMap
|
||||||
|
ld h, vBGMap1 / $100
|
||||||
|
call ClearBgMap
|
||||||
|
|
||||||
|
ld a, rLCDC_DEFAULT
|
||||||
|
ld [rLCDC], a
|
||||||
|
ld a, 16
|
||||||
|
ld [hSoftReset], a
|
||||||
|
call StopAllSounds
|
||||||
|
|
||||||
|
ei
|
||||||
|
|
||||||
|
ld a, $40 ; PREDEF_SGB_BORDER
|
||||||
|
call Predef
|
||||||
|
|
||||||
|
ld a, $1f
|
||||||
|
ld [wc0ef], a
|
||||||
|
ld [wc0f0], a
|
||||||
|
ld a, $9c
|
||||||
|
ld [$ffbd], a
|
||||||
|
xor a
|
||||||
|
ld [$ffbc], a
|
||||||
|
dec a
|
||||||
|
ld [wcfcb], a
|
||||||
|
|
||||||
|
ld a, $32 ; PREDEF_INTRO
|
||||||
|
call Predef
|
||||||
|
|
||||||
|
call DisableLCD
|
||||||
|
call ClearVram
|
||||||
|
call GBPalNormal
|
||||||
|
call ClearSprites
|
||||||
|
ld a, rLCDC_DEFAULT
|
||||||
|
ld [rLCDC], a
|
||||||
|
|
||||||
|
jp SetDefaultNamesBeforeTitlescreen
|
||||||
|
|
||||||
|
ClearVram:
|
||||||
|
ld hl, $8000
|
||||||
|
ld bc, $2000
|
||||||
|
xor a
|
||||||
|
jp FillMemory
|
||||||
|
|
||||||
|
|
||||||
|
StopAllSounds::
|
||||||
|
ld a, Bank(Func_9876)
|
||||||
|
ld [wc0ef], a
|
||||||
|
ld [wc0f0], a
|
||||||
|
xor a
|
||||||
|
ld [wMusicHeaderPointer], a
|
||||||
|
ld [wc0ee], a
|
||||||
|
ld [wcfca], a
|
||||||
|
dec a
|
||||||
|
jp PlaySound
|
||||||
39
home/joypad.asm
Normal file
39
home/joypad.asm
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
ReadJoypad::
|
||||||
|
; Poll joypad input.
|
||||||
|
; Unlike the hardware register, button
|
||||||
|
; presses are indicated by a set bit.
|
||||||
|
|
||||||
|
ld a, 1 << 5 ; select direction keys
|
||||||
|
ld c, 0
|
||||||
|
|
||||||
|
ld [rJOYP], a
|
||||||
|
rept 6
|
||||||
|
ld a, [rJOYP]
|
||||||
|
endr
|
||||||
|
cpl
|
||||||
|
and %1111
|
||||||
|
swap a
|
||||||
|
ld b, a
|
||||||
|
|
||||||
|
ld a, 1 << 4 ; select button keys
|
||||||
|
ld [rJOYP], a
|
||||||
|
rept 10
|
||||||
|
ld a, [rJOYP]
|
||||||
|
endr
|
||||||
|
cpl
|
||||||
|
and %1111
|
||||||
|
or b
|
||||||
|
|
||||||
|
ld [hJoyInput], a
|
||||||
|
|
||||||
|
ld a, 1 << 4 + 1 << 5 ; deselect keys
|
||||||
|
ld [rJOYP], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
Joypad::
|
||||||
|
; Update the joypad state variables:
|
||||||
|
; [hJoyReleased] keys released since last time
|
||||||
|
; [hJoyPressed] keys pressed since last time
|
||||||
|
; [hJoyHeld] currently pressed keys
|
||||||
|
homecall _Joypad
|
||||||
|
ret
|
||||||
2419
home/overworld.asm
Normal file
2419
home/overworld.asm
Normal file
File diff suppressed because it is too large
Load diff
591
home/pic.asm
Normal file
591
home/pic.asm
Normal file
|
|
@ -0,0 +1,591 @@
|
||||||
|
; bankswitches and runs _UncompressSpriteData
|
||||||
|
; bank is given in a, sprite input stream is pointed to in W_SPRITEINPUTPTR
|
||||||
|
UncompressSpriteData:: ; 24fd (0:24fd)
|
||||||
|
ld b, a
|
||||||
|
ld a, [H_LOADEDROMBANK]
|
||||||
|
push af
|
||||||
|
ld a, b
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [$2000], a
|
||||||
|
ld a, $a
|
||||||
|
ld [$0], a
|
||||||
|
xor a
|
||||||
|
ld [$4000], a
|
||||||
|
call _UncompressSpriteData
|
||||||
|
pop af
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [$2000], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; initializes necessary data to load a sprite and runs UncompressSpriteDataLoop
|
||||||
|
_UncompressSpriteData:: ; 251a (0:251a)
|
||||||
|
ld hl, S_SPRITEBUFFER1
|
||||||
|
ld c, (2*SPRITEBUFFERSIZE) % $100
|
||||||
|
ld b, (2*SPRITEBUFFERSIZE) / $100
|
||||||
|
xor a
|
||||||
|
call FillMemory ; clear sprite buffer 1 and 2
|
||||||
|
ld a, $1
|
||||||
|
ld [W_SPRITEINPUTBITCOUNTER], a
|
||||||
|
ld a, $3
|
||||||
|
ld [W_SPRITEOUTPUTBITOFFSET], a
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITECURPOSX], a
|
||||||
|
ld [W_SPRITECURPOSY], a
|
||||||
|
ld [W_SPRITELOADFLAGS], a ; wd0a8
|
||||||
|
call ReadNextInputByte ; first byte of input determines sprite width (high nybble) and height (low nybble) in tiles (8x8 pixels)
|
||||||
|
ld b, a
|
||||||
|
and $f
|
||||||
|
add a
|
||||||
|
add a
|
||||||
|
add a
|
||||||
|
ld [W_SPRITEHEIGHT], a
|
||||||
|
ld a, b
|
||||||
|
swap a
|
||||||
|
and $f
|
||||||
|
add a
|
||||||
|
add a
|
||||||
|
add a
|
||||||
|
ld [W_SPRITEWITDH], a
|
||||||
|
call ReadNextInputBit
|
||||||
|
ld [W_SPRITELOADFLAGS], a ; initialite bit1 to 0 and bit0 to the first input bit
|
||||||
|
; this will load two chunks of data to S_SPRITEBUFFER1 and S_SPRITEBUFFER2
|
||||||
|
; bit 0 decides in which one the first chunk is placed
|
||||||
|
; fall through
|
||||||
|
|
||||||
|
; uncompresses a chunk from the sprite input data stream (pointed to at wd0da) into S_SPRITEBUFFER1 or S_SPRITEBUFFER2
|
||||||
|
; each chunk is a 1bpp sprite. A 2bpp sprite consist of two chunks which are merged afterwards
|
||||||
|
; note that this is an endless loop which is terminated during a call to MoveToNextBufferPosition by manipulating the stack
|
||||||
|
UncompressSpriteDataLoop:: ; 2556 (0:2556)
|
||||||
|
ld hl, S_SPRITEBUFFER1
|
||||||
|
ld a, [W_SPRITELOADFLAGS] ; wd0a8
|
||||||
|
bit 0, a
|
||||||
|
jr z, .useSpriteBuffer1 ; check which buffer to use
|
||||||
|
ld hl, S_SPRITEBUFFER2
|
||||||
|
.useSpriteBuffer1
|
||||||
|
call StoreSpriteOutputPointer
|
||||||
|
ld a, [W_SPRITELOADFLAGS] ; wd0a8
|
||||||
|
bit 1, a
|
||||||
|
jr z, .startDecompression ; check if last iteration
|
||||||
|
call ReadNextInputBit ; if last chunk, read 1-2 bit unpacking mode
|
||||||
|
and a
|
||||||
|
jr z, .unpackingMode0 ; 0 -> mode 0
|
||||||
|
call ReadNextInputBit ; 1 0 -> mode 1
|
||||||
|
inc a ; 1 1 -> mode 2
|
||||||
|
.unpackingMode0
|
||||||
|
ld [W_SPRITEUNPACKMODE], a
|
||||||
|
.startDecompression
|
||||||
|
call ReadNextInputBit
|
||||||
|
and a
|
||||||
|
jr z, .readRLEncodedZeros ; if first bit is 0, the input starts with zeroes, otherwise with (non-zero) input
|
||||||
|
.readNextInput
|
||||||
|
call ReadNextInputBit
|
||||||
|
ld c, a
|
||||||
|
call ReadNextInputBit
|
||||||
|
sla c
|
||||||
|
or c ; read next two bits into c
|
||||||
|
and a
|
||||||
|
jr z, .readRLEncodedZeros ; 00 -> RLEncoded zeroes following
|
||||||
|
call WriteSpriteBitsToBuffer ; otherwise write input to output and repeat
|
||||||
|
call MoveToNextBufferPosition
|
||||||
|
jr .readNextInput
|
||||||
|
.readRLEncodedZeros
|
||||||
|
ld c, $0 ; number of zeroes it length encoded, the number
|
||||||
|
.countConsecutiveOnesLoop ; of consecutive ones determines the number of bits the number has
|
||||||
|
call ReadNextInputBit
|
||||||
|
and a
|
||||||
|
jr z, .countConsecutiveOnesFinished
|
||||||
|
inc c
|
||||||
|
jr .countConsecutiveOnesLoop
|
||||||
|
.countConsecutiveOnesFinished
|
||||||
|
ld a, c
|
||||||
|
add a
|
||||||
|
ld hl, LengthEncodingOffsetList
|
||||||
|
add l
|
||||||
|
ld l, a
|
||||||
|
jr nc, .noCarry
|
||||||
|
inc h
|
||||||
|
.noCarry
|
||||||
|
ld a, [hli] ; read offset that is added to the number later on
|
||||||
|
ld e, a ; adding an offset of 2^length - 1 makes every integer uniquely
|
||||||
|
ld d, [hl] ; representable in the length encoding and saves bits
|
||||||
|
push de
|
||||||
|
inc c
|
||||||
|
ld e, $0
|
||||||
|
ld d, e
|
||||||
|
.readNumberOfZerosLoop ; reads the next c+1 bits of input
|
||||||
|
call ReadNextInputBit
|
||||||
|
or e
|
||||||
|
ld e, a
|
||||||
|
dec c
|
||||||
|
jr z, .readNumberOfZerosDone
|
||||||
|
sla e
|
||||||
|
rl d
|
||||||
|
jr .readNumberOfZerosLoop
|
||||||
|
.readNumberOfZerosDone
|
||||||
|
pop hl ; add the offset
|
||||||
|
add hl, de
|
||||||
|
ld e, l
|
||||||
|
ld d, h
|
||||||
|
.writeZerosLoop
|
||||||
|
ld b, e
|
||||||
|
xor a ; write 00 to buffer
|
||||||
|
call WriteSpriteBitsToBuffer
|
||||||
|
ld e, b
|
||||||
|
call MoveToNextBufferPosition
|
||||||
|
dec de
|
||||||
|
ld a, d
|
||||||
|
and a
|
||||||
|
jr nz, .continueLoop
|
||||||
|
ld a, e
|
||||||
|
and a
|
||||||
|
.continueLoop
|
||||||
|
jr nz, .writeZerosLoop
|
||||||
|
jr .readNextInput
|
||||||
|
|
||||||
|
; moves output pointer to next position
|
||||||
|
; also cancels the calling function if the all output is done (by removing the return pointer from stack)
|
||||||
|
; and calls postprocessing functions according to the unpack mode
|
||||||
|
MoveToNextBufferPosition:: ; 25d8 (0:25d8)
|
||||||
|
ld a, [W_SPRITEHEIGHT]
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_SPRITECURPOSY]
|
||||||
|
inc a
|
||||||
|
cp b
|
||||||
|
jr z, .curColumnDone
|
||||||
|
ld [W_SPRITECURPOSY], a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR]
|
||||||
|
inc a
|
||||||
|
ld [W_SPRITEOUTPUTPTR], a
|
||||||
|
ret nz
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR+1]
|
||||||
|
inc a
|
||||||
|
ld [W_SPRITEOUTPUTPTR+1], a
|
||||||
|
ret
|
||||||
|
.curColumnDone
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITECURPOSY], a
|
||||||
|
ld a, [W_SPRITEOUTPUTBITOFFSET]
|
||||||
|
and a
|
||||||
|
jr z, .bitOffsetsDone
|
||||||
|
dec a
|
||||||
|
ld [W_SPRITEOUTPUTBITOFFSET], a
|
||||||
|
ld hl, W_SPRITEOUTPUTPTRCACHED
|
||||||
|
ld a, [hli]
|
||||||
|
ld [W_SPRITEOUTPUTPTR], a
|
||||||
|
ld a, [hl]
|
||||||
|
ld [W_SPRITEOUTPUTPTR+1], a
|
||||||
|
ret
|
||||||
|
.bitOffsetsDone
|
||||||
|
ld a, $3
|
||||||
|
ld [W_SPRITEOUTPUTBITOFFSET], a
|
||||||
|
ld a, [W_SPRITECURPOSX]
|
||||||
|
add $8
|
||||||
|
ld [W_SPRITECURPOSX], a
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_SPRITEWITDH]
|
||||||
|
cp b
|
||||||
|
jr z, .allColumnsDone
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR+1]
|
||||||
|
ld h, a
|
||||||
|
inc hl
|
||||||
|
jp StoreSpriteOutputPointer
|
||||||
|
.allColumnsDone
|
||||||
|
pop hl
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITECURPOSX], a
|
||||||
|
ld a, [W_SPRITELOADFLAGS] ; wd0a8
|
||||||
|
bit 1, a
|
||||||
|
jr nz, .done ; test if there is one more sprite to go
|
||||||
|
xor $1
|
||||||
|
set 1, a
|
||||||
|
ld [W_SPRITELOADFLAGS], a ; wd0a8
|
||||||
|
jp UncompressSpriteDataLoop
|
||||||
|
.done
|
||||||
|
jp UnpackSprite
|
||||||
|
|
||||||
|
; writes 2 bits (from a) to the output buffer (pointed to from W_SPRITEOUTPUTPTR)
|
||||||
|
WriteSpriteBitsToBuffer:: ; 2649 (0:2649)
|
||||||
|
ld e, a
|
||||||
|
ld a, [W_SPRITEOUTPUTBITOFFSET]
|
||||||
|
and a
|
||||||
|
jr z, .offset0
|
||||||
|
cp $2
|
||||||
|
jr c, .offset1
|
||||||
|
jr z, .offset2
|
||||||
|
rrc e ; offset 3
|
||||||
|
rrc e
|
||||||
|
jr .offset0
|
||||||
|
.offset1
|
||||||
|
sla e
|
||||||
|
sla e
|
||||||
|
jr .offset0
|
||||||
|
.offset2
|
||||||
|
swap e
|
||||||
|
.offset0
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR+1]
|
||||||
|
ld h, a
|
||||||
|
ld a, [hl]
|
||||||
|
or e
|
||||||
|
ld [hl], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; reads next bit from input stream and returns it in a
|
||||||
|
ReadNextInputBit:: ; 2670 (0:2670)
|
||||||
|
ld a, [W_SPRITEINPUTBITCOUNTER]
|
||||||
|
dec a
|
||||||
|
jr nz, .curByteHasMoreBitsToRead
|
||||||
|
call ReadNextInputByte
|
||||||
|
ld [W_SPRITEINPUTCURBYTE], a
|
||||||
|
ld a, $8
|
||||||
|
.curByteHasMoreBitsToRead
|
||||||
|
ld [W_SPRITEINPUTBITCOUNTER], a
|
||||||
|
ld a, [W_SPRITEINPUTCURBYTE]
|
||||||
|
rlca
|
||||||
|
ld [W_SPRITEINPUTCURBYTE], a
|
||||||
|
and $1
|
||||||
|
ret
|
||||||
|
|
||||||
|
; reads next byte from input stream and returns it in a
|
||||||
|
ReadNextInputByte:: ; 268b (0:268b)
|
||||||
|
ld a, [W_SPRITEINPUTPTR]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEINPUTPTR+1]
|
||||||
|
ld h, a
|
||||||
|
ld a, [hli]
|
||||||
|
ld b, a
|
||||||
|
ld a, l
|
||||||
|
ld [W_SPRITEINPUTPTR], a
|
||||||
|
ld a, h
|
||||||
|
ld [W_SPRITEINPUTPTR+1], a
|
||||||
|
ld a, b
|
||||||
|
ret
|
||||||
|
|
||||||
|
; the nth item is 2^n - 1
|
||||||
|
LengthEncodingOffsetList:: ; 269f (0:269f)
|
||||||
|
dw %0000000000000001
|
||||||
|
dw %0000000000000011
|
||||||
|
dw %0000000000000111
|
||||||
|
dw %0000000000001111
|
||||||
|
dw %0000000000011111
|
||||||
|
dw %0000000000111111
|
||||||
|
dw %0000000001111111
|
||||||
|
dw %0000000011111111
|
||||||
|
dw %0000000111111111
|
||||||
|
dw %0000001111111111
|
||||||
|
dw %0000011111111111
|
||||||
|
dw %0000111111111111
|
||||||
|
dw %0001111111111111
|
||||||
|
dw %0011111111111111
|
||||||
|
dw %0111111111111111
|
||||||
|
dw %1111111111111111
|
||||||
|
|
||||||
|
; unpacks the sprite data depending on the unpack mode
|
||||||
|
UnpackSprite:: ; 26bf (0:26bf)
|
||||||
|
ld a, [W_SPRITEUNPACKMODE]
|
||||||
|
cp $2
|
||||||
|
jp z, UnpackSpriteMode2
|
||||||
|
and a
|
||||||
|
jp nz, XorSpriteChunks
|
||||||
|
ld hl, S_SPRITEBUFFER1
|
||||||
|
call SpriteDifferentialDecode
|
||||||
|
ld hl, S_SPRITEBUFFER2
|
||||||
|
; fall through
|
||||||
|
|
||||||
|
; decodes differential encoded sprite data
|
||||||
|
; input bit value 0 preserves the current bit value and input bit value 1 toggles it (starting from initial value 0).
|
||||||
|
SpriteDifferentialDecode:: ; 26d4 (0:26d4)
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITECURPOSX], a
|
||||||
|
ld [W_SPRITECURPOSY], a
|
||||||
|
call StoreSpriteOutputPointer
|
||||||
|
ld a, [W_SPRITEFLIPPED]
|
||||||
|
and a
|
||||||
|
jr z, .notFlipped
|
||||||
|
ld hl, DecodeNybble0TableFlipped
|
||||||
|
ld de, DecodeNybble1TableFlipped
|
||||||
|
jr .storeDecodeTablesPointers
|
||||||
|
.notFlipped
|
||||||
|
ld hl, DecodeNybble0Table
|
||||||
|
ld de, DecodeNybble1Table
|
||||||
|
.storeDecodeTablesPointers
|
||||||
|
ld a, l
|
||||||
|
ld [W_SPRITEDECODETABLE0PTR], a
|
||||||
|
ld a, h
|
||||||
|
ld [W_SPRITEDECODETABLE0PTR+1], a
|
||||||
|
ld a, e
|
||||||
|
ld [W_SPRITEDECODETABLE1PTR], a
|
||||||
|
ld a, d
|
||||||
|
ld [W_SPRITEDECODETABLE1PTR+1], a
|
||||||
|
ld e, $0 ; last decoded nybble, initialized to 0
|
||||||
|
.decodeNextByteLoop
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR+1]
|
||||||
|
ld h, a
|
||||||
|
ld a, [hl]
|
||||||
|
ld b, a
|
||||||
|
swap a
|
||||||
|
and $f
|
||||||
|
call DifferentialDecodeNybble ; decode high nybble
|
||||||
|
swap a
|
||||||
|
ld d, a
|
||||||
|
ld a, b
|
||||||
|
and $f
|
||||||
|
call DifferentialDecodeNybble ; decode low nybble
|
||||||
|
or d
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR+1]
|
||||||
|
ld h, a
|
||||||
|
ld a, b
|
||||||
|
ld [hl], a ; write back decoded data
|
||||||
|
ld a, [W_SPRITEHEIGHT]
|
||||||
|
add l ; move on to next column
|
||||||
|
jr nc, .noCarry
|
||||||
|
inc h
|
||||||
|
.noCarry
|
||||||
|
ld [W_SPRITEOUTPUTPTR], a
|
||||||
|
ld a, h
|
||||||
|
ld [W_SPRITEOUTPUTPTR+1], a
|
||||||
|
ld a, [W_SPRITECURPOSX]
|
||||||
|
add $8
|
||||||
|
ld [W_SPRITECURPOSX], a
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_SPRITEWITDH]
|
||||||
|
cp b
|
||||||
|
jr nz, .decodeNextByteLoop ; test if current row is done
|
||||||
|
xor a
|
||||||
|
ld e, a
|
||||||
|
ld [W_SPRITECURPOSX], a
|
||||||
|
ld a, [W_SPRITECURPOSY] ; move on to next row
|
||||||
|
inc a
|
||||||
|
ld [W_SPRITECURPOSY], a
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_SPRITEHEIGHT]
|
||||||
|
cp b
|
||||||
|
jr z, .done ; test if all rows finished
|
||||||
|
ld a, [W_SPRITEOUTPUTPTRCACHED]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTRCACHED+1]
|
||||||
|
ld h, a
|
||||||
|
inc hl
|
||||||
|
call StoreSpriteOutputPointer
|
||||||
|
jr .decodeNextByteLoop
|
||||||
|
.done
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITECURPOSY], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; decodes the nybble stored in a. Last decoded data is assumed to be in e (needed to determine if initial value is 0 or 1)
|
||||||
|
DifferentialDecodeNybble:: ; 276d (0:276d)
|
||||||
|
srl a ; c=a%2, a/=2
|
||||||
|
ld c, $0
|
||||||
|
jr nc, .evenNumber
|
||||||
|
ld c, $1
|
||||||
|
.evenNumber
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEFLIPPED]
|
||||||
|
and a
|
||||||
|
jr z, .notFlipped ; determine if initial value is 0 or one
|
||||||
|
bit 3, e ; if flipped, consider MSB of last data
|
||||||
|
jr .selectLookupTable
|
||||||
|
.notFlipped
|
||||||
|
bit 0, e ; else consider LSB
|
||||||
|
.selectLookupTable
|
||||||
|
ld e, l
|
||||||
|
jr nz, .initialValue1 ; load the appropriate table
|
||||||
|
ld a, [W_SPRITEDECODETABLE0PTR]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEDECODETABLE0PTR+1]
|
||||||
|
jr .tableLookup
|
||||||
|
.initialValue1
|
||||||
|
ld a, [W_SPRITEDECODETABLE1PTR]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEDECODETABLE1PTR+1]
|
||||||
|
.tableLookup
|
||||||
|
ld h, a
|
||||||
|
ld a, e
|
||||||
|
add l
|
||||||
|
ld l, a
|
||||||
|
jr nc, .noCarry
|
||||||
|
inc h
|
||||||
|
.noCarry
|
||||||
|
ld a, [hl]
|
||||||
|
bit 0, c
|
||||||
|
jr nz, .selectLowNybble
|
||||||
|
swap a ; select high nybble
|
||||||
|
.selectLowNybble
|
||||||
|
and $f
|
||||||
|
ld e, a ; update last decoded data
|
||||||
|
ret
|
||||||
|
|
||||||
|
DecodeNybble0Table:: ; 27a7 (0:27a7)
|
||||||
|
dn $0, $1
|
||||||
|
dn $3, $2
|
||||||
|
dn $7, $6
|
||||||
|
dn $4, $5
|
||||||
|
dn $f, $e
|
||||||
|
dn $c, $d
|
||||||
|
dn $8, $9
|
||||||
|
dn $b, $a
|
||||||
|
DecodeNybble1Table:: ; 27af (0:27af)
|
||||||
|
dn $f, $e
|
||||||
|
dn $c, $d
|
||||||
|
dn $8, $9
|
||||||
|
dn $b, $a
|
||||||
|
dn $0, $1
|
||||||
|
dn $3, $2
|
||||||
|
dn $7, $6
|
||||||
|
dn $4, $5
|
||||||
|
DecodeNybble0TableFlipped:: ; 27b7 (0:27b7)
|
||||||
|
dn $0, $8
|
||||||
|
dn $c, $4
|
||||||
|
dn $e, $6
|
||||||
|
dn $2, $a
|
||||||
|
dn $f, $7
|
||||||
|
dn $3, $b
|
||||||
|
dn $1, $9
|
||||||
|
dn $d, $5
|
||||||
|
DecodeNybble1TableFlipped:: ; 27bf (0:27bf)
|
||||||
|
dn $f, $7
|
||||||
|
dn $3, $b
|
||||||
|
dn $1, $9
|
||||||
|
dn $d, $5
|
||||||
|
dn $0, $8
|
||||||
|
dn $c, $4
|
||||||
|
dn $e, $6
|
||||||
|
dn $2, $a
|
||||||
|
|
||||||
|
; combines the two loaded chunks with xor (the chunk loaded second is the destination). The source chunk is differeintial decoded beforehand.
|
||||||
|
XorSpriteChunks:: ; 27c7 (0:27c7)
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITECURPOSX], a
|
||||||
|
ld [W_SPRITECURPOSY], a
|
||||||
|
call ResetSpriteBufferPointers
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR] ; points to buffer 1 or 2, depending on flags
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR+1]
|
||||||
|
ld h, a
|
||||||
|
call SpriteDifferentialDecode ; decode buffer 1 or 2, depending on flags
|
||||||
|
call ResetSpriteBufferPointers
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR] ; source buffer, points to buffer 1 or 2, depending on flags
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTR+1]
|
||||||
|
ld h, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTRCACHED] ; destination buffer, points to buffer 2 or 1, depending on flags
|
||||||
|
ld e, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTRCACHED+1]
|
||||||
|
ld d, a
|
||||||
|
.xorChunksLoop
|
||||||
|
ld a, [W_SPRITEFLIPPED]
|
||||||
|
and a
|
||||||
|
jr z, .notFlipped
|
||||||
|
push de
|
||||||
|
ld a, [de]
|
||||||
|
ld b, a
|
||||||
|
swap a
|
||||||
|
and $f
|
||||||
|
call ReverseNybble ; if flipped reverse the nybbles in the destination buffer
|
||||||
|
swap a
|
||||||
|
ld c, a
|
||||||
|
ld a, b
|
||||||
|
and $f
|
||||||
|
call ReverseNybble
|
||||||
|
or c
|
||||||
|
pop de
|
||||||
|
ld [de], a
|
||||||
|
.notFlipped
|
||||||
|
ld a, [hli]
|
||||||
|
ld b, a
|
||||||
|
ld a, [de]
|
||||||
|
xor b
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
ld a, [W_SPRITECURPOSY]
|
||||||
|
inc a
|
||||||
|
ld [W_SPRITECURPOSY], a ; go to next row
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_SPRITEHEIGHT]
|
||||||
|
cp b
|
||||||
|
jr nz, .xorChunksLoop ; test if column finished
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITECURPOSY], a
|
||||||
|
ld a, [W_SPRITECURPOSX]
|
||||||
|
add $8
|
||||||
|
ld [W_SPRITECURPOSX], a ; go to next column
|
||||||
|
ld b, a
|
||||||
|
ld a, [W_SPRITEWITDH]
|
||||||
|
cp b
|
||||||
|
jr nz, .xorChunksLoop ; test if all columns finished
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITECURPOSX], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; reverses the bits in the nybble given in register a
|
||||||
|
ReverseNybble:: ; 2837 (0:2837)
|
||||||
|
ld de, NybbleReverseTable
|
||||||
|
add e
|
||||||
|
ld e, a
|
||||||
|
jr nc, .asm_283f
|
||||||
|
inc d
|
||||||
|
.asm_283f
|
||||||
|
ld a, [de]
|
||||||
|
ret
|
||||||
|
|
||||||
|
; resets sprite buffer pointers to buffer 1 and 2, depending on W_SPRITELOADFLAGS
|
||||||
|
ResetSpriteBufferPointers:: ; 2841 (0:2841)
|
||||||
|
ld a, [W_SPRITELOADFLAGS] ; wd0a8
|
||||||
|
bit 0, a
|
||||||
|
jr nz, .buffer2Selected
|
||||||
|
ld de, S_SPRITEBUFFER1
|
||||||
|
ld hl, S_SPRITEBUFFER2
|
||||||
|
jr .storeBufferPointers
|
||||||
|
.buffer2Selected
|
||||||
|
ld de, S_SPRITEBUFFER2
|
||||||
|
ld hl, S_SPRITEBUFFER1
|
||||||
|
.storeBufferPointers
|
||||||
|
ld a, l
|
||||||
|
ld [W_SPRITEOUTPUTPTR], a
|
||||||
|
ld a, h
|
||||||
|
ld [W_SPRITEOUTPUTPTR+1], a
|
||||||
|
ld a, e
|
||||||
|
ld [W_SPRITEOUTPUTPTRCACHED], a
|
||||||
|
ld a, d
|
||||||
|
ld [W_SPRITEOUTPUTPTRCACHED+1], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; maps each nybble to its reverse
|
||||||
|
NybbleReverseTable:: ; 2867 (0:2867)
|
||||||
|
db $0, $8, $4, $c, $2, $a, $6 ,$e, $1, $9, $5, $d, $3, $b, $7 ,$f
|
||||||
|
|
||||||
|
; combines the two loaded chunks with xor (the chunk loaded second is the destination). Both chunks are differeintial decoded beforehand.
|
||||||
|
UnpackSpriteMode2:: ; 2877 (0:2877)
|
||||||
|
call ResetSpriteBufferPointers
|
||||||
|
ld a, [W_SPRITEFLIPPED]
|
||||||
|
push af
|
||||||
|
xor a
|
||||||
|
ld [W_SPRITEFLIPPED], a ; temporarily clear flipped flag for decoding the destination chunk
|
||||||
|
ld a, [W_SPRITEOUTPUTPTRCACHED]
|
||||||
|
ld l, a
|
||||||
|
ld a, [W_SPRITEOUTPUTPTRCACHED+1]
|
||||||
|
ld h, a
|
||||||
|
call SpriteDifferentialDecode
|
||||||
|
call ResetSpriteBufferPointers
|
||||||
|
pop af
|
||||||
|
ld [W_SPRITEFLIPPED], a
|
||||||
|
jp XorSpriteChunks
|
||||||
|
|
||||||
|
; stores hl into the output pointers
|
||||||
|
StoreSpriteOutputPointer:: ; 2897 (0:2897)
|
||||||
|
ld a, l
|
||||||
|
ld [W_SPRITEOUTPUTPTR], a
|
||||||
|
ld [W_SPRITEOUTPUTPTRCACHED], a
|
||||||
|
ld a, h
|
||||||
|
ld [W_SPRITEOUTPUTPTR+1], a
|
||||||
|
ld [W_SPRITEOUTPUTPTRCACHED+1], a
|
||||||
|
ret
|
||||||
50
home/predef.asm
Normal file
50
home/predef.asm
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
Predef::
|
||||||
|
; Call predefined function a.
|
||||||
|
; To preserve other registers, have the
|
||||||
|
; destination call GetPredefRegisters.
|
||||||
|
|
||||||
|
; Save the predef id for GetPredefPointer.
|
||||||
|
ld [wPredefID], a
|
||||||
|
|
||||||
|
; A hack for LoadDestinationWarpPosition.
|
||||||
|
; See Func_c754 (predef $19).
|
||||||
|
ld a, [H_LOADEDROMBANK]
|
||||||
|
ld [wPredefParentBank], a
|
||||||
|
|
||||||
|
push af
|
||||||
|
ld a, BANK(GetPredefPointer)
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [$2000], a
|
||||||
|
|
||||||
|
call GetPredefPointer
|
||||||
|
|
||||||
|
ld a, [wPredefBank]
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [$2000], a
|
||||||
|
|
||||||
|
ld de, .done
|
||||||
|
push de
|
||||||
|
jp [hl]
|
||||||
|
.done
|
||||||
|
|
||||||
|
pop af
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [$2000], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
GetPredefRegisters::
|
||||||
|
; Restore the contents of register pairs
|
||||||
|
; when GetPredefPointer was called.
|
||||||
|
ld a, [wPredefRegisters + 0]
|
||||||
|
ld h, a
|
||||||
|
ld a, [wPredefRegisters + 1]
|
||||||
|
ld l, a
|
||||||
|
ld a, [wPredefRegisters + 2]
|
||||||
|
ld d, a
|
||||||
|
ld a, [wPredefRegisters + 3]
|
||||||
|
ld e, a
|
||||||
|
ld a, [wPredefRegisters + 4]
|
||||||
|
ld b, a
|
||||||
|
ld a, [wPredefRegisters + 5]
|
||||||
|
ld c, a
|
||||||
|
ret
|
||||||
738
home/text.asm
Normal file
738
home/text.asm
Normal file
|
|
@ -0,0 +1,738 @@
|
||||||
|
TextBoxBorder::
|
||||||
|
; Draw a cxb text box at hl.
|
||||||
|
|
||||||
|
; top row
|
||||||
|
push hl
|
||||||
|
ld a, "┌"
|
||||||
|
ld [hli], a
|
||||||
|
inc a ; ─
|
||||||
|
call NPlaceChar
|
||||||
|
inc a ; ┐
|
||||||
|
ld [hl], a
|
||||||
|
pop hl
|
||||||
|
|
||||||
|
ld de, 20
|
||||||
|
add hl, de
|
||||||
|
|
||||||
|
; middle rows
|
||||||
|
.next
|
||||||
|
push hl
|
||||||
|
ld a, "│"
|
||||||
|
ld [hli],a
|
||||||
|
ld a, " "
|
||||||
|
call NPlaceChar
|
||||||
|
ld [hl], "│"
|
||||||
|
pop hl
|
||||||
|
|
||||||
|
ld de, 20
|
||||||
|
add hl, de
|
||||||
|
dec b
|
||||||
|
jr nz, .next
|
||||||
|
|
||||||
|
; bottom row
|
||||||
|
ld a, "└"
|
||||||
|
ld [hli], a
|
||||||
|
ld a, "─"
|
||||||
|
call NPlaceChar
|
||||||
|
ld [hl], "┘"
|
||||||
|
ret
|
||||||
|
|
||||||
|
NPlaceChar::
|
||||||
|
; Place char a c times.
|
||||||
|
ld d, c
|
||||||
|
.loop
|
||||||
|
ld [hli], a
|
||||||
|
dec d
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
PlaceString:: ; 1955 (0:1955)
|
||||||
|
push hl
|
||||||
|
PlaceNextChar:: ; 1956 (0:1956)
|
||||||
|
ld a,[de]
|
||||||
|
|
||||||
|
cp "@"
|
||||||
|
jr nz,.PlaceText
|
||||||
|
ld b,h
|
||||||
|
ld c,l
|
||||||
|
pop hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
.PlaceText
|
||||||
|
cp $4E
|
||||||
|
jr nz,.next
|
||||||
|
ld bc,$0028
|
||||||
|
ld a,[$FFF6]
|
||||||
|
bit 2,a
|
||||||
|
jr z,.next2
|
||||||
|
ld bc,$14
|
||||||
|
.next2
|
||||||
|
pop hl
|
||||||
|
add hl,bc
|
||||||
|
push hl
|
||||||
|
jp Next19E8
|
||||||
|
|
||||||
|
.next
|
||||||
|
cp $4F
|
||||||
|
jr nz,.next3
|
||||||
|
pop hl
|
||||||
|
FuncCoord 1, 16
|
||||||
|
ld hl,Coord
|
||||||
|
push hl
|
||||||
|
jp Next19E8
|
||||||
|
|
||||||
|
.next3 ; Check against a dictionary
|
||||||
|
and a
|
||||||
|
jp z,Char00
|
||||||
|
cp $4C
|
||||||
|
jp z,Char4C
|
||||||
|
cp $4B
|
||||||
|
jp z,Char4B
|
||||||
|
cp $51
|
||||||
|
jp z,Char51
|
||||||
|
cp $49
|
||||||
|
jp z,Char49
|
||||||
|
cp $52
|
||||||
|
jp z,Char52
|
||||||
|
cp $53
|
||||||
|
jp z,Char53
|
||||||
|
cp $54
|
||||||
|
jp z,Char54
|
||||||
|
cp $5B
|
||||||
|
jp z,Char5B
|
||||||
|
cp $5E
|
||||||
|
jp z,Char5E
|
||||||
|
cp $5C
|
||||||
|
jp z,Char5C
|
||||||
|
cp $5D
|
||||||
|
jp z,Char5D
|
||||||
|
cp $55
|
||||||
|
jp z,Char55
|
||||||
|
cp $56
|
||||||
|
jp z,Char56
|
||||||
|
cp $57
|
||||||
|
jp z,Char57
|
||||||
|
cp $58
|
||||||
|
jp z,Char58
|
||||||
|
cp $4A
|
||||||
|
jp z,Char4A
|
||||||
|
cp $5F
|
||||||
|
jp z,Char5F
|
||||||
|
cp $59
|
||||||
|
jp z,Char59
|
||||||
|
cp $5A
|
||||||
|
jp z,Char5A
|
||||||
|
ld [hli],a
|
||||||
|
call PrintLetterDelay
|
||||||
|
Next19E8:: ; 19e8 (0:19e8)
|
||||||
|
inc de
|
||||||
|
jp PlaceNextChar
|
||||||
|
|
||||||
|
Char00:: ; 19ec (0:19ec)
|
||||||
|
ld b,h
|
||||||
|
ld c,l
|
||||||
|
pop hl
|
||||||
|
ld de,Char00Text
|
||||||
|
dec de
|
||||||
|
ret
|
||||||
|
|
||||||
|
Char00Text:: ; 0x19f4 “%d ERROR.”
|
||||||
|
TX_FAR _Char00Text
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
Char52:: ; 0x19f9 player’s name
|
||||||
|
push de
|
||||||
|
ld de,W_PLAYERNAME
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char53:: ; 19ff (0:19ff) ; rival’s name
|
||||||
|
push de
|
||||||
|
ld de,W_RIVALNAME
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char5D:: ; 1a05 (0:1a05) ; TRAINER
|
||||||
|
push de
|
||||||
|
ld de,Char5DText
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char5C:: ; 1a0b (0:1a0b) ; TM
|
||||||
|
push de
|
||||||
|
ld de,Char5CText
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char5B:: ; 1a11 (0:1a11) ; PC
|
||||||
|
push de
|
||||||
|
ld de,Char5BText
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char5E:: ; 1a17 (0:1a17) ; ROCKET
|
||||||
|
push de
|
||||||
|
ld de,Char5EText
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char54:: ; 1a1d (0:1a1d) ; POKé
|
||||||
|
push de
|
||||||
|
ld de,Char54Text
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char56:: ; 1a23 (0:1a23) ; ……
|
||||||
|
push de
|
||||||
|
ld de,Char56Text
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char4A:: ; 1a29 (0:1a29) ; PKMN
|
||||||
|
push de
|
||||||
|
ld de,Char4AText
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
Char59:: ; 1a2f (0:1a2f)
|
||||||
|
; depending on whose turn it is, print
|
||||||
|
; enemy active monster’s name, prefixed with “Enemy ”
|
||||||
|
; or
|
||||||
|
; player active monster’s name
|
||||||
|
; (like Char5A but flipped)
|
||||||
|
ld a,[H_WHOSETURN]
|
||||||
|
xor 1
|
||||||
|
jr MonsterNameCharsCommon
|
||||||
|
|
||||||
|
Char5A:: ; 1a35 (0:1a35)
|
||||||
|
; depending on whose turn it is, print
|
||||||
|
; player active monster’s name
|
||||||
|
; or
|
||||||
|
; enemy active monster’s name, prefixed with “Enemy ”
|
||||||
|
ld a,[H_WHOSETURN]
|
||||||
|
MonsterNameCharsCommon:: ; 1a37 (0:1a37)
|
||||||
|
push de
|
||||||
|
and a
|
||||||
|
jr nz,.Enemy
|
||||||
|
ld de,W_PLAYERMONNAME ; player active monster name
|
||||||
|
jr FinishDTE
|
||||||
|
|
||||||
|
.Enemy ; 1A40
|
||||||
|
; print “Enemy ”
|
||||||
|
ld de,Char5AText
|
||||||
|
call PlaceString
|
||||||
|
|
||||||
|
ld h,b
|
||||||
|
ld l,c
|
||||||
|
ld de,W_ENEMYMONNAME ; enemy active monster name
|
||||||
|
|
||||||
|
FinishDTE:: ; 1a4b (0:1a4b)
|
||||||
|
call PlaceString
|
||||||
|
ld h,b
|
||||||
|
ld l,c
|
||||||
|
pop de
|
||||||
|
inc de
|
||||||
|
jp PlaceNextChar
|
||||||
|
|
||||||
|
Char5CText:: ; 1a55 (0:1a55)
|
||||||
|
db "TM@"
|
||||||
|
Char5DText:: ; 1a58 (0:1a58)
|
||||||
|
db "TRAINER@"
|
||||||
|
Char5BText:: ; 1a60 (0:1a60)
|
||||||
|
db "PC@"
|
||||||
|
Char5EText:: ; 1a63 (0:1a63)
|
||||||
|
db "ROCKET@"
|
||||||
|
Char54Text:: ; 1a6a (0:1a6a)
|
||||||
|
db "POKé@"
|
||||||
|
Char56Text:: ; 1a6f (0:1a6f)
|
||||||
|
db "……@"
|
||||||
|
Char5AText:: ; 1a72 (0:1a72)
|
||||||
|
db "Enemy @"
|
||||||
|
Char4AText:: ; 1a79 (0:1a79)
|
||||||
|
db $E1,$E2,"@" ; PKMN
|
||||||
|
|
||||||
|
Char55:: ; 1a7c (0:1a7c)
|
||||||
|
push de
|
||||||
|
ld b,h
|
||||||
|
ld c,l
|
||||||
|
ld hl,Char55Text
|
||||||
|
call TextCommandProcessor
|
||||||
|
ld h,b
|
||||||
|
ld l,c
|
||||||
|
pop de
|
||||||
|
inc de
|
||||||
|
jp PlaceNextChar
|
||||||
|
|
||||||
|
Char55Text:: ; 1a8c (0:1a8c)
|
||||||
|
; equivalent to Char4B
|
||||||
|
TX_FAR _Char55Text
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
Char5F:: ; 1a91 (0:1a91)
|
||||||
|
; ends a Pokédex entry
|
||||||
|
ld [hl],"."
|
||||||
|
pop hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
Char58:: ; 1a95 (0:1a95)
|
||||||
|
ld a,[W_ISLINKBATTLE]
|
||||||
|
cp 4
|
||||||
|
jp z,Next1AA2
|
||||||
|
ld a,$EE
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a
|
||||||
|
Next1AA2:: ; 1aa2 (0:1aa2)
|
||||||
|
call ProtectedDelay3
|
||||||
|
call ManualTextScroll
|
||||||
|
ld a,$7F
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a
|
||||||
|
Char57:: ; 1aad (0:1aad)
|
||||||
|
pop hl
|
||||||
|
ld de,Char58Text
|
||||||
|
dec de
|
||||||
|
ret
|
||||||
|
|
||||||
|
Char58Text:: ; 1ab3 (0:1ab3)
|
||||||
|
db "@"
|
||||||
|
|
||||||
|
Char51:: ; 1ab4 (0:1ab4)
|
||||||
|
push de
|
||||||
|
ld a,$EE
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a
|
||||||
|
call ProtectedDelay3
|
||||||
|
call ManualTextScroll
|
||||||
|
FuncCoord 1, 13
|
||||||
|
ld hl,Coord
|
||||||
|
ld bc,$0412
|
||||||
|
call ClearScreenArea
|
||||||
|
ld c,$14
|
||||||
|
call DelayFrames
|
||||||
|
pop de
|
||||||
|
FuncCoord 1, 14
|
||||||
|
ld hl,Coord
|
||||||
|
jp Next19E8
|
||||||
|
|
||||||
|
Char49:: ; 1ad5 (0:1ad5)
|
||||||
|
push de
|
||||||
|
ld a,$EE
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a
|
||||||
|
call ProtectedDelay3
|
||||||
|
call ManualTextScroll
|
||||||
|
FuncCoord 1, 10
|
||||||
|
ld hl,Coord
|
||||||
|
ld bc,$0712
|
||||||
|
call ClearScreenArea
|
||||||
|
ld c,$14
|
||||||
|
call DelayFrames
|
||||||
|
pop de
|
||||||
|
pop hl
|
||||||
|
FuncCoord 1, 11
|
||||||
|
ld hl,Coord
|
||||||
|
push hl
|
||||||
|
jp Next19E8
|
||||||
|
|
||||||
|
Char4B:: ; 1af8 (0:1af8)
|
||||||
|
ld a,$EE
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a
|
||||||
|
call ProtectedDelay3
|
||||||
|
push de
|
||||||
|
call ManualTextScroll
|
||||||
|
pop de
|
||||||
|
ld a,$7F
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a
|
||||||
|
;fall through
|
||||||
|
Char4C:: ; 1b0a (0:1b0a)
|
||||||
|
push de
|
||||||
|
call Next1B18
|
||||||
|
call Next1B18
|
||||||
|
FuncCoord 1, 16
|
||||||
|
ld hl,Coord
|
||||||
|
pop de
|
||||||
|
jp Next19E8
|
||||||
|
|
||||||
|
Next1B18:: ; 1b18 (0:1b18)
|
||||||
|
FuncCoord 0, 14
|
||||||
|
ld hl,Coord
|
||||||
|
FuncCoord 0, 13
|
||||||
|
ld de,Coord
|
||||||
|
ld b,$3C
|
||||||
|
.next
|
||||||
|
ld a,[hli]
|
||||||
|
ld [de],a
|
||||||
|
inc de
|
||||||
|
dec b
|
||||||
|
jr nz,.next
|
||||||
|
FuncCoord 1, 16
|
||||||
|
ld hl,Coord
|
||||||
|
ld a,$7F
|
||||||
|
ld b,$12
|
||||||
|
.next2
|
||||||
|
ld [hli],a
|
||||||
|
dec b
|
||||||
|
jr nz,.next2
|
||||||
|
|
||||||
|
; wait five frames
|
||||||
|
ld b,5
|
||||||
|
.WaitFrame
|
||||||
|
call DelayFrame
|
||||||
|
dec b
|
||||||
|
jr nz,.WaitFrame
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
ProtectedDelay3:: ; 1b3a (0:1b3a)
|
||||||
|
push bc
|
||||||
|
call Delay3
|
||||||
|
pop bc
|
||||||
|
ret
|
||||||
|
|
||||||
|
TextCommandProcessor:: ; 1b40 (0:1b40)
|
||||||
|
ld a,[wd358]
|
||||||
|
push af
|
||||||
|
set 1,a
|
||||||
|
ld e,a
|
||||||
|
ld a,[$fff4]
|
||||||
|
xor e
|
||||||
|
ld [wd358],a
|
||||||
|
ld a,c
|
||||||
|
ld [wcc3a],a
|
||||||
|
ld a,b
|
||||||
|
ld [wcc3b],a
|
||||||
|
|
||||||
|
NextTextCommand:: ; 1b55 (0:1b55)
|
||||||
|
ld a,[hli]
|
||||||
|
cp a, "@" ; terminator
|
||||||
|
jr nz,.doTextCommand
|
||||||
|
pop af
|
||||||
|
ld [wd358],a
|
||||||
|
ret
|
||||||
|
.doTextCommand
|
||||||
|
push hl
|
||||||
|
cp a,$17
|
||||||
|
jp z,TextCommand17
|
||||||
|
cp a,$0e
|
||||||
|
jp nc,TextCommand0B ; if a != 0x17 and a >= 0xE, go to command 0xB
|
||||||
|
; if a < 0xE, use a jump table
|
||||||
|
ld hl,TextCommandJumpTable
|
||||||
|
push bc
|
||||||
|
add a
|
||||||
|
ld b,$00
|
||||||
|
ld c,a
|
||||||
|
add hl,bc
|
||||||
|
pop bc
|
||||||
|
ld a,[hli]
|
||||||
|
ld h,[hl]
|
||||||
|
ld l,a
|
||||||
|
jp [hl]
|
||||||
|
|
||||||
|
; draw box
|
||||||
|
; 04AAAABBCC
|
||||||
|
; AAAA = address of upper left corner
|
||||||
|
; BB = height
|
||||||
|
; CC = width
|
||||||
|
TextCommand04:: ; 1b78 (0:1b78)
|
||||||
|
pop hl
|
||||||
|
ld a,[hli]
|
||||||
|
ld e,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld d,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld b,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld c,a
|
||||||
|
push hl
|
||||||
|
ld h,d
|
||||||
|
ld l,e
|
||||||
|
call TextBoxBorder
|
||||||
|
pop hl
|
||||||
|
jr NextTextCommand
|
||||||
|
|
||||||
|
; place string inline
|
||||||
|
; 00{string}
|
||||||
|
TextCommand00:: ; 1b8a (0:1b8a)
|
||||||
|
pop hl
|
||||||
|
ld d,h
|
||||||
|
ld e,l
|
||||||
|
ld h,b
|
||||||
|
ld l,c
|
||||||
|
call PlaceString
|
||||||
|
ld h,d
|
||||||
|
ld l,e
|
||||||
|
inc hl
|
||||||
|
jr NextTextCommand
|
||||||
|
|
||||||
|
; place string from RAM
|
||||||
|
; 01AAAA
|
||||||
|
; AAAA = address of string
|
||||||
|
TextCommand01:: ; 1b97 (0:1b97)
|
||||||
|
pop hl
|
||||||
|
ld a,[hli]
|
||||||
|
ld e,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld d,a
|
||||||
|
push hl
|
||||||
|
ld h,b
|
||||||
|
ld l,c
|
||||||
|
call PlaceString
|
||||||
|
pop hl
|
||||||
|
jr NextTextCommand
|
||||||
|
|
||||||
|
; print BCD number
|
||||||
|
; 02AAAABB
|
||||||
|
; AAAA = address of BCD number
|
||||||
|
; BB
|
||||||
|
; bits 0-4 = length in bytes
|
||||||
|
; bits 5-7 = unknown flags
|
||||||
|
TextCommand02:: ; 1ba5 (0:1ba5)
|
||||||
|
pop hl
|
||||||
|
ld a,[hli]
|
||||||
|
ld e,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld d,a
|
||||||
|
ld a,[hli]
|
||||||
|
push hl
|
||||||
|
ld h,b
|
||||||
|
ld l,c
|
||||||
|
ld c,a
|
||||||
|
call PrintBCDNumber
|
||||||
|
ld b,h
|
||||||
|
ld c,l
|
||||||
|
pop hl
|
||||||
|
jr NextTextCommand
|
||||||
|
|
||||||
|
; repoint destination address
|
||||||
|
; 03AAAA
|
||||||
|
; AAAA = new destination address
|
||||||
|
TextCommand03:: ; 1bb7 (0:1bb7)
|
||||||
|
pop hl
|
||||||
|
ld a,[hli]
|
||||||
|
ld [wcc3a],a
|
||||||
|
ld c,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld [wcc3b],a
|
||||||
|
ld b,a
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; repoint destination to second line of dialogue text box
|
||||||
|
; 05
|
||||||
|
; (no arguments)
|
||||||
|
TextCommand05:: ; 1bc5 (0:1bc5)
|
||||||
|
pop hl
|
||||||
|
FuncCoord 1, 16
|
||||||
|
ld bc,Coord ; address of second line of dialogue text box
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; blink arrow and wait for A or B to be pressed
|
||||||
|
; 06
|
||||||
|
; (no arguments)
|
||||||
|
TextCommand06:: ; 1bcc (0:1bcc)
|
||||||
|
ld a,[W_ISLINKBATTLE]
|
||||||
|
cp a,$04
|
||||||
|
jp z,TextCommand0D
|
||||||
|
ld a,$ee ; down arrow
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a ; place down arrow in lower right corner of dialogue text box
|
||||||
|
push bc
|
||||||
|
call ManualTextScroll ; blink arrow and wait for A or B to be pressed
|
||||||
|
pop bc
|
||||||
|
ld a," "
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a ; overwrite down arrow with blank space
|
||||||
|
pop hl
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; scroll text up one line
|
||||||
|
; 07
|
||||||
|
; (no arguments)
|
||||||
|
TextCommand07:: ; 1be7 (0:1be7)
|
||||||
|
ld a," "
|
||||||
|
FuncCoord 18, 16
|
||||||
|
ld [Coord],a ; place blank space in lower right corner of dialogue text box
|
||||||
|
call Next1B18 ; scroll up text
|
||||||
|
call Next1B18
|
||||||
|
pop hl
|
||||||
|
FuncCoord 1, 16
|
||||||
|
ld bc,Coord ; address of second line of dialogue text box
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; execute asm inline
|
||||||
|
; 08{code}
|
||||||
|
TextCommand08:: ; 1bf9 (0:1bf9)
|
||||||
|
pop hl
|
||||||
|
ld de,NextTextCommand
|
||||||
|
push de ; return address
|
||||||
|
jp [hl]
|
||||||
|
|
||||||
|
; print decimal number (converted from binary number)
|
||||||
|
; 09AAAABB
|
||||||
|
; AAAA = address of number
|
||||||
|
; BB
|
||||||
|
; bits 0-3 = how many digits to display
|
||||||
|
; bits 4-7 = how long the number is in bytes
|
||||||
|
TextCommand09:: ; 1bff (0:1bff)
|
||||||
|
pop hl
|
||||||
|
ld a,[hli]
|
||||||
|
ld e,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld d,a
|
||||||
|
ld a,[hli]
|
||||||
|
push hl
|
||||||
|
ld h,b
|
||||||
|
ld l,c
|
||||||
|
ld b,a
|
||||||
|
and a,$0f
|
||||||
|
ld c,a
|
||||||
|
ld a,b
|
||||||
|
and a,$f0
|
||||||
|
swap a
|
||||||
|
set 6,a
|
||||||
|
ld b,a
|
||||||
|
call PrintNumber
|
||||||
|
ld b,h
|
||||||
|
ld c,l
|
||||||
|
pop hl
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; wait half a second if the user doesn't hold A or B
|
||||||
|
; 0A
|
||||||
|
; (no arguments)
|
||||||
|
TextCommand0A:: ; 1c1d (0:1c1d)
|
||||||
|
push bc
|
||||||
|
call Joypad
|
||||||
|
ld a,[hJoyHeld]
|
||||||
|
and a,%00000011 ; A and B buttons
|
||||||
|
jr nz,.skipDelay
|
||||||
|
ld c,30
|
||||||
|
call DelayFrames
|
||||||
|
.skipDelay
|
||||||
|
pop bc
|
||||||
|
pop hl
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; plays sounds
|
||||||
|
; this actually handles various command ID's, not just 0B
|
||||||
|
; (no arguments)
|
||||||
|
TextCommand0B:: ; 1c31 (0:1c31)
|
||||||
|
pop hl
|
||||||
|
push bc
|
||||||
|
dec hl
|
||||||
|
ld a,[hli]
|
||||||
|
ld b,a ; b = command number that got us here
|
||||||
|
push hl
|
||||||
|
ld hl,TextCommandSounds
|
||||||
|
.loop
|
||||||
|
ld a,[hli]
|
||||||
|
cp b
|
||||||
|
jr z,.matchFound
|
||||||
|
inc hl
|
||||||
|
jr .loop
|
||||||
|
.matchFound
|
||||||
|
cp a,$14
|
||||||
|
jr z,.pokemonCry
|
||||||
|
cp a,$15
|
||||||
|
jr z,.pokemonCry
|
||||||
|
cp a,$16
|
||||||
|
jr z,.pokemonCry
|
||||||
|
ld a,[hl]
|
||||||
|
call PlaySound
|
||||||
|
call WaitForSoundToFinish
|
||||||
|
pop hl
|
||||||
|
pop bc
|
||||||
|
jp NextTextCommand
|
||||||
|
.pokemonCry
|
||||||
|
push de
|
||||||
|
ld a,[hl]
|
||||||
|
call PlayCry
|
||||||
|
pop de
|
||||||
|
pop hl
|
||||||
|
pop bc
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; format: text command ID, sound ID or cry ID
|
||||||
|
TextCommandSounds:: ; 1c64 (0:1c64)
|
||||||
|
db $0B,(SFX_02_3a - SFX_Headers_02) / 3
|
||||||
|
db $12,(SFX_02_46 - SFX_Headers_02) / 3
|
||||||
|
db $0E,(SFX_02_41 - SFX_Headers_02) / 3
|
||||||
|
db $0F,(SFX_02_3a - SFX_Headers_02) / 3
|
||||||
|
db $10,(SFX_02_3b - SFX_Headers_02) / 3
|
||||||
|
db $11,(SFX_02_42 - SFX_Headers_02) / 3
|
||||||
|
db $13,(SFX_02_44 - SFX_Headers_02) / 3
|
||||||
|
db $14,NIDORINA ; used in OakSpeech
|
||||||
|
db $15,PIDGEOT ; used in SaffronCityText12
|
||||||
|
db $16,DEWGONG ; unused?
|
||||||
|
|
||||||
|
; draw ellipses
|
||||||
|
; 0CAA
|
||||||
|
; AA = number of ellipses to draw
|
||||||
|
TextCommand0C:: ; 1c78 (0:1c78)
|
||||||
|
pop hl
|
||||||
|
ld a,[hli]
|
||||||
|
ld d,a
|
||||||
|
push hl
|
||||||
|
ld h,b
|
||||||
|
ld l,c
|
||||||
|
.loop
|
||||||
|
ld a,$75 ; ellipsis
|
||||||
|
ld [hli],a
|
||||||
|
push de
|
||||||
|
call Joypad
|
||||||
|
pop de
|
||||||
|
ld a,[hJoyHeld] ; joypad state
|
||||||
|
and a,%00000011 ; is A or B button pressed?
|
||||||
|
jr nz,.skipDelay ; if so, skip the delay
|
||||||
|
ld c,10
|
||||||
|
call DelayFrames
|
||||||
|
.skipDelay
|
||||||
|
dec d
|
||||||
|
jr nz,.loop
|
||||||
|
ld b,h
|
||||||
|
ld c,l
|
||||||
|
pop hl
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; wait for A or B to be pressed
|
||||||
|
; 0D
|
||||||
|
; (no arguments)
|
||||||
|
TextCommand0D:: ; 1c9a (0:1c9a)
|
||||||
|
push bc
|
||||||
|
call ManualTextScroll ; wait for A or B to be pressed
|
||||||
|
pop bc
|
||||||
|
pop hl
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
; process text commands in another ROM bank
|
||||||
|
; 17AAAABB
|
||||||
|
; AAAA = address of text commands
|
||||||
|
; BB = bank
|
||||||
|
TextCommand17:: ; 1ca3 (0:1ca3)
|
||||||
|
pop hl
|
||||||
|
ld a,[H_LOADEDROMBANK]
|
||||||
|
push af
|
||||||
|
ld a,[hli]
|
||||||
|
ld e,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld d,a
|
||||||
|
ld a,[hli]
|
||||||
|
ld [H_LOADEDROMBANK],a
|
||||||
|
ld [$2000],a
|
||||||
|
push hl
|
||||||
|
ld l,e
|
||||||
|
ld h,d
|
||||||
|
call TextCommandProcessor
|
||||||
|
pop hl
|
||||||
|
pop af
|
||||||
|
ld [H_LOADEDROMBANK],a
|
||||||
|
ld [$2000],a
|
||||||
|
jp NextTextCommand
|
||||||
|
|
||||||
|
TextCommandJumpTable:: ; 1cc1 (0:1cc1)
|
||||||
|
dw TextCommand00
|
||||||
|
dw TextCommand01
|
||||||
|
dw TextCommand02
|
||||||
|
dw TextCommand03
|
||||||
|
dw TextCommand04
|
||||||
|
dw TextCommand05
|
||||||
|
dw TextCommand06
|
||||||
|
dw TextCommand07
|
||||||
|
dw TextCommand08
|
||||||
|
dw TextCommand09
|
||||||
|
dw TextCommand0A
|
||||||
|
dw TextCommand0B
|
||||||
|
dw TextCommand0C
|
||||||
|
dw TextCommand0D
|
||||||
105
home/vblank.asm
Normal file
105
home/vblank.asm
Normal file
|
|
@ -0,0 +1,105 @@
|
||||||
|
VBlank::
|
||||||
|
|
||||||
|
push af
|
||||||
|
push bc
|
||||||
|
push de
|
||||||
|
push hl
|
||||||
|
|
||||||
|
ld a, [H_LOADEDROMBANK]
|
||||||
|
ld [wd122], a
|
||||||
|
|
||||||
|
ld a, [$ffae]
|
||||||
|
ld [rSCX], a
|
||||||
|
ld a, [$ffaf]
|
||||||
|
ld [rSCY], a
|
||||||
|
|
||||||
|
ld a, [wd0a0]
|
||||||
|
and a
|
||||||
|
jr nz, .ok
|
||||||
|
ld a, [$ffb0]
|
||||||
|
ld [rWY], a
|
||||||
|
.ok
|
||||||
|
|
||||||
|
call AutoBgMapTransfer
|
||||||
|
call VBlankCopyBgMap
|
||||||
|
call RedrawExposedScreenEdge
|
||||||
|
call VBlankCopy
|
||||||
|
call VBlankCopyDouble
|
||||||
|
call UpdateMovingBgTiles
|
||||||
|
call $ff80 ; hOAMDMA
|
||||||
|
ld a, Bank(PrepareOAMData)
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [MBC3RomBank], a
|
||||||
|
call PrepareOAMData
|
||||||
|
|
||||||
|
; VBlank-sensitive operations end.
|
||||||
|
|
||||||
|
call Random
|
||||||
|
|
||||||
|
ld a, [H_VBLANKOCCURRED]
|
||||||
|
and a
|
||||||
|
jr z, .vblanked
|
||||||
|
xor a
|
||||||
|
ld [H_VBLANKOCCURRED], a
|
||||||
|
.vblanked
|
||||||
|
|
||||||
|
ld a, [H_FRAMECOUNTER]
|
||||||
|
and a
|
||||||
|
jr z, .decced
|
||||||
|
dec a
|
||||||
|
ld [H_FRAMECOUNTER], a
|
||||||
|
.decced
|
||||||
|
|
||||||
|
call Func_28cb
|
||||||
|
|
||||||
|
ld a, [wc0ef] ; music ROM bank
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [MBC3RomBank], a
|
||||||
|
|
||||||
|
cp BANK(Func_9103)
|
||||||
|
jr nz, .notbank2
|
||||||
|
.bank2
|
||||||
|
call Func_9103
|
||||||
|
jr .afterMusic
|
||||||
|
.notbank2
|
||||||
|
cp 8
|
||||||
|
jr nz, .bank1F
|
||||||
|
.bank8
|
||||||
|
call Func_2136e
|
||||||
|
call Func_21879
|
||||||
|
jr .afterMusic
|
||||||
|
.bank1F
|
||||||
|
call Func_7d177
|
||||||
|
.afterMusic
|
||||||
|
|
||||||
|
callba Func_18dee ; keep track of time played
|
||||||
|
|
||||||
|
ld a, [$fff9]
|
||||||
|
and a
|
||||||
|
call z, ReadJoypad
|
||||||
|
|
||||||
|
ld a, [wd122]
|
||||||
|
ld [H_LOADEDROMBANK], a
|
||||||
|
ld [MBC3RomBank], a
|
||||||
|
|
||||||
|
pop hl
|
||||||
|
pop de
|
||||||
|
pop bc
|
||||||
|
pop af
|
||||||
|
reti
|
||||||
|
|
||||||
|
|
||||||
|
DelayFrame::
|
||||||
|
; Wait for the next vblank interrupt.
|
||||||
|
; As a bonus, this saves battery.
|
||||||
|
|
||||||
|
NOT_VBLANKED EQU 1
|
||||||
|
|
||||||
|
ld a, NOT_VBLANKED
|
||||||
|
ld [H_VBLANKOCCURRED], a
|
||||||
|
.halt
|
||||||
|
halt
|
||||||
|
ld a, [H_VBLANKOCCURRED]
|
||||||
|
and a
|
||||||
|
jr nz, .halt
|
||||||
|
ret
|
||||||
450
home/vcopy.asm
Normal file
450
home/vcopy.asm
Normal file
|
|
@ -0,0 +1,450 @@
|
||||||
|
; this function seems to be used only once
|
||||||
|
; it store the address of a row and column of the VRAM background map in hl
|
||||||
|
; INPUT: h - row, l - column, b - high byte of background tile map address in VRAM
|
||||||
|
GetRowColAddressBgMap:: ; 1cdd (0:1cdd)
|
||||||
|
xor a
|
||||||
|
srl h
|
||||||
|
rr a
|
||||||
|
srl h
|
||||||
|
rr a
|
||||||
|
srl h
|
||||||
|
rr a
|
||||||
|
or l
|
||||||
|
ld l,a
|
||||||
|
ld a,b
|
||||||
|
or h
|
||||||
|
ld h,a
|
||||||
|
ret
|
||||||
|
|
||||||
|
; clears a VRAM background map with blank space tiles
|
||||||
|
; INPUT: h - high byte of background tile map address in VRAM
|
||||||
|
ClearBgMap:: ; 1cf0 (0:1cf0)
|
||||||
|
ld a," "
|
||||||
|
jr .next
|
||||||
|
ld a,l
|
||||||
|
.next
|
||||||
|
ld de,$400 ; size of VRAM background map
|
||||||
|
ld l,e
|
||||||
|
.loop
|
||||||
|
ld [hli],a
|
||||||
|
dec e
|
||||||
|
jr nz,.loop
|
||||||
|
dec d
|
||||||
|
jr nz,.loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
; When the player takes a step, a row or column of 2x2 tile blocks at the edge
|
||||||
|
; of the screen toward which they moved is exposed and has to be redrawn.
|
||||||
|
; This function does the redrawing.
|
||||||
|
RedrawExposedScreenEdge:: ; 1d01 (0:1d01)
|
||||||
|
ld a,[H_SCREENEDGEREDRAW]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
ld b,a
|
||||||
|
xor a
|
||||||
|
ld [H_SCREENEDGEREDRAW],a
|
||||||
|
dec b
|
||||||
|
jr nz,.redrawRow
|
||||||
|
.redrawColumn
|
||||||
|
ld hl,wScreenEdgeTiles
|
||||||
|
ld a,[H_SCREENEDGEREDRAWADDR]
|
||||||
|
ld e,a
|
||||||
|
ld a,[H_SCREENEDGEREDRAWADDR + 1]
|
||||||
|
ld d,a
|
||||||
|
ld c,18 ; screen height
|
||||||
|
.loop1
|
||||||
|
ld a,[hli]
|
||||||
|
ld [de],a
|
||||||
|
inc de
|
||||||
|
ld a,[hli]
|
||||||
|
ld [de],a
|
||||||
|
ld a,31
|
||||||
|
add e
|
||||||
|
ld e,a
|
||||||
|
jr nc,.noCarry
|
||||||
|
inc d
|
||||||
|
.noCarry
|
||||||
|
; the following 4 lines wrap us from bottom to top if necessary
|
||||||
|
ld a,d
|
||||||
|
and a,$03
|
||||||
|
or a,$98
|
||||||
|
ld d,a
|
||||||
|
dec c
|
||||||
|
jr nz,.loop1
|
||||||
|
xor a
|
||||||
|
ld [H_SCREENEDGEREDRAW],a
|
||||||
|
ret
|
||||||
|
.redrawRow
|
||||||
|
ld hl,wScreenEdgeTiles
|
||||||
|
ld a,[H_SCREENEDGEREDRAWADDR]
|
||||||
|
ld e,a
|
||||||
|
ld a,[H_SCREENEDGEREDRAWADDR + 1]
|
||||||
|
ld d,a
|
||||||
|
push de
|
||||||
|
call .drawHalf ; draw upper half
|
||||||
|
pop de
|
||||||
|
ld a,32 ; width of VRAM background map
|
||||||
|
add e
|
||||||
|
ld e,a
|
||||||
|
; draw lower half
|
||||||
|
.drawHalf
|
||||||
|
ld c,10
|
||||||
|
.loop2
|
||||||
|
ld a,[hli]
|
||||||
|
ld [de],a
|
||||||
|
inc de
|
||||||
|
ld a,[hli]
|
||||||
|
ld [de],a
|
||||||
|
ld a,e
|
||||||
|
inc a
|
||||||
|
; the following 6 lines wrap us from the right edge to the left edge if necessary
|
||||||
|
and a,$1f
|
||||||
|
ld b,a
|
||||||
|
ld a,e
|
||||||
|
and a,$e0
|
||||||
|
or b
|
||||||
|
ld e,a
|
||||||
|
dec c
|
||||||
|
jr nz,.loop2
|
||||||
|
ret
|
||||||
|
|
||||||
|
; This function automatically transfers tile number data from the tile map at
|
||||||
|
; wTileMap to VRAM during V-blank. Note that it only transfers one third of the
|
||||||
|
; background per V-blank. It cycles through which third it draws.
|
||||||
|
; This transfer is turned off when walking around the map, but is turned
|
||||||
|
; on when talking to sprites, battling, using menus, etc. This is because
|
||||||
|
; the above function, RedrawExposedScreenEdge, is used when walking to
|
||||||
|
; improve efficiency.
|
||||||
|
AutoBgMapTransfer:: ; 1d57 (0:1d57)
|
||||||
|
ld a,[H_AUTOBGTRANSFERENABLED]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
ld hl,[sp + 0]
|
||||||
|
ld a,h
|
||||||
|
ld [H_SPTEMP],a
|
||||||
|
ld a,l
|
||||||
|
ld [H_SPTEMP + 1],a ; save stack pinter
|
||||||
|
ld a,[H_AUTOBGTRANSFERPORTION]
|
||||||
|
and a
|
||||||
|
jr z,.transferTopThird
|
||||||
|
dec a
|
||||||
|
jr z,.transferMiddleThird
|
||||||
|
.transferBottomThird
|
||||||
|
FuncCoord 0,12
|
||||||
|
ld hl,Coord
|
||||||
|
ld sp,hl
|
||||||
|
ld a,[H_AUTOBGTRANSFERDEST + 1]
|
||||||
|
ld h,a
|
||||||
|
ld a,[H_AUTOBGTRANSFERDEST]
|
||||||
|
ld l,a
|
||||||
|
ld de,(12 * 32)
|
||||||
|
add hl,de
|
||||||
|
xor a ; TRANSFERTOP
|
||||||
|
jr .doTransfer
|
||||||
|
.transferTopThird
|
||||||
|
FuncCoord 0,0
|
||||||
|
ld hl,Coord
|
||||||
|
ld sp,hl
|
||||||
|
ld a,[H_AUTOBGTRANSFERDEST + 1]
|
||||||
|
ld h,a
|
||||||
|
ld a,[H_AUTOBGTRANSFERDEST]
|
||||||
|
ld l,a
|
||||||
|
ld a,TRANSFERMIDDLE
|
||||||
|
jr .doTransfer
|
||||||
|
.transferMiddleThird
|
||||||
|
FuncCoord 0,6
|
||||||
|
ld hl,Coord
|
||||||
|
ld sp,hl
|
||||||
|
ld a,[H_AUTOBGTRANSFERDEST + 1]
|
||||||
|
ld h,a
|
||||||
|
ld a,[H_AUTOBGTRANSFERDEST]
|
||||||
|
ld l,a
|
||||||
|
ld de,(6 * 32)
|
||||||
|
add hl,de
|
||||||
|
ld a,TRANSFERBOTTOM
|
||||||
|
.doTransfer
|
||||||
|
ld [H_AUTOBGTRANSFERPORTION],a ; store next portion
|
||||||
|
ld b,6
|
||||||
|
|
||||||
|
TransferBgRows:: ; 1d9e (0:1d9e)
|
||||||
|
; unrolled loop and using pop for speed
|
||||||
|
|
||||||
|
rept 20 / 2 - 1
|
||||||
|
pop de
|
||||||
|
ld [hl], e
|
||||||
|
inc l
|
||||||
|
ld [hl], d
|
||||||
|
inc l
|
||||||
|
endr
|
||||||
|
|
||||||
|
pop de
|
||||||
|
ld [hl], e
|
||||||
|
inc l
|
||||||
|
ld [hl], d
|
||||||
|
|
||||||
|
i ld a, 32 - (20 - 1)
|
||||||
|
add l
|
||||||
|
ld l, a
|
||||||
|
jr nc, .ok
|
||||||
|
inc h
|
||||||
|
.ok
|
||||||
|
dec b
|
||||||
|
jr nz, TransferBgRows
|
||||||
|
|
||||||
|
ld a, [H_SPTEMP]
|
||||||
|
ld h, a
|
||||||
|
ld a, [H_SPTEMP + 1]
|
||||||
|
ld l, a
|
||||||
|
ld sp, hl
|
||||||
|
ret
|
||||||
|
|
||||||
|
; Copies [H_VBCOPYBGNUMROWS] rows from H_VBCOPYBGSRC to H_VBCOPYBGDEST.
|
||||||
|
; If H_VBCOPYBGSRC is XX00, the transfer is disabled.
|
||||||
|
VBlankCopyBgMap:: ; 1de1 (0:1de1)
|
||||||
|
ld a,[H_VBCOPYBGSRC] ; doubles as enabling byte
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
ld hl,[sp + 0]
|
||||||
|
ld a,h
|
||||||
|
ld [H_SPTEMP],a
|
||||||
|
ld a,l
|
||||||
|
ld [H_SPTEMP + 1],a ; save stack pointer
|
||||||
|
ld a,[H_VBCOPYBGSRC]
|
||||||
|
ld l,a
|
||||||
|
ld a,[H_VBCOPYBGSRC + 1]
|
||||||
|
ld h,a
|
||||||
|
ld sp,hl
|
||||||
|
ld a,[H_VBCOPYBGDEST]
|
||||||
|
ld l,a
|
||||||
|
ld a,[H_VBCOPYBGDEST + 1]
|
||||||
|
ld h,a
|
||||||
|
ld a,[H_VBCOPYBGNUMROWS]
|
||||||
|
ld b,a
|
||||||
|
xor a
|
||||||
|
ld [H_VBCOPYBGSRC],a ; disable transfer so it doesn't continue next V-blank
|
||||||
|
jr TransferBgRows
|
||||||
|
|
||||||
|
|
||||||
|
VBlankCopyDouble::
|
||||||
|
; Copy [H_VBCOPYDOUBLESIZE] 1bpp tiles
|
||||||
|
; from H_VBCOPYDOUBLESRC to H_VBCOPYDOUBLEDEST.
|
||||||
|
|
||||||
|
; While we're here, convert to 2bpp.
|
||||||
|
; The process is straightforward:
|
||||||
|
; copy each byte twice.
|
||||||
|
|
||||||
|
ld a, [H_VBCOPYDOUBLESIZE]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
|
||||||
|
ld hl, [sp + 0]
|
||||||
|
ld a, h
|
||||||
|
ld [H_SPTEMP], a
|
||||||
|
ld a, l
|
||||||
|
ld [H_SPTEMP + 1], a
|
||||||
|
|
||||||
|
ld a, [H_VBCOPYDOUBLESRC]
|
||||||
|
ld l, a
|
||||||
|
ld a, [H_VBCOPYDOUBLESRC + 1]
|
||||||
|
ld h, a
|
||||||
|
ld sp, hl
|
||||||
|
|
||||||
|
ld a, [H_VBCOPYDOUBLEDEST]
|
||||||
|
ld l, a
|
||||||
|
ld a, [H_VBCOPYDOUBLEDEST + 1]
|
||||||
|
ld h, a
|
||||||
|
|
||||||
|
ld a, [H_VBCOPYDOUBLESIZE]
|
||||||
|
ld b, a
|
||||||
|
xor a ; transferred
|
||||||
|
ld [H_VBCOPYDOUBLESIZE], a
|
||||||
|
|
||||||
|
.loop
|
||||||
|
rept 3
|
||||||
|
pop de
|
||||||
|
ld [hl], e
|
||||||
|
inc l
|
||||||
|
ld [hl], e
|
||||||
|
inc l
|
||||||
|
ld [hl], d
|
||||||
|
inc l
|
||||||
|
ld [hl], d
|
||||||
|
inc l
|
||||||
|
endr
|
||||||
|
|
||||||
|
pop de
|
||||||
|
ld [hl], e
|
||||||
|
inc l
|
||||||
|
ld [hl], e
|
||||||
|
inc l
|
||||||
|
ld [hl], d
|
||||||
|
inc l
|
||||||
|
ld [hl], d
|
||||||
|
inc hl
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
|
||||||
|
ld a, l
|
||||||
|
ld [H_VBCOPYDOUBLEDEST], a
|
||||||
|
ld a, h
|
||||||
|
ld [H_VBCOPYDOUBLEDEST + 1], a
|
||||||
|
|
||||||
|
ld hl, [sp + 0]
|
||||||
|
ld a, l
|
||||||
|
ld [H_VBCOPYDOUBLESRC], a
|
||||||
|
ld a, h
|
||||||
|
ld [H_VBCOPYDOUBLESRC + 1], a
|
||||||
|
|
||||||
|
ld a, [H_SPTEMP]
|
||||||
|
ld h, a
|
||||||
|
ld a, [H_SPTEMP + 1]
|
||||||
|
ld l, a
|
||||||
|
ld sp, hl
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
VBlankCopy::
|
||||||
|
; Copy [H_VBCOPYSIZE] 2bpp tiles
|
||||||
|
; from H_VBCOPYSRC to H_VBCOPYDEST.
|
||||||
|
|
||||||
|
; Source and destination addresses
|
||||||
|
; are updated, so transfer can
|
||||||
|
; continue in subsequent calls.
|
||||||
|
|
||||||
|
ld a, [H_VBCOPYSIZE]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
|
||||||
|
ld hl, [sp + 0]
|
||||||
|
ld a, h
|
||||||
|
ld [H_SPTEMP], a
|
||||||
|
ld a, l
|
||||||
|
ld [H_SPTEMP + 1], a
|
||||||
|
|
||||||
|
ld a, [H_VBCOPYSRC]
|
||||||
|
ld l, a
|
||||||
|
ld a, [H_VBCOPYSRC + 1]
|
||||||
|
ld h, a
|
||||||
|
ld sp, hl
|
||||||
|
|
||||||
|
ld a, [H_VBCOPYDEST]
|
||||||
|
ld l, a
|
||||||
|
ld a, [H_VBCOPYDEST + 1]
|
||||||
|
ld h, a
|
||||||
|
|
||||||
|
ld a, [H_VBCOPYSIZE]
|
||||||
|
ld b, a
|
||||||
|
xor a ; transferred
|
||||||
|
ld [H_VBCOPYSIZE], a
|
||||||
|
|
||||||
|
.loop
|
||||||
|
rept 7
|
||||||
|
pop de
|
||||||
|
ld [hl], e
|
||||||
|
inc l
|
||||||
|
ld [hl], d
|
||||||
|
inc l
|
||||||
|
endr
|
||||||
|
|
||||||
|
pop de
|
||||||
|
ld [hl], e
|
||||||
|
inc l
|
||||||
|
ld [hl], d
|
||||||
|
inc hl
|
||||||
|
dec b
|
||||||
|
jr nz, .loop
|
||||||
|
|
||||||
|
ld a, l
|
||||||
|
ld [H_VBCOPYDEST], a
|
||||||
|
ld a, h
|
||||||
|
ld [H_VBCOPYDEST + 1], a
|
||||||
|
|
||||||
|
ld hl, [sp + 0]
|
||||||
|
ld a, l
|
||||||
|
ld [H_VBCOPYSRC], a
|
||||||
|
ld a, h
|
||||||
|
ld [H_VBCOPYSRC + 1], a
|
||||||
|
|
||||||
|
ld a, [H_SPTEMP]
|
||||||
|
ld h, a
|
||||||
|
ld a, [H_SPTEMP + 1]
|
||||||
|
ld l, a
|
||||||
|
ld sp, hl
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
UpdateMovingBgTiles::
|
||||||
|
; Animate water and flower
|
||||||
|
; tiles in the overworld.
|
||||||
|
|
||||||
|
ld a, [$ffd7]
|
||||||
|
and a
|
||||||
|
ret z
|
||||||
|
|
||||||
|
ld a, [$ffd8]
|
||||||
|
inc a
|
||||||
|
ld [$ffd8], a
|
||||||
|
cp $14
|
||||||
|
ret c
|
||||||
|
cp $15
|
||||||
|
jr z, .flower
|
||||||
|
|
||||||
|
ld hl, vTileset + $14 * $10
|
||||||
|
ld c, $10
|
||||||
|
|
||||||
|
ld a, [wd085]
|
||||||
|
inc a
|
||||||
|
and 7
|
||||||
|
ld [wd085], a
|
||||||
|
|
||||||
|
and 4
|
||||||
|
jr nz, .left
|
||||||
|
.right
|
||||||
|
ld a, [hl]
|
||||||
|
rrca
|
||||||
|
ld [hli], a
|
||||||
|
dec c
|
||||||
|
jr nz, .right
|
||||||
|
jr .done
|
||||||
|
.left
|
||||||
|
ld a, [hl]
|
||||||
|
rlca
|
||||||
|
ld [hli], a
|
||||||
|
dec c
|
||||||
|
jr nz, .left
|
||||||
|
.done
|
||||||
|
ld a, [$ffd7]
|
||||||
|
rrca
|
||||||
|
ret nc
|
||||||
|
xor a
|
||||||
|
ld [$ffd8], a
|
||||||
|
ret
|
||||||
|
|
||||||
|
.flower
|
||||||
|
xor a
|
||||||
|
ld [$ffd8], a
|
||||||
|
|
||||||
|
ld a, [wd085]
|
||||||
|
and 3
|
||||||
|
cp 2
|
||||||
|
ld hl, FlowerTile1
|
||||||
|
jr c, .copy
|
||||||
|
ld hl, FlowerTile2
|
||||||
|
jr z, .copy
|
||||||
|
ld hl, FlowerTile3
|
||||||
|
.copy
|
||||||
|
ld de, vTileset + $3 * $10
|
||||||
|
ld c, $10
|
||||||
|
.loop
|
||||||
|
ld a, [hli]
|
||||||
|
ld [de], a
|
||||||
|
inc de
|
||||||
|
dec c
|
||||||
|
jr nz, .loop
|
||||||
|
ret
|
||||||
|
|
||||||
|
FlowerTile1: INCBIN "gfx/tilesets/flower/flower1.2bpp"
|
||||||
|
FlowerTile2: INCBIN "gfx/tilesets/flower/flower2.2bpp"
|
||||||
|
FlowerTile3: INCBIN "gfx/tilesets/flower/flower3.2bpp"
|
||||||
106
main.asm
106
main.asm
|
|
@ -1,5 +1,16 @@
|
||||||
INCLUDE "constants.asm"
|
INCLUDE "constants.asm"
|
||||||
|
|
||||||
|
NPC_SPRITES_1 EQU $4
|
||||||
|
NPC_SPRITES_2 EQU $5
|
||||||
|
|
||||||
|
GFX EQU $4
|
||||||
|
|
||||||
|
PICS_1 EQU $9
|
||||||
|
PICS_2 EQU $A
|
||||||
|
PICS_3 EQU $B
|
||||||
|
PICS_4 EQU $C
|
||||||
|
PICS_5 EQU $D
|
||||||
|
|
||||||
|
|
||||||
INCLUDE "home.asm"
|
INCLUDE "home.asm"
|
||||||
|
|
||||||
|
|
@ -1940,57 +1951,7 @@ Func_7c18: ; 7c18 (1:7c18)
|
||||||
|
|
||||||
SECTION "bank3",ROMX,BANK[$3]
|
SECTION "bank3",ROMX,BANK[$3]
|
||||||
|
|
||||||
_Joypad::
|
INCLUDE "engine/joypad.asm"
|
||||||
ld a, [hJoyInput]
|
|
||||||
cp A_BUTTON + B_BUTTON + SELECT + START ; soft reset
|
|
||||||
jp z, TrySoftReset
|
|
||||||
ld b, a
|
|
||||||
ld a, [hJoyHeldLast]
|
|
||||||
ld e, a
|
|
||||||
xor b
|
|
||||||
ld d, a
|
|
||||||
and e
|
|
||||||
ld [hJoyReleased], a
|
|
||||||
ld a, d
|
|
||||||
and b
|
|
||||||
ld [hJoyPressed], a
|
|
||||||
ld a, b
|
|
||||||
ld [hJoyHeldLast], a
|
|
||||||
ld a, [wd730]
|
|
||||||
bit 5, a
|
|
||||||
jr nz, DiscardButtonPresses
|
|
||||||
ld a, [hJoyHeldLast]
|
|
||||||
ld [hJoyHeld], a
|
|
||||||
ld a, [wJoyIgnore]
|
|
||||||
and a
|
|
||||||
ret z
|
|
||||||
cpl
|
|
||||||
ld b, a
|
|
||||||
ld a, [hJoyHeld]
|
|
||||||
and b
|
|
||||||
ld [hJoyHeld], a
|
|
||||||
ld a, [hJoyPressed]
|
|
||||||
and b
|
|
||||||
ld [hJoyPressed], a
|
|
||||||
ret
|
|
||||||
|
|
||||||
DiscardButtonPresses:
|
|
||||||
xor a
|
|
||||||
ld [hJoyHeld], a
|
|
||||||
ld [hJoyPressed], a
|
|
||||||
ld [hJoyReleased], a
|
|
||||||
ret
|
|
||||||
|
|
||||||
TrySoftReset:
|
|
||||||
call DelayFrame
|
|
||||||
; reset joypad (to make sure the
|
|
||||||
; player is really trying to reset)
|
|
||||||
ld a, $30
|
|
||||||
ld [rJOYP], a
|
|
||||||
ld hl, hSoftReset
|
|
||||||
dec [hl]
|
|
||||||
jp z, SoftReset
|
|
||||||
jp Joypad
|
|
||||||
|
|
||||||
INCLUDE "data/map_songs.asm"
|
INCLUDE "data/map_songs.asm"
|
||||||
|
|
||||||
|
|
@ -4657,7 +4618,7 @@ INCLUDE "engine/hp_bar.asm"
|
||||||
INCLUDE "engine/hidden_object_functions3.asm"
|
INCLUDE "engine/hidden_object_functions3.asm"
|
||||||
|
|
||||||
|
|
||||||
SECTION "bank4",ROMX,BANK[$4]
|
SECTION "NPC Sprites 1", ROMX, BANK[NPC_SPRITES_1]
|
||||||
|
|
||||||
OakAideSprite: INCBIN "gfx/sprites/oak_aide.2bpp"
|
OakAideSprite: INCBIN "gfx/sprites/oak_aide.2bpp"
|
||||||
RockerSprite: INCBIN "gfx/sprites/rocker.2bpp"
|
RockerSprite: INCBIN "gfx/sprites/rocker.2bpp"
|
||||||
|
|
@ -4687,6 +4648,9 @@ SnorlaxSprite: INCBIN "gfx/sprites/snorlax.2bpp"
|
||||||
OldAmberSprite: INCBIN "gfx/sprites/old_amber.2bpp"
|
OldAmberSprite: INCBIN "gfx/sprites/old_amber.2bpp"
|
||||||
LyingOldManSprite: INCBIN "gfx/sprites/lying_old_man.2bpp"
|
LyingOldManSprite: INCBIN "gfx/sprites/lying_old_man.2bpp"
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Graphics", ROMX, BANK[GFX]
|
||||||
|
|
||||||
PokemonLogoGraphics: INCBIN "gfx/pokemon_logo.2bpp"
|
PokemonLogoGraphics: INCBIN "gfx/pokemon_logo.2bpp"
|
||||||
FontGraphics: INCBIN "gfx/font.1bpp"
|
FontGraphics: INCBIN "gfx/font.1bpp"
|
||||||
ABTiles: INCBIN "gfx/AB.2bpp"
|
ABTiles: INCBIN "gfx/AB.2bpp"
|
||||||
|
|
@ -4701,6 +4665,9 @@ PokedexTileGraphics: INCBIN "gfx/pokedex.2bpp"
|
||||||
WorldMapTileGraphics: INCBIN "gfx/town_map.2bpp"
|
WorldMapTileGraphics: INCBIN "gfx/town_map.2bpp"
|
||||||
PlayerCharacterTitleGraphics: INCBIN "gfx/player_title.2bpp"
|
PlayerCharacterTitleGraphics: INCBIN "gfx/player_title.2bpp"
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Battle (bank 4)", ROMX, BANK[$4]
|
||||||
|
|
||||||
INCLUDE "engine/battle/4.asm"
|
INCLUDE "engine/battle/4.asm"
|
||||||
INCLUDE "engine/menu/status_screen.asm"
|
INCLUDE "engine/menu/status_screen.asm"
|
||||||
INCLUDE "engine/menu/party_menu.asm"
|
INCLUDE "engine/menu/party_menu.asm"
|
||||||
|
|
@ -4710,17 +4677,13 @@ ShrinkPic1:: INCBIN "pic/trainer/shrink1.pic"
|
||||||
ShrinkPic2:: INCBIN "pic/trainer/shrink2.pic"
|
ShrinkPic2:: INCBIN "pic/trainer/shrink2.pic"
|
||||||
|
|
||||||
INCLUDE "engine/turn_sprite.asm"
|
INCLUDE "engine/turn_sprite.asm"
|
||||||
|
|
||||||
INCLUDE "engine/menu/start_sub_menus.asm"
|
INCLUDE "engine/menu/start_sub_menus.asm"
|
||||||
|
|
||||||
INCLUDE "engine/items/tms.asm"
|
INCLUDE "engine/items/tms.asm"
|
||||||
|
|
||||||
INCLUDE "engine/battle/4_2.asm"
|
INCLUDE "engine/battle/4_2.asm"
|
||||||
|
|
||||||
INCLUDE "engine/random.asm"
|
INCLUDE "engine/random.asm"
|
||||||
|
|
||||||
|
|
||||||
SECTION "bank5",ROMX,BANK[$5]
|
SECTION "NPC Sprites 2", ROMX, BANK[NPC_SPRITES_2]
|
||||||
|
|
||||||
RedCyclingSprite: INCBIN "gfx/sprites/cycling.2bpp"
|
RedCyclingSprite: INCBIN "gfx/sprites/cycling.2bpp"
|
||||||
RedSprite: INCBIN "gfx/sprites/red.2bpp"
|
RedSprite: INCBIN "gfx/sprites/red.2bpp"
|
||||||
|
|
@ -4763,15 +4726,14 @@ BrunoSprite: INCBIN "gfx/sprites/bruno.2bpp"
|
||||||
LoreleiSprite: INCBIN "gfx/sprites/lorelei.2bpp"
|
LoreleiSprite: INCBIN "gfx/sprites/lorelei.2bpp"
|
||||||
SeelSprite: INCBIN "gfx/sprites/seel.2bpp"
|
SeelSprite: INCBIN "gfx/sprites/seel.2bpp"
|
||||||
|
|
||||||
INCLUDE "engine/load_pokedex_tiles.asm"
|
|
||||||
|
|
||||||
|
SECTION "Battle (bank 5)", ROMX, BANK[$5]
|
||||||
|
|
||||||
|
INCLUDE "engine/load_pokedex_tiles.asm"
|
||||||
INCLUDE "engine/overworld/map_sprites.asm"
|
INCLUDE "engine/overworld/map_sprites.asm"
|
||||||
INCLUDE "engine/overworld/emotion_bubbles.asm"
|
INCLUDE "engine/overworld/emotion_bubbles.asm"
|
||||||
|
|
||||||
INCLUDE "engine/evolve_trade.asm"
|
INCLUDE "engine/evolve_trade.asm"
|
||||||
|
|
||||||
INCLUDE "engine/battle/5.asm"
|
INCLUDE "engine/battle/5.asm"
|
||||||
|
|
||||||
INCLUDE "engine/menu/pc.asm"
|
INCLUDE "engine/menu/pc.asm"
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -5031,7 +4993,7 @@ INCLUDE "engine/menu/oaks_pc.asm"
|
||||||
INCLUDE "engine/hidden_object_functions7.asm"
|
INCLUDE "engine/hidden_object_functions7.asm"
|
||||||
|
|
||||||
|
|
||||||
SECTION "bank9",ROMX,BANK[$9]
|
SECTION "Pics 1", ROMX, BANK[PICS_1]
|
||||||
|
|
||||||
RhydonPicFront:: INCBIN "pic/bmon/rhydon.pic"
|
RhydonPicFront:: INCBIN "pic/bmon/rhydon.pic"
|
||||||
RhydonPicBack:: INCBIN "pic/monback/rhydonb.pic"
|
RhydonPicBack:: INCBIN "pic/monback/rhydonb.pic"
|
||||||
|
|
@ -5092,10 +5054,12 @@ PinsirPicBack:: INCBIN "pic/monback/pinsirb.pic"
|
||||||
TangelaPicFront:: INCBIN "pic/bmon/tangela.pic"
|
TangelaPicFront:: INCBIN "pic/bmon/tangela.pic"
|
||||||
TangelaPicBack:: INCBIN "pic/monback/tangelab.pic"
|
TangelaPicBack:: INCBIN "pic/monback/tangelab.pic"
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Battle (bank 9)", ROMX, BANK[$9]
|
||||||
INCLUDE "engine/battle/9.asm"
|
INCLUDE "engine/battle/9.asm"
|
||||||
|
|
||||||
|
|
||||||
SECTION "bankA",ROMX,BANK[$A]
|
SECTION "Pics 2", ROMX, BANK[PICS_2]
|
||||||
|
|
||||||
GrowlithePicFront:: INCBIN "pic/bmon/growlithe.pic"
|
GrowlithePicFront:: INCBIN "pic/bmon/growlithe.pic"
|
||||||
GrowlithePicBack:: INCBIN "pic/monback/growlitheb.pic"
|
GrowlithePicBack:: INCBIN "pic/monback/growlitheb.pic"
|
||||||
|
|
@ -5162,10 +5126,12 @@ JynxPicBack:: INCBIN "pic/monback/jynxb.pic"
|
||||||
MoltresPicFront:: INCBIN "pic/bmon/moltres.pic"
|
MoltresPicFront:: INCBIN "pic/bmon/moltres.pic"
|
||||||
MoltresPicBack:: INCBIN "pic/monback/moltresb.pic"
|
MoltresPicBack:: INCBIN "pic/monback/moltresb.pic"
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Battle (bank A)", ROMX, BANK[$A]
|
||||||
INCLUDE "engine/battle/a.asm"
|
INCLUDE "engine/battle/a.asm"
|
||||||
|
|
||||||
|
|
||||||
SECTION "bankB",ROMX,BANK[$B]
|
SECTION "Pics 3", ROMX, BANK[PICS_3]
|
||||||
|
|
||||||
ArticunoPicFront:: INCBIN "pic/bmon/articuno.pic"
|
ArticunoPicFront:: INCBIN "pic/bmon/articuno.pic"
|
||||||
ArticunoPicBack:: INCBIN "pic/monback/articunob.pic"
|
ArticunoPicBack:: INCBIN "pic/monback/articunob.pic"
|
||||||
|
|
@ -5238,6 +5204,9 @@ BeedrillPicBack:: INCBIN "pic/monback/beedrillb.pic"
|
||||||
|
|
||||||
FossilKabutopsPic:: INCBIN "pic/bmon/fossilkabutops.pic"
|
FossilKabutopsPic:: INCBIN "pic/bmon/fossilkabutops.pic"
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Battle (bank B)", ROMX, BANK[$B]
|
||||||
|
|
||||||
INCLUDE "engine/battle/b.asm"
|
INCLUDE "engine/battle/b.asm"
|
||||||
|
|
||||||
TrainerInfoTextBoxTileGraphics: INCBIN "gfx/trainer_info.2bpp"
|
TrainerInfoTextBoxTileGraphics: INCBIN "gfx/trainer_info.2bpp"
|
||||||
|
|
@ -5250,7 +5219,7 @@ INCLUDE "engine/battle/b_2.asm"
|
||||||
INCLUDE "engine/game_corner_slots2.asm"
|
INCLUDE "engine/game_corner_slots2.asm"
|
||||||
|
|
||||||
|
|
||||||
SECTION "bankC",ROMX,BANK[$C]
|
SECTION "Pics 4", ROMX, BANK[PICS_4]
|
||||||
|
|
||||||
DodrioPicFront:: INCBIN "pic/bmon/dodrio.pic"
|
DodrioPicFront:: INCBIN "pic/bmon/dodrio.pic"
|
||||||
DodrioPicBack:: INCBIN "pic/monback/dodriob.pic"
|
DodrioPicBack:: INCBIN "pic/monback/dodriob.pic"
|
||||||
|
|
@ -5314,10 +5283,12 @@ StarmiePicBack:: INCBIN "pic/monback/starmieb.pic"
|
||||||
RedPicBack:: INCBIN "pic/trainer/redb.pic"
|
RedPicBack:: INCBIN "pic/trainer/redb.pic"
|
||||||
OldManPic:: INCBIN "pic/trainer/oldman.pic"
|
OldManPic:: INCBIN "pic/trainer/oldman.pic"
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Battle (bank C)", ROMX, BANK[$C]
|
||||||
INCLUDE "engine/battle/c.asm"
|
INCLUDE "engine/battle/c.asm"
|
||||||
|
|
||||||
|
|
||||||
SECTION "bankD",ROMX,BANK[$D]
|
SECTION "Pics 5", ROMX, BANK[PICS_5]
|
||||||
|
|
||||||
BulbasaurPicFront:: INCBIN "pic/bmon/bulbasaur.pic"
|
BulbasaurPicFront:: INCBIN "pic/bmon/bulbasaur.pic"
|
||||||
BulbasaurPicBack:: INCBIN "pic/monback/bulbasaurb.pic"
|
BulbasaurPicBack:: INCBIN "pic/monback/bulbasaurb.pic"
|
||||||
|
|
@ -5374,6 +5345,9 @@ WeepinbellPicBack:: INCBIN "pic/monback/weepinbellb.pic"
|
||||||
VictreebelPicFront:: INCBIN "pic/bmon/victreebel.pic"
|
VictreebelPicFront:: INCBIN "pic/bmon/victreebel.pic"
|
||||||
VictreebelPicBack:: INCBIN "pic/monback/victreebelb.pic"
|
VictreebelPicBack:: INCBIN "pic/monback/victreebelb.pic"
|
||||||
|
|
||||||
|
|
||||||
|
SECTION "Battle (bank D)", ROMX, BANK[$D]
|
||||||
|
|
||||||
INCLUDE "engine/titlescreen2.asm"
|
INCLUDE "engine/titlescreen2.asm"
|
||||||
INCLUDE "engine/battle/d.asm"
|
INCLUDE "engine/battle/d.asm"
|
||||||
INCLUDE "engine/slot_machine.asm"
|
INCLUDE "engine/slot_machine.asm"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue