summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRangi <35663410+Rangi42@users.noreply.github.com>2021-06-20 12:21:01 -0400
committerGitHub <noreply@github.com>2021-06-20 12:21:01 -0400
commitd34132455fbd82cb9c55784c023bb2cefe43aac3 (patch)
tree407b649e10226ebe173cbf4e096c5f62ee11fbc9
parentc5d5d1115f4518758fd561e4e73478c8e527f01e (diff)
parent9b6130052de39c7ce09b899cb495db50bc5b4020 (diff)
Merge pull request #94 from ZoomTen/mapgroup_sprites
Add map sprite sets, disassemble more OW sprite routines, name map groups (bank $05)
-rw-r--r--constants/map_constants.asm76
-rw-r--r--constants/map_data_constants.asm3
-rw-r--r--data/maps/sprite_sets.asm210
-rw-r--r--data/overworld_sprites.asm102
-rw-r--r--engine/sprites/sprites.asm292
-rw-r--r--layout.link8
-rw-r--r--ram/wram.asm11
-rwxr-xr-xshim.sym7
8 files changed, 559 insertions, 150 deletions
diff --git a/constants/map_constants.asm b/constants/map_constants.asm
index da632fb..1c5c4a0 100644
--- a/constants/map_constants.asm
+++ b/constants/map_constants.asm
@@ -1,5 +1,7 @@
newgroup: MACRO
const_value = const_value + 1
+CURRENT_NUM_MAPGROUP_MAPS EQUS "NUM_\1_MAPS"
+MAPGROUP_\1 EQU const_value
__map_value__ = 1
ENDM
@@ -14,11 +16,15 @@ __map_value__ = __map_value__ + 1
\1_HEIGHT EQU \3
ENDM
+endgroup: MACRO
+{CURRENT_NUM_MAPGROUP_MAPS} EQU __map_value__ - 1
+PURGE CURRENT_NUM_MAPGROUP_MAPS
+ENDM
+
; map ids
const_def
- newgroup ; 1
-
+ newgroup SILENT ; 1
map_const ROUTE_1_P1, 15, 9 ; 1
map_const ROUTE_1_P2, 10, 18 ; 2
map_const ROUTE_SILENT_EAST, 30, 9 ; 3
@@ -34,9 +40,9 @@ ENDM
map_const SILENT_HILL_LAB_BACK, 4, 4 ; 13
map_const UNUSED_MAP_13, 4, 4 ; 14
map_const SHIZUKANA_OKA, 25, 18 ; 15
+ endgroup
- newgroup ; 2
-
+ newgroup OLD ; 2
map_const ROUTE_2, 15, 9 ; 1
map_const OLD_CITY, 20, 18 ; 2
map_const ROUTE_2_GATE_1F, 5, 4 ; 3
@@ -59,9 +65,9 @@ ENDM
map_const OLD_CITY_POKECENTER_TIME_MACHINE, 8, 4 ; 20
map_const OLD_CITY_KURTS_HOUSE, 8, 4 ; 21
map_const OLD_CITY_SCHOOL, 4, 8 ; 22
+ endgroup
- newgroup ; 3
-
+ newgroup WEST ; 3
map_const WEST, 20, 18 ; 1
map_const WEST_MART_1F, 8, 4 ; 2
map_const WEST_MART_2F, 8, 4 ; 3
@@ -81,9 +87,9 @@ ENDM
map_const WEST_GYM, 5, 9 ; 17
map_const WEST_HOUSE_1, 5, 4 ; 18
map_const WEST_HOUSE_2, 5, 4 ; 19
+ endgroup
- newgroup ; 4
-
+ newgroup HAITEKU ; 4
map_const HAITEKU_WEST_ROUTE, 25, 9 ; 1
map_const HAITEKU_WEST_ROUTE_OCEAN, 10, 27 ; 2
map_const HAITEKU, 20, 18 ; 3
@@ -98,9 +104,9 @@ ENDM
map_const HAITEKU_IMPOSTER_OAK_HOUSE, 5, 4 ; 12
map_const HAITEKU_AQUARIUM_1F, 8, 4 ; 13
map_const HAITEKU_AQUARIUM_2F, 8, 4 ; 14
+ endgroup
- newgroup ; 5
-
+ newgroup FONTO ; 5
map_const FONTO_ROUTE_1, 35, 9 ; 1
map_const FONTO_ROUTE_2, 10, 18 ; 2
map_const FONTO_ROUTE_3, 25, 9 ; 3
@@ -117,9 +123,9 @@ ENDM
map_const FONTO_POKECENTER_1F, 8, 4 ; 14
map_const FONTO_POKECENTER_2F, 8, 4 ; 15
map_const FONTO_LAB, 5, 4 ; 16
+ endgroup
- newgroup ; 6
-
+ newgroup BAADON ; 6
map_const BAADON_ROUTE_1, 10, 27 ; 1
map_const BAADON_ROUTE_2, 50, 9 ; 2
map_const BAADON_ROUTE_3, 10, 18 ; 3
@@ -134,9 +140,9 @@ ENDM
map_const BAADON_HOUSE_2, 5, 4 ; 12
map_const BAADON_LEAGUE_1F, 4, 8 ; 13
map_const BAADON_LEAGUE_2F, 5, 9 ; 14
+ endgroup
- newgroup ; 7
-
+ newgroup NEWTYPE ; 7
map_const ROUTE_15, 15, 9 ; 1
map_const NEWTYPE_ROUTE, 15, 9 ; 2
map_const ROUTE_18, 10, 45 ; 3
@@ -157,9 +163,9 @@ ENDM
map_const NEWTYPE_DINER, 4, 4 ; 18
map_const NEWTYPE_HOUSE_2, 5, 4 ; 19
map_const NEWTYPE_HOUSE_3, 5, 4 ; 20
+ endgroup
- newgroup ; 8
-
+ newgroup SUGAR ; 8
map_const SUGAR_ROUTE, 10, 27 ; 1
map_const SUGAR, 10, 9 ; 2
map_const SUGAR_ROUTE_GATE, 5, 4 ; 3
@@ -168,9 +174,9 @@ ENDM
map_const SUGAR_MART, 8, 4 ; 6
map_const SUGAR_POKECENTER_1F, 8, 4 ; 7
map_const SUGAR_POKECENTER_2F, 8, 4 ; 8
+ endgroup
- newgroup ; 9
-
+ newgroup BULL ; 9
map_const BULL_FOREST_ROUTE_1, 25, 9 ; 1
map_const BULL_FOREST_ROUTE_2, 10, 27 ; 2
map_const BULL_FOREST_ROUTE_3, 10, 27 ; 3
@@ -186,9 +192,9 @@ ENDM
map_const BULL_LEAGUE_1F, 4, 8 ; 13
map_const BULL_LEAGUE_2F, 5, 9 ; 14
map_const BULL_HOUSE_4, 5, 4 ; 15
+ endgroup
- newgroup ; 10
-
+ newgroup STAND ; 10
map_const STAND_ROUTE, 10, 27 ; 1
map_const STAND, 20, 18 ; 2
map_const STAND_ROUTE_GATE_KANTO, 5, 4 ; 3
@@ -202,9 +208,9 @@ ENDM
map_const STAND_ROCKET_HOUSE_2F, 8, 4 ; 11
map_const STAND_LEAGUE_1F, 4, 8 ; 12
map_const STAND_LEAGUE_2F, 5, 9 ; 13
+ endgroup
- newgroup ; 11
-
+ newgroup KANTO ; 11
map_const KANTO_EAST_ROUTE, 20, 9 ; 1
map_const KANTO, 30, 27 ; 2
map_const KANTO_CERULEAN_HOUSE, 5, 4 ; 3
@@ -243,37 +249,37 @@ ENDM
map_const KANTO_LEAGUE_2_1F, 4, 8 ; 36
map_const KANTO_LEAGUE_2_2F, 5, 9 ; 37
map_const KANTO_FISHING_GURU, 5, 4 ; 38
+ endgroup
- newgroup ; 12
-
+ newgroup PRINCE ; 12
map_const PRINCE_ROUTE, 10, 5 ; 1
map_const PRINCE, 10, 9 ; 2
+ endgroup
- newgroup ; 13
-
+ newgroup MT_FUJI ; 13
map_const MT_FUJI_ROUTE, 10, 5 ; 1
map_const MT_FUJI, 10, 9 ; 2
+ endgroup
- newgroup ; 14
-
+ newgroup SOUTH ; 14
map_const SOUTH, 20, 18 ; 1
map_const SOUTH_HOUSE_1, 5, 4 ; 2
map_const SOUTH_POKECENTER_1F, 8, 4 ; 3
map_const SOUTH_POKECENTER_2F, 8, 4 ; 4
map_const SOUTH_MART, 8, 4 ; 5
map_const SOUTH_HOUSE_2, 5, 4 ; 6
+ endgroup
- newgroup ; 15
-
+ newgroup NORTH ; 15
map_const NORTH, 10, 9 ; 1
map_const NORTH_HOUSE_1, 5, 4 ; 2
map_const NORTH_MART, 6, 4 ; 3
map_const NORTH_HOUSE_2, 5, 4 ; 4
map_const NORTH_POKECENTER_1F, 8, 4 ; 5
map_const NORTH_POKECENTER_2F, 8, 4 ; 6
+ endgroup
- newgroup ; 16
-
+ newgroup MISC ; 16
map_const POWER_PLANT_1, 10, 9 ; 1
map_const POWER_PLANT_2, 10, 9 ; 2
map_const POWER_PLANT_3, 15, 18 ; 3
@@ -292,5 +298,9 @@ ENDM
map_const OFFICE_3, 10, 18 ; 16
map_const SLOWPOKE_WELL_ENTRANCE, 10, 9 ; 17
map_const SLOWPOKE_WELL_MAIN, 10, 18 ; 18
+ endgroup
+
+ newgroup EMPTY ; 17
+ endgroup
-NUM_MAP_GROUPS EQU const_value ; 16
+NUM_MAP_GROUPS EQU const_value
diff --git a/constants/map_data_constants.asm b/constants/map_data_constants.asm
index cc29753..85be273 100644
--- a/constants/map_data_constants.asm
+++ b/constants/map_data_constants.asm
@@ -72,3 +72,6 @@ NUM_SPAWNS EQU 18
; size of each spawn point data
SPAWN_POINT_SIZE EQU 4
+
+; size of sprite sets (see data/maps/sprite_sets.asm)
+SPRITE_SET_LENGTH EQU 10
diff --git a/data/maps/sprite_sets.asm b/data/maps/sprite_sets.asm
new file mode 100644
index 0000000..b4712e8
--- /dev/null
+++ b/data/maps/sprite_sets.asm
@@ -0,0 +1,210 @@
+; Usable sprite IDs for outdoor map groups
+
+; Sprites outside of whatever is defined in its map group will be rendered
+; as the player sprite.
+
+INCLUDE "constants.asm"
+
+SECTION "data/maps/sprite_sets.asm", ROMX
+
+MapGroupSpriteSets:
+ db $01 ; MAPGROUP_SILENT
+ db $02 ; MAPGROUP_OLD
+ db $03 ; MAPGROUP_WEST
+ db $04 ; MAPGROUP_HAITEKU
+ db $05 ; MAPGROUP_FONTO
+ db $06 ; MAPGROUP_BAADON
+ db $07 ; MAPGROUP_NEWTYPE
+ db $08 ; MAPGROUP_SUGAR
+ db $0e ; MAPGROUP_BULL
+ db $09 ; MAPGROUP_STAND
+ db $0a ; MAPGROUP_KANTO
+ db $0b ; MAPGROUP_PRINCE
+ db $0d ; MAPGROUP_MT_FUJI
+ db $0c ; MAPGROUP_SOUTH
+ db $0e ; MAPGROUP_NORTH
+ db $01 ; MAPGROUP_MISC
+ db $01 ; MAPGROUP_EMPTY
+ db $01
+ db $01
+ db $01
+ db $01
+ db $01
+ db $01
+ db $01
+ db $01
+ db $01
+ db $01
+ db $01
+
+SpriteSets:
+; Each sprite set is 10 entries long, instead of 11 entries like in Gen I / II.
+
+; sprite set $01
+ db SPRITE_BLUE
+ db SPRITE_SILVER
+ db SPRITE_OFFICER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_RHYDON
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $02
+ db SPRITE_GRAMPS
+ db SPRITE_TWIN
+ db SPRITE_BUG_CATCHER_BOY
+ db SPRITE_YOUNGSTER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_GRANNY
+ db SPRITE_RHYDON
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $03
+ db SPRITE_LASS
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_ROCKER
+ db SPRITE_SAILOR
+ db SPRITE_GENTLEMAN
+ db SPRITE_36
+ db SPRITE_FISHER
+ db SPRITE_CLEFAIRY
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $04
+ db SPRITE_SILVER
+ db SPRITE_TWIN
+ db SPRITE_SAILOR
+ db SPRITE_POKEFAN_M
+ db SPRITE_SWIMMER_M
+ db SPRITE_SWIMMER_F
+ db SPRITE_FISHER
+ db SPRITE_RHYDON
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $05
+ db SPRITE_LASS
+ db SPRITE_BUG_CATCHER_BOY
+ db SPRITE_YOUNGSTER
+ db SPRITE_SAILOR
+ db SPRITE_GYM_GUY
+ db SPRITE_SWIMMER_M
+ db SPRITE_SWIMMER_F
+ db SPRITE_RHYDON
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $06
+ db SPRITE_36
+ db SPRITE_LASS
+ db SPRITE_YOUNGSTER
+ db SPRITE_24
+ db SPRITE_POKEFAN_M
+ db SPRITE_ROCKET_F
+ db SPRITE_FISHER
+ db SPRITE_RHYDON
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $07
+ db SPRITE_SILVER
+ db SPRITE_YOUNGSTER
+ db SPRITE_GIRL
+ db SPRITE_ROCKER
+ db SPRITE_POKEFAN_M
+ db SPRITE_GENTLEMAN
+ db SPRITE_FISHER
+ db SPRITE_SAILOR
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $08
+ db SPRITE_TWIN
+ db SPRITE_BUG_CATCHER_BOY
+ db SPRITE_GRAMPS
+ db SPRITE_GRANNY
+ db SPRITE_SWIMMER_M
+ db SPRITE_SWIMMER_F
+ db SPRITE_FISHER
+ db SPRITE_RHYDON
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $09
+ db SPRITE_SAKAKI
+ db SPRITE_CAPTAIN
+ db SPRITE_TWIN
+ db SPRITE_TEACHER
+ db SPRITE_ROCKER
+ db SPRITE_RHYDON
+ db SPRITE_CLEFAIRY
+ db SPRITE_PIDGEY
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $0a
+ db SPRITE_LASS
+ db SPRITE_YOUNGSTER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_24
+ db SPRITE_POKEFAN_M
+ db SPRITE_GENTLEMAN
+ db SPRITE_FISHER
+ db SPRITE_RHYDON
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $0b
+ db SPRITE_OKIDO
+ db SPRITE_TWIN
+ db SPRITE_BUG_CATCHER_BOY
+ db SPRITE_SUPER_NERD
+ db SPRITE_POKEFAN_F
+ db SPRITE_GRAMPS
+ db SPRITE_GRANNY
+ db SPRITE_CLEFAIRY
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $0c
+ db SPRITE_SILVER
+ db SPRITE_TWIN
+ db SPRITE_TEACHER
+ db SPRITE_ROCKER
+ db SPRITE_FISHING_GURU
+ db SPRITE_SWIMMER_M
+ db SPRITE_SWIMMER_F
+ db SPRITE_FISHER
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $0d
+ db SPRITE_YOUNGSTER
+ db SPRITE_GIRL
+ db SPRITE_24
+ db SPRITE_SCIENTIST
+ db SPRITE_CAPTAIN
+ db SPRITE_46
+ db SPRITE_FISHER
+ db SPRITE_RHYDON
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
+; sprite set $0e
+ db SPRITE_SILVER
+ db SPRITE_TWIN
+ db SPRITE_YOUNGSTER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_LASS
+ db SPRITE_SWIMMER_M
+ db SPRITE_SWIMMER_F
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+
diff --git a/data/overworld_sprites.asm b/data/overworld_sprites.asm
new file mode 100644
index 0000000..09135d0
--- /dev/null
+++ b/data/overworld_sprites.asm
@@ -0,0 +1,102 @@
+INCLUDE "constants.asm"
+
+SECTION "data/overworld_sprites.asm", ROMX
+
+overworld_sprite: MACRO
+; pointer, length, bank
+ dw \1
+ db \2 tiles, BANK(\1)
+ENDM
+
+OverworldSprites::
+ overworld_sprite GoldSpriteGFX, 12
+ overworld_sprite GoldBikeSpriteGFX, 12
+ overworld_sprite GoldSkateboardSpriteGFX, 12
+ overworld_sprite SilverSpriteGFX, 12
+ overworld_sprite OkidoSpriteGFX, 12
+ overworld_sprite RedSpriteGFX, 12
+ overworld_sprite BlueSpriteGFX, 12
+ overworld_sprite MasakiSpriteGFX, 12
+ overworld_sprite ElderSpriteGFX, 12
+ overworld_sprite SakakiSpriteGFX, 12
+ overworld_sprite GantetsuSpriteGFX, 12
+ overworld_sprite MomSpriteGFX, 12
+ overworld_sprite SilversMomSpriteGFX, 12
+ overworld_sprite RedsMomSpriteGFX, 12
+ overworld_sprite RedsMomSpriteGFX, 12
+ overworld_sprite NanamiSpriteGFX, 12
+ overworld_sprite EvilOkidoSpriteGFX, 12
+ overworld_sprite KikukoSpriteGFX, 12
+ overworld_sprite HayatoSpriteGFX, 12
+ overworld_sprite TsukushiSpriteGFX, 12
+ overworld_sprite TsukushiSpriteGFX, 12
+ overworld_sprite EnokiSpriteGFX, 12
+ overworld_sprite MikanSpriteGFX, 12
+ overworld_sprite MikanSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerMSpriteGFX, 12
+ overworld_sprite CooltrainerFSpriteGFX, 12
+ overworld_sprite BugCatcherBoySpriteGFX, 12
+ overworld_sprite TwinSpriteGFX, 12
+ overworld_sprite YoungsterSpriteGFX, 12
+ overworld_sprite LassSpriteGFX, 12
+ overworld_sprite TeacherSpriteGFX, 12
+ overworld_sprite GirlSpriteGFX, 12
+ overworld_sprite SuperNerdSpriteGFX, 12
+ overworld_sprite RockerSpriteGFX, 12
+ overworld_sprite PokefanMSpriteGFX, 12
+ overworld_sprite PokefanFSpriteGFX, 12
+ overworld_sprite GrampsSpriteGFX, 12
+ overworld_sprite GrannySpriteGFX, 12
+ overworld_sprite SwimmerMSpriteGFX, 12
+ overworld_sprite SwimmerFSpriteGFX, 12
+ overworld_sprite RocketMSpriteGFX, 12
+ overworld_sprite RocketMSpriteGFX, 12
+ overworld_sprite RocketMSpriteGFX, 12
+ overworld_sprite RocketFSpriteGFX, 12
+ overworld_sprite NurseSpriteGFX, 12
+ overworld_sprite LinkReceptionistSpriteGFX, 12
+ overworld_sprite ClerkSpriteGFX, 12
+ overworld_sprite FisherSpriteGFX, 12
+ overworld_sprite FishingGuruSpriteGFX, 12
+ overworld_sprite ScientistSpriteGFX, 12
+ overworld_sprite MediumSpriteGFX, 12
+ overworld_sprite SageSpriteGFX, 12
+ overworld_sprite FrowningManSpriteGFX, 12
+ overworld_sprite GentlemanSpriteGFX, 12
+ overworld_sprite BlackbeltSpriteGFX, 12
+ overworld_sprite ReceptionistSpriteGFX, 12
+ overworld_sprite OfficerSpriteGFX, 12
+ overworld_sprite CaptainSpriteGFX, 12
+ overworld_sprite CaptainSpriteGFX, 12
+ overworld_sprite CaptainSpriteGFX, 12
+ overworld_sprite MohawkSpriteGFX, 12
+ overworld_sprite GymGuySpriteGFX, 12
+ overworld_sprite SailorSpriteGFX, 12
+ overworld_sprite HelmetSpriteGFX, 12
+ overworld_sprite BurglarSpriteGFX, 12
+ overworld_sprite RhydonSpriteGFX, 12
+ overworld_sprite ClefairySpriteGFX, 12
+ overworld_sprite PidgeySpriteGFX, 12
+ overworld_sprite CharizardSpriteGFX, 12
+ overworld_sprite SnorlaxSpriteGFX, 4
+ overworld_sprite SeelSpriteGFX, 12
+ overworld_sprite PoliwrathSpriteGFX, 12
+ overworld_sprite LaprasSpriteGFX, 12
+ overworld_sprite PokeBallSpriteGFX, 4
+ overworld_sprite PokedexSpriteGFX, 4
+ overworld_sprite PaperSpriteGFX, 4
+ overworld_sprite OldLinkReceptionistSpriteGFX, 4
+ overworld_sprite OldLinkReceptionistSpriteGFX, 4
+ overworld_sprite EggSpriteGFX, 4
+ overworld_sprite BoulderSpriteGFX, 4
diff --git a/engine/sprites/sprites.asm b/engine/sprites/sprites.asm
index 1c97321..87bf7b3 100644
--- a/engine/sprites/sprites.asm
+++ b/engine/sprites/sprites.asm
@@ -1,6 +1,195 @@
INCLUDE "constants.asm"
-SECTION "engine/sprites/sprites.asm@LoadOverworldSprite", ROMX
+SECTION "engine/sprites/sprites.asm@RefreshSprites", ROMX
+
+RefreshSprites:
+ call GetPlayerSprite
+ call CheckInteriorMap
+ jr c, .outdoor
+ call AddIndoorSprites
+ call LoadUsedSpritesGfx
+ ret
+.outdoor
+ call AddOutdoorSprites
+ call LoadUsedSpritesGfx
+ ret
+
+CheckInteriorMap:
+ call GetMapEnvironment
+ cp TOWN
+ jr z, .got_outdoor
+ cp ROUTE
+ jr z, .got_outdoor
+ xor a
+ ret
+.got_outdoor
+ scf
+ ret
+
+AddIndoorSprites:
+ ld hl, wUsedNPCSprites
+ ld bc, SPRITE_SET_LENGTH
+ xor a
+ call ByteFill
+ ld a, [wPlayerObjectSprite]
+ ld [wUsedSprites], a
+ ld hl, wMap2ObjectSprite
+ ld a, 2
+.asm_14070
+ push af
+ ld a, [hl]
+ and a
+ jr z, .asm_1408d
+ ld c, a
+ call IsAnimatedSprite
+ jr nc, .static_sprite
+ ld de, wUsedStaticSprites
+ ld b, 2
+ call Function14099
+ jr .asm_1408d
+.static_sprite
+ ld de, wUsedNPCSprites
+ ld b, 8
+ call Function14099
+.asm_1408d
+ ld de, $10
+ add hl, de
+ pop af
+ inc a
+ cp $10
+ jp nz, .asm_14070
+ ret
+
+Function14099:
+.loop
+ ld a, [de]
+ and a
+ jr z, .asm_140a5
+ cp c
+ ret z
+ dec b
+ jr z, .asm_140a8
+ inc de
+ jr .loop
+
+.asm_140a5
+ ld a, c
+ ld [de], a
+ ret
+
+.asm_140a8
+ scf
+ ret
+
+
+AddOutdoorSprites:
+ ld a, [wPlayerObjectSprite]
+ ld [wUsedSprites], a
+ ld a, [wMapGroup]
+ dec a
+ ld c, a
+ ld b, 0
+ ld hl, MapGroupSpriteSets
+ add hl, bc
+ ld a, [hl]
+ push af
+ dec a
+ ld hl, SpriteSets
+ ld bc, SPRITE_SET_LENGTH
+ call AddNTimes
+ ld de, wUsedNPCSprites
+ ld bc, SPRITE_SET_LENGTH
+ call CopyBytes
+ ld a, [wd642]
+ ld c, a
+ pop af
+ ld [wd642], a
+ ret
+
+Function140d9:
+ ld hl, wcdaf
+ ld a, [hl]
+ push af
+ res 7, [hl]
+ set 6, [hl]
+ call LoadUsedSpritesGfx
+ pop af
+ ld [wcdaf], a
+ ret
+
+Function140ea:
+ ld hl, wcdaf
+ ld a, [hl]
+ push af
+ set 7, [hl]
+ res 6, [hl]
+ call LoadUsedSpritesGfx
+ pop af
+ ld [wcdaf], a
+ ret
+
+LoadUsedSpritesGfx:
+ ld hl, vNPCSprites
+ ld de, wUsedSprites
+ ld b, SPRITE_SET_LENGTH
+ ld c, 0
+.asm_14105
+ push bc
+ push de
+ push hl
+ ld a, [de]
+ and a
+ jr z, .asm_1410f
+ call LoadOverworldSprite
+.asm_1410f
+ pop hl
+ ld bc, $c0
+ add hl, bc
+ pop de
+ inc de
+ pop bc
+ inc c
+ dec b
+ jr nz, .asm_14105
+ ld a, [de]
+ and a
+ jr z, .asm_14127
+ push de
+ ld hl, vNPCSprites + $780
+ call LoadOverworldSprite
+ pop de
+.asm_14127
+ inc de
+ ld a, [de]
+ and a
+ jr z, .asm_14132
+ ld hl, vNPCSprites + $7c0
+ call LoadOverworldSprite
+.asm_14132
+ ret
+
+Function14133:
+ swap b
+ ld a, b
+ and $f0
+ ld e, a
+ ld a, b
+ and $f
+ ld d, a
+ ld hl, vNPCSprites
+ add hl, de
+ ld a, c
+ jr LoadOverworldSprite
+
+Function14144:
+ ld a, c
+ ld hl, vNPCSprites
+ jr LoadOverworldSprite
+
+Function1414a:
+ ld a, c
+ ld hl, vNPCSprites + $c0
+ jr LoadOverworldSprite
LoadOverworldSprite:
push af
@@ -52,104 +241,3 @@ GetOverworldSpriteData:
ld b, [hl]
pop hl
ret
-
-SECTION "engine/sprites/sprites.asm@OverworldSprites", ROMX
-
-overworld_sprite: MACRO
-; pointer, length, bank
- dw \1
- db \2 tiles, BANK(\1)
-ENDM
-
-OverworldSprites::
- overworld_sprite GoldSpriteGFX, 12
- overworld_sprite GoldBikeSpriteGFX, 12
- overworld_sprite GoldSkateboardSpriteGFX, 12
- overworld_sprite SilverSpriteGFX, 12
- overworld_sprite OkidoSpriteGFX, 12
- overworld_sprite RedSpriteGFX, 12
- overworld_sprite BlueSpriteGFX, 12
- overworld_sprite MasakiSpriteGFX, 12
- overworld_sprite ElderSpriteGFX, 12
- overworld_sprite SakakiSpriteGFX, 12
- overworld_sprite GantetsuSpriteGFX, 12
- overworld_sprite MomSpriteGFX, 12
- overworld_sprite SilversMomSpriteGFX, 12
- overworld_sprite RedsMomSpriteGFX, 12
- overworld_sprite RedsMomSpriteGFX, 12
- overworld_sprite NanamiSpriteGFX, 12
- overworld_sprite EvilOkidoSpriteGFX, 12
- overworld_sprite KikukoSpriteGFX, 12
- overworld_sprite HayatoSpriteGFX, 12
- overworld_sprite TsukushiSpriteGFX, 12
- overworld_sprite TsukushiSpriteGFX, 12
- overworld_sprite EnokiSpriteGFX, 12
- overworld_sprite MikanSpriteGFX, 12
- overworld_sprite MikanSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerMSpriteGFX, 12
- overworld_sprite CooltrainerFSpriteGFX, 12
- overworld_sprite BugCatcherBoySpriteGFX, 12
- overworld_sprite TwinSpriteGFX, 12
- overworld_sprite YoungsterSpriteGFX, 12
- overworld_sprite LassSpriteGFX, 12
- overworld_sprite TeacherSpriteGFX, 12
- overworld_sprite GirlSpriteGFX, 12
- overworld_sprite SuperNerdSpriteGFX, 12
- overworld_sprite RockerSpriteGFX, 12
- overworld_sprite PokefanMSpriteGFX, 12
- overworld_sprite PokefanFSpriteGFX, 12
- overworld_sprite GrampsSpriteGFX, 12
- overworld_sprite GrannySpriteGFX, 12
- overworld_sprite SwimmerMSpriteGFX, 12
- overworld_sprite SwimmerFSpriteGFX, 12
- overworld_sprite RocketMSpriteGFX, 12
- overworld_sprite RocketMSpriteGFX, 12
- overworld_sprite RocketMSpriteGFX, 12
- overworld_sprite RocketFSpriteGFX, 12
- overworld_sprite NurseSpriteGFX, 12
- overworld_sprite LinkReceptionistSpriteGFX, 12
- overworld_sprite ClerkSpriteGFX, 12
- overworld_sprite FisherSpriteGFX, 12
- overworld_sprite FishingGuruSpriteGFX, 12
- overworld_sprite ScientistSpriteGFX, 12
- overworld_sprite MediumSpriteGFX, 12
- overworld_sprite SageSpriteGFX, 12
- overworld_sprite FrowningManSpriteGFX, 12
- overworld_sprite GentlemanSpriteGFX, 12
- overworld_sprite BlackbeltSpriteGFX, 12
- overworld_sprite ReceptionistSpriteGFX, 12
- overworld_sprite OfficerSpriteGFX, 12
- overworld_sprite CaptainSpriteGFX, 12
- overworld_sprite CaptainSpriteGFX, 12
- overworld_sprite CaptainSpriteGFX, 12
- overworld_sprite MohawkSpriteGFX, 12
- overworld_sprite GymGuySpriteGFX, 12
- overworld_sprite SailorSpriteGFX, 12
- overworld_sprite HelmetSpriteGFX, 12
- overworld_sprite BurglarSpriteGFX, 12
- overworld_sprite RhydonSpriteGFX, 12
- overworld_sprite ClefairySpriteGFX, 12
- overworld_sprite PidgeySpriteGFX, 12
- overworld_sprite CharizardSpriteGFX, 12
- overworld_sprite SnorlaxSpriteGFX, 4
- overworld_sprite SeelSpriteGFX, 12
- overworld_sprite PoliwrathSpriteGFX, 12
- overworld_sprite LaprasSpriteGFX, 12
- overworld_sprite PokeBallSpriteGFX, 4
- overworld_sprite PokedexSpriteGFX, 4
- overworld_sprite PaperSpriteGFX, 4
- overworld_sprite OldLinkReceptionistSpriteGFX, 4
- overworld_sprite OldLinkReceptionistSpriteGFX, 4
- overworld_sprite EggSpriteGFX, 4
- overworld_sprite BoulderSpriteGFX, 4
diff --git a/layout.link b/layout.link
index 6259b27..077f313 100644
--- a/layout.link
+++ b/layout.link
@@ -178,10 +178,10 @@ ROMX $04
ROMX $05
org $4000
"engine/overworld/player_movement.asm@_RedrawPlayerSprite"
- org $4150
- "engine/sprites/sprites.asm@LoadOverworldSprite"
- org $423b
- "engine/sprites/sprites.asm@OverworldSprites"
+ org $4036
+ "engine/sprites/sprites.asm@RefreshSprites"
+ "data/maps/sprite_sets.asm"
+ "data/overworld_sprites.asm"
org $477d
"engine/events/pokecenter_pc.asm"
diff --git a/ram/wram.asm b/ram/wram.asm
index e6c6d34..1ba561b 100644
--- a/ram/wram.asm
+++ b/ram/wram.asm
@@ -1312,16 +1312,19 @@ SECTION "D637", WRAM0[$D637]
wd637:: db ;OW battle state? $3 wild battle, $8 is trainer battle $4 is left battle, $B is load overworld? $0 is in overworld
wd638:: db ;wd637's last written-to value
-SECTION "Used sprites", WRAM0[$D643]
-
+SECTION "Used sprites", WRAM0[$D642]
+wd642:: db
wBGMapAnchor::
dw
wUsedSprites::
- dw ; This is for the player
+ ds 2
wUsedNPCSprites::
- ds 2 * 5 ; This is for the NPCs
+ ds 8
+
+wUsedStaticSprites::
+ ds 2
wUsedSpritesEnd::
diff --git a/shim.sym b/shim.sym
index 5d9261e..a2f9e4e 100755
--- a/shim.sym
+++ b/shim.sym
@@ -1,10 +1,3 @@
-05:4036 RefreshSprites
-05:404C CheckInteriorMap
-05:405B AddIndoorSprites
-05:40AA AddOutdoorSprites
-05:40D9 Function140d9
-05:40EA Function140ea
-05:40FB LoadUsedSpritesGfx ; TODO: maybe there's a better name
05:43B6 InitAllSRAMBanks
05:43E0 Function143e0
05:457A Function1457a