Add constants and table macros for the map sprite sets (#392)

Fixes #391
This commit is contained in:
Rangi 2022-09-24 11:30:29 -04:00 committed by GitHub
parent fa7d76f39e
commit d2be79adf1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 150 additions and 125 deletions

View file

@ -28,6 +28,7 @@ INCLUDE "constants/map_constants.asm"
INCLUDE "constants/map_data_constants.asm" INCLUDE "constants/map_data_constants.asm"
INCLUDE "constants/map_object_constants.asm" INCLUDE "constants/map_object_constants.asm"
INCLUDE "constants/hide_show_constants.asm" INCLUDE "constants/hide_show_constants.asm"
INCLUDE "constants/sprite_set_constants.asm"
INCLUDE "constants/credits_constants.asm" INCLUDE "constants/credits_constants.asm"
INCLUDE "constants/audio_constants.asm" INCLUDE "constants/audio_constants.asm"
INCLUDE "constants/music_constants.asm" INCLUDE "constants/music_constants.asm"

View file

@ -0,0 +1,38 @@
; sprite set ids
; indexes for SpriteSets (see data/maps/sprite_sets.asm)
; values for MapSpriteSets and SplitMapSpriteSets (see data/maps/sprite_sets.asm)
const_def 1
const SPRITESET_PALLET_VIRIDIAN ; 01
const SPRITESET_PEWTER_CERULEAN ; 02
const SPRITESET_LAVENDER ; 03
const SPRITESET_VERMILION ; 04
const SPRITESET_CELADON ; 05
const SPRITESET_INDIGO ; 06
const SPRITESET_SAFFRON ; 07
const SPRITESET_SILENCE_BRIDGE ; 08
const SPRITESET_CYCLING_ROAD ; 09
const SPRITESET_FUCHSIA ; 0a
DEF NUM_SPRITE_SETS EQU const_value - 1
; split sprite set ids
; indexes for SplitMapSpriteSets (see data/maps/sprite_sets.asm)
; values for MapSpriteSets (see data/maps/sprite_sets.asm)
const_next $f1
DEF FIRST_SPLIT_SET EQU const_value
const SPLITSET_ROUTE_2 ; f1
const SPLITSET_ROUTE_10 ; f2
const SPLITSET_ROUTE_11 ; f3
const SPLITSET_ROUTE_12 ; f4
const SPLITSET_ROUTE_15 ; f5
const SPLITSET_ROUTE_16 ; f6
const SPLITSET_ROUTE_18 ; f7
const SPLITSET_ROUTE_20 ; f8
const SPLITSET_ROUTE_5 ; f9
const SPLITSET_ROUTE_6 ; fa
const SPLITSET_ROUTE_7 ; fb
const SPLITSET_ROUTE_8 ; fc
DEF NUM_SPLIT_SETS EQU const_value - FIRST_SPLIT_SET
; split directions
DEF EAST_WEST EQU 1
DEF NORTH_SOUTH EQU 2

View file

@ -1,73 +1,72 @@
; Valid sprite IDs for each outdoor map.
MapSpriteSets: MapSpriteSets:
table_width 1, MapSpriteSets table_width 1, MapSpriteSets
db $01 ; PALLET_TOWN db SPRITESET_PALLET_VIRIDIAN ; PALLET_TOWN
db $01 ; VIRIDIAN_CITY db SPRITESET_PALLET_VIRIDIAN ; VIRIDIAN_CITY
db $02 ; PEWTER_CITY db SPRITESET_PEWTER_CERULEAN ; PEWTER_CITY
db $02 ; CERULEAN_CITY db SPRITESET_PEWTER_CERULEAN ; CERULEAN_CITY
db $03 ; LAVENDER_TOWN db SPRITESET_LAVENDER ; LAVENDER_TOWN
db $04 ; VERMILION_CITY db SPRITESET_VERMILION ; VERMILION_CITY
db $05 ; CELADON_CITY db SPRITESET_CELADON ; CELADON_CITY
db $0a ; FUCHSIA_CITY db SPRITESET_FUCHSIA ; FUCHSIA_CITY
db $01 ; CINNABAR_ISLAND db SPRITESET_PALLET_VIRIDIAN ; CINNABAR_ISLAND
db $06 ; INDIGO_PLATEAU db SPRITESET_INDIGO ; INDIGO_PLATEAU
db $07 ; SAFFRON_CITY db SPRITESET_SAFFRON ; SAFFRON_CITY
db $01 ; unused map ID db SPRITESET_PALLET_VIRIDIAN ; UNUSED_MAP_0B
db $01 ; ROUTE_1 db SPRITESET_PALLET_VIRIDIAN ; ROUTE_1
db $f1 ; ROUTE_2 db SPLITSET_ROUTE_2 ; ROUTE_2
db $02 ; ROUTE_3 db SPRITESET_PEWTER_CERULEAN ; ROUTE_3
db $02 ; ROUTE_4 db SPRITESET_PEWTER_CERULEAN ; ROUTE_4
db $f9 ; ROUTE_5 db SPLITSET_ROUTE_5 ; ROUTE_5
db $fa ; ROUTE_6 db SPLITSET_ROUTE_6 ; ROUTE_6
db $fb ; ROUTE_7 db SPLITSET_ROUTE_7 ; ROUTE_7
db $fc ; ROUTE_8 db SPLITSET_ROUTE_8 ; ROUTE_8
db $02 ; ROUTE_9 db SPRITESET_PEWTER_CERULEAN ; ROUTE_9
db $f2 ; ROUTE_10 db SPLITSET_ROUTE_10 ; ROUTE_10
db $f3 ; ROUTE_11 db SPLITSET_ROUTE_11 ; ROUTE_11
db $f4 ; ROUTE_12 db SPLITSET_ROUTE_12 ; ROUTE_12
db $08 ; ROUTE_13 db SPRITESET_SILENCE_BRIDGE ; ROUTE_13
db $08 ; ROUTE_14 db SPRITESET_SILENCE_BRIDGE ; ROUTE_14
db $f5 ; ROUTE_15 db SPLITSET_ROUTE_15 ; ROUTE_15
db $f6 ; ROUTE_16 db SPLITSET_ROUTE_16 ; ROUTE_16
db $09 ; ROUTE_17 db SPRITESET_CYCLING_ROAD ; ROUTE_17
db $f7 ; ROUTE_18 db SPLITSET_ROUTE_18 ; ROUTE_18
db $0a ; ROUTE_19 db SPRITESET_FUCHSIA ; ROUTE_19
db $f8 ; ROUTE_20 db SPLITSET_ROUTE_20 ; ROUTE_20
db $01 ; ROUTE_21 db SPRITESET_PALLET_VIRIDIAN ; ROUTE_21
db $01 ; ROUTE_22 db SPRITESET_PALLET_VIRIDIAN ; ROUTE_22
db $06 ; ROUTE_23 db SPRITESET_INDIGO ; ROUTE_23
db $02 ; ROUTE_24 db SPRITESET_PEWTER_CERULEAN ; ROUTE_24
db $02 ; ROUTE_25 db SPRITESET_PEWTER_CERULEAN ; ROUTE_25
assert_table_length FIRST_INDOOR_MAP assert_table_length FIRST_INDOOR_MAP
DEF EAST_WEST EQU 1
DEF NORTH_SOUTH EQU 2
; Format: ; Format:
; 00: determines whether the map is split EAST_WEST or NORTH_SOUTH ; #1: whether the map is split EAST_WEST or NORTH_SOUTH
; 01: coordinate of dividing line ; #2: coordinate of dividing line
; 02: sprite set ID if in the West or North side ; #3: sprite set ID if on the west or north side
; 03: sprite set ID if in the East or South side ; #4: sprite set ID if on the east or south side
SplitMapSpriteSets: SplitMapSpriteSets:
db NORTH_SOUTH, 37, $02, $01 ; $f1 table_width 4, SplitMapSpriteSets
db NORTH_SOUTH, 50, $02, $03 ; $f2 db NORTH_SOUTH, 37, SPRITESET_PEWTER_CERULEAN, SPRITESET_PALLET_VIRIDIAN ; SPLITSET_ROUTE_2
db EAST_WEST, 57, $04, $08 ; $f3 db NORTH_SOUTH, 50, SPRITESET_PEWTER_CERULEAN, SPRITESET_LAVENDER ; SPLITSET_ROUTE_10
db NORTH_SOUTH, 21, $03, $08 ; $f4 db EAST_WEST, 57, SPRITESET_VERMILION, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_11
db EAST_WEST, 8, $0A, $08 ; $f5 db NORTH_SOUTH, 21, SPRITESET_LAVENDER, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_12
db EAST_WEST, 24, $09, $05 ; $f6 db EAST_WEST, 8, SPRITESET_FUCHSIA, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_15
db EAST_WEST, 34, $09, $0A ; $f7 db EAST_WEST, 24, SPRITESET_CYCLING_ROAD, SPRITESET_CELADON ; SPLITSET_ROUTE_16
db EAST_WEST, 53, $01, $0A ; $f8 db EAST_WEST, 34, SPRITESET_CYCLING_ROAD, SPRITESET_FUCHSIA ; SPLITSET_ROUTE_18
db NORTH_SOUTH, 33, $02, $07 ; $f9 db EAST_WEST, 53, SPRITESET_PALLET_VIRIDIAN, SPRITESET_FUCHSIA ; SPLITSET_ROUTE_20
db NORTH_SOUTH, 2, $07, $04 ; $fa db NORTH_SOUTH, 33, SPRITESET_PEWTER_CERULEAN, SPRITESET_SAFFRON ; SPLITSET_ROUTE_5
db EAST_WEST, 17, $05, $07 ; $fb db NORTH_SOUTH, 2, SPRITESET_SAFFRON, SPRITESET_VERMILION ; SPLITSET_ROUTE_6
db EAST_WEST, 3, $07, $03 ; $fc db EAST_WEST, 17, SPRITESET_CELADON, SPRITESET_SAFFRON ; SPLITSET_ROUTE_7
db EAST_WEST, 3, SPRITESET_SAFFRON, SPRITESET_LAVENDER ; SPLITSET_ROUTE_8
assert_table_length NUM_SPLIT_SETS
SpriteSets: SpriteSets:
; each sprite set has 9 walking sprites and 2 still sprites
table_width 9 + 2, SpriteSets
; each sprite set has 9 walking sprites and 2 still sprites ; SPRITESET_PALLET_VIRIDIAN
DEF SPRITE_SET_LENGTH EQU 9 + 2
; sprite set $01
table_width 1
db SPRITE_BLUE db SPRITE_BLUE
db SPRITE_YOUNGSTER db SPRITE_YOUNGSTER
db SPRITE_GIRL db SPRITE_GIRL
@ -79,10 +78,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_SWIMMER db SPRITE_SWIMMER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_GAMBLER_ASLEEP db SPRITE_GAMBLER_ASLEEP
assert_table_length SPRITE_SET_LENGTH
; sprite set $02 ; SPRITESET_PEWTER_CERULEAN
table_width 1
db SPRITE_YOUNGSTER db SPRITE_YOUNGSTER
db SPRITE_ROCKET db SPRITE_ROCKET
db SPRITE_SUPER_NERD db SPRITE_SUPER_NERD
@ -94,10 +91,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $03 ; SPRITESET_LAVENDER
table_width 1
db SPRITE_LITTLE_GIRL db SPRITE_LITTLE_GIRL
db SPRITE_GIRL db SPRITE_GIRL
db SPRITE_SUPER_NERD db SPRITE_SUPER_NERD
@ -109,10 +104,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_GUARD db SPRITE_GUARD
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $04 ; SPRITESET_VERMILION
table_width 1
db SPRITE_BEAUTY db SPRITE_BEAUTY
db SPRITE_SUPER_NERD db SPRITE_SUPER_NERD
db SPRITE_YOUNGSTER db SPRITE_YOUNGSTER
@ -124,10 +117,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $05 ; SPRITESET_CELADON
table_width 1
db SPRITE_LITTLE_GIRL db SPRITE_LITTLE_GIRL
db SPRITE_LITTLE_BOY db SPRITE_LITTLE_BOY
db SPRITE_GIRL db SPRITE_GIRL
@ -139,10 +130,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_ROCKET db SPRITE_ROCKET
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_SNORLAX db SPRITE_SNORLAX
assert_table_length SPRITE_SET_LENGTH
; sprite set $06 ; SPRITESET_INDIGO
table_width 1
db SPRITE_YOUNGSTER db SPRITE_YOUNGSTER
db SPRITE_GYM_GUIDE db SPRITE_GYM_GUIDE
db SPRITE_MONSTER db SPRITE_MONSTER
@ -154,10 +143,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_GAMBLER db SPRITE_GAMBLER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $07 ; SPRITESET_SAFFRON
table_width 1
db SPRITE_ROCKET db SPRITE_ROCKET
db SPRITE_SCIENTIST db SPRITE_SCIENTIST
db SPRITE_SILPH_WORKER db SPRITE_SILPH_WORKER
@ -169,10 +156,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_MONSTER db SPRITE_MONSTER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2 db SPRITE_UNUSED_GAMBLER_ASLEEP_2
assert_table_length SPRITE_SET_LENGTH
; sprite set $08 ; SPRITESET_SILENCE_BRIDGE
table_width 1
db SPRITE_BIKER db SPRITE_BIKER
db SPRITE_SUPER_NERD db SPRITE_SUPER_NERD
db SPRITE_MIDDLE_AGED_MAN db SPRITE_MIDDLE_AGED_MAN
@ -184,10 +169,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_MONSTER db SPRITE_MONSTER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_SNORLAX db SPRITE_SNORLAX
assert_table_length SPRITE_SET_LENGTH
; sprite set $09 ; SPRITESET_CYCLING_ROAD
table_width 1
db SPRITE_BIKER db SPRITE_BIKER
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_SILPH_WORKER db SPRITE_SILPH_WORKER
@ -199,10 +182,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_SUPER_NERD db SPRITE_SUPER_NERD
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_SNORLAX db SPRITE_SNORLAX
assert_table_length SPRITE_SET_LENGTH
; sprite set $0a ; SPRITESET_FUCHSIA
table_width 1
db SPRITE_BIRD db SPRITE_BIRD
db SPRITE_COOLTRAINER_M db SPRITE_COOLTRAINER_M
db SPRITE_FAIRY db SPRITE_FAIRY
@ -214,4 +195,5 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2
db SPRITE_YOUNGSTER db SPRITE_YOUNGSTER
db SPRITE_POKE_BALL db SPRITE_POKE_BALL
db SPRITE_FOSSIL db SPRITE_FOSSIL
assert_table_length SPRITE_SET_LENGTH
assert_table_length NUM_SPRITE_SETS

View file

@ -11,7 +11,7 @@
InitMapSprites:: InitMapSprites::
call InitOutsideMapSprites call InitOutsideMapSprites
ret c ; return if the map is an outside map (already handled by above call) ret c ; return if the map is an outside map (already handled by above call)
; if the map is an inside map (i.e. mapID >= $25) ; if the map is an inside map (i.e. mapID >= FIRST_INDOOR_MAP)
ld hl, wSpritePlayerStateData1PictureID ld hl, wSpritePlayerStateData1PictureID
ld de, wSpritePlayerStateData2PictureID ld de, wSpritePlayerStateData2PictureID
; Loop to copy picture IDs from [x#SPRITESTATEDATA1_PICTUREID] ; Loop to copy picture IDs from [x#SPRITESTATEDATA1_PICTUREID]
@ -19,10 +19,10 @@ InitMapSprites::
.copyPictureIDLoop .copyPictureIDLoop
ld a, [hl] ; a = [x#SPRITESTATEDATA1_PICTUREID] ld a, [hl] ; a = [x#SPRITESTATEDATA1_PICTUREID]
ld [de], a ; [x#SPRITESTATEDATA2_PICTUREID] = a ld [de], a ; [x#SPRITESTATEDATA2_PICTUREID] = a
ld a, $10 ld a, SPRITESTATEDATA1_LENGTH
add e add e
ld e, a ld e, a
ld a, $10 ld a, SPRITESTATEDATA1_LENGTH
add l add l
ld l, a ld l, a
jr nz, .copyPictureIDLoop jr nz, .copyPictureIDLoop
@ -37,7 +37,7 @@ LoadMapSpriteTilePatterns:
ret ret
.spritesExist .spritesExist
ld c, a ; c = [wNumSprites] ld c, a ; c = [wNumSprites]
ld b, $10 ; number of sprite slots ld b, NUM_SPRITESTATEDATA_STRUCTS
ld hl, wSpritePlayerStateData2PictureID ld hl, wSpritePlayerStateData2PictureID
xor a xor a
ldh [hFourTileSpriteCount], a ldh [hFourTileSpriteCount], a
@ -47,7 +47,7 @@ LoadMapSpriteTilePatterns:
ld a, [hli] ; a = [x#SPRITESTATEDATA2_PICTUREID] ld a, [hli] ; a = [x#SPRITESTATEDATA2_PICTUREID]
ld [hld], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a ld [hld], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a
ld a, l ld a, l
add $10 add SPRITESTATEDATA1_LENGTH
ld l, a ld l, a
dec b dec b
jr nz, .copyPictureIDLoop jr nz, .copyPictureIDLoop
@ -69,17 +69,17 @@ LoadMapSpriteTilePatterns:
cp [hl] ; do the picture ID's match? cp [hl] ; do the picture ID's match?
jp z, .alreadyLoaded jp z, .alreadyLoaded
ld a, e ld a, e
add $10 add SPRITESTATEDATA1_LENGTH
ld e, a ld e, a
jr .checkIfAlreadyLoadedLoop jr .checkIfAlreadyLoadedLoop
.notAlreadyLoaded .notAlreadyLoaded
ld de, wSpritePlayerStateData2ImageBaseOffset ld de, wSpritePlayerStateData2ImageBaseOffset
ld b, $01 ld b, 1
; loop to find the highest tile pattern VRAM slot (among the first 10 slots) used by a previous sprite slot ; loop to find the highest tile pattern VRAM slot (among the first 10 slots) used by a previous sprite slot
; this is done in order to find the first free VRAM slot available ; this is done in order to find the first free VRAM slot available
.findNextVRAMSlotLoop .findNextVRAMSlotLoop
ld a, e ld a, e
add $10 add SPRITESTATEDATA1_LENGTH
ld e, a ld e, a
ld a, l ld a, l
cp e ; reached current slot? cp e ; reached current slot?
@ -187,7 +187,7 @@ LoadMapSpriteTilePatterns:
jr nz, .loadWhileLCDOn jr nz, .loadWhileLCDOn
pop af pop af
pop hl pop hl
set 3, h ; add $800 to hl set 3, h ; add $80 tiles to hl
push hl push hl
ld h, d ld h, d
ld l, e ld l, e
@ -200,7 +200,7 @@ LoadMapSpriteTilePatterns:
.loadWhileLCDOn .loadWhileLCDOn
pop af pop af
pop hl pop hl
set 3, h ; add $800 to hl set 3, h ; add $80 tiles to hl
ld b, a ld b, a
swap c swap c
call CopyVideoData ; load tile pattern data for sprite when walking call CopyVideoData ; load tile pattern data for sprite when walking
@ -214,18 +214,18 @@ LoadMapSpriteTilePatterns:
ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a
.nextSpriteSlot .nextSpriteSlot
ld a, l ld a, l
add $10 add SPRITESTATEDATA2_LENGTH
ld l, a ld l, a
dec c dec c
jp nz, .loadTilePatternLoop jp nz, .loadTilePatternLoop
ld hl, wSpritePlayerStateData2PictureID ld hl, wSpritePlayerStateData2PictureID
ld b, $10 ld b, NUM_SPRITESTATEDATA_STRUCTS
; the pictures IDs stored at [x#SPRITESTATEDATA2_PICTUREID] are no longer needed, ; the pictures IDs stored at [x#SPRITESTATEDATA2_PICTUREID] are no longer needed,
; so zero them ; so zero them
.zeroStoredPictureIDLoop .zeroStoredPictureIDLoop
xor a xor a
ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID] ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID]
ld a, $10 ld a, SPRITESTATEDATA2_LENGTH
add l add l
ld l, a ld l, a
dec b dec b
@ -264,7 +264,7 @@ InitOutsideMapSprites:
inc h inc h
.noCarry .noCarry
ld a, [hl] ; a = spriteSetID ld a, [hl] ; a = spriteSetID
cp $f0 ; does the map have 2 sprite sets? cp FIRST_SPLIT_SET - 1 ; does the map have 2 sprite sets?
call nc, GetSplitMapSpriteSetID ; if so, choose the appropriate one call nc, GetSplitMapSpriteSetID ; if so, choose the appropriate one
ld b, a ; b = spriteSetID ld b, a ; b = spriteSetID
ld a, [wFontLoaded] ld a, [wFontLoaded]
@ -300,7 +300,7 @@ InitOutsideMapSprites:
; with picture IDs. This is done so that LoadMapSpriteTilePatterns will ; with picture IDs. This is done so that LoadMapSpriteTilePatterns will
; load tile patterns for all sprite pictures in the sprite set. ; load tile patterns for all sprite pictures in the sprite set.
.loadSpriteSetLoop .loadSpriteSetLoop
ld a, $10 ld a, SPRITESTATEDATA2_LENGTH
add l add l
ld l, a ld l, a
ld a, [de] ; sprite picture ID from sprite set ld a, [de] ; sprite picture ID from sprite set
@ -313,7 +313,7 @@ InitOutsideMapSprites:
jr nz, .loadSpriteSetLoop jr nz, .loadSpriteSetLoop
ld b, 4 ; 4 remaining sprite slots ld b, 4 ; 4 remaining sprite slots
.zeroRemainingSlotsLoop ; loop to zero the picture ID's of the remaining sprite slots .zeroRemainingSlotsLoop ; loop to zero the picture ID's of the remaining sprite slots
ld a, $10 ld a, SPRITESTATEDATA2_LENGTH
add l add l
ld l, a ld l, a
xor a xor a
@ -335,7 +335,7 @@ InitOutsideMapSprites:
.zeroVRAMSlotsLoop .zeroVRAMSlotsLoop
xor a xor a
ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
ld a, $10 ld a, SPRITESTATEDATA2_LENGTH
add l add l
ld l, a ld l, a
dec b dec b
@ -366,14 +366,14 @@ InitOutsideMapSprites:
inc c inc c
.skipGettingPictureIndex .skipGettingPictureIndex
push hl push hl
inc h inc h ; HIGH(wSpriteStateData2)
ld a, $0e ld a, SPRITESTATEDATA2_IMAGEBASEOFFSET - SPRITESTATEDATA1_PICTUREID
add l add l
ld l, a ld l, a
ld a, c ; a = VRAM slot (zero if sprite slot is not used) ld a, c ; a = VRAM slot (zero if sprite slot is not used)
ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
pop hl pop hl
ld a, $10 ld a, SPRITESTATEDATA1_LENGTH
add l add l
ld l, a ld l, a
and a and a
@ -384,7 +384,7 @@ InitOutsideMapSprites:
; Chooses the correct sprite set ID depending on the player's position within ; Chooses the correct sprite set ID depending on the player's position within
; the map for maps with two sprite sets. ; the map for maps with two sprite sets.
GetSplitMapSpriteSetID: GetSplitMapSpriteSetID:
cp $f8 cp SPLITSET_ROUTE_20
jr z, .route20 jr z, .route20
ld hl, SplitMapSpriteSets ld hl, SplitMapSpriteSets
and $0f and $0f
@ -396,8 +396,8 @@ GetSplitMapSpriteSetID:
jr nc, .noCarry jr nc, .noCarry
inc h inc h
.noCarry .noCarry
ld a, [hli] ; determines whether the map is split East/West or North/South ld a, [hli] ; whether the map is split EAST_WEST or NORTH_SOUTH
cp $01 cp EAST_WEST
ld a, [hli] ; position of dividing line ld a, [hli] ; position of dividing line
ld b, a ld b, a
jr z, .eastWestDivide jr z, .eastWestDivide
@ -409,35 +409,39 @@ GetSplitMapSpriteSetID:
.compareCoord .compareCoord
cp b cp b
jr c, .loadSpriteSetID jr c, .loadSpriteSetID
; if in the East side or South side ; if in the east side or south side
inc hl inc hl
.loadSpriteSetID .loadSpriteSetID
ld a, [hl] ld a, [hl]
ret ret
; Uses sprite set $01 for West side and $0A for East side. ; Uses sprite set SPRITESET_PALLET_VIRIDIAN for west side and SPRITESET_FUCHSIA for east side.
; Route 20 is a special case because the two map sections have a more complex ; Route 20 is a special case because the two map sections have a more complex
; shape instead of the map simply being split horizontally or vertically. ; shape instead of the map simply being split horizontally or vertically.
.route20 .route20
ld hl, wXCoord ld hl, wXCoord
; Use SPRITESET_PALLET_VIRIDIAN if X < 43
ld a, [hl] ld a, [hl]
cp $2b cp 43
ld a, $01 ld a, SPRITESET_PALLET_VIRIDIAN
ret c ret c
; Use SPRITESET_FUCHSIA if X >= 62.
ld a, [hl] ld a, [hl]
cp $3e cp 62
ld a, $0a ld a, SPRITESET_FUCHSIA
ret nc ret nc
; If 55 <= X < 62, split Y at 8; else 43 <= X < 55, so split Y at 13
ld a, [hl] ld a, [hl]
cp $37 cp 55
ld b, $08 ld b, 8
jr nc, .next jr nc, .next
ld b, $0d ld b, 13
.next .next
; Use SPRITESET_FUCHSIA if Y < split; else use SPRITESET_PALLET_VIRIDIAN
ld a, [wYCoord] ld a, [wYCoord]
cp b cp b
ld a, $0a ld a, SPRITESET_FUCHSIA
ret c ret c
ld a, $01 ld a, SPRITESET_PALLET_VIRIDIAN
ret ret
INCLUDE "data/maps/sprite_sets.asm" INCLUDE "data/maps/sprite_sets.asm"

View file

@ -101,7 +101,7 @@ wSpriteStateData1::
; - E ; - E
; - F ; - F
wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1 ; player is struct 0 wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1 ; player is struct 0
; wSprite02StateData1 - wSprite15StateData1 ; wSprite01StateData1 - wSprite15StateData1
FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS
wSprite{02d:n}StateData1:: spritestatedata1 wSprite{02d:n}StateData1 wSprite{02d:n}StateData1:: spritestatedata1 wSprite{02d:n}StateData1
ENDR ENDR
@ -127,7 +127,7 @@ wSpriteStateData2::
; - E: sprite image base offset (in video ram, player always has value 1, used to compute sprite image index) ; - E: sprite image base offset (in video ram, player always has value 1, used to compute sprite image index)
; - F ; - F
wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2 ; player is struct 0 wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2 ; player is struct 0
; wSprite02StateData2 - wSprite15StateData2 ; wSprite01StateData2 - wSprite15StateData2
FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS FOR n, 1, NUM_SPRITESTATEDATA_STRUCTS
wSprite{02d:n}StateData2:: spritestatedata2 wSprite{02d:n}StateData2 wSprite{02d:n}StateData2:: spritestatedata2 wSprite{02d:n}StateData2
ENDR ENDR