From d2be79adf1c366b28821817cefaab9066668b205 Mon Sep 17 00:00:00 2001 From: Rangi <35663410+Rangi42@users.noreply.github.com> Date: Sat, 24 Sep 2022 11:30:29 -0400 Subject: Add constants and table macros for the map sprite sets (#392) Fixes #391 --- data/maps/sprite_sets.asm | 160 ++++++++++++++++++++-------------------------- 1 file changed, 71 insertions(+), 89 deletions(-) (limited to 'data/maps') diff --git a/data/maps/sprite_sets.asm b/data/maps/sprite_sets.asm index 755ed2fc..23274aa2 100644 --- a/data/maps/sprite_sets.asm +++ b/data/maps/sprite_sets.asm @@ -1,73 +1,72 @@ +; Valid sprite IDs for each outdoor map. + MapSpriteSets: table_width 1, MapSpriteSets - db $01 ; PALLET_TOWN - db $01 ; VIRIDIAN_CITY - db $02 ; PEWTER_CITY - db $02 ; CERULEAN_CITY - db $03 ; LAVENDER_TOWN - db $04 ; VERMILION_CITY - db $05 ; CELADON_CITY - db $0a ; FUCHSIA_CITY - db $01 ; CINNABAR_ISLAND - db $06 ; INDIGO_PLATEAU - db $07 ; SAFFRON_CITY - db $01 ; unused map ID - db $01 ; ROUTE_1 - db $f1 ; ROUTE_2 - db $02 ; ROUTE_3 - db $02 ; ROUTE_4 - db $f9 ; ROUTE_5 - db $fa ; ROUTE_6 - db $fb ; ROUTE_7 - db $fc ; ROUTE_8 - db $02 ; ROUTE_9 - db $f2 ; ROUTE_10 - db $f3 ; ROUTE_11 - db $f4 ; ROUTE_12 - db $08 ; ROUTE_13 - db $08 ; ROUTE_14 - db $f5 ; ROUTE_15 - db $f6 ; ROUTE_16 - db $09 ; ROUTE_17 - db $f7 ; ROUTE_18 - db $0a ; ROUTE_19 - db $f8 ; ROUTE_20 - db $01 ; ROUTE_21 - db $01 ; ROUTE_22 - db $06 ; ROUTE_23 - db $02 ; ROUTE_24 - db $02 ; ROUTE_25 + db SPRITESET_PALLET_VIRIDIAN ; PALLET_TOWN + db SPRITESET_PALLET_VIRIDIAN ; VIRIDIAN_CITY + db SPRITESET_PEWTER_CERULEAN ; PEWTER_CITY + db SPRITESET_PEWTER_CERULEAN ; CERULEAN_CITY + db SPRITESET_LAVENDER ; LAVENDER_TOWN + db SPRITESET_VERMILION ; VERMILION_CITY + db SPRITESET_CELADON ; CELADON_CITY + db SPRITESET_FUCHSIA ; FUCHSIA_CITY + db SPRITESET_PALLET_VIRIDIAN ; CINNABAR_ISLAND + db SPRITESET_INDIGO ; INDIGO_PLATEAU + db SPRITESET_SAFFRON ; SAFFRON_CITY + db SPRITESET_PALLET_VIRIDIAN ; UNUSED_MAP_0B + db SPRITESET_PALLET_VIRIDIAN ; ROUTE_1 + db SPLITSET_ROUTE_2 ; ROUTE_2 + db SPRITESET_PEWTER_CERULEAN ; ROUTE_3 + db SPRITESET_PEWTER_CERULEAN ; ROUTE_4 + db SPLITSET_ROUTE_5 ; ROUTE_5 + db SPLITSET_ROUTE_6 ; ROUTE_6 + db SPLITSET_ROUTE_7 ; ROUTE_7 + db SPLITSET_ROUTE_8 ; ROUTE_8 + db SPRITESET_PEWTER_CERULEAN ; ROUTE_9 + db SPLITSET_ROUTE_10 ; ROUTE_10 + db SPLITSET_ROUTE_11 ; ROUTE_11 + db SPLITSET_ROUTE_12 ; ROUTE_12 + db SPRITESET_SILENCE_BRIDGE ; ROUTE_13 + db SPRITESET_SILENCE_BRIDGE ; ROUTE_14 + db SPLITSET_ROUTE_15 ; ROUTE_15 + db SPLITSET_ROUTE_16 ; ROUTE_16 + db SPRITESET_CYCLING_ROAD ; ROUTE_17 + db SPLITSET_ROUTE_18 ; ROUTE_18 + db SPRITESET_FUCHSIA ; ROUTE_19 + db SPLITSET_ROUTE_20 ; ROUTE_20 + db SPRITESET_PALLET_VIRIDIAN ; ROUTE_21 + db SPRITESET_PALLET_VIRIDIAN ; ROUTE_22 + db SPRITESET_INDIGO ; ROUTE_23 + db SPRITESET_PEWTER_CERULEAN ; ROUTE_24 + db SPRITESET_PEWTER_CERULEAN ; ROUTE_25 assert_table_length FIRST_INDOOR_MAP -DEF EAST_WEST EQU 1 -DEF NORTH_SOUTH EQU 2 - ; Format: -; 00: determines whether the map is split EAST_WEST or NORTH_SOUTH -; 01: coordinate of dividing line -; 02: sprite set ID if in the West or North side -; 03: sprite set ID if in the East or South side +; #1: whether the map is split EAST_WEST or NORTH_SOUTH +; #2: coordinate of dividing line +; #3: sprite set ID if on the west or north side +; #4: sprite set ID if on the east or south side SplitMapSpriteSets: - db NORTH_SOUTH, 37, $02, $01 ; $f1 - db NORTH_SOUTH, 50, $02, $03 ; $f2 - db EAST_WEST, 57, $04, $08 ; $f3 - db NORTH_SOUTH, 21, $03, $08 ; $f4 - db EAST_WEST, 8, $0A, $08 ; $f5 - db EAST_WEST, 24, $09, $05 ; $f6 - db EAST_WEST, 34, $09, $0A ; $f7 - db EAST_WEST, 53, $01, $0A ; $f8 - db NORTH_SOUTH, 33, $02, $07 ; $f9 - db NORTH_SOUTH, 2, $07, $04 ; $fa - db EAST_WEST, 17, $05, $07 ; $fb - db EAST_WEST, 3, $07, $03 ; $fc + table_width 4, SplitMapSpriteSets + db NORTH_SOUTH, 37, SPRITESET_PEWTER_CERULEAN, SPRITESET_PALLET_VIRIDIAN ; SPLITSET_ROUTE_2 + db NORTH_SOUTH, 50, SPRITESET_PEWTER_CERULEAN, SPRITESET_LAVENDER ; SPLITSET_ROUTE_10 + db EAST_WEST, 57, SPRITESET_VERMILION, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_11 + db NORTH_SOUTH, 21, SPRITESET_LAVENDER, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_12 + db EAST_WEST, 8, SPRITESET_FUCHSIA, SPRITESET_SILENCE_BRIDGE ; SPLITSET_ROUTE_15 + db EAST_WEST, 24, SPRITESET_CYCLING_ROAD, SPRITESET_CELADON ; SPLITSET_ROUTE_16 + db EAST_WEST, 34, SPRITESET_CYCLING_ROAD, SPRITESET_FUCHSIA ; SPLITSET_ROUTE_18 + db EAST_WEST, 53, SPRITESET_PALLET_VIRIDIAN, SPRITESET_FUCHSIA ; SPLITSET_ROUTE_20 + db NORTH_SOUTH, 33, SPRITESET_PEWTER_CERULEAN, SPRITESET_SAFFRON ; SPLITSET_ROUTE_5 + db NORTH_SOUTH, 2, SPRITESET_SAFFRON, SPRITESET_VERMILION ; SPLITSET_ROUTE_6 + 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: + ; 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 -DEF SPRITE_SET_LENGTH EQU 9 + 2 - -; sprite set $01 - table_width 1 +; SPRITESET_PALLET_VIRIDIAN db SPRITE_BLUE db SPRITE_YOUNGSTER db SPRITE_GIRL @@ -79,10 +78,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_SWIMMER db SPRITE_POKE_BALL db SPRITE_GAMBLER_ASLEEP - assert_table_length SPRITE_SET_LENGTH -; sprite set $02 - table_width 1 +; SPRITESET_PEWTER_CERULEAN db SPRITE_YOUNGSTER db SPRITE_ROCKET db SPRITE_SUPER_NERD @@ -94,10 +91,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_COOLTRAINER_M db SPRITE_POKE_BALL db SPRITE_UNUSED_GAMBLER_ASLEEP_2 - assert_table_length SPRITE_SET_LENGTH -; sprite set $03 - table_width 1 +; SPRITESET_LAVENDER db SPRITE_LITTLE_GIRL db SPRITE_GIRL db SPRITE_SUPER_NERD @@ -109,10 +104,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_GUARD db SPRITE_POKE_BALL db SPRITE_UNUSED_GAMBLER_ASLEEP_2 - assert_table_length SPRITE_SET_LENGTH -; sprite set $04 - table_width 1 +; SPRITESET_VERMILION db SPRITE_BEAUTY db SPRITE_SUPER_NERD db SPRITE_YOUNGSTER @@ -124,10 +117,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_COOLTRAINER_M db SPRITE_POKE_BALL db SPRITE_UNUSED_GAMBLER_ASLEEP_2 - assert_table_length SPRITE_SET_LENGTH -; sprite set $05 - table_width 1 +; SPRITESET_CELADON db SPRITE_LITTLE_GIRL db SPRITE_LITTLE_BOY db SPRITE_GIRL @@ -139,10 +130,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_ROCKET db SPRITE_POKE_BALL db SPRITE_SNORLAX - assert_table_length SPRITE_SET_LENGTH -; sprite set $06 - table_width 1 +; SPRITESET_INDIGO db SPRITE_YOUNGSTER db SPRITE_GYM_GUIDE db SPRITE_MONSTER @@ -154,10 +143,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_GAMBLER db SPRITE_POKE_BALL db SPRITE_UNUSED_GAMBLER_ASLEEP_2 - assert_table_length SPRITE_SET_LENGTH -; sprite set $07 - table_width 1 +; SPRITESET_SAFFRON db SPRITE_ROCKET db SPRITE_SCIENTIST db SPRITE_SILPH_WORKER @@ -169,10 +156,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_MONSTER db SPRITE_POKE_BALL db SPRITE_UNUSED_GAMBLER_ASLEEP_2 - assert_table_length SPRITE_SET_LENGTH -; sprite set $08 - table_width 1 +; SPRITESET_SILENCE_BRIDGE db SPRITE_BIKER db SPRITE_SUPER_NERD db SPRITE_MIDDLE_AGED_MAN @@ -184,10 +169,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_MONSTER db SPRITE_POKE_BALL db SPRITE_SNORLAX - assert_table_length SPRITE_SET_LENGTH -; sprite set $09 - table_width 1 +; SPRITESET_CYCLING_ROAD db SPRITE_BIKER db SPRITE_COOLTRAINER_M db SPRITE_SILPH_WORKER @@ -199,10 +182,8 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_SUPER_NERD db SPRITE_POKE_BALL db SPRITE_SNORLAX - assert_table_length SPRITE_SET_LENGTH -; sprite set $0a - table_width 1 +; SPRITESET_FUCHSIA db SPRITE_BIRD db SPRITE_COOLTRAINER_M db SPRITE_FAIRY @@ -214,4 +195,5 @@ DEF SPRITE_SET_LENGTH EQU 9 + 2 db SPRITE_YOUNGSTER db SPRITE_POKE_BALL db SPRITE_FOSSIL - assert_table_length SPRITE_SET_LENGTH + + assert_table_length NUM_SPRITE_SETS -- cgit v1.3.1-sl0p From c299cf10675164502a7c487a29014b2927a403c0 Mon Sep 17 00:00:00 2001 From: Rangi Date: Sat, 24 Sep 2022 11:39:39 -0400 Subject: Use a SPRITE_SET_LENGTH constant --- constants/sprite_set_constants.asm | 3 +++ data/maps/sprite_sets.asm | 3 +-- engine/overworld/map_sprites.asm | 8 ++++---- 3 files changed, 8 insertions(+), 6 deletions(-) (limited to 'data/maps') diff --git a/constants/sprite_set_constants.asm b/constants/sprite_set_constants.asm index 4f617c4a..56e4ccbb 100644 --- a/constants/sprite_set_constants.asm +++ b/constants/sprite_set_constants.asm @@ -36,3 +36,6 @@ DEF NUM_SPLIT_SETS EQU const_value - FIRST_SPLIT_SET ; split directions DEF EAST_WEST EQU 1 DEF NORTH_SOUTH EQU 2 + +; each sprite set has 9 walking sprites and 2 still sprites +DEF SPRITE_SET_LENGTH EQU 9 + 2 diff --git a/data/maps/sprite_sets.asm b/data/maps/sprite_sets.asm index 23274aa2..76ddee34 100644 --- a/data/maps/sprite_sets.asm +++ b/data/maps/sprite_sets.asm @@ -63,8 +63,7 @@ SplitMapSpriteSets: assert_table_length NUM_SPLIT_SETS SpriteSets: - ; each sprite set has 9 walking sprites and 2 still sprites - table_width 9 + 2, SpriteSets + table_width SPRITE_SET_LENGTH, SpriteSets ; SPRITESET_PALLET_VIRIDIAN db SPRITE_BLUE diff --git a/engine/overworld/map_sprites.asm b/engine/overworld/map_sprites.asm index 5a4c27c3..8acbb04f 100644 --- a/engine/overworld/map_sprites.asm +++ b/engine/overworld/map_sprites.asm @@ -283,7 +283,7 @@ InitOutsideMapSprites: sla a sla a add c - add b ; a = (spriteSetID - 1) * 11 + add b ; a = (spriteSetID - 1) * SPRITE_SET_LENGTH ld de, SpriteSets ; add a to de to get offset of sprite set add e @@ -309,7 +309,7 @@ InitOutsideMapSprites: inc de inc bc ld a, l - cp $bd ; reached 11th sprite slot? + cp 11 * SPRITESTATEDATA2_LENGTH + SPRITESTATEDATA2_PICTUREID ; reached 11th sprite slot? jr nz, .loadSpriteSetLoop ld b, 4 ; 4 remaining sprite slots .zeroRemainingSlotsLoop ; loop to zero the picture ID's of the remaining sprite slots @@ -322,13 +322,13 @@ InitOutsideMapSprites: jr nz, .zeroRemainingSlotsLoop ld a, [wNumSprites] push af ; save number of sprites - ld a, 11 ; 11 sprites in sprite set + ld a, SPRITE_SET_LENGTH ; 11 sprites in sprite set ld [wNumSprites], a call LoadMapSpriteTilePatterns pop af ld [wNumSprites], a ; restore number of sprites ld hl, wSprite01StateData2ImageBaseOffset - ld b, $0f + ld b, NUM_SPRITESTATEDATA_STRUCTS - 1 ; The VRAM tile pattern slots that LoadMapSpriteTilePatterns set are in the ; order of the map's sprite set, not the order of the actual sprites loaded ; for the current map. So, they are not needed and are zeroed by this loop. -- cgit v1.3.1-sl0p