summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorentrpntr <entrpntr@gmail.com>2020-04-10 04:07:13 -0400
committerentrpntr <entrpntr@gmail.com>2020-04-10 10:48:29 -0400
commit18df0a5e3742278c8c373b196b47427f713a865d (patch)
treea220f29c9316e1fbb326ddd976093efa36a8e081
parent9b816713e1ed9ca3df9ff4321a1f255635658a43 (diff)
Add engine/rtc/rtc.asm and engine/overworld/overworld.asm.
-rw-r--r--Makefile3
-rw-r--r--constants/map_data_constants.asm4
-rw-r--r--constants/sprite_constants.asm7
-rw-r--r--data/maps/outdoor_sprites.asm369
-rw-r--r--data/sprites/emotes.asm21
-rw-r--r--data/sprites/player_sprites.asm6
-rw-r--r--data/sprites/sprite_mons.asm37
-rw-r--r--data/sprites/sprites.asm103
-rwxr-xr-xengine/events/overworld.asm20
-rwxr-xr-xengine/events/specials.asm2
-rw-r--r--engine/menus/intro_menu.asm8
-rw-r--r--engine/menus/naming_screen.asm6
-rwxr-xr-xengine/overworld/map_object_action.asm2
-rw-r--r--engine/overworld/overworld.asm504
-rwxr-xr-xengine/overworld/player_movement.asm2
-rwxr-xr-xengine/overworld/time.asm4
-rw-r--r--engine/rtc/rtc.asm210
-rw-r--r--gfx/emotes.asm12
-rw-r--r--gfx/emotes/bolt.2bppbin0 -> 64 bytes
-rw-r--r--gfx/emotes/fish.2bppbin0 -> 64 bytes
-rw-r--r--gfx/emotes/happy.2bppbin0 -> 64 bytes
-rw-r--r--gfx/emotes/heart.2bppbin0 -> 64 bytes
-rw-r--r--gfx/emotes/question.2bppbin0 -> 64 bytes
-rw-r--r--gfx/emotes/sad.2bppbin0 -> 64 bytes
-rw-r--r--gfx/emotes/shock.2bppbin0 -> 64 bytes
-rw-r--r--gfx/emotes/sleep.2bppbin0 -> 64 bytes
-rw-r--r--gfx/overworld/boulder_dust.2bppbin0 -> 32 bytes
-rw-r--r--gfx/overworld/celebi.2bppbin0 -> 256 bytes
-rw-r--r--gfx/overworld/chris_fish.2bppbin0 -> 144 bytes
-rw-r--r--gfx/overworld/cut_grass.2bppbin0 -> 64 bytes
-rw-r--r--gfx/overworld/cut_tree.2bppbin0 -> 64 bytes
-rw-r--r--gfx/overworld/fishing_rod.2bppbin0 -> 32 bytes
-rw-r--r--gfx/overworld/grass_rustle.2bpp1
-rw-r--r--gfx/overworld/headbutt_tree.2bppbin0 -> 128 bytes
-rw-r--r--gfx/overworld/kris_fish.2bppbin0 -> 144 bytes
-rw-r--r--gfx/overworld/shadow.2bpp1
-rw-r--r--gfx/sprites.asm101
-rw-r--r--gfx/sprites/big_lapras.2bppbin0 -> 128 bytes
-rw-r--r--gfx/sprites/big_onix.2bppbin0 -> 192 bytes
-rw-r--r--gfx/sprites/big_snorlax.2bppbin0 -> 128 bytes
-rw-r--r--gfx/sprites/biker.2bpp2
-rw-r--r--gfx/sprites/bill.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/bird.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/black_belt.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/blaine.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/blue.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/boulder.2bpp1
-rw-r--r--gfx/sprites/brock.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/bruno.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/buena.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/bug_catcher.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/bugsy.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/cal.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/captain.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/chris.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/chris_bike.2bpp2
-rw-r--r--gfx/sprites/chuck.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/clair.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/clerk.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/cooltrainer_f.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/cooltrainer_m.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/daisy.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/dragon.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/elder.2bpp7
-rw-r--r--gfx/sprites/elm.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/erika.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/fairy.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/falkner.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/famicom.2bppbin0 -> 64 bytes
-rw-r--r--gfx/sprites/fisher.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/fishing_guru.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/fruit_tree.2bpp1
-rw-r--r--gfx/sprites/gameboy_kid.2bpp1
-rw-r--r--gfx/sprites/gentleman.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/gold_trophy.2bppbin0 -> 64 bytes
-rw-r--r--gfx/sprites/gramps.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/granny.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/gym_guy.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/janine.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/jasmine.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/karen.2bpp2
-rw-r--r--gfx/sprites/kimono_girl.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/koga.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/kurt.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/lance.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/lass.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/link_receptionist.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/misty.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/mom.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/monster.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/morty.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/n64.2bpp1
-rw-r--r--gfx/sprites/nurse.2bppbin0 -> 192 bytes
-rw-r--r--gfx/sprites/oak.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/officer.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/old_link_receptionist.2bpp1
-rw-r--r--gfx/sprites/paper.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/pharmacist.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/poke_ball.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/pokedex.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/pokefan_f.2bpp1
-rw-r--r--gfx/sprites/pokefan_m.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/pryce.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/receptionist.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/red.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/reds_mom.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/rock.2bpp1
-rw-r--r--gfx/sprites/rocker.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/rocket.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/rocket_girl.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/sabrina.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/sage.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/sailor.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/scientist.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/silver.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/silver_trophy.2bppbin0 -> 64 bytes
-rw-r--r--gfx/sprites/slowpoke.2bpp1
-rw-r--r--gfx/sprites/snes.2bppbin0 -> 64 bytes
-rw-r--r--gfx/sprites/sudowoodo.2bppbin0 -> 128 bytes
-rw-r--r--gfx/sprites/super_nerd.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/surf.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/surfing_pikachu.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/surge.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/swimmer_girl.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/swimmer_guy.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/teacher.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/twin.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/unused_guy.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/virtual_boy.2bppbin0 -> 64 bytes
-rw-r--r--gfx/sprites/whitney.2bppbin0 -> 384 bytes
-rw-r--r--gfx/sprites/will.2bpp1
-rw-r--r--gfx/sprites/youngster.2bppbin0 -> 384 bytes
-rw-r--r--home/gfx.asm4
-rw-r--r--home/map.asm10
-rw-r--r--home/time.asm12
-rw-r--r--home/window.asm2
-rw-r--r--main.asm47
-rw-r--r--pokegold.link8
-rw-r--r--pokesilver.link8
-rw-r--r--wram.asm38
140 files changed, 1456 insertions, 118 deletions
diff --git a/Makefile b/Makefile
index 042afa5c..d9132f99 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,8 @@ home.o \
main.o \
wram.o \
data/text/common.o \
-data/pokemon/dex_entries.o
+data/pokemon/dex_entries.o \
+gfx/sprites.o
# Distinguish asm files which are game-exclusive for building (*_[gold|silver].asm)
gs_excl_asm := gfx/pics
diff --git a/constants/map_data_constants.asm b/constants/map_data_constants.asm
index 5098e28d..05322ffc 100644
--- a/constants/map_data_constants.asm
+++ b/constants/map_data_constants.asm
@@ -100,5 +100,5 @@ const_value = -1
NUM_SPAWNS EQU const_value
; outdoor sprite limits (see engine/overworld/overworld.asm)
-MAX_OUTDOOR_SPRITES EQU 23
-SPRITE_GFX_LIST_CAPACITY EQU $20
+MAX_OUTDOOR_SPRITES EQU 11
+SPRITE_GFX_LIST_CAPACITY EQU 12
diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm
index caa6743c..b1ec6e12 100644
--- a/constants/sprite_constants.asm
+++ b/constants/sprite_constants.asm
@@ -97,13 +97,6 @@
const SPRITE_FRUIT_TREE ; 5d
const SPRITE_GOLD_TROPHY ; 5e
const SPRITE_SILVER_TROPHY ; 5f
- const SPRITE_KRIS ; 60
- const SPRITE_KRIS_BIKE ; 61
- const SPRITE_KURT_OUTSIDE ; 62
- const SPRITE_SUICUNE ; 63
- const SPRITE_ENTEI ; 64
- const SPRITE_RAIKOU ; 65
- const SPRITE_STANDING_YOUNGSTER ; 66
; SpriteMons indexes (see data/sprites/sprite_mons.asm)
const_def $80
diff --git a/data/maps/outdoor_sprites.asm b/data/maps/outdoor_sprites.asm
new file mode 100644
index 00000000..160ca804
--- /dev/null
+++ b/data/maps/outdoor_sprites.asm
@@ -0,0 +1,369 @@
+; Valid sprite IDs for each map group.
+; Maps with environment ROUTE or TOWN can only use these sprites.
+
+OutdoorSprites:
+; entries correspond to map groups
+ dw OlivineGroupSprites
+ dw MahoganyGroupSprites
+ dw DungeonsGroupSprites
+ dw EcruteakGroupSprites
+ dw BlackthornGroupSprites
+ dw CinnabarGroupSprites
+ dw CeruleanGroupSprites
+ dw AzaleaGroupSprites
+ dw LakeOfRageGroupSprites
+ dw VioletGroupSprites
+ dw GoldenrodGroupSprites
+ dw VermilionGroupSprites
+ dw PalletGroupSprites
+ dw PewterGroupSprites
+ dw FastShipGroupSprites
+ dw IndigoGroupSprites
+ dw FuchsiaGroupSprites
+ dw LavenderGroupSprites
+ dw SilverGroupSprites
+ dw CableClubGroupSprites
+ dw CeladonGroupSprites
+ dw CianwoodGroupSprites
+ dw ViridianGroupSprites
+ dw NewBarkGroupSprites
+ dw SaffronGroupSprites
+ dw CherrygroveGroupSprites
+
+PalletGroupSprites:
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_BLUE
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SWIMMER_GUY
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+ViridianGroupSprites:
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_BLUE
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SWIMMER_GUY
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+PewterGroupSprites:
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_BLUE
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SWIMMER_GUY
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+CinnabarGroupSprites:
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_BLUE
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SWIMMER_GUY
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+CeruleanGroupSprites:
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_POKEFAN_M
+ db SPRITE_ROCKET
+ db SPRITE_MISTY
+ db SPRITE_POKE_BALL
+ db SPRITE_SLOWPOKE
+
+SaffronGroupSprites:
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_POKEFAN_M
+ db SPRITE_ROCKET
+ db SPRITE_MISTY
+ db SPRITE_POKE_BALL
+ db SPRITE_SLOWPOKE
+
+CeladonGroupSprites:
+ db SPRITE_FISHER
+ db SPRITE_POLIWAG
+ db SPRITE_TEACHER
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_BIKER
+ db SPRITE_SILVER
+ db SPRITE_BLUE
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+LavenderGroupSprites:
+ db SPRITE_POKEFAN_M
+ db SPRITE_MACHOP
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_BIKER
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+VermilionGroupSprites:
+ db SPRITE_POKEFAN_M
+ db SPRITE_MACHOP
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_BIKER
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+FuchsiaGroupSprites:
+ db SPRITE_POKEFAN_M
+ db SPRITE_MACHOP
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_BIKER
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+IndigoGroupSprites:
+ db SPRITE_POKEFAN_M
+ db SPRITE_BUENA
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_MACHOP
+ db SPRITE_BIKER
+ db SPRITE_POKE_BALL
+ db SPRITE_BOULDER
+
+NewBarkGroupSprites:
+ db SPRITE_SILVER
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_YOUNGSTER
+ db SPRITE_MONSTER
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+CherrygroveGroupSprites:
+ db SPRITE_SILVER
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_YOUNGSTER
+ db SPRITE_MONSTER
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+SilverGroupSprites:
+ db SPRITE_SILVER
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_YOUNGSTER
+ db SPRITE_MONSTER
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+VioletGroupSprites:
+ db SPRITE_FISHER
+ db SPRITE_LASS
+ db SPRITE_OFFICER
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_BUG_CATCHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_WEIRD_TREE
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+EcruteakGroupSprites:
+ db SPRITE_FISHER
+ db SPRITE_LASS
+ db SPRITE_OFFICER
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_BUG_CATCHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_WEIRD_TREE
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+
+AzaleaGroupSprites:
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_OFFICER
+ db SPRITE_POKEFAN_M
+ db SPRITE_BLACK_BELT
+ db SPRITE_TEACHER
+ db SPRITE_AZALEA_ROCKET
+ db SPRITE_LASS
+ db SPRITE_SILVER
+ db SPRITE_FRUIT_TREE
+ db SPRITE_SLOWPOKE
+
+GoldenrodGroupSprites:
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_OFFICER
+ db SPRITE_POKEFAN_M
+ db SPRITE_DAY_CARE_MON_1
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_ROCKET
+ db SPRITE_LASS
+ db SPRITE_DAY_CARE_MON_2
+ db SPRITE_FRUIT_TREE
+ db SPRITE_SLOWPOKE
+
+CianwoodGroupSprites:
+ db SPRITE_OLIVINE_RIVAL
+ db SPRITE_POKEFAN_M
+ db SPRITE_LASS
+ db SPRITE_BUENA
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SAILOR
+ db SPRITE_POKEFAN_F
+ db SPRITE_YOUNGSTER
+ db SPRITE_TAUROS
+ db SPRITE_FRUIT_TREE
+ db SPRITE_ROCK
+
+OlivineGroupSprites:
+ db SPRITE_OLIVINE_RIVAL
+ db SPRITE_POKEFAN_M
+ db SPRITE_LASS
+ db SPRITE_BUENA
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SAILOR
+ db SPRITE_POKEFAN_F
+ db SPRITE_YOUNGSTER
+ db SPRITE_TAUROS
+ db SPRITE_FRUIT_TREE
+ db SPRITE_ROCK
+
+LakeOfRageGroupSprites:
+ db SPRITE_LANCE
+ db SPRITE_GRAMPS
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_LASS
+ db SPRITE_YOUNGSTER
+ db SPRITE_GYARADOS
+ db SPRITE_FRUIT_TREE
+ db SPRITE_POKE_BALL
+
+MahoganyGroupSprites:
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_POKEFAN_M
+ db SPRITE_BLACK_BELT
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_FRUIT_TREE
+ db SPRITE_POKE_BALL
+
+BlackthornGroupSprites:
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_POKEFAN_M
+ db SPRITE_BLACK_BELT
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_FRUIT_TREE
+ db SPRITE_POKE_BALL
+
+DungeonsGroupSprites:
+ db SPRITE_LASS
+ db SPRITE_POKEFAN_F
+ db SPRITE_TEACHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_GROWLITHE
+ db SPRITE_POKEFAN_M
+ db SPRITE_ROCKER
+ db SPRITE_GAMEBOY_KID
+ db SPRITE_SCIENTIST
+ db SPRITE_POKE_BALL
+ db SPRITE_BOULDER
+
+FastShipGroupSprites:
+ db SPRITE_SAILOR
+ db SPRITE_FISHING_GURU
+ db SPRITE_GENTLEMAN
+ db SPRITE_SUPER_NERD
+ db SPRITE_HO_OH
+ db SPRITE_TEACHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_YOUNGSTER
+ db SPRITE_FAIRY
+ db SPRITE_POKE_BALL
+ db SPRITE_ROCK
+
+CableClubGroupSprites:
+ db SPRITE_OAK
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_TWIN
+ db SPRITE_POKEFAN_M
+ db SPRITE_GRAMPS
+ db SPRITE_FAIRY
+ db SPRITE_SILVER
+ db SPRITE_FISHING_GURU
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
diff --git a/data/sprites/emotes.asm b/data/sprites/emotes.asm
new file mode 100644
index 00000000..2371c462
--- /dev/null
+++ b/data/sprites/emotes.asm
@@ -0,0 +1,21 @@
+emote: MACRO
+; graphics pointer, length, starting tile
+ dw \1
+ db \2 tiles, BANK(\1)
+ dw vTiles0 tile \3
+ENDM
+
+Emotes:
+; entries correspond to EMOTE_* constants
+ emote ShockEmote, 4, $f8
+ emote QuestionEmote, 4, $f8
+ emote HappyEmote, 4, $f8
+ emote SadEmote, 4, $f8
+ emote HeartEmote, 4, $f8
+ emote BoltEmote, 4, $f8
+ emote SleepEmote, 4, $f8
+ emote FishEmote, 4, $f8
+ emote JumpShadowGFX, 1, $fc
+ emote FishingRodGFX, 2, $fc
+ emote BoulderDustGFX, 2, $fe
+ emote GrassRustleGFX, 1, $fe
diff --git a/data/sprites/player_sprites.asm b/data/sprites/player_sprites.asm
new file mode 100644
index 00000000..63d3ab67
--- /dev/null
+++ b/data/sprites/player_sprites.asm
@@ -0,0 +1,6 @@
+ChrisStateSprites:
+ db PLAYER_NORMAL, SPRITE_CHRIS
+ db PLAYER_BIKE, SPRITE_CHRIS_BIKE
+ db PLAYER_SURF, SPRITE_SURF
+ db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
+ db -1 ; end
diff --git a/data/sprites/sprite_mons.asm b/data/sprites/sprite_mons.asm
new file mode 100644
index 00000000..3d53804d
--- /dev/null
+++ b/data/sprites/sprite_mons.asm
@@ -0,0 +1,37 @@
+SpriteMons:
+; entries correspond to SPRITE_* constants past SPRITE_POKEMON
+ db UNOWN
+ db GEODUDE
+ db GROWLITHE
+ db WEEDLE
+ db SHELLDER
+ db ODDISH
+ db GENGAR
+ db ZUBAT
+ db MAGIKARP
+ db SQUIRTLE
+ db TOGEPI
+ db BUTTERFREE
+ db DIGLETT
+ db POLIWAG
+ db PIKACHU
+ db CLEFAIRY
+ db CHARMANDER
+ db JYNX
+ db STARMIE
+ db BULBASAUR
+ db JIGGLYPUFF
+ db GRIMER
+ db EKANS
+ db PARAS
+ db TENTACOOL
+ db TAUROS
+ db MACHOP
+ db VOLTORB
+ db LAPRAS
+ db RHYDON
+ db MOLTRES
+ db SNORLAX
+ db GYARADOS
+ db LUGIA
+ db HO_OH
diff --git a/data/sprites/sprites.asm b/data/sprites/sprites.asm
new file mode 100644
index 00000000..b208b862
--- /dev/null
+++ b/data/sprites/sprites.asm
@@ -0,0 +1,103 @@
+overworld_sprite: MACRO
+; pointer, length, type, palette
+ dw \1
+ db \2 tiles, BANK(\1), \3, \4
+ENDM
+
+OverworldSprites:
+; entries correspond to SPRITE_* constants
+ overworld_sprite ChrisSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite ChrisBikeSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite GameboyKidSpriteGFX, 12, STANDING_SPRITE, PAL_OW_GREEN
+ overworld_sprite SilverSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite OakSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite RedSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite BlueSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite BillSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite ElderSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite JanineSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite KurtSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite MomSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite BlaineSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite RedsMomSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite DaisySpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite ElmSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite WillSpriteGFX, 12, STANDING_SPRITE, PAL_OW_RED
+ overworld_sprite FalknerSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite WhitneySpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite BugsySpriteGFX, 12, WALKING_SPRITE, PAL_OW_GREEN
+ overworld_sprite MortySpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite ChuckSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite JasmineSpriteGFX, 12, WALKING_SPRITE, PAL_OW_GREEN
+ overworld_sprite PryceSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite ClairSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite BrockSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite KarenSpriteGFX, 12, STANDING_SPRITE, PAL_OW_BLUE
+ overworld_sprite BrunoSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite MistySpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite LanceSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite SurgeSpriteGFX, 12, WALKING_SPRITE, PAL_OW_GREEN
+ overworld_sprite ErikaSpriteGFX, 12, WALKING_SPRITE, PAL_OW_GREEN
+ overworld_sprite KogaSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite SabrinaSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite CooltrainerMSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite CooltrainerFSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite BugCatcherSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite TwinSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite YoungsterSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite LassSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite TeacherSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite BuenaSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite SuperNerdSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite RockerSpriteGFX, 12, WALKING_SPRITE, PAL_OW_GREEN
+ overworld_sprite PokefanMSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite PokefanFSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite GrampsSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite GrannySpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite SwimmerGuySpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite SwimmerGirlSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite BigSnorlaxSpriteGFX, 12, STANDING_SPRITE, PAL_OW_BLUE
+ overworld_sprite SurfingPikachuSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite RocketSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite RocketGirlSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite NurseSpriteGFX, 12, STANDING_SPRITE, PAL_OW_RED
+ overworld_sprite LinkReceptionistSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite ClerkSpriteGFX, 12, WALKING_SPRITE, PAL_OW_GREEN
+ overworld_sprite FisherSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite FishingGuruSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite ScientistSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite KimonoGirlSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite SageSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite UnusedGuySpriteGFX, 12, STANDING_SPRITE, PAL_OW_RED
+ overworld_sprite GentlemanSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite BlackBeltSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite ReceptionistSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite OfficerSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite CalSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite SlowpokeSpriteGFX, 4, STILL_SPRITE, PAL_OW_RED
+ overworld_sprite CaptainSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite BigLaprasSpriteGFX, 12, STANDING_SPRITE, PAL_OW_BLUE
+ overworld_sprite GymGuySpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite SailorSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite BikerSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BROWN
+ overworld_sprite PharmacistSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite MonsterSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite FairySpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite BirdSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite DragonSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
+ overworld_sprite BigOnixSpriteGFX, 12, STANDING_SPRITE, PAL_OW_BROWN
+ overworld_sprite N64SpriteGFX, 4, STILL_SPRITE, PAL_OW_BROWN
+ overworld_sprite SudowoodoSpriteGFX, 12, STANDING_SPRITE, PAL_OW_GREEN
+ overworld_sprite SurfSpriteGFX, 12, WALKING_SPRITE, PAL_OW_BLUE
+ overworld_sprite PokeBallSpriteGFX, 4, STILL_SPRITE, PAL_OW_RED
+ overworld_sprite PokedexSpriteGFX, 4, STILL_SPRITE, PAL_OW_BROWN
+ overworld_sprite PaperSpriteGFX, 4, STILL_SPRITE, PAL_OW_BLUE
+ overworld_sprite VirtualBoySpriteGFX, 4, STILL_SPRITE, PAL_OW_RED
+ overworld_sprite OldLinkReceptionistSpriteGFX, 12, STANDING_SPRITE, PAL_OW_RED
+ overworld_sprite RockSpriteGFX, 4, STILL_SPRITE, PAL_OW_ROCK
+ overworld_sprite BoulderSpriteGFX, 4, STILL_SPRITE, PAL_OW_ROCK
+ overworld_sprite SnesSpriteGFX, 4, STILL_SPRITE, PAL_OW_BLUE
+ overworld_sprite FamicomSpriteGFX, 4, STILL_SPRITE, PAL_OW_RED
+ overworld_sprite FruitTreeSpriteGFX, 4, STILL_SPRITE, PAL_OW_TREE
+ overworld_sprite GoldTrophySpriteGFX, 4, STILL_SPRITE, PAL_OW_BROWN
+ overworld_sprite SilverTrophySpriteGFX, 4, STILL_SPRITE, PAL_OW_SILVER
diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm
index 086587b2..f4e420bb 100755
--- a/engine/events/overworld.asm
+++ b/engine/events/overworld.asm
@@ -416,7 +416,7 @@ UsedSurfScript:
closetext
readmem wBuffer2
writevar VAR_MOVEMENT
- special ReplacePlayerSprite
+ special ReplaceChrisSprite
special PlayMapMusic
; step into the water (slow_step DIR, step_end)
special SurfStartStep
@@ -537,7 +537,7 @@ TryToFly:
ld de, ENGINE_STORMBADGE
call FieldMoveBadgeCheck
jr c, .asm_caa4
- call GetMapPermission
+ call GetMapEnvironment
call CheckOutdoorMap
jr z, .asm_ca83
jr .asm_caa7
@@ -597,7 +597,7 @@ FlyScript:
newloadmap MAPSETUP_TELEPORT
callasm FlyToAnimation
special WaitSFX
- special ReplacePlayerSprite
+ special ReplaceChrisSprite
callasm Function1415c
end
@@ -737,7 +737,7 @@ asm_cbaa:
dw FailToEscapeFromDungeon
TryEscapeFromDungeon:
- call GetMapPermission
+ call GetMapEnvironment
cp CAVE
jr z, .asm_cbcf
cp DUNGEON
@@ -853,7 +853,7 @@ TeleportFunction:
dw FailTeleport
TryTeleport:
- call GetMapPermission
+ call GetMapEnvironment
call CheckOutdoorMap
jr z, .asm_cc85
jr .asm_cc9c
@@ -1556,7 +1556,7 @@ PutTheRodAway: ; d096
ld a, $1
ld [wPlayerAction], a
call UpdateSprites
- call ReplacePlayerSprite
+ call ReplaceChrisSprite
ret
Text_OhABite:
@@ -1637,7 +1637,7 @@ ChooseScriptBasedOnWhetherBikeIsRegistered: ; d126 (3:5126)
ret
CheckBikePermission: ; d12e (3:512e)
- call GetMapPermission
+ call GetMapEnvironment
call CheckOutdoorMap
jr z, .asm_d140
cp CAVE
@@ -1664,13 +1664,13 @@ Script_GetOnBike: ; d14b
writetext GotOnBikeText
waitbutton
closetext
- special ReplacePlayerSprite
+ special ReplaceChrisSprite
end
Script_GetOnBike_Register:
loadvar VAR_MOVEMENT, PLAYER_BIKE
closetext
- special ReplacePlayerSprite
+ special ReplaceChrisSprite
end
nop
@@ -1684,7 +1684,7 @@ Script_GetOffBike:
waitbutton
FinishGettingOffBike:
closetext
- special ReplacePlayerSprite
+ special ReplaceChrisSprite
special PlayMapMusic
end
diff --git a/engine/events/specials.asm b/engine/events/specials.asm
index 770b8cfb..8b7243d1 100755
--- a/engine/events/specials.asm
+++ b/engine/events/specials.asm
@@ -85,7 +85,7 @@ SpecialsPointers:
add_special UpdateTimePals
add_special ClearTilemap
add_special UpdateSprites
- add_special ReplacePlayerSprite
+ add_special ReplaceChrisSprite
add_special GameCornerPrizeMonCheckDex
add_special UnusedSetSeenMon
add_special WaitSFX, $03
diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm
index 41b93708..763b4fbb 100644
--- a/engine/menus/intro_menu.asm
+++ b/engine/menus/intro_menu.asm
@@ -961,7 +961,7 @@ ShrinkPlayer: ; 6123 (1:6123)
ld c, 3
call DelayFrames
- call Intro_PlacePlayerSprite
+ call Intro_PlaceChrisSprite
call LoadFontsExtra
ld c, 50
@@ -1059,9 +1059,9 @@ ShrinkFrame: ; 61f7 (1:61f7)
predef PlaceGraphic
ret
-Intro_PlacePlayerSprite: ; 6210 (1:6210)
- ld de, PlayerSpriteGFX
- lb bc, BANK(PlayerSpriteGFX), 12
+Intro_PlaceChrisSprite: ; 6210 (1:6210)
+ ld de, ChrisSpriteGFX
+ lb bc, BANK(ChrisSpriteGFX), 12
ld hl, $8000
call Request2bpp
ld hl, wVirtualOAM
diff --git a/engine/menus/naming_screen.asm b/engine/menus/naming_screen.asm
index d5b35a8e..55c6ca82 100644
--- a/engine/menus/naming_screen.asm
+++ b/engine/menus/naming_screen.asm
@@ -112,7 +112,7 @@ Function11b2a:
db "NICKNAME?@"
Function11b79:
- ld de, PlayerSpriteGFX ; $4000
+ ld de, ChrisSpriteGFX ; $4000
call Function11c11
hlcoord 5, 2
ld de, .String
@@ -174,7 +174,7 @@ Function11bda:
Function11c11: ; 11c11 (4:5c11)
push de
ld hl, $8000
- lb bc, BANK(PlayerSpriteGFX), 4
+ lb bc, BANK(ChrisSpriteGFX), 4
call Request2bpp
pop de
ld hl, $c0
@@ -182,7 +182,7 @@ Function11c11: ; 11c11 (4:5c11)
ld e, l
ld d, h
ld hl, $8040
- lb bc, BANK(PlayerSpriteGFX), 4
+ lb bc, BANK(ChrisSpriteGFX), 4
call Request2bpp
xor a
ld hl, wMisc
diff --git a/engine/overworld/map_object_action.asm b/engine/overworld/map_object_action.asm
index f895fe15..7701ec4f 100755
--- a/engine/overworld/map_object_action.asm
+++ b/engine/overworld/map_object_action.asm
@@ -216,7 +216,7 @@ Function4597:
ret
Function459e:
- ld a, [wd558]
+ ld a, [wVariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS]
ld d, $17
cp $33
jr z, .asm_45ad
diff --git a/engine/overworld/overworld.asm b/engine/overworld/overworld.asm
new file mode 100644
index 00000000..fec0b95a
--- /dev/null
+++ b/engine/overworld/overworld.asm
@@ -0,0 +1,504 @@
+_ReplaceChrisSprite::
+ call GetChrisSprite
+ ld a, [wUsedSprites]
+ ld c, a
+ ld a, [wUsedSprites + 1]
+ ld b, a
+ call GetUsedSprite
+ ret
+
+Function1414b::
+ ld hl, wSpriteFlags
+ ld a, [hl]
+ push af
+ res 7, [hl]
+ set 6, [hl]
+ call LoadUsedSpritesGFX
+ pop af
+ ld [wSpriteFlags], a
+ ret
+
+Function1415c::
+ ld hl, wSpriteFlags
+ ld a, [hl]
+ push af
+ set 7, [hl]
+ res 6, [hl]
+ call LoadUsedSpritesGFX
+ pop af
+ ld [wSpriteFlags], a
+ ret
+
+RefreshSprites::
+ call .Refresh
+ call LoadUsedSpritesGFX
+ ret
+
+.Refresh:
+ xor a
+ ld bc, SPRITE_GFX_LIST_CAPACITY * 2
+ ld hl, wUsedSprites
+ call ByteFill
+ call GetChrisSprite
+ call AddMapSprites
+ ret
+
+GetChrisSprite:
+ ld a, [wPlayerState]
+ ld c, a
+; Get Chris's sprite.
+ ld hl, ChrisStateSprites
+.loop
+ ld a, [hli]
+ cp c
+ jr z, .good
+ inc hl
+ cp -1
+ jr nz, .loop
+
+; Any player state not in the array defaults to Chris's sprite.
+ xor a ; ld a, PLAYER_NORMAL
+ ld [wPlayerState], a
+ ld a, SPRITE_CHRIS
+ jr .finish
+
+.good
+ ld a, [hl]
+
+.finish
+ ld [wUsedSprites + 0], a
+ ld [wPlayerSprite], a
+ ld [wPlayerObjectSprite], a
+ ret
+
+INCLUDE "data/sprites/player_sprites.asm"
+
+AddMapSprites:
+ call GetMapEnvironment
+ call CheckOutdoorMap
+ jr z, .outdoor
+ call AddIndoorSprites
+ ret
+
+.outdoor
+ call AddOutdoorSprites
+ ret
+
+AddIndoorSprites:
+ ld hl, wMap2ObjectSprite
+ ld a, 2
+.loop
+ push af
+ ld a, [hl]
+ call AddSpriteGFX
+ ld de, MAPOBJECT_LENGTH
+ add hl, de
+ pop af
+ inc a
+ cp NUM_OBJECTS
+ jr nz, .loop
+ ret
+
+AddOutdoorSprites:
+ ld a, [wMapGroup]
+ dec a
+ ld c, a
+ ld b, 0
+ ld hl, OutdoorSprites
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld c, MAX_OUTDOOR_SPRITES
+.loop
+ push bc
+ ld a, [hli]
+ call AddSpriteGFX
+ pop bc
+ dec c
+ jr nz, .loop
+
+ ld a, [wd05a]
+ ld c, a
+ ret
+
+AddSpriteGFX:
+ and a
+ ret z
+
+ ld c, a
+ call _DoesSpriteHaveFacings
+ jr nc, .nope
+
+ ld de, wUsedSprites + (SPRITE_GFX_LIST_CAPACITY - 2) * 2
+ ld b, 2
+ call Function14212
+ jr nc, .ok
+
+.nope:
+ ld de, wUsedSprites + 2
+ ld b, SPRITE_GFX_LIST_CAPACITY - 3
+ call Function14212
+ jr .ok
+
+.ok:
+ ret
+
+Function14212:
+.loop
+ ld a, [de]
+ and a
+ jr z, .new
+
+ cp c
+ jr z, .exists
+
+ inc de
+ inc de
+ dec b
+ jr nz, .loop
+
+ scf
+ ret
+
+.new:
+ ld a, c
+ ld [de], a
+ xor a
+ ret
+
+.exists:
+ xor a
+ ret
+
+LoadUsedSpritesGFX:
+ ld a, MAPCALLBACK_SPRITES
+ call RunMapCallback
+ call GetUsedSprites
+ ret c
+
+ call Function14265
+ call LoadMiscTiles
+ ret
+
+GetUsedSprites:
+ xor a
+ ldh [hUsedSpriteTile], a
+ ld hl, wUsedSprites
+ ld a, $a
+
+.loop
+ push af
+ ld a, [hli]
+ ldh [hUsedSpriteIndex], a
+ and a
+ jr z, .dont_set
+
+ call GetSprite
+ push hl
+ push bc
+ ldh a, [hUsedSpriteTile]
+ call CopyToVram
+ pop bc
+ pop hl
+ ldh a, [hUsedSpriteTile]
+ ld [hl], a
+ add c
+ ldh [hUsedSpriteTile], a
+ cp $80
+ jr nc, .done
+
+.dont_set
+ inc hl
+ pop af
+ dec a
+ jr nz, .loop
+
+ xor a
+ ret
+
+.done
+ pop af
+ scf
+ ret
+
+Function14265:
+ ld a, [wUsedSprites + (SPRITE_GFX_LIST_CAPACITY - 2) * 2]
+ and a
+ jr z, .asm_14274
+
+ call GetSprite
+ ld hl, vTiles0 tile $78
+ call Get2bpp
+
+.asm_14274
+ ld a, $78
+ ld [wUsedSprites + (SPRITE_GFX_LIST_CAPACITY - 2) * 2 + 1], a
+ ld a, [wUsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2]
+ and a
+ jr z, .asm_14288
+
+ call GetSprite
+ ld hl, vTiles0 tile $7c
+ call Get2bpp
+
+.asm_14288
+ ld a, $7c
+ ld [wUsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2 + 1], a
+ ret
+
+LoadMiscTiles:
+ ld a, [wSpriteFlags]
+ bit 6, a
+ ret nz
+
+ ld c, EMOTE_SHADOW
+ farcall LoadEmote
+ call GetMapEnvironment
+ call CheckOutdoorMap
+ ld c, EMOTE_GRASS_RUSTLE
+ jr z, .outdoor
+ ld c, EMOTE_BOULDER_DUST
+.outdoor
+ farcall LoadEmote
+ ret
+
+GetSprite:
+ call GetMonSprite
+ ret c
+
+ push hl
+ ld hl, OverworldSprites + SPRITEDATA_ADDR
+ dec a
+ ld c, a
+ ld b, 0
+ ld a, NUM_SPRITEDATA_FIELDS
+ call AddNTimes
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ swap a
+ ld c, a
+ ld b, [hl]
+ pop hl
+ ret
+
+GetMonSprite:
+; Return carry if a monster sprite was loaded.
+
+ cp SPRITE_POKEMON
+ jr c, .Normal
+ cp SPRITE_DAY_CARE_MON_1
+ jr z, .BreedMon1
+ cp SPRITE_DAY_CARE_MON_2
+ jr z, .BreedMon2
+ cp SPRITE_VARS
+ jr nc, .Variable
+ jr .Icon
+
+.Normal:
+ and a
+ ret
+
+.Icon:
+ push hl
+ sub SPRITE_POKEMON
+ ld e, a
+ ld d, 0
+ ld hl, SpriteMons
+ add hl, de
+ ld a, [hl]
+ pop hl
+ jr .Mon
+
+.BreedMon1
+ ld a, [wBreedMon1Species]
+ jr .Mon
+
+.BreedMon2
+ ld a, [wBreedMon2Species]
+
+.Mon:
+ ld e, a
+ and a
+ jr z, .NoBreedmon
+
+ push hl
+ farcall LoadOverworldMonIcon
+ pop hl
+
+ scf
+ ret
+
+.Variable:
+ push hl
+ sub SPRITE_VARS
+ ld e, a
+ ld d, 0
+ ld hl, wVariableSprites
+ add hl, de
+ ld a, [hl]
+ pop hl
+ and a
+ jp nz, GetMonSprite
+
+.NoBreedmon:
+ ld a, 1
+ and a
+ ret
+
+_DoesSpriteHaveFacings::
+; Checks to see whether we can apply a facing to a sprite.
+; Returns carry unless the sprite is a Pokemon or a Still Sprite.
+ cp SPRITE_POKEMON
+ jr nc, .only_down
+
+ push hl
+ push bc
+ ld hl, OverworldSprites + SPRITEDATA_TYPE
+ dec a
+ ld c, a
+ ld b, 0
+ ld a, NUM_SPRITEDATA_FIELDS
+ call AddNTimes
+ ld a, [hl]
+ pop bc
+ pop hl
+ cp STILL_SPRITE
+ jr nz, .only_down
+ scf
+ ret
+
+.only_down
+ and a
+ ret
+
+_GetSpritePalette::
+ ld a, c
+ call GetMonSprite
+ jr c, .is_pokemon
+
+ ld hl, OverworldSprites + SPRITEDATA_PALETTE
+ dec a
+ ld c, a
+ ld b, 0
+ ld a, NUM_SPRITEDATA_FIELDS
+ call AddNTimes
+ ld c, [hl]
+ ret
+
+.is_pokemon
+ xor a
+ ld c, a
+ ret
+
+CopyToVram:
+ ld l, a
+ ld h, 0
+rept 4
+ add hl, hl
+endr
+ ld a, l
+ add LOW(vTiles0)
+ ld l, a
+ ld a, h
+ adc HIGH(vTiles0)
+ ld h, a
+ push hl
+ push de
+ push bc
+ ld a, [wSpriteFlags]
+ bit 7, a
+ jr nz, .skip
+ call Get2bpp
+
+.skip:
+ pop bc
+ ld l, c
+ ld h, 0
+rept 4
+ add hl, hl
+endr
+ pop de
+ add hl, de
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, h
+ add HIGH(vTiles1 - vTiles0)
+ ld h, a
+ ldh a, [hUsedSpriteIndex]
+ call _DoesSpriteHaveFacings
+ jr c, .done
+
+ ld a, [wSpriteFlags]
+ bit 6, a
+ jr nz, .done
+
+ call Get2bpp
+
+.done:
+ ret
+
+Function1438a:
+ ld a, c
+ jr GetUsedSprite
+
+ ld a, c
+ ld b, 0
+ jr GetUsedSprite
+
+ ld a, c
+ ld b, 12
+ jr GetUsedSprite
+
+GetUsedSprite:
+ push bc
+ ld a, c
+ ldh [hUsedSpriteIndex], a
+ call GetSprite
+ pop af
+ call CopyToVram
+ ret
+
+LoadEmote::
+; Get the address of the pointer to emote c.
+ ld a, c
+ ld bc, 6 ; sizeof(emote)
+ ld hl, Emotes
+ call AddNTimes
+; Load the emote address into de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+; load the length of the emote (in tiles) into c
+ inc hl
+ ld c, [hl]
+ swap c
+; load the emote pointer bank into b
+ inc hl
+ ld b, [hl]
+; load the VRAM destination into hl
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+; if the emote has a length of 0, do not proceed (error handling)
+ ld a, c
+ and a
+ ret z
+ call Get2bpp
+ ret
+
+INCLUDE "data/sprites/emotes.asm"
+
+INCLUDE "gfx/emotes.asm"
+
+INCLUDE "data/sprites/sprite_mons.asm"
+
+INCLUDE "data/maps/outdoor_sprites.asm"
+
+INCLUDE "data/sprites/sprites.asm"
diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm
index 579ae6f9..1ac7fc6a 100755
--- a/engine/overworld/player_movement.asm
+++ b/engine/overworld/player_movement.asm
@@ -700,7 +700,7 @@ Function103f9: ; 103f9 (4:43f9)
push bc
ld a, $0
ld [wPlayerState], a
- call ReplacePlayerSprite
+ call ReplaceChrisSprite
pop bc
ret
diff --git a/engine/overworld/time.asm b/engine/overworld/time.asm
index 9cce323c..6324420f 100755
--- a/engine/overworld/time.asm
+++ b/engine/overworld/time.asm
@@ -137,12 +137,12 @@ CheckBugContestTimer:
Function118c9: ; 118c9 (4:58c9)
call UpdateTime
- ld hl, wStartDay
+ ld hl, wTimerEventStartDay
call CopyDayToHL
ret
CheckPokerusTick:
- ld hl, wStartDay
+ ld hl, wTimerEventStartDay
call CalcDaysSince
call Function119b4
and a
diff --git a/engine/rtc/rtc.asm b/engine/rtc/rtc.asm
new file mode 100644
index 00000000..4f9bdcbb
--- /dev/null
+++ b/engine/rtc/rtc.asm
@@ -0,0 +1,210 @@
+Unreferenced_StopRTC:
+ ld a, SRAM_ENABLE
+ ld [MBC3SRamEnable], a
+ call LatchClock
+ ld a, RTC_DH
+ ld [MBC3SRamBank], a
+ ld a, [MBC3RTC]
+ set 6, a ; halt
+ ld [MBC3RTC], a
+ call CloseSRAM
+ ret
+
+StartRTC:
+ ld a, SRAM_ENABLE
+ ld [MBC3SRamEnable], a
+ call LatchClock
+ ld a, RTC_DH
+ ld [MBC3SRamBank], a
+ ld a, [MBC3RTC]
+ res 6, a ; halt
+ ld [MBC3RTC], a
+ call CloseSRAM
+ ret
+
+GetTimeOfDay::
+; get time of day based on the current hour
+ ldh a, [hHours] ; hour
+ ld hl, TimesOfDay
+
+.check
+; if we're within the given time period,
+; get the corresponding time of day
+ cp [hl]
+ jr c, .match
+; else, get the next entry
+ inc hl
+ inc hl
+; try again
+ jr .check
+
+.match
+; get time of day
+ inc hl
+ ld a, [hl]
+ ld [wTimeOfDay], a
+ ret
+
+TimesOfDay:
+; hours for the time of day
+; 0400-0959 morn | 1000-1759 day | 1800-0359 nite
+ db MORN_HOUR, NITE_F
+ db DAY_HOUR, MORN_F
+ db NITE_HOUR, DAY_F
+ db MAX_HOUR, NITE_F
+ db -1, MORN_F
+
+Unreferenced_14044:
+ db 20, NITE_F
+ db 40, MORN_F
+ db 60, DAY_F
+ db -1, MORN_F
+
+StageRTCTimeForSave:
+ call UpdateTime
+ ld hl, wRTC
+ ld a, [wCurDay]
+ ld [hli], a
+ ldh a, [hHours]
+ ld [hli], a
+ ldh a, [hMinutes]
+ ld [hli], a
+ ldh a, [hSeconds]
+ ld [hli], a
+ ret
+
+UnreferencedSaveRTC:
+ ld a, $a
+ ld [MBC3SRamEnable], a
+ call LatchClock
+ ld hl, MBC3RTC
+ ld a, $c
+ ld [MBC3SRamBank], a
+ res 7, [hl]
+ ld a, BANK(sRTCStatusFlags)
+ ld [MBC3SRamBank], a
+ xor a
+ ld [sRTCStatusFlags], a
+ call CloseSRAM
+ ret
+
+StartClock::
+ call SaveRTC
+ call GetClock
+ call Function1409e
+ call FixDays
+ jr nc, .skip_set
+ ; bit 5: Day count exceeds 139
+ ; bit 6: Day count exceeds 255
+ call RecordRTCStatus ; set flag on sRTCStatusFlags
+
+.skip_set
+ call StartRTC
+ ret
+
+Function1409e:
+ ld hl, hRTCDayHi
+ bit 7, [hl]
+ jr nz, .set_bit_7
+ bit 6, [hl]
+ jr nz, .set_bit_7
+ xor a
+ ret
+
+.set_bit_7
+ ; Day count exceeds 16383
+ ld a, %10000000
+ call RecordRTCStatus ; set bit 7 on sRTCStatusFlags
+ ret
+
+SaveRTC:
+ ld a, $a
+ ld [MBC3SRamEnable], a
+ call LatchClock
+ ld a, $c
+ ld [MBC3SRamBank], a
+ ld a, [MBC3RTC]
+ push af
+ call CloseSRAM
+ pop af
+ bit 6, a
+ ret z
+
+ ld a, BANK(sRTCStatusFlags)
+ call OpenSRAM
+ ld a, $34
+ ld [s0_b7ef], a
+ ld a, $12
+ ld [s0_b7f0], a
+ call CloseSRAM
+ ret
+
+ClockContinue:
+ call CheckRTCStatus
+ ld c, a
+ and %11000000 ; Day count exceeded 255 or 16383
+ jr nz, .time_overflow
+
+ ld a, c
+ and %00100000 ; Day count exceeded 139
+ jr z, .dont_update
+
+ call UpdateTime
+ ld a, [wRTC + 0]
+ ld b, a
+ ld a, [wCurDay]
+ cp b
+ jr c, .dont_update
+
+.time_overflow
+ farcall ClearDailyTimers
+ ret
+
+.dont_update
+ xor a
+ ret
+
+_InitTime::
+ call GetClock
+ call FixDays
+ ld hl, hRTCSeconds
+ ld de, wStartSecond
+
+ ld a, [wStringBuffer2 + 3]
+ sub [hl]
+ dec hl
+ jr nc, .okay_secs
+ add 60
+.okay_secs
+ ld [de], a
+ dec de
+
+ ld a, [wStringBuffer2 + 2]
+ sbc [hl]
+ dec hl
+ jr nc, .okay_mins
+ add 60
+.okay_mins
+ ld [de], a
+ dec de
+
+ ld a, [wStringBuffer2 + 1]
+ sbc [hl]
+ dec hl
+ jr nc, .okay_hrs
+ add 24
+.okay_hrs
+ ld [de], a
+ dec de
+
+ ld a, [wStringBuffer2]
+ sbc [hl]
+ dec hl
+ jr nc, .okay_days
+ add 140
+ ld c, 7
+ call SimpleDivide
+
+.okay_days
+ ld [de], a
+ ret
diff --git a/gfx/emotes.asm b/gfx/emotes.asm
new file mode 100644
index 00000000..1de06de2
--- /dev/null
+++ b/gfx/emotes.asm
@@ -0,0 +1,12 @@
+ShockEmote: INCBIN "gfx/emotes/shock.2bpp"
+QuestionEmote: INCBIN "gfx/emotes/question.2bpp"
+HappyEmote: INCBIN "gfx/emotes/happy.2bpp"
+SadEmote: INCBIN "gfx/emotes/sad.2bpp"
+HeartEmote: INCBIN "gfx/emotes/heart.2bpp"
+BoltEmote: INCBIN "gfx/emotes/bolt.2bpp"
+SleepEmote: INCBIN "gfx/emotes/sleep.2bpp"
+FishEmote: INCBIN "gfx/emotes/fish.2bpp"
+JumpShadowGFX: INCBIN "gfx/overworld/shadow.2bpp"
+FishingRodGFX: INCBIN "gfx/overworld/fishing_rod.2bpp"
+BoulderDustGFX: INCBIN "gfx/overworld/boulder_dust.2bpp"
+GrassRustleGFX: INCBIN "gfx/overworld/grass_rustle.2bpp"
diff --git a/gfx/emotes/bolt.2bpp b/gfx/emotes/bolt.2bpp
new file mode 100644
index 00000000..019f4733
--- /dev/null
+++ b/gfx/emotes/bolt.2bpp
Binary files differ
diff --git a/gfx/emotes/fish.2bpp b/gfx/emotes/fish.2bpp
new file mode 100644
index 00000000..310ec175
--- /dev/null
+++ b/gfx/emotes/fish.2bpp
Binary files differ
diff --git a/gfx/emotes/happy.2bpp b/gfx/emotes/happy.2bpp
new file mode 100644
index 00000000..babc52ec
--- /dev/null
+++ b/gfx/emotes/happy.2bpp
Binary files differ
diff --git a/gfx/emotes/heart.2bpp b/gfx/emotes/heart.2bpp
new file mode 100644
index 00000000..15cdc88b
--- /dev/null
+++ b/gfx/emotes/heart.2bpp
Binary files differ
diff --git a/gfx/emotes/question.2bpp b/gfx/emotes/question.2bpp
new file mode 100644
index 00000000..2408bbf4
--- /dev/null
+++ b/gfx/emotes/question.2bpp
Binary files differ
diff --git a/gfx/emotes/sad.2bpp b/gfx/emotes/sad.2bpp
new file mode 100644
index 00000000..cccdcf97
--- /dev/null
+++ b/gfx/emotes/sad.2bpp
Binary files differ
diff --git a/gfx/emotes/shock.2bpp b/gfx/emotes/shock.2bpp
new file mode 100644
index 00000000..35192165
--- /dev/null
+++ b/gfx/emotes/shock.2bpp
Binary files differ
diff --git a/gfx/emotes/sleep.2bpp b/gfx/emotes/sleep.2bpp
new file mode 100644
index 00000000..1c9e26ec
--- /dev/null
+++ b/gfx/emotes/sleep.2bpp
Binary files differ
diff --git a/gfx/overworld/boulder_dust.2bpp b/gfx/overworld/boulder_dust.2bpp
new file mode 100644
index 00000000..f8b9f018
--- /dev/null
+++ b/gfx/overworld/boulder_dust.2bpp
Binary files differ
diff --git a/gfx/overworld/celebi.2bpp b/gfx/overworld/celebi.2bpp
new file mode 100644
index 00000000..80e9953e
--- /dev/null
+++ b/gfx/overworld/celebi.2bpp
Binary files differ
diff --git a/gfx/overworld/chris_fish.2bpp b/gfx/overworld/chris_fish.2bpp
new file mode 100644
index 00000000..c3609ab5
--- /dev/null
+++ b/gfx/overworld/chris_fish.2bpp
Binary files differ
diff --git a/gfx/overworld/cut_grass.2bpp b/gfx/overworld/cut_grass.2bpp
new file mode 100644
index 00000000..1c8a3f9a
--- /dev/null
+++ b/gfx/overworld/cut_grass.2bpp
Binary files differ
diff --git a/gfx/overworld/cut_tree.2bpp b/gfx/overworld/cut_tree.2bpp
new file mode 100644
index 00000000..aa8078f3
--- /dev/null
+++ b/gfx/overworld/cut_tree.2bpp
Binary files differ
diff --git a/gfx/overworld/fishing_rod.2bpp b/gfx/overworld/fishing_rod.2bpp
new file mode 100644
index 00000000..bb3ed2bb
--- /dev/null
+++ b/gfx/overworld/fishing_rod.2bpp
Binary files differ
diff --git a/gfx/overworld/grass_rustle.2bpp b/gfx/overworld/grass_rustle.2bpp
new file mode 100644
index 00000000..987a4ad3
--- /dev/null
+++ b/gfx/overworld/grass_rustle.2bpp
@@ -0,0 +1 @@
+@ 2 d 6  \ No newline at end of file
diff --git a/gfx/overworld/headbutt_tree.2bpp b/gfx/overworld/headbutt_tree.2bpp
new file mode 100644
index 00000000..9aeb905c
--- /dev/null
+++ b/gfx/overworld/headbutt_tree.2bpp
Binary files differ
diff --git a/gfx/overworld/kris_fish.2bpp b/gfx/overworld/kris_fish.2bpp
new file mode 100644
index 00000000..9d47dc14
--- /dev/null
+++ b/gfx/overworld/kris_fish.2bpp
Binary files differ
diff --git a/gfx/overworld/shadow.2bpp b/gfx/overworld/shadow.2bpp
new file mode 100644
index 00000000..b62b99ff
--- /dev/null
+++ b/gfx/overworld/shadow.2bpp
@@ -0,0 +1 @@
+???? \ No newline at end of file
diff --git a/gfx/sprites.asm b/gfx/sprites.asm
new file mode 100644
index 00000000..8ab2da94
--- /dev/null
+++ b/gfx/sprites.asm
@@ -0,0 +1,101 @@
+SECTION "Sprites 1", ROMX
+
+ChrisSpriteGFX:: INCBIN "gfx/sprites/chris.2bpp"
+ChrisBikeSpriteGFX:: INCBIN "gfx/sprites/chris_bike.2bpp"
+GameboyKidSpriteGFX:: INCBIN "gfx/sprites/gameboy_kid.2bpp"
+SilverSpriteGFX:: INCBIN "gfx/sprites/silver.2bpp"
+OakSpriteGFX:: INCBIN "gfx/sprites/oak.2bpp"
+RedSpriteGFX:: INCBIN "gfx/sprites/red.2bpp"
+BlueSpriteGFX:: INCBIN "gfx/sprites/blue.2bpp"
+BillSpriteGFX:: INCBIN "gfx/sprites/bill.2bpp"
+ElderSpriteGFX:: INCBIN "gfx/sprites/elder.2bpp"
+JanineSpriteGFX:: INCBIN "gfx/sprites/janine.2bpp"
+KurtSpriteGFX:: INCBIN "gfx/sprites/kurt.2bpp"
+MomSpriteGFX:: INCBIN "gfx/sprites/mom.2bpp"
+BlaineSpriteGFX:: INCBIN "gfx/sprites/blaine.2bpp"
+RedsMomSpriteGFX:: INCBIN "gfx/sprites/reds_mom.2bpp"
+DaisySpriteGFX:: INCBIN "gfx/sprites/daisy.2bpp"
+ElmSpriteGFX:: INCBIN "gfx/sprites/elm.2bpp"
+WillSpriteGFX:: INCBIN "gfx/sprites/will.2bpp"
+FalknerSpriteGFX:: INCBIN "gfx/sprites/falkner.2bpp"
+WhitneySpriteGFX:: INCBIN "gfx/sprites/whitney.2bpp"
+BugsySpriteGFX:: INCBIN "gfx/sprites/bugsy.2bpp"
+MortySpriteGFX:: INCBIN "gfx/sprites/morty.2bpp"
+ChuckSpriteGFX:: INCBIN "gfx/sprites/chuck.2bpp"
+JasmineSpriteGFX:: INCBIN "gfx/sprites/jasmine.2bpp"
+PryceSpriteGFX:: INCBIN "gfx/sprites/pryce.2bpp"
+ClairSpriteGFX:: INCBIN "gfx/sprites/clair.2bpp"
+BrockSpriteGFX:: INCBIN "gfx/sprites/brock.2bpp"
+KarenSpriteGFX:: INCBIN "gfx/sprites/karen.2bpp"
+BrunoSpriteGFX:: INCBIN "gfx/sprites/bruno.2bpp"
+MistySpriteGFX:: INCBIN "gfx/sprites/misty.2bpp"
+LanceSpriteGFX:: INCBIN "gfx/sprites/lance.2bpp"
+SurgeSpriteGFX:: INCBIN "gfx/sprites/surge.2bpp"
+ErikaSpriteGFX:: INCBIN "gfx/sprites/erika.2bpp"
+KogaSpriteGFX:: INCBIN "gfx/sprites/koga.2bpp"
+SabrinaSpriteGFX:: INCBIN "gfx/sprites/sabrina.2bpp"
+CooltrainerMSpriteGFX:: INCBIN "gfx/sprites/cooltrainer_m.2bpp"
+CooltrainerFSpriteGFX:: INCBIN "gfx/sprites/cooltrainer_f.2bpp"
+BugCatcherSpriteGFX:: INCBIN "gfx/sprites/bug_catcher.2bpp"
+TwinSpriteGFX:: INCBIN "gfx/sprites/twin.2bpp"
+YoungsterSpriteGFX:: INCBIN "gfx/sprites/youngster.2bpp"
+LassSpriteGFX:: INCBIN "gfx/sprites/lass.2bpp"
+TeacherSpriteGFX:: INCBIN "gfx/sprites/teacher.2bpp"
+BuenaSpriteGFX:: INCBIN "gfx/sprites/buena.2bpp"
+SuperNerdSpriteGFX:: INCBIN "gfx/sprites/super_nerd.2bpp"
+RockerSpriteGFX:: INCBIN "gfx/sprites/rocker.2bpp"
+
+
+SECTION "Sprites 2", ROMX
+
+PokefanMSpriteGFX:: INCBIN "gfx/sprites/pokefan_m.2bpp"
+PokefanFSpriteGFX:: INCBIN "gfx/sprites/pokefan_f.2bpp"
+GrampsSpriteGFX:: INCBIN "gfx/sprites/gramps.2bpp"
+GrannySpriteGFX:: INCBIN "gfx/sprites/granny.2bpp"
+SwimmerGuySpriteGFX:: INCBIN "gfx/sprites/swimmer_guy.2bpp"
+SwimmerGirlSpriteGFX:: INCBIN "gfx/sprites/swimmer_girl.2bpp"
+BigSnorlaxSpriteGFX:: INCBIN "gfx/sprites/big_snorlax.2bpp"
+SurfingPikachuSpriteGFX:: INCBIN "gfx/sprites/surfing_pikachu.2bpp"
+RocketSpriteGFX:: INCBIN "gfx/sprites/rocket.2bpp"
+RocketGirlSpriteGFX:: INCBIN "gfx/sprites/rocket_girl.2bpp"
+NurseSpriteGFX:: INCBIN "gfx/sprites/nurse.2bpp"
+LinkReceptionistSpriteGFX:: INCBIN "gfx/sprites/link_receptionist.2bpp"
+ClerkSpriteGFX:: INCBIN "gfx/sprites/clerk.2bpp"
+FisherSpriteGFX:: INCBIN "gfx/sprites/fisher.2bpp"
+FishingGuruSpriteGFX:: INCBIN "gfx/sprites/fishing_guru.2bpp"
+ScientistSpriteGFX:: INCBIN "gfx/sprites/scientist.2bpp"
+KimonoGirlSpriteGFX:: INCBIN "gfx/sprites/kimono_girl.2bpp"
+SageSpriteGFX:: INCBIN "gfx/sprites/sage.2bpp"
+UnusedGuySpriteGFX:: INCBIN "gfx/sprites/unused_guy.2bpp"
+GentlemanSpriteGFX:: INCBIN "gfx/sprites/gentleman.2bpp"
+BlackBeltSpriteGFX:: INCBIN "gfx/sprites/black_belt.2bpp"
+ReceptionistSpriteGFX:: INCBIN "gfx/sprites/receptionist.2bpp"
+OfficerSpriteGFX:: INCBIN "gfx/sprites/officer.2bpp"
+CalSpriteGFX:: INCBIN "gfx/sprites/cal.2bpp"
+SlowpokeSpriteGFX:: INCBIN "gfx/sprites/slowpoke.2bpp"
+CaptainSpriteGFX:: INCBIN "gfx/sprites/captain.2bpp"
+BigLaprasSpriteGFX:: INCBIN "gfx/sprites/big_lapras.2bpp"
+GymGuySpriteGFX:: INCBIN "gfx/sprites/gym_guy.2bpp"
+SailorSpriteGFX:: INCBIN "gfx/sprites/sailor.2bpp"
+BikerSpriteGFX:: INCBIN "gfx/sprites/biker.2bpp"
+PharmacistSpriteGFX:: INCBIN "gfx/sprites/pharmacist.2bpp"
+MonsterSpriteGFX:: INCBIN "gfx/sprites/monster.2bpp"
+FairySpriteGFX:: INCBIN "gfx/sprites/fairy.2bpp"
+BirdSpriteGFX:: INCBIN "gfx/sprites/bird.2bpp"
+DragonSpriteGFX:: INCBIN "gfx/sprites/dragon.2bpp"
+BigOnixSpriteGFX:: INCBIN "gfx/sprites/big_onix.2bpp"
+N64SpriteGFX:: INCBIN "gfx/sprites/n64.2bpp"
+SudowoodoSpriteGFX:: INCBIN "gfx/sprites/sudowoodo.2bpp"
+SurfSpriteGFX:: INCBIN "gfx/sprites/surf.2bpp"
+PokeBallSpriteGFX:: INCBIN "gfx/sprites/poke_ball.2bpp"
+PokedexSpriteGFX:: INCBIN "gfx/sprites/pokedex.2bpp"
+PaperSpriteGFX:: INCBIN "gfx/sprites/paper.2bpp"
+VirtualBoySpriteGFX:: INCBIN "gfx/sprites/virtual_boy.2bpp"
+OldLinkReceptionistSpriteGFX:: INCBIN "gfx/sprites/old_link_receptionist.2bpp"
+RockSpriteGFX:: INCBIN "gfx/sprites/rock.2bpp"
+BoulderSpriteGFX:: INCBIN "gfx/sprites/boulder.2bpp"
+SnesSpriteGFX:: INCBIN "gfx/sprites/snes.2bpp"
+FamicomSpriteGFX:: INCBIN "gfx/sprites/famicom.2bpp"
+FruitTreeSpriteGFX:: INCBIN "gfx/sprites/fruit_tree.2bpp"
+GoldTrophySpriteGFX:: INCBIN "gfx/sprites/gold_trophy.2bpp"
+SilverTrophySpriteGFX:: INCBIN "gfx/sprites/silver_trophy.2bpp"
diff --git a/gfx/sprites/big_lapras.2bpp b/gfx/sprites/big_lapras.2bpp
new file mode 100644
index 00000000..f13f3a80
--- /dev/null
+++ b/gfx/sprites/big_lapras.2bpp
Binary files differ
diff --git a/gfx/sprites/big_onix.2bpp b/gfx/sprites/big_onix.2bpp
new file mode 100644
index 00000000..91659bdc
--- /dev/null
+++ b/gfx/sprites/big_onix.2bpp
Binary files differ
diff --git a/gfx/sprites/big_snorlax.2bpp b/gfx/sprites/big_snorlax.2bpp
new file mode 100644
index 00000000..9b45a1c2
--- /dev/null
+++ b/gfx/sprites/big_snorlax.2bpp
Binary files differ
diff --git a/gfx/sprites/biker.2bpp b/gfx/sprites/biker.2bpp
new file mode 100644
index 00000000..e650a0fa
--- /dev/null
+++ b/gfx/sprites/biker.2bpp
@@ -0,0 +1,2 @@
+???:?0ToR\ *J?0?'<' x<x??????_o_?0?/</ < 
+~<$?9gc??0c??t`ߤT`<3OxO?<0xȰ``??߿`?0_x_7???0x``???7?4xH+</3s~99`| \ No newline at end of file
diff --git a/gfx/sprites/bill.2bpp b/gfx/sprites/bill.2bpp
new file mode 100644
index 00000000..2f14207b
--- /dev/null
+++ b/gfx/sprites/bill.2bpp
Binary files differ
diff --git a/gfx/sprites/bird.2bpp b/gfx/sprites/bird.2bpp
new file mode 100644
index 00000000..d74e9980
--- /dev/null
+++ b/gfx/sprites/bird.2bpp
Binary files differ
diff --git a/gfx/sprites/black_belt.2bpp b/gfx/sprites/black_belt.2bpp
new file mode 100644
index 00000000..28c141df
--- /dev/null
+++ b/gfx/sprites/black_belt.2bpp
Binary files differ
diff --git a/gfx/sprites/blaine.2bpp b/gfx/sprites/blaine.2bpp
new file mode 100644
index 00000000..fc40c0f1
--- /dev/null
+++ b/gfx/sprites/blaine.2bpp
Binary files differ
diff --git a/gfx/sprites/blue.2bpp b/gfx/sprites/blue.2bpp
new file mode 100644
index 00000000..f5499ff9
--- /dev/null
+++ b/gfx/sprites/blue.2bpp
Binary files differ
diff --git a/gfx/sprites/boulder.2bpp b/gfx/sprites/boulder.2bpp
new file mode 100644
index 00000000..f3386f2a
--- /dev/null
+++ b/gfx/sprites/boulder.2bpp
@@ -0,0 +1 @@
+? @ժѮR^C+ҭu??+W~ \ No newline at end of file
diff --git a/gfx/sprites/brock.2bpp b/gfx/sprites/brock.2bpp
new file mode 100644
index 00000000..4ed34a45
--- /dev/null
+++ b/gfx/sprites/brock.2bpp
Binary files differ
diff --git a/gfx/sprites/bruno.2bpp b/gfx/sprites/bruno.2bpp
new file mode 100644
index 00000000..9381d755
--- /dev/null
+++ b/gfx/sprites/bruno.2bpp
Binary files differ
diff --git a/gfx/sprites/buena.2bpp b/gfx/sprites/buena.2bpp
new file mode 100644
index 00000000..00886ad6
--- /dev/null
+++ b/gfx/sprites/buena.2bpp
Binary files differ
diff --git a/gfx/sprites/bug_catcher.2bpp b/gfx/sprites/bug_catcher.2bpp
new file mode 100644
index 00000000..6edb8a30
--- /dev/null
+++ b/gfx/sprites/bug_catcher.2bpp
Binary files differ
diff --git a/gfx/sprites/bugsy.2bpp b/gfx/sprites/bugsy.2bpp
new file mode 100644
index 00000000..298a3835
--- /dev/null
+++ b/gfx/sprites/bugsy.2bpp
Binary files differ
diff --git a/gfx/sprites/cal.2bpp b/gfx/sprites/cal.2bpp
new file mode 100644
index 00000000..b3529654
--- /dev/null
+++ b/gfx/sprites/cal.2bpp
Binary files differ
diff --git a/gfx/sprites/captain.2bpp b/gfx/sprites/captain.2bpp
new file mode 100644
index 00000000..8b5d0dc3
--- /dev/null
+++ b/gfx/sprites/captain.2bpp
Binary files differ
diff --git a/gfx/sprites/chris.2bpp b/gfx/sprites/chris.2bpp
new file mode 100644
index 00000000..e05a2c3f
--- /dev/null
+++ b/gfx/sprites/chris.2bpp
Binary files differ
diff --git a/gfx/sprites/chris_bike.2bpp b/gfx/sprites/chris_bike.2bpp
new file mode 100644
index 00000000..af04601a
--- /dev/null
+++ b/gfx/sprites/chris_bike.2bpp
@@ -0,0 +1,2 @@
+3?<?PB<
+B?2>9OO3>L||Hp0?;<_O <??;7\t?<:.<p8???>Œ?<?3S|D88h_>"?(?!!?9?<OO?>&>|x@?/?'5;?.>?X谰 ? ?p?)?) 8|0? ?<?3SuM88 ? \ No newline at end of file
diff --git a/gfx/sprites/chuck.2bpp b/gfx/sprites/chuck.2bpp
new file mode 100644
index 00000000..82240e62
--- /dev/null
+++ b/gfx/sprites/chuck.2bpp
Binary files differ
diff --git a/gfx/sprites/clair.2bpp b/gfx/sprites/clair.2bpp
new file mode 100644
index 00000000..32bef007
--- /dev/null
+++ b/gfx/sprites/clair.2bpp
Binary files differ
diff --git a/gfx/sprites/clerk.2bpp b/gfx/sprites/clerk.2bpp
new file mode 100644
index 00000000..6d69aee6
--- /dev/null
+++ b/gfx/sprites/clerk.2bpp
Binary files differ
diff --git a/gfx/sprites/cooltrainer_f.2bpp b/gfx/sprites/cooltrainer_f.2bpp
new file mode 100644
index 00000000..17c6687a
--- /dev/null
+++ b/gfx/sprites/cooltrainer_f.2bpp
Binary files differ
diff --git a/gfx/sprites/cooltrainer_m.2bpp b/gfx/sprites/cooltrainer_m.2bpp
new file mode 100644
index 00000000..ae075c33
--- /dev/null
+++ b/gfx/sprites/cooltrainer_m.2bpp
Binary files differ
diff --git a/gfx/sprites/daisy.2bpp b/gfx/sprites/daisy.2bpp
new file mode 100644
index 00000000..58ce7537
--- /dev/null
+++ b/gfx/sprites/daisy.2bpp
Binary files differ
diff --git a/gfx/sprites/dragon.2bpp b/gfx/sprites/dragon.2bpp
new file mode 100644
index 00000000..bd2dcea8
--- /dev/null
+++ b/gfx/sprites/dragon.2bpp
Binary files differ
diff --git a/gfx/sprites/elder.2bpp b/gfx/sprites/elder.2bpp
new file mode 100644
index 00000000..94df75fc
--- /dev/null
+++ b/gfx/sprites/elder.2bpp
@@ -0,0 +1,7 @@
+ (7P@oR`0
+J?0/9M~^??9??? ~z /0PP@`0
+
+?0_xW~Os?39?>> ~8||>!? ? ?( pd? x (7P@oR`0
+J?0Oy_~?? ~80 /0P@oP`0
+
+?0_x_~Os?3 ~80 #<}B@@P@ (@>1=#(p pp \ No newline at end of file
diff --git a/gfx/sprites/elm.2bpp b/gfx/sprites/elm.2bpp
new file mode 100644
index 00000000..5de05555
--- /dev/null
+++ b/gfx/sprites/elm.2bpp
Binary files differ
diff --git a/gfx/sprites/erika.2bpp b/gfx/sprites/erika.2bpp
new file mode 100644
index 00000000..16691d98
--- /dev/null
+++ b/gfx/sprites/erika.2bpp
Binary files differ
diff --git a/gfx/sprites/fairy.2bpp b/gfx/sprites/fairy.2bpp
new file mode 100644
index 00000000..32e75d48
--- /dev/null
+++ b/gfx/sprites/fairy.2bpp
Binary files differ
diff --git a/gfx/sprites/falkner.2bpp b/gfx/sprites/falkner.2bpp
new file mode 100644
index 00000000..f51ec247
--- /dev/null
+++ b/gfx/sprites/falkner.2bpp
Binary files differ
diff --git a/gfx/sprites/famicom.2bpp b/gfx/sprites/famicom.2bpp
new file mode 100644
index 00000000..182a360f
--- /dev/null
+++ b/gfx/sprites/famicom.2bpp
Binary files differ
diff --git a/gfx/sprites/fisher.2bpp b/gfx/sprites/fisher.2bpp
new file mode 100644
index 00000000..0c62b196
--- /dev/null
+++ b/gfx/sprites/fisher.2bpp
Binary files differ
diff --git a/gfx/sprites/fishing_guru.2bpp b/gfx/sprites/fishing_guru.2bpp
new file mode 100644
index 00000000..702f325a
--- /dev/null
+++ b/gfx/sprites/fishing_guru.2bpp
Binary files differ
diff --git a/gfx/sprites/fruit_tree.2bpp b/gfx/sprites/fruit_tree.2bpp
new file mode 100644
index 00000000..3c38a9b3
--- /dev/null
+++ b/gfx/sprites/fruit_tree.2bpp
@@ -0,0 +1 @@
+;2nO]i6)]`йlLvږl3MGx0?> \ No newline at end of file
diff --git a/gfx/sprites/gameboy_kid.2bpp b/gfx/sprites/gameboy_kid.2bpp
new file mode 100644
index 00000000..ec1facf4
--- /dev/null
+++ b/gfx/sprites/gameboy_kid.2bpp
@@ -0,0 +1 @@
+?7S@oRJ?3  p(0pp????_Oo_;7</?+<pp???9|  p(0pp \ No newline at end of file
diff --git a/gfx/sprites/gentleman.2bpp b/gfx/sprites/gentleman.2bpp
new file mode 100644
index 00000000..e7fd2bc1
--- /dev/null
+++ b/gfx/sprites/gentleman.2bpp
Binary files differ
diff --git a/gfx/sprites/gold_trophy.2bpp b/gfx/sprites/gold_trophy.2bpp
new file mode 100644
index 00000000..594985e4
--- /dev/null
+++ b/gfx/sprites/gold_trophy.2bpp
Binary files differ
diff --git a/gfx/sprites/gramps.2bpp b/gfx/sprites/gramps.2bpp
new file mode 100644
index 00000000..8a5d7ec6
--- /dev/null
+++ b/gfx/sprites/gramps.2bpp
Binary files differ
diff --git a/gfx/sprites/granny.2bpp b/gfx/sprites/granny.2bpp
new file mode 100644
index 00000000..7b563b1c
--- /dev/null
+++ b/gfx/sprites/granny.2bpp
Binary files differ
diff --git a/gfx/sprites/gym_guy.2bpp b/gfx/sprites/gym_guy.2bpp
new file mode 100644
index 00000000..de6d4772
--- /dev/null
+++ b/gfx/sprites/gym_guy.2bpp
Binary files differ
diff --git a/gfx/sprites/janine.2bpp b/gfx/sprites/janine.2bpp
new file mode 100644
index 00000000..65cbdb1a
--- /dev/null
+++ b/gfx/sprites/janine.2bpp
Binary files differ
diff --git a/gfx/sprites/jasmine.2bpp b/gfx/sprites/jasmine.2bpp
new file mode 100644
index 00000000..2fd8ce8b
--- /dev/null
+++ b/gfx/sprites/jasmine.2bpp
Binary files differ
diff --git a/gfx/sprites/karen.2bpp b/gfx/sprites/karen.2bpp
new file mode 100644
index 00000000..7be42b2d
--- /dev/null
+++ b/gfx/sprites/karen.2bpp
@@ -0,0 +1,2 @@
+ ?"='?(HJ0DR?*?$C?% T$А`` ? ? ? @@0? ?!C?' А`` 0 
+ ,@ \ No newline at end of file
diff --git a/gfx/sprites/kimono_girl.2bpp b/gfx/sprites/kimono_girl.2bpp
new file mode 100644
index 00000000..32daceb6
--- /dev/null
+++ b/gfx/sprites/kimono_girl.2bpp
Binary files differ
diff --git a/gfx/sprites/koga.2bpp b/gfx/sprites/koga.2bpp
new file mode 100644
index 00000000..db7652bb
--- /dev/null
+++ b/gfx/sprites/koga.2bpp
Binary files differ
diff --git a/gfx/sprites/kurt.2bpp b/gfx/sprites/kurt.2bpp
new file mode 100644
index 00000000..1f21db12
--- /dev/null
+++ b/gfx/sprites/kurt.2bpp
Binary files differ
diff --git a/gfx/sprites/lance.2bpp b/gfx/sprites/lance.2bpp
new file mode 100644
index 00000000..12fc0c18
--- /dev/null
+++ b/gfx/sprites/lance.2bpp
Binary files differ
diff --git a/gfx/sprites/lass.2bpp b/gfx/sprites/lass.2bpp
new file mode 100644
index 00000000..4e8485fc
--- /dev/null
+++ b/gfx/sprites/lass.2bpp
Binary files differ
diff --git a/gfx/sprites/link_receptionist.2bpp b/gfx/sprites/link_receptionist.2bpp
new file mode 100644
index 00000000..df716add
--- /dev/null
+++ b/gfx/sprites/link_receptionist.2bpp
Binary files differ
diff --git a/gfx/sprites/misty.2bpp b/gfx/sprites/misty.2bpp
new file mode 100644
index 00000000..f5450a0f
--- /dev/null
+++ b/gfx/sprites/misty.2bpp
Binary files differ
diff --git a/gfx/sprites/mom.2bpp b/gfx/sprites/mom.2bpp
new file mode 100644
index 00000000..36f409c4
--- /dev/null
+++ b/gfx/sprites/mom.2bpp
Binary files differ
diff --git a/gfx/sprites/monster.2bpp b/gfx/sprites/monster.2bpp
new file mode 100644
index 00000000..542d6ef2
--- /dev/null
+++ b/gfx/sprites/monster.2bpp
Binary files differ
diff --git a/gfx/sprites/morty.2bpp b/gfx/sprites/morty.2bpp
new file mode 100644
index 00000000..2c1da80c
--- /dev/null
+++ b/gfx/sprites/morty.2bpp
Binary files differ
diff --git a/gfx/sprites/n64.2bpp b/gfx/sprites/n64.2bpp
new file mode 100644
index 00000000..c03f2a4d
--- /dev/null
+++ b/gfx/sprites/n64.2bpp
@@ -0,0 +1 @@
+78??4???xS08X<tk?/?1?"\w5ͷ22 \ No newline at end of file
diff --git a/gfx/sprites/nurse.2bpp b/gfx/sprites/nurse.2bpp
new file mode 100644
index 00000000..fec70f27
--- /dev/null
+++ b/gfx/sprites/nurse.2bpp
Binary files differ
diff --git a/gfx/sprites/oak.2bpp b/gfx/sprites/oak.2bpp
new file mode 100644
index 00000000..c4f817c1
--- /dev/null
+++ b/gfx/sprites/oak.2bpp
Binary files differ
diff --git a/gfx/sprites/officer.2bpp b/gfx/sprites/officer.2bpp
new file mode 100644
index 00000000..da551977
--- /dev/null
+++ b/gfx/sprites/officer.2bpp
Binary files differ
diff --git a/gfx/sprites/old_link_receptionist.2bpp b/gfx/sprites/old_link_receptionist.2bpp
new file mode 100644
index 00000000..7d28ef27
--- /dev/null
+++ b/gfx/sprites/old_link_receptionist.2bpp
@@ -0,0 +1 @@
+  ?"?'=Ox0DGny Ov`` \ No newline at end of file
diff --git a/gfx/sprites/paper.2bpp b/gfx/sprites/paper.2bpp
new file mode 100644
index 00000000..3d7694f4
--- /dev/null
+++ b/gfx/sprites/paper.2bpp
Binary files differ
diff --git a/gfx/sprites/pharmacist.2bpp b/gfx/sprites/pharmacist.2bpp
new file mode 100644
index 00000000..2407b11d
--- /dev/null
+++ b/gfx/sprites/pharmacist.2bpp
Binary files differ
diff --git a/gfx/sprites/poke_ball.2bpp b/gfx/sprites/poke_ball.2bpp
new file mode 100644
index 00000000..feb6d7d1
--- /dev/null
+++ b/gfx/sprites/poke_ball.2bpp
Binary files differ
diff --git a/gfx/sprites/pokedex.2bpp b/gfx/sprites/pokedex.2bpp
new file mode 100644
index 00000000..40ee737a
--- /dev/null
+++ b/gfx/sprites/pokedex.2bpp
Binary files differ
diff --git a/gfx/sprites/pokefan_f.2bpp b/gfx/sprites/pokefan_f.2bpp
new file mode 100644
index 00000000..1f623951
--- /dev/null
+++ b/gfx/sprites/pokefan_f.2bpp
@@ -0,0 +1 @@
+;>?8|HH ?/?(?<p<8;?=?px?/_X~~>?=3 xp;>?8|HH ?/?(?<p<8;?=?px?/_X~x>?=3  xp|| \ No newline at end of file
diff --git a/gfx/sprites/pokefan_m.2bpp b/gfx/sprites/pokefan_m.2bpp
new file mode 100644
index 00000000..2e167caf
--- /dev/null
+++ b/gfx/sprites/pokefan_m.2bpp
Binary files differ
diff --git a/gfx/sprites/pryce.2bpp b/gfx/sprites/pryce.2bpp
new file mode 100644
index 00000000..745b1afc
--- /dev/null
+++ b/gfx/sprites/pryce.2bpp
Binary files differ
diff --git a/gfx/sprites/receptionist.2bpp b/gfx/sprites/receptionist.2bpp
new file mode 100644
index 00000000..826e6460
--- /dev/null
+++ b/gfx/sprites/receptionist.2bpp
Binary files differ
diff --git a/gfx/sprites/red.2bpp b/gfx/sprites/red.2bpp
new file mode 100644
index 00000000..e550d7ad
--- /dev/null
+++ b/gfx/sprites/red.2bpp
Binary files differ
diff --git a/gfx/sprites/reds_mom.2bpp b/gfx/sprites/reds_mom.2bpp
new file mode 100644
index 00000000..df6b3a16
--- /dev/null
+++ b/gfx/sprites/reds_mom.2bpp
Binary files differ
diff --git a/gfx/sprites/rock.2bpp b/gfx/sprites/rock.2bpp
new file mode 100644
index 00000000..da35730d
--- /dev/null
+++ b/gfx/sprites/rock.2bpp
@@ -0,0 +1 @@
+7\޵tp|zq~Go??>px \ No newline at end of file
diff --git a/gfx/sprites/rocker.2bpp b/gfx/sprites/rocker.2bpp
new file mode 100644
index 00000000..2542203c
--- /dev/null
+++ b/gfx/sprites/rocker.2bpp
Binary files differ
diff --git a/gfx/sprites/rocket.2bpp b/gfx/sprites/rocket.2bpp
new file mode 100644
index 00000000..2bc8793a
--- /dev/null
+++ b/gfx/sprites/rocket.2bpp
Binary files differ
diff --git a/gfx/sprites/rocket_girl.2bpp b/gfx/sprites/rocket_girl.2bpp
new file mode 100644
index 00000000..97a5e6ab
--- /dev/null
+++ b/gfx/sprites/rocket_girl.2bpp
Binary files differ
diff --git a/gfx/sprites/sabrina.2bpp b/gfx/sprites/sabrina.2bpp
new file mode 100644
index 00000000..d2aff635
--- /dev/null
+++ b/gfx/sprites/sabrina.2bpp
Binary files differ
diff --git a/gfx/sprites/sage.2bpp b/gfx/sprites/sage.2bpp
new file mode 100644
index 00000000..69b2e4e7
--- /dev/null
+++ b/gfx/sprites/sage.2bpp
Binary files differ
diff --git a/gfx/sprites/sailor.2bpp b/gfx/sprites/sailor.2bpp
new file mode 100644
index 00000000..bbd9e6f3
--- /dev/null
+++ b/gfx/sprites/sailor.2bpp
Binary files differ
diff --git a/gfx/sprites/scientist.2bpp b/gfx/sprites/scientist.2bpp
new file mode 100644
index 00000000..a4e8d689
--- /dev/null
+++ b/gfx/sprites/scientist.2bpp
Binary files differ
diff --git a/gfx/sprites/silver.2bpp b/gfx/sprites/silver.2bpp
new file mode 100644
index 00000000..1db1ee7e
--- /dev/null
+++ b/gfx/sprites/silver.2bpp
Binary files differ
diff --git a/gfx/sprites/silver_trophy.2bpp b/gfx/sprites/silver_trophy.2bpp
new file mode 100644
index 00000000..73964d04
--- /dev/null
+++ b/gfx/sprites/silver_trophy.2bpp
Binary files differ
diff --git a/gfx/sprites/slowpoke.2bpp b/gfx/sprites/slowpoke.2bpp
new file mode 100644
index 00000000..3cac02f7
--- /dev/null
+++ b/gfx/sprites/slowpoke.2bpp
@@ -0,0 +1 @@
+88GP|c<+<#@O88|xx?  ? ? pp \ No newline at end of file
diff --git a/gfx/sprites/snes.2bpp b/gfx/sprites/snes.2bpp
new file mode 100644
index 00000000..ec7867d5
--- /dev/null
+++ b/gfx/sprites/snes.2bpp
Binary files differ
diff --git a/gfx/sprites/sudowoodo.2bpp b/gfx/sprites/sudowoodo.2bpp
new file mode 100644
index 00000000..d9efd679
--- /dev/null
+++ b/gfx/sprites/sudowoodo.2bpp
Binary files differ
diff --git a/gfx/sprites/super_nerd.2bpp b/gfx/sprites/super_nerd.2bpp
new file mode 100644
index 00000000..c3a13624
--- /dev/null
+++ b/gfx/sprites/super_nerd.2bpp
Binary files differ
diff --git a/gfx/sprites/surf.2bpp b/gfx/sprites/surf.2bpp
new file mode 100644
index 00000000..f6395da9
--- /dev/null
+++ b/gfx/sprites/surf.2bpp
Binary files differ
diff --git a/gfx/sprites/surfing_pikachu.2bpp b/gfx/sprites/surfing_pikachu.2bpp
new file mode 100644
index 00000000..1e4f970a
--- /dev/null
+++ b/gfx/sprites/surfing_pikachu.2bpp
Binary files differ
diff --git a/gfx/sprites/surge.2bpp b/gfx/sprites/surge.2bpp
new file mode 100644
index 00000000..cdb942ab
--- /dev/null
+++ b/gfx/sprites/surge.2bpp
Binary files differ
diff --git a/gfx/sprites/swimmer_girl.2bpp b/gfx/sprites/swimmer_girl.2bpp
new file mode 100644
index 00000000..b1e79ffb
--- /dev/null
+++ b/gfx/sprites/swimmer_girl.2bpp
Binary files differ
diff --git a/gfx/sprites/swimmer_guy.2bpp b/gfx/sprites/swimmer_guy.2bpp
new file mode 100644
index 00000000..882f016c
--- /dev/null
+++ b/gfx/sprites/swimmer_guy.2bpp
Binary files differ
diff --git a/gfx/sprites/teacher.2bpp b/gfx/sprites/teacher.2bpp
new file mode 100644
index 00000000..0901ed9b
--- /dev/null
+++ b/gfx/sprites/teacher.2bpp
Binary files differ
diff --git a/gfx/sprites/twin.2bpp b/gfx/sprites/twin.2bpp
new file mode 100644
index 00000000..597f0e4b
--- /dev/null
+++ b/gfx/sprites/twin.2bpp
Binary files differ
diff --git a/gfx/sprites/unused_guy.2bpp b/gfx/sprites/unused_guy.2bpp
new file mode 100644
index 00000000..b1f5b464
--- /dev/null
+++ b/gfx/sprites/unused_guy.2bpp
Binary files differ
diff --git a/gfx/sprites/virtual_boy.2bpp b/gfx/sprites/virtual_boy.2bpp
new file mode 100644
index 00000000..bbe5b9fa
--- /dev/null
+++ b/gfx/sprites/virtual_boy.2bpp
Binary files differ
diff --git a/gfx/sprites/whitney.2bpp b/gfx/sprites/whitney.2bpp
new file mode 100644
index 00000000..354fcfdc
--- /dev/null
+++ b/gfx/sprites/whitney.2bpp
Binary files differ
diff --git a/gfx/sprites/will.2bpp b/gfx/sprites/will.2bpp
new file mode 100644
index 00000000..bdce93ad
--- /dev/null
+++ b/gfx/sprites/will.2bpp
@@ -0,0 +1 @@
+ "?"?*?O_y0$4r/??'>' |p``  ? ? ?@D0"$??/?/ $Xp`` ?DI.?0   ``@ \ No newline at end of file
diff --git a/gfx/sprites/youngster.2bpp b/gfx/sprites/youngster.2bpp
new file mode 100644
index 00000000..f0f329b6
--- /dev/null
+++ b/gfx/sprites/youngster.2bpp
Binary files differ
diff --git a/home/gfx.asm b/home/gfx.asm
index 6e73f57d..7a22086d 100644
--- a/home/gfx.asm
+++ b/home/gfx.asm
@@ -24,8 +24,8 @@ Functiond70:: ; d70 (0:0d70)
rst Bankswitch
ret
-ReplacePlayerSprite::
- farcall Function1413c
+ReplaceChrisSprite::
+ farcall _ReplaceChrisSprite
ret
LoadStandardFont::
diff --git a/home/map.asm b/home/map.asm
index 225f1bb6..b372f600 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -268,7 +268,7 @@ Function2112::
ldh [hMapAnims], a
xor a
ldh [hTileAnimFrame], a
- farcall Function1416d
+ farcall RefreshSprites
call LoadFontsExtra
ret
@@ -619,7 +619,7 @@ Function2349::
ret
Function2362:: ; 2362 (0:2362)
- call GetMapPermission
+ call GetMapEnvironment
call CheckOutdoorMap
ret nz
ld a, [wNextMapGroup]
@@ -647,7 +647,7 @@ Function2362:: ; 2362 (0:2362)
ret
Function239b:: ; 239b (0:239b)
- call GetMapPermission
+ call GetMapEnvironment
call CheckOutdoorMap
ret nz
ld a, [wNextMapGroup]
@@ -2151,7 +2151,7 @@ ReturnToMapWithSpeechTextbox::
ReloadTilesetAndPalettes:: ; 2c87 (0:2c87)
call DisableLCD
call ClearSprites
- farcall RefreshSprites
+ farcall Function1414b
call LoadStandardFont
call LoadFontsExtra
ldh a, [hROMBank]
@@ -2295,7 +2295,7 @@ GetSecondaryMapHeaderPointer:: ; 2d56 (0:2d56)
pop bc
ret
-GetMapPermission:: ; 2d63 (0:2d63)
+GetMapEnvironment:: ; 2d63 (0:2d63)
push hl
push de
push bc
diff --git a/home/time.asm b/home/time.asm
index d3c400f7..aa2817f9 100644
--- a/home/time.asm
+++ b/home/time.asm
@@ -15,7 +15,7 @@ UpdateTime::
call GetClock
call FixDays
call FixTime
- farcall Function14032
+ farcall GetTimeOfDay
ret
GetClock::
@@ -127,7 +127,7 @@ FixTime::
; second
ldh a, [hRTCSeconds]
ld c, a
- ld a, [wd1df]
+ ld a, [wStartSecond]
add c
sub 60
jr nc, .updatesec
@@ -139,7 +139,7 @@ FixTime::
ccf ; carry is set, so turn it off
ldh a, [hRTCMinutes]
ld c, a
- ld a, [wd1de]
+ ld a, [wStartMinute]
adc c
sub 60
jr nc, .updatemin
@@ -151,7 +151,7 @@ FixTime::
ccf ; carry is set, so turn it off
ldh a, [hRTCHours]
ld c, a
- ld a, [wd1dd]
+ ld a, [wStartHour]
adc c
sub 24
jr nc, .updatehr
@@ -163,7 +163,7 @@ FixTime::
ccf ; carry is set, so turn it off
ldh a, [hRTCDayLo]
ld c, a
- ld a, [wd1dc]
+ ld a, [wStartDay]
adc c
ld [wCurDay], a
ret
@@ -186,7 +186,7 @@ InitDayOfWeek::
jr InitTime ; useless
InitTime::
- farcall Function140ff
+ farcall _InitTime
ret
PanicResetClock::
diff --git a/home/window.asm b/home/window.asm
index ac08375e..e2df3d4f 100644
--- a/home/window.asm
+++ b/home/window.asm
@@ -37,7 +37,7 @@ CloseText::
ld a, $90
ldh [hWY], a
farcall Function1415c
- call ReplacePlayerSprite
+ call ReplaceChrisSprite
ld hl, wd565
res 7, [hl]
call ResetBGWindow
diff --git a/main.asm b/main.asm
index 000eeb5a..2f541493 100644
--- a/main.asm
+++ b/main.asm
@@ -71,29 +71,9 @@ INCLUDE "engine/events/pokerus/apply_pokerus_tick.asm"
INCLUDE "engine/events/bug_contest/contest_2.asm"
SECTION "bank5", ROMX
- dr $14000, $14032
-Function14032::
- dr $14032, $14089
-StartClock::
- dr $14089, $140dc
-ClockContinue:
- dr $140dc, $140ff
-Function140ff::
- dr $140ff, $1413c
-Function1413c::
- dr $1413c, $1414b
-RefreshSprites::
- dr $1414b, $1415c
-Function1415c::
- dr $1415c, $1416d
-Function1416d::
- dr $1416d, $14226
-LoadUsedSpritesGFX:
- dr $14226, $14317
-_DoesSpriteHaveFacings::
- dr $14317, $14334
-_GetSpritePalette::
- dr $14334, $14a18
+
+INCLUDE "engine/rtc/rtc.asm"
+INCLUDE "engine/overworld/overworld.asm"
Function14a18::
dr $14a18, $14a2d
Function14a2d::
@@ -565,7 +545,9 @@ IF DEF(_GOLD)
dr $8d332, $8e774
ClearSpriteAnims2::
- dr $8e774, $8e79f
+ dr $8e774, $8e78b
+LoadOverworldMonIcon::
+ dr $8e78b, $8e79f
LoadMenuMonIcon::
dr $8e79f, $8e922
UnfreezeMonIcons::
@@ -577,7 +559,9 @@ ELIF DEF(_SILVER)
dr $8d332, $8e75a
ClearSpriteAnims2::
- dr $8e75a, $8e785
+ dr $8e75a, $8e771
+LoadOverworldMonIcon::
+ dr $8e771, $8e785
LoadMenuMonIcon::
dr $8e785, $8e908
UnfreezeMonIcons::
@@ -670,18 +654,7 @@ INCLUDE "engine/events/treemons.asm"
INCLUDE "engine/pokegear/radio.asm"
INCLUDE "engine/pokemon/mail_2.asm"
-SECTION "bank30", ROMX
-
-PlayerSpriteGFX:
- dr $c0000, $c03c0
-SilverSpriteGFX:
- dr $c03c0, $c0fc0
-MomSpriteGFX:
- dr $c0fc0, $c3fc0
-
-SECTION "bank31", ROMX
- dr $c4000, $c7a40
-
+SECTION "bank31_2", ROMX
Functionc7a40:
dr $c7a40, $c7a5a
CheckForLuckyNumberWinners:
diff --git a/pokegold.link b/pokegold.link
index 3dce383b..8e683fc3 100644
--- a/pokegold.link
+++ b/pokegold.link
@@ -135,11 +135,11 @@ ROMX $2e
org $6300
"bank2e_2"
ROMX $30
- org $4000
- "bank30"
+ "Sprites 1"
ROMX $31
- org $4000
- "bank31"
+ "Sprites 2"
+ org $7a40
+ "bank31_2"
ROMX $32
org $4000
"bank32"
diff --git a/pokesilver.link b/pokesilver.link
index 3dce383b..8e683fc3 100644
--- a/pokesilver.link
+++ b/pokesilver.link
@@ -135,11 +135,11 @@ ROMX $2e
org $6300
"bank2e_2"
ROMX $30
- org $4000
- "bank30"
+ "Sprites 1"
ROMX $31
- org $4000
- "bank31"
+ "Sprites 2"
+ org $7a40
+ "bank31_2"
ROMX $32
org $4000
"bank32"
diff --git a/wram.asm b/wram.asm
index d8b15ff7..cee5ad72 100644
--- a/wram.asm
+++ b/wram.asm
@@ -2639,8 +2639,9 @@ wd05a:: ds 1 ; d05a
wd05b:: ds 1 ; d05b
wd05c:: ds 1 ; d05c
-wUsedSprites:: ds SPRITE_GFX_LIST_CAPACITY ; d05d
-
+wUsedSprites:: ds SPRITE_GFX_LIST_CAPACITY * 2
+wUsedSpritesEnd::
+ ds 8
wOverworldMapAnchor:: dw ; d07d
wd07f:: ds 1 ; d07f
@@ -2986,14 +2987,12 @@ wGreensName:: ds NAME_LENGTH ; d1cf
wSavedAtLeastOnce:: ds 1 ; d1da
wd1db:: ds 1 ; d1db
-wd1dc:: ds 1 ; d1dc
-wd1dd:: ds 1 ; d1dd
-wd1de:: ds 1 ; d1de
-wd1df:: ds 1 ; d1df
-wd1e0:: ds 1 ; d1e0
-wd1e1:: ds 1 ; d1e1
-wd1e2:: ds 1 ; d1e2
-wd1e3:: ds 1 ; d1e3
+wStartDay:: db ; d1dc
+wStartHour:: db ; d1dd
+wStartMinute:: db ; d1de
+wStartSecond:: db ; d1df
+wRTC:: ds 4 ; d1e0
+
wd1e4:: ds 1 ; d1e4
wd1e5:: ds 1 ; d1e5
wd1e6:: ds 1 ; d1e6
@@ -3076,22 +3075,7 @@ wd551:: ds 1 ; d551
wd552:: ds 1 ; d552
wd553:: ds 1 ; d553
wd554:: ds 1 ; d554
-wd555:: ds 1 ; d555
-wd556:: ds 1 ; d556
-wd557:: ds 1 ; d557
-wd558:: ds 1 ; d558
-wd559:: ds 1 ; d559
-wd55a:: ds 1 ; d55a
-wd55b:: ds 1 ; d55b
-wd55c:: ds 1 ; d55c
-wd55d:: ds 1 ; d55d
-wd55e:: ds 1 ; d55e
-wd55f:: ds 1 ; d55f
-wd560:: ds 1 ; d560
-wd561:: ds 1 ; d561
-wd562:: ds 1 ; d562
-wd563:: ds 1 ; d563
-wd564:: ds 1 ; d564
+wVariableSprites:: ds $100 - SPRITE_VARS ; d555
wd565:: ds 1 ; d565
wd566:: ds 1 ; d566
wd567:: ds 1 ; d567
@@ -3532,7 +3516,7 @@ wWeeklyFlags:: ds 1 ; d969
wd96a:: ds 1 ; d96a
wd96b:: ds 1 ; d96b
wd96c:: ds 1 ; d96c
-wStartDay:: ds 1 ; d96d
+wTimerEventStartDay:: db ; d96d
wd96e:: ds 1 ; d96e
wd96f:: ds 1 ; d96f
wd970:: ds 1 ; d970