mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-11-14 17:16:42 +13:00
Merge branch 'master' of https://github.com/yenatch/pokered
This commit is contained in:
commit
d266f788b4
2
Makefile
2
Makefile
|
|
@ -50,7 +50,7 @@ $(all_obj): $$*.tx $$(patsubst %.asm, %.tx, $$($$*_dep))
|
|||
@$(gfx) 2bpp $(2bppq); $(eval 2bppq :=)
|
||||
@$(gfx) 1bpp $(1bppq); $(eval 1bppq :=)
|
||||
@$(pic) compress $(picq); $(eval picq :=)
|
||||
rgbasm -o $@ $*.tx
|
||||
rgbasm -h -o $@ $*.tx
|
||||
|
||||
|
||||
link := rgblink -n $*.sym -m $*.map
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ STARYU EQU $1B
|
|||
BLASTOISE EQU $1C
|
||||
PINSIR EQU $1D
|
||||
TANGELA EQU $1E
|
||||
|
||||
|
||||
GROWLITHE EQU $21
|
||||
ONIX EQU $22
|
||||
FEAROW EQU $23
|
||||
|
|
@ -45,17 +47,26 @@ PARASECT EQU $2E
|
|||
PSYDUCK EQU $2F
|
||||
DROWZEE EQU $30
|
||||
GOLEM EQU $31
|
||||
|
||||
MAGMAR EQU $33
|
||||
|
||||
ELECTABUZZ EQU $35
|
||||
MAGNETON EQU $36
|
||||
KOFFING EQU $37
|
||||
|
||||
MANKEY EQU $39
|
||||
SEEL EQU $3A
|
||||
DIGLETT EQU $3B
|
||||
TAUROS EQU $3C
|
||||
|
||||
|
||||
|
||||
FARFETCH_D EQU $40
|
||||
VENONAT EQU $41
|
||||
DRAGONITE EQU $42
|
||||
|
||||
|
||||
|
||||
DODUO EQU $46
|
||||
POLIWAG EQU $47
|
||||
JYNX EQU $48
|
||||
|
|
@ -65,16 +76,23 @@ ZAPDOS EQU $4B
|
|||
DITTO EQU $4C
|
||||
MEOWTH EQU $4D
|
||||
KRABBY EQU $4E
|
||||
|
||||
|
||||
|
||||
VULPIX EQU $52
|
||||
NINETALES EQU $53
|
||||
PIKACHU EQU $54
|
||||
RAICHU EQU $55
|
||||
|
||||
|
||||
DRATINI EQU $58
|
||||
DRAGONAIR EQU $59
|
||||
KABUTO EQU $5A
|
||||
KABUTOPS EQU $5B
|
||||
HORSEA EQU $5C
|
||||
SEADRA EQU $5D
|
||||
|
||||
|
||||
SANDSHREW EQU $60
|
||||
SANDSLASH EQU $61
|
||||
OMANYTE EQU $62
|
||||
|
|
@ -94,29 +112,38 @@ POLIWRATH EQU $6F
|
|||
WEEDLE EQU $70
|
||||
KAKUNA EQU $71
|
||||
BEEDRILL EQU $72
|
||||
|
||||
DODRIO EQU $74
|
||||
PRIMEAPE EQU $75
|
||||
DUGTRIO EQU $76
|
||||
VENOMOTH EQU $77
|
||||
DEWGONG EQU $78
|
||||
|
||||
|
||||
CATERPIE EQU $7B
|
||||
METAPOD EQU $7C
|
||||
BUTTERFREE EQU $7D
|
||||
MACHAMP EQU $7E
|
||||
|
||||
GOLDUCK EQU $80
|
||||
HYPNO EQU $81
|
||||
GOLBAT EQU $82
|
||||
MEWTWO EQU $83
|
||||
SNORLAX EQU $84
|
||||
MAGIKARP EQU $85
|
||||
|
||||
|
||||
MUK EQU $88
|
||||
|
||||
KINGLER EQU $8A
|
||||
CLOYSTER EQU $8B
|
||||
|
||||
ELECTRODE EQU $8D
|
||||
CLEFABLE EQU $8E
|
||||
WEEZING EQU $8F
|
||||
PERSIAN EQU $90
|
||||
MAROWAK EQU $91
|
||||
|
||||
HAUNTER EQU $93
|
||||
ABRA EQU $94
|
||||
ALAKAZAM EQU $95
|
||||
|
|
@ -126,8 +153,13 @@ STARMIE EQU $98
|
|||
BULBASAUR EQU $99
|
||||
VENUSAUR EQU $9A
|
||||
TENTACRUEL EQU $9B
|
||||
|
||||
GOLDEEN EQU $9D
|
||||
SEAKING EQU $9E
|
||||
|
||||
|
||||
|
||||
|
||||
PONYTA EQU $A3
|
||||
RAPIDASH EQU $A4
|
||||
RATTATA EQU $A5
|
||||
|
|
@ -137,12 +169,16 @@ NIDORINA EQU $A8
|
|||
GEODUDE EQU $A9
|
||||
PORYGON EQU $AA
|
||||
AERODACTYL EQU $AB
|
||||
|
||||
MAGNEMITE EQU $AD
|
||||
|
||||
|
||||
CHARMANDER EQU $B0
|
||||
SQUIRTLE EQU $B1
|
||||
CHARMELEON EQU $B2
|
||||
WARTORTLE EQU $B3
|
||||
CHARIZARD EQU $B4
|
||||
|
||||
FOSSIL_KABUTOPS EQU $B6
|
||||
FOSSIL_AERODACTYL EQU $B7
|
||||
MON_GHOST EQU $B8
|
||||
|
|
@ -151,4 +187,4 @@ GLOOM EQU $BA
|
|||
VILEPLUME EQU $BB
|
||||
BELLSPROUT EQU $BC
|
||||
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)
|
||||
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
|
||||
|
||||
BlkPacket_Battle: ; 721b5 (1c:61b5)
|
||||
db $22,$05,$07,$0a,$00,$0c,$13,$11,$03,$05,$01,$00,$0a,$03,$03,$00
|
||||
db $0a,$07,$13,$0a,$03,$0a,$00,$04,$08,$0b,$03,$0f,$0b,$00,$13,$06
|
||||
db $03,$00,$00,$13,$0b,$00,$03,$00,$0c,$13,$11,$02,$03,$01,$00,$0a
|
||||
db $03,$01,$03,$0a,$08,$13,$0a,$00,$03,$00,$04,$08,$0b,$02,$03,$0b
|
||||
db $00,$13,$07,$03,$00
|
||||
ATTR_BLK 5
|
||||
ATTR_BLK_DATA %111, 2,2,0, 00,12, 19,17
|
||||
ATTR_BLK_DATA %011, 1,1,0, 01,00, 10,03
|
||||
ATTR_BLK_DATA %011, 0,0,0, 10,07, 19,10
|
||||
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)
|
||||
db $21,$01,$07,$05,$01,$00,$07,$06,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
db $02,$00,$00,$11,$00,$03,$01,$00,$07,$06,$01,$03,$01,$07,$13,$11
|
||||
db $00,$03,$08,$00,$13,$06,$00,$00
|
||||
ATTR_BLK 1
|
||||
ATTR_BLK_DATA %111, 1,1,0, 01,00, 07,06
|
||||
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)
|
||||
db $21,$01,$07,$05,$01,$01,$08,$08,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
db $02,$00,$00,$11,$00,$01,$00,$01,$13,$00,$03,$01,$01,$08,$08,$01
|
||||
db $03,$01,$09,$08,$11,$00,$03,$09,$01,$13,$11,$00,$00
|
||||
ATTR_BLK 1
|
||||
ATTR_BLK_DATA %111, 1,1,0, 01,01, 08,08
|
||||
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)
|
||||
db $22,$05,$03,$05,$00,$00,$13,$0b,$03,$0a,$00,$04,$13,$09,$02,$0f
|
||||
db $00,$06,$13,$07,$03,$00,$04,$04,$0f,$09,$03,$00,$00,$0c,$13,$11
|
||||
db $03,$00,$00,$13,$0b,$01,$03,$00,$04,$13,$09,$02,$03,$00,$06,$13
|
||||
db $07,$03,$03,$04,$04,$0f,$09,$00,$03,$00,$0c,$13,$11,$00,$00
|
||||
ATTR_BLK 5
|
||||
ATTR_BLK_DATA %011, 1,1,0, 00,00, 19,11
|
||||
ATTR_BLK_DATA %011, 2,2,0, 00,04, 19,09
|
||||
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)
|
||||
db $22,$03,$03,$00,$00,$00,$13,$07,$02,$05,$00,$08,$13,$09,$03,$0a
|
||||
db $00,$0a,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
db $03,$00,$00,$13,$07,$00,$03,$00,$08,$13,$09,$01,$03,$00,$0a,$13
|
||||
db $11,$02,$00
|
||||
ATTR_BLK 3
|
||||
ATTR_BLK_DATA %011, 0,0,0, 00,00, 19,07
|
||||
ATTR_BLK_DATA %010, 1,1,0, 00,08, 19,09
|
||||
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)
|
||||
db $22,$03,$03,$05,$00,$00,$13,$03,$03,$00,$00,$04,$13,$0d,$03,$05
|
||||
db $00,$0e,$13,$11,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
db $03,$00,$00,$13,$03,$01,$03,$00,$04,$13,$0d,$00,$03,$00,$0e,$13
|
||||
db $11,$01,$00
|
||||
ATTR_BLK 3
|
||||
ATTR_BLK_DATA %011, 1,1,0, 00,00, 19,03
|
||||
ATTR_BLK_DATA %011, 0,0,0, 00,04, 19,13
|
||||
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)
|
||||
db $23,$07,$06,$10,$01,$00,$02,$0c,$02,$00,$05,$01,$0b,$01,$02,$00
|
||||
db $05,$03,$0b,$03,$02,$00,$05,$05,$0b,$05,$02,$00,$05,$07,$0b,$07
|
||||
db $02,$00,$05,$09,$0b,$09,$02,$00,$05,$0b,$0b,$0b,$00,$00,$00,$00
|
||||
db $02,$00,$00,$11,$01,$03,$01,$00,$02,$0c,$00,$03,$01,$0d,$02,$11
|
||||
db $01,$03,$03,$00,$13,$11,$01,$03,$0c,$00,$12,$01,$00,$03,$0c,$02
|
||||
db $12,$03,$00,$03,$0c,$04,$12,$05,$00,$03,$0c,$06,$12,$07,$00,$03
|
||||
db $0c,$08,$12,$09,$00,$03,$0c,$0a,$12,$0b,$00,$00
|
||||
ATTR_BLK 7
|
||||
ATTR_BLK_DATA %110, 0,0,1, 01,00, 02,12
|
||||
ATTR_BLK_DATA %010, 0,0,0, 05,01, 11,01
|
||||
ATTR_BLK_DATA %010, 0,0,0, 05,03, 11,03
|
||||
ATTR_BLK_DATA %010, 0,0,0, 05,05, 11,05
|
||||
ATTR_BLK_DATA %010, 0,0,0, 05,07, 11,07
|
||||
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)
|
||||
db $24,$0a,$02,$00,$03,$0c,$04,$0d,$02,$05,$07,$0c,$08,$0d,$02,$0f
|
||||
db $0b,$0c,$0c,$0d,$02,$0a,$10,$0b,$11,$0c,$02,$05,$0e,$0d,$0f,$0e
|
||||
db $02,$0f,$10,$0d,$11,$0e,$02,$0a,$03,$0f,$04,$10,$02,$0f,$07,$0f
|
||||
db $08,$10,$02,$0a,$0b,$0f,$0c,$10,$02,$05,$0f,$0f,$10,$10,$00,$00
|
||||
db $03,$03,$0c,$04,$0d,$00,$03,$07,$0c,$08,$0d,$01,$03,$0b,$0c,$0c
|
||||
db $0d,$03,$03,$10,$0b,$11,$0c,$02,$03,$0e,$0d,$0f,$0e,$01,$03,$10
|
||||
db $0d,$11,$0e,$03,$03,$03,$0f,$04,$10,$02,$03,$07,$0f,$08,$10,$03
|
||||
db $03,$0b,$0f,$0c,$10,$02,$03,$0f,$0f,$10,$10,$01,$00
|
||||
ATTR_BLK 10
|
||||
ATTR_BLK_DATA %010, 0,0,0, 03,12, 04,13
|
||||
ATTR_BLK_DATA %010, 1,1,0, 07,12, 08,13
|
||||
ATTR_BLK_DATA %010, 3,3,0, 11,12, 12,13
|
||||
ATTR_BLK_DATA %010, 2,2,0, 16,11, 17,12
|
||||
ATTR_BLK_DATA %010, 1,1,0, 14,13, 15,14
|
||||
ATTR_BLK_DATA %010, 3,3,0, 16,13, 17,14
|
||||
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)
|
||||
db $22,$03,$07,$05,$05,$0b,$07,$0d,$02,$0a,$08,$0b,$09,$0d,$03,$0f
|
||||
db $0c,$0b,$0e,$0d,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
db $03,$00,$00,$13,$0a,$00,$03,$00,$0b,$04,$0d,$00,$03,$05,$0b,$07
|
||||
db $0d,$01,$03,$08,$0b,$13,$0d,$00,$03,$00,$0e,$13,$11,$00,$03,$08
|
||||
db $0b,$09,$0d,$02,$03,$0c,$0b,$0e,$0d,$03,$00
|
||||
ATTR_BLK 3
|
||||
ATTR_BLK_DATA %111, 1,1,0, 05,11, 07,13
|
||||
ATTR_BLK_DATA %010, 2,2,0, 08,11, 09,13
|
||||
ATTR_BLK_DATA %011, 3,3,0, 12,11, 14,13
|
||||
ds 12
|
||||
|
||||
PalPacket_Empty: ; 72428 (1c:6428)
|
||||
db $51,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
db $03,$00,$00,$13,$0a,$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)
|
||||
db $51,PAL_BLACK,$00,PAL_BLACK,$00,PAL_BLACK,$00,PAL_BLACK,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
PalPacket_Empty: PAL_SET 0, 0, 0, 0
|
||||
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)
|
||||
db $51,PAL_TOWNMAP,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
PalTrnPacket: PAL_TRN
|
||||
MltReq1Packet: MLT_REQ 1
|
||||
MltReq2Packet: MLT_REQ 2
|
||||
ChrTrnPacket: CHR_TRN 0, 0
|
||||
PctTrnPacket: PCT_TRN
|
||||
|
||||
PalPacket_Pokedex: ; 72468 (1c:6468)
|
||||
db $51,PAL_BROWNMON,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
MaskEnFreezePacket: MASK_EN 1
|
||||
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)
|
||||
db $51,PAL_LOGO2,$00,PAL_LOGO1,$00,PAL_MEWMON,$00,PAL_PURPLEMON,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
; These are DATA_SND packets containing SNES code.
|
||||
; 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)
|
||||
db $51,PAL_MEWMON,$00,PAL_BADGE,$00,PAL_REDMON,$00,PAL_YELLOWMON,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DataSnd_72548: DATA_SND $85d, $0, 11
|
||||
db $8C ; cpx #$8c (2)
|
||||
db $D0, $F4 ; bne -$0c
|
||||
db $60 ; rts
|
||||
ds 7
|
||||
|
||||
PalPacket_Generic: ; 724a8 (1c:64a8)
|
||||
db $51,PAL_MEWMON,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DataSnd_72558: DATA_SND $852, $0, 11
|
||||
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)
|
||||
db $51,PAL_PURPLEMON,$00,PAL_BLACK,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DataSnd_72568: DATA_SND $847, $0, 11
|
||||
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)
|
||||
db $51,PAL_GAMEFREAK,$00,PAL_REDMON,$00,PAL_VIRIDIAN,$00,PAL_BLUEMON,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DataSnd_72578: DATA_SND $83c, $0, 11
|
||||
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)
|
||||
db $59,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DataSnd_72588: DATA_SND $831, $0, 11
|
||||
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)
|
||||
db $89,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DataSnd_72598: DATA_SND $826, $0, 11
|
||||
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)
|
||||
db $89,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
DataSnd_725a8: DATA_SND $81b, $0, 11
|
||||
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)
|
||||
db $99,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
|
||||
PalPacket_72518: ; 72518 (1c:6518)
|
||||
db $A1,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
|
||||
PalPacket_72528: ; 72528 (1c:6528)
|
||||
db $B9,$01,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
|
||||
PalPacket_72538: ; 72538 (1c:6538)
|
||||
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
|
||||
DataSnd_725b8: DATA_SND $810, $0, 11
|
||||
dbw $4C, $820 ; jmp $820
|
||||
db $EA ; nop
|
||||
db $EA ; nop
|
||||
db $EA ; nop
|
||||
db $EA ; nop
|
||||
db $EA ; nop
|
||||
db $60 ; rts
|
||||
db $EA ; nop
|
||||
db $EA ; nop
|
||||
|
|
|
|||
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
|
||||
ld a, $1
|
||||
ld [wcf2d], a
|
||||
ld de, PalPacket_72508
|
||||
ld de, ChrTrnPacket
|
||||
ld hl, SGBBorderGraphics
|
||||
call Func_7210b
|
||||
xor a
|
||||
ld [wcf2d], a
|
||||
ld de, PalPacket_72518
|
||||
ld de, PctTrnPacket
|
||||
ld hl, BorderPalettes
|
||||
call Func_7210b
|
||||
xor a
|
||||
ld [wcf2d], a
|
||||
ld de, PalPacket_724d8
|
||||
ld de, PalTrnPacket
|
||||
ld hl, SuperPalettes
|
||||
call Func_7210b
|
||||
call ClearVram
|
||||
ld hl, PalPacket_72538
|
||||
ld hl, MaskEnCancelPacket
|
||||
jp SendSGBPacket
|
||||
|
||||
Func_72075: ; 72075 (1c:6075)
|
||||
|
|
@ -431,18 +431,18 @@ Func_72075: ; 72075 (1c:6075)
|
|||
ret
|
||||
|
||||
PointerTable_72089: ; 72089 (1c:6089)
|
||||
dw PalPacket_72528
|
||||
dw PalPacket_72548
|
||||
dw PalPacket_72558
|
||||
dw PalPacket_72568
|
||||
dw PalPacket_72578
|
||||
dw PalPacket_72588
|
||||
dw PalPacket_72598
|
||||
dw PalPacket_725a8
|
||||
dw PalPacket_725b8
|
||||
dw MaskEnFreezePacket
|
||||
dw DataSnd_72548
|
||||
dw DataSnd_72558
|
||||
dw DataSnd_72568
|
||||
dw DataSnd_72578
|
||||
dw DataSnd_72588
|
||||
dw DataSnd_72598
|
||||
dw DataSnd_725a8
|
||||
dw DataSnd_725b8
|
||||
|
||||
Func_7209b: ; 7209b (1c:609b)
|
||||
ld hl, PalPacket_724f8
|
||||
ld hl, MltReq2Packet
|
||||
di
|
||||
call SendSGBPacket
|
||||
ld a, $1
|
||||
|
|
@ -493,7 +493,7 @@ Func_7209b: ; 7209b (1c:609b)
|
|||
ret
|
||||
|
||||
Func_72102: ; 72102 (1c:6102)
|
||||
ld hl, PalPacket_724e8
|
||||
ld hl, MltReq1Packet
|
||||
call SendSGBPacket
|
||||
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"
|
||||
|
||||
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"
|
||||
|
||||
|
|
@ -1940,57 +1951,7 @@ Func_7c18: ; 7c18 (1:7c18)
|
|||
|
||||
SECTION "bank3",ROMX,BANK[$3]
|
||||
|
||||
_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
|
||||
INCLUDE "engine/joypad.asm"
|
||||
|
||||
INCLUDE "data/map_songs.asm"
|
||||
|
||||
|
|
@ -4657,7 +4618,7 @@ INCLUDE "engine/hp_bar.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"
|
||||
RockerSprite: INCBIN "gfx/sprites/rocker.2bpp"
|
||||
|
|
@ -4687,6 +4648,9 @@ SnorlaxSprite: INCBIN "gfx/sprites/snorlax.2bpp"
|
|||
OldAmberSprite: INCBIN "gfx/sprites/old_amber.2bpp"
|
||||
LyingOldManSprite: INCBIN "gfx/sprites/lying_old_man.2bpp"
|
||||
|
||||
|
||||
SECTION "Graphics", ROMX, BANK[GFX]
|
||||
|
||||
PokemonLogoGraphics: INCBIN "gfx/pokemon_logo.2bpp"
|
||||
FontGraphics: INCBIN "gfx/font.1bpp"
|
||||
ABTiles: INCBIN "gfx/AB.2bpp"
|
||||
|
|
@ -4701,6 +4665,9 @@ PokedexTileGraphics: INCBIN "gfx/pokedex.2bpp"
|
|||
WorldMapTileGraphics: INCBIN "gfx/town_map.2bpp"
|
||||
PlayerCharacterTitleGraphics: INCBIN "gfx/player_title.2bpp"
|
||||
|
||||
|
||||
SECTION "Battle (bank 4)", ROMX, BANK[$4]
|
||||
|
||||
INCLUDE "engine/battle/4.asm"
|
||||
INCLUDE "engine/menu/status_screen.asm"
|
||||
INCLUDE "engine/menu/party_menu.asm"
|
||||
|
|
@ -4710,17 +4677,13 @@ ShrinkPic1:: INCBIN "pic/trainer/shrink1.pic"
|
|||
ShrinkPic2:: INCBIN "pic/trainer/shrink2.pic"
|
||||
|
||||
INCLUDE "engine/turn_sprite.asm"
|
||||
|
||||
INCLUDE "engine/menu/start_sub_menus.asm"
|
||||
|
||||
INCLUDE "engine/items/tms.asm"
|
||||
|
||||
INCLUDE "engine/battle/4_2.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"
|
||||
RedSprite: INCBIN "gfx/sprites/red.2bpp"
|
||||
|
|
@ -4763,15 +4726,14 @@ BrunoSprite: INCBIN "gfx/sprites/bruno.2bpp"
|
|||
LoreleiSprite: INCBIN "gfx/sprites/lorelei.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/emotion_bubbles.asm"
|
||||
|
||||
INCLUDE "engine/evolve_trade.asm"
|
||||
|
||||
INCLUDE "engine/battle/5.asm"
|
||||
|
||||
INCLUDE "engine/menu/pc.asm"
|
||||
|
||||
|
||||
|
|
@ -5031,7 +4993,7 @@ INCLUDE "engine/menu/oaks_pc.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"
|
||||
RhydonPicBack:: INCBIN "pic/monback/rhydonb.pic"
|
||||
|
|
@ -5092,10 +5054,12 @@ PinsirPicBack:: INCBIN "pic/monback/pinsirb.pic"
|
|||
TangelaPicFront:: INCBIN "pic/bmon/tangela.pic"
|
||||
TangelaPicBack:: INCBIN "pic/monback/tangelab.pic"
|
||||
|
||||
|
||||
SECTION "Battle (bank 9)", ROMX, BANK[$9]
|
||||
INCLUDE "engine/battle/9.asm"
|
||||
|
||||
|
||||
SECTION "bankA",ROMX,BANK[$A]
|
||||
SECTION "Pics 2", ROMX, BANK[PICS_2]
|
||||
|
||||
GrowlithePicFront:: INCBIN "pic/bmon/growlithe.pic"
|
||||
GrowlithePicBack:: INCBIN "pic/monback/growlitheb.pic"
|
||||
|
|
@ -5162,10 +5126,12 @@ JynxPicBack:: INCBIN "pic/monback/jynxb.pic"
|
|||
MoltresPicFront:: INCBIN "pic/bmon/moltres.pic"
|
||||
MoltresPicBack:: INCBIN "pic/monback/moltresb.pic"
|
||||
|
||||
|
||||
SECTION "Battle (bank A)", ROMX, BANK[$A]
|
||||
INCLUDE "engine/battle/a.asm"
|
||||
|
||||
|
||||
SECTION "bankB",ROMX,BANK[$B]
|
||||
SECTION "Pics 3", ROMX, BANK[PICS_3]
|
||||
|
||||
ArticunoPicFront:: INCBIN "pic/bmon/articuno.pic"
|
||||
ArticunoPicBack:: INCBIN "pic/monback/articunob.pic"
|
||||
|
|
@ -5238,6 +5204,9 @@ BeedrillPicBack:: INCBIN "pic/monback/beedrillb.pic"
|
|||
|
||||
FossilKabutopsPic:: INCBIN "pic/bmon/fossilkabutops.pic"
|
||||
|
||||
|
||||
SECTION "Battle (bank B)", ROMX, BANK[$B]
|
||||
|
||||
INCLUDE "engine/battle/b.asm"
|
||||
|
||||
TrainerInfoTextBoxTileGraphics: INCBIN "gfx/trainer_info.2bpp"
|
||||
|
|
@ -5250,7 +5219,7 @@ INCLUDE "engine/battle/b_2.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"
|
||||
DodrioPicBack:: INCBIN "pic/monback/dodriob.pic"
|
||||
|
|
@ -5314,10 +5283,12 @@ StarmiePicBack:: INCBIN "pic/monback/starmieb.pic"
|
|||
RedPicBack:: INCBIN "pic/trainer/redb.pic"
|
||||
OldManPic:: INCBIN "pic/trainer/oldman.pic"
|
||||
|
||||
|
||||
SECTION "Battle (bank C)", ROMX, BANK[$C]
|
||||
INCLUDE "engine/battle/c.asm"
|
||||
|
||||
|
||||
SECTION "bankD",ROMX,BANK[$D]
|
||||
SECTION "Pics 5", ROMX, BANK[PICS_5]
|
||||
|
||||
BulbasaurPicFront:: INCBIN "pic/bmon/bulbasaur.pic"
|
||||
BulbasaurPicBack:: INCBIN "pic/monback/bulbasaurb.pic"
|
||||
|
|
@ -5374,6 +5345,9 @@ WeepinbellPicBack:: INCBIN "pic/monback/weepinbellb.pic"
|
|||
VictreebelPicFront:: INCBIN "pic/bmon/victreebel.pic"
|
||||
VictreebelPicBack:: INCBIN "pic/monback/victreebelb.pic"
|
||||
|
||||
|
||||
SECTION "Battle (bank D)", ROMX, BANK[$D]
|
||||
|
||||
INCLUDE "engine/titlescreen2.asm"
|
||||
INCLUDE "engine/battle/d.asm"
|
||||
INCLUDE "engine/slot_machine.asm"
|
||||
|
|
|
|||
Loading…
Reference in a new issue