shithub: pokered

Download patch

ref: 0e48333fb864b0c8b6914fe1b5e57929d5258080
parent: 148d3f3cf28f9c270e3d5043af0692d95bc731c5
author: dannye <corrnondacqb@yahoo.com>
date: Sat Jul 18 18:22:51 EDT 2015

Map object macro
closes https://github.com/iimarckus/pokered/issues/89

--- a/data/mapObjects/agatha.asm
+++ b/data/mapObjects/agatha.asm
@@ -9,8 +9,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_AGATHA, $2 + 4, $5 + 4, $ff, $d0, TRAINER | $1, AGATHA + $C8, $1
+	db $1 ; objects
+	object SPRITE_AGATHA, $5, $2, FACE, DOWN, $1, AGATHA + $C8, $1
 
 	; warp-to
 	EVENT_DISP AGATHAS_ROOM_WIDTH, $b, $4 ; BRUNOS_ROOM
--- a/data/mapObjects/beach_house.asm
+++ b/data/mapObjects/beach_house.asm
@@ -11,9 +11,9 @@
 	db 0,$b,5
 	db 1,$d,6
 
-	db 2 ; people
-	db SPRITE_FISHER, 3+4, 2+4, $ff, $d0, 1 ; surfin' dude
-	db $3d, 3+4, 5+4, $fe, $01, 2 ; pikachu
+	db 2 ; objects
+	object SPRITE_FISHER, 2, 3, FACE, DOWN, 1 ; surfin' dude
+	object $3d, 5, 3, WALK, $01, 2 ; pikachu
 
 	; warp-to
 	EVENT_DISP BEACH_HOUSE_WIDTH,7,2
--- a/data/mapObjects/bikeshop.asm
+++ b/data/mapObjects/bikeshop.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_BIKE_SHOP_GUY, $2 + 4, $6 + 4, $ff, $ff, $1 ; person
-	db SPRITE_MOM_GEISHA, $6 + 4, $5 + 4, $fe, $1, $2 ; person
-	db SPRITE_BUG_CATCHER, $3 + 4, $1 + 4, $ff, $d1, $3 ; person
+	db $3 ; objects
+	object SPRITE_BIKE_SHOP_GUY, $6, $2, FACE, STAY, $1 ; person
+	object SPRITE_MOM_GEISHA, $5, $6, WALK, $1, $2 ; person
+	object SPRITE_BUG_CATCHER, $1, $3, FACE, UP, $3 ; person
 
 	; warp-to
 	EVENT_DISP BIKE_SHOP_WIDTH, $7, $2
--- a/data/mapObjects/billshouse.asm
+++ b/data/mapObjects/billshouse.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_SLOWBRO, $5 + 4, $6 + 4, $ff, $ff, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $4 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $6 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_SLOWBRO, $6, $5, FACE, STAY, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $4, $4, FACE, STAY, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $6, $5, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP BILLS_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/blueshouse.asm
+++ b/data/mapObjects/blueshouse.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_DAISY, $3 + 4, $2 + 4, $FF, $D3, $1 ; Daisy, sitting by map
-	db SPRITE_DAISY, $4 + 4, $6 + 4, $FE, $1, ITEM | $2, $0 ; Daisy, walking around
-	db SPRITE_BOOK_MAP_DEX, $3 + 4, $3 + 4, $FF, $FF, ITEM | $3, $0 ; map on table
+	db $3 ; objects
+	object SPRITE_DAISY, $2, $3, FACE, LEFT, $1 ; Daisy, sitting by map
+	object SPRITE_DAISY, $6, $4, WALK, $1, $2, $0 ; Daisy, walking around
+	object SPRITE_BOOK_MAP_DEX, $3, $3, FACE, STAY, $3, $0 ; map on table
 
 	; warp-to
 	EVENT_DISP BLUES_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/bruno.asm
+++ b/data/mapObjects/bruno.asm
@@ -9,8 +9,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_BRUNO, $2 + 4, $5 + 4, $ff, $d0, TRAINER | $1, BRUNO + $C8, $1
+	db $1 ; objects
+	object SPRITE_BRUNO, $5, $2, FACE, DOWN, $1, BRUNO + $C8, $1
 
 	; warp-to
 	EVENT_DISP BRUNOS_ROOM_WIDTH, $b, $4 ; LORELEIS_ROOM
--- a/data/mapObjects/celadoncity.asm
+++ b/data/mapObjects/celadoncity.asm
@@ -27,16 +27,16 @@
 	db $15, $21, $11 ; CeladonCityText17
 	db $15, $1b, $12 ; CeladonCityText18
 
-	db $9 ; people
-	db SPRITE_LITTLE_GIRL, $11 + 4, $8 + 4, $fe, $0, $1 ; person
-	db SPRITE_OLD_PERSON, $1c + 4, $b + 4, $ff, $d1, $2 ; person
-	db SPRITE_GIRL, $13 + 4, $e + 4, $fe, $1, $3 ; person
-	db SPRITE_OLD_PERSON, $16 + 4, $19 + 4, $ff, $d0, $4 ; person
-	db SPRITE_OLD_PERSON, $10 + 4, $16 + 4, $ff, $d0, $5 ; person
-	db SPRITE_FISHER2, $c + 4, $20 + 4, $ff, $d2, $6 ; person
-	db SPRITE_SLOWBRO, $c + 4, $1e + 4, $ff, $d3, $7 ; person
-	db SPRITE_ROCKET, $1d + 4, $20 + 4, $fe, $2, $8 ; person
-	db SPRITE_ROCKET, $e + 4, $2a + 4, $fe, $2, $9 ; person
+	db $9 ; objects
+	object SPRITE_LITTLE_GIRL, $8, $11, WALK, $0, $1 ; person
+	object SPRITE_OLD_PERSON, $b, $1c, FACE, UP, $2 ; person
+	object SPRITE_GIRL, $e, $13, WALK, $1, $3 ; person
+	object SPRITE_OLD_PERSON, $19, $16, FACE, DOWN, $4 ; person
+	object SPRITE_OLD_PERSON, $16, $10, FACE, DOWN, $5 ; person
+	object SPRITE_FISHER2, $20, $c, FACE, RIGHT, $6 ; person
+	object SPRITE_SLOWBRO, $1e, $c, FACE, LEFT, $7 ; person
+	object SPRITE_ROCKET, $20, $1d, WALK, $2, $8 ; person
+	object SPRITE_ROCKET, $2a, $e, WALK, $2, $9 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_CITY_WIDTH, $d, $8 ; CELADON_MART_1
--- a/data/mapObjects/celadondiner.asm
+++ b/data/mapObjects/celadondiner.asm
@@ -7,12 +7,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_COOK, $5 + 4, $8 + 4, $fe, $2, $1 ; person
-	db SPRITE_MOM_GEISHA, $2 + 4, $7 + 4, $ff, $ff, $2 ; person
-	db SPRITE_FAT_BALD_GUY, $4 + 4, $1 + 4, $ff, $d0, $3 ; person
-	db SPRITE_FISHER2, $3 + 4, $5 + 4, $ff, $d3, $4 ; person
-	db SPRITE_GYM_HELPER, $1 + 4, $0 + 4, $ff, $d0, $5 ; person
+	db $5 ; objects
+	object SPRITE_COOK, $8, $5, WALK, $2, $1 ; person
+	object SPRITE_MOM_GEISHA, $7, $2, FACE, STAY, $2 ; person
+	object SPRITE_FAT_BALD_GUY, $1, $4, FACE, DOWN, $3 ; person
+	object SPRITE_FISHER2, $5, $3, FACE, LEFT, $4 ; person
+	object SPRITE_GYM_HELPER, $0, $1, FACE, DOWN, $5 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_DINER_WIDTH, $7, $3
--- a/data/mapObjects/celadongamecorner.asm
+++ b/data/mapObjects/celadongamecorner.asm
@@ -9,18 +9,18 @@
 	db $1 ; signs
 	db $4, $9, $c ; CeladonGameCornerText12
 
-	db $b ; people
-	db SPRITE_FOULARD_WOMAN, $6 + 4, $2 + 4, $ff, $d0, $1 ; person
-	db SPRITE_MART_GUY, $6 + 4, $5 + 4, $ff, $d0, $2 ; person
-	db SPRITE_FAT_BALD_GUY, $a + 4, $2 + 4, $ff, $d2, $3 ; person
-	db SPRITE_FOULARD_WOMAN, $d + 4, $2 + 4, $ff, $d2, $4 ; person
-	db SPRITE_FISHER, $b + 4, $5 + 4, $ff, $d3, $5 ; person
-	db SPRITE_MOM_GEISHA, $b + 4, $8 + 4, $ff, $d2, $6 ; person
-	db SPRITE_GYM_HELPER, $e + 4, $8 + 4, $ff, $d2, $7 ; person
-	db SPRITE_GAMBLER, $f + 4, $b + 4, $ff, $d3, $8 ; person
-	db SPRITE_MART_GUY, $b + 4, $e + 4, $ff, $d2, $9 ; person
-	db SPRITE_GENTLEMAN, $d + 4, $11 + 4, $ff, $d3, $a ; person
-	db SPRITE_ROCKET, $5 + 4, $9 + 4, $ff, $d1, TRAINER | $b, ROCKET + $C8, $7
+	db $b ; objects
+	object SPRITE_FOULARD_WOMAN, $2, $6, FACE, DOWN, $1 ; person
+	object SPRITE_MART_GUY, $5, $6, FACE, DOWN, $2 ; person
+	object SPRITE_FAT_BALD_GUY, $2, $a, FACE, RIGHT, $3 ; person
+	object SPRITE_FOULARD_WOMAN, $2, $d, FACE, RIGHT, $4 ; person
+	object SPRITE_FISHER, $5, $b, FACE, LEFT, $5 ; person
+	object SPRITE_MOM_GEISHA, $8, $b, FACE, RIGHT, $6 ; person
+	object SPRITE_GYM_HELPER, $8, $e, FACE, RIGHT, $7 ; person
+	object SPRITE_GAMBLER, $b, $f, FACE, LEFT, $8 ; person
+	object SPRITE_MART_GUY, $e, $b, FACE, RIGHT, $9 ; person
+	object SPRITE_GENTLEMAN, $11, $d, FACE, LEFT, $a ; person
+	object SPRITE_ROCKET, $9, $5, FACE, UP, $b, ROCKET + $C8, $7
 
 	; warp-to
 	EVENT_DISP GAME_CORNER_WIDTH, $11, $f
--- a/data/mapObjects/celadongym.asm
+++ b/data/mapObjects/celadongym.asm
@@ -7,15 +7,15 @@
 
 	db $0 ; signs
 
-	db $8 ; people
-	db SPRITE_ERIKA, $3 + 4, $4 + 4, $ff, $d0, TRAINER | $1, ERIKA + $C8, $1
-	db SPRITE_LASS, $b + 4, $2 + 4, $ff, $d3, TRAINER | $2, LASS + $C8, $11
-	db SPRITE_FOULARD_WOMAN, $a + 4, $7 + 4, $ff, $d2, TRAINER | $3, BEAUTY + $C8, $1
-	db SPRITE_LASS, $5 + 4, $9 + 4, $ff, $d0, TRAINER | $4, JR__TRAINER_F + $C8, $b
-	db SPRITE_FOULARD_WOMAN, $5 + 4, $1 + 4, $ff, $d0, TRAINER | $5, BEAUTY + $C8, $2
-	db SPRITE_LASS, $3 + 4, $6 + 4, $ff, $d0, TRAINER | $6, LASS + $C8, $12
-	db SPRITE_FOULARD_WOMAN, $3 + 4, $3 + 4, $ff, $d0, TRAINER | $7, BEAUTY + $C8, $3
-	db SPRITE_LASS, $3 + 4, $5 + 4, $ff, $d0, TRAINER | $8, COOLTRAINER_F + $C8, $1
+	db $8 ; objects
+	object SPRITE_ERIKA, $4, $3, FACE, DOWN, $1, ERIKA + $C8, $1
+	object SPRITE_LASS, $2, $b, FACE, LEFT, $2, LASS + $C8, $11
+	object SPRITE_FOULARD_WOMAN, $7, $a, FACE, RIGHT, $3, BEAUTY + $C8, $1
+	object SPRITE_LASS, $9, $5, FACE, DOWN, $4, JR__TRAINER_F + $C8, $b
+	object SPRITE_FOULARD_WOMAN, $1, $5, FACE, DOWN, $5, BEAUTY + $C8, $2
+	object SPRITE_LASS, $6, $3, FACE, DOWN, $6, LASS + $C8, $12
+	object SPRITE_FOULARD_WOMAN, $3, $3, FACE, DOWN, $7, BEAUTY + $C8, $3
+	object SPRITE_LASS, $5, $3, FACE, DOWN, $8, COOLTRAINER_F + $C8, $1
 
 	; warp-to
 	EVENT_DISP CELADON_GYM_WIDTH, $11, $4
--- a/data/mapObjects/celadonhotel.asm
+++ b/data/mapObjects/celadonhotel.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_OLD_MEDIUM_WOMAN, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_FOULARD_WOMAN, $4 + 4, $2 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $8 + 4, $fe, $2, $3 ; person
+	db $3 ; objects
+	object SPRITE_OLD_MEDIUM_WOMAN, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_FOULARD_WOMAN, $2, $4, FACE, STAY, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $8, $4, WALK, $2, $3 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_HOTEL_WIDTH, $7, $3
--- a/data/mapObjects/celadonhouse.asm
+++ b/data/mapObjects/celadonhouse.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_OLD_PERSON, $2 + 4, $4 + 4, $ff, $d0, $1 ; person
-	db SPRITE_ROCKET, $4 + 4, $1 + 4, $fe, $0, $2 ; person
-	db SPRITE_SAILOR, $6 + 4, $5 + 4, $ff, $d2, $3 ; person
+	db $3 ; objects
+	object SPRITE_OLD_PERSON, $4, $2, FACE, DOWN, $1 ; person
+	object SPRITE_ROCKET, $1, $4, WALK, $0, $2 ; person
+	object SPRITE_SAILOR, $5, $6, FACE, RIGHT, $3 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/celadonmansion1.asm
+++ b/data/mapObjects/celadonmansion1.asm
@@ -11,11 +11,11 @@
 	db $1 ; signs
 	db $9, $4, $5 ; CeladonMansion1Text5
 
-	db $4 ; people
-	db SPRITE_SLOWBRO, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_OLD_MEDIUM_WOMAN, $5 + 4, $1 + 4, $ff, $d0, $2 ; person
-	db SPRITE_CLEFAIRY, $8 + 4, $1 + 4, $fe, $2, $3 ; person
-	db SPRITE_SLOWBRO, $4 + 4, $4 + 4, $fe, $1, $4 ; person
+	db $4 ; objects
+	object SPRITE_SLOWBRO, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_OLD_MEDIUM_WOMAN, $1, $5, FACE, DOWN, $2 ; person
+	object SPRITE_CLEFAIRY, $1, $8, WALK, $2, $3 ; person
+	object SPRITE_SLOWBRO, $4, $4, WALK, $1, $4 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MANSION_1_WIDTH, $b, $4
--- a/data/mapObjects/celadonmansion2.asm
+++ b/data/mapObjects/celadonmansion2.asm
@@ -10,7 +10,7 @@
 	db $1 ; signs
 	db $9, $4, $1 ; CeladonMansion2Text1
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP CELADON_MANSION_2_WIDTH, $1, $6 ; CELADON_MANSION_3
--- a/data/mapObjects/celadonmansion3.asm
+++ b/data/mapObjects/celadonmansion3.asm
@@ -13,11 +13,11 @@
 	db $6, $1, $7 ; CeladonMansion3Text7
 	db $9, $4, $8 ; CeladonMansion3Text8
 
-	db $4 ; people
-	db SPRITE_BIKE_SHOP_GUY, $4 + 4, $0 + 4, $ff, $d1, $1 ; person
-	db SPRITE_MART_GUY, $4 + 4, $3 + 4, $ff, $d1, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $7 + 4, $0 + 4, $ff, $d1, $3 ; person
-	db SPRITE_LAPRAS_GIVER, $3 + 4, $2 + 4, $ff, $ff, $4 ; person
+	db $4 ; objects
+	object SPRITE_BIKE_SHOP_GUY, $0, $4, FACE, UP, $1 ; person
+	object SPRITE_MART_GUY, $3, $4, FACE, UP, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $0, $7, FACE, UP, $3 ; person
+	object SPRITE_LAPRAS_GIVER, $2, $3, FACE, STAY, $4 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MANSION_3_WIDTH, $1, $6 ; CELADON_MANSION_2
--- a/data/mapObjects/celadonmansion4.asm
+++ b/data/mapObjects/celadonmansion4.asm
@@ -9,7 +9,7 @@
 	db $1 ; signs
 	db $7, $3, $1 ; CeladonMansion4Text1
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP CELADON_MANSION_4_WIDTH, $1, $6 ; CELADON_MANSION_3
--- a/data/mapObjects/celadonmansion5.asm
+++ b/data/mapObjects/celadonmansion5.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_HIKER, $2 + 4, $2 + 4, $ff, $d0, $1 ; person
-	db SPRITE_BALL, $3 + 4, $4 + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_HIKER, $2, $2, FACE, DOWN, $1 ; person
+	object SPRITE_BALL, $4, $3, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MANSION_5_WIDTH, $7, $2 ; CELADON_MANSION_4
--- a/data/mapObjects/celadonmart1.asm
+++ b/data/mapObjects/celadonmart1.asm
@@ -13,8 +13,8 @@
 	db $4, $b, $2 ; CeladonMart1Text2
 	db $1, $e, $3 ; CeladonMart1Text3
 
-	db $1 ; people
-	db SPRITE_CABLE_CLUB_WOMAN, $3 + 4, $8 + 4, $ff, $d0, $1 ; person
+	db $1 ; objects
+	object SPRITE_CABLE_CLUB_WOMAN, $8, $3, FACE, DOWN, $1 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MART_1_WIDTH, $7, $2
--- a/data/mapObjects/celadonmart2.asm
+++ b/data/mapObjects/celadonmart2.asm
@@ -9,11 +9,11 @@
 	db $1 ; signs
 	db $1, $e, $5 ; CeladonMart2Text5
 
-	db $4 ; people
-	db SPRITE_MART_GUY, $3 + 4, $5 + 4, $ff, $d0, $1 ; person
-	db SPRITE_MART_GUY, $3 + 4, $6 + 4, $ff, $d0, $2 ; person
-	db SPRITE_FAT_BALD_GUY, $5 + 4, $13 + 4, $ff, $ff, $3 ; person
-	db SPRITE_GIRL, $4 + 4, $e + 4, $fe, $1, $4 ; person
+	db $4 ; objects
+	object SPRITE_MART_GUY, $5, $3, FACE, DOWN, $1 ; person
+	object SPRITE_MART_GUY, $6, $3, FACE, DOWN, $2 ; person
+	object SPRITE_FAT_BALD_GUY, $13, $5, FACE, STAY, $3 ; person
+	object SPRITE_GIRL, $e, $4, WALK, $1, $4 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MART_2_WIDTH, $1, $c ; CELADON_MART_1
--- a/data/mapObjects/celadonmart3.asm
+++ b/data/mapObjects/celadonmart3.asm
@@ -20,12 +20,12 @@
 	db $1, $6, $10 ; CeladonMart3Text16
 	db $1, $a, $11 ; CeladonMart3Text17
 
-	db $5 ; people
-	db SPRITE_MART_GUY, $5 + 4, $10 + 4, $ff, $ff, $1 ; person
-	db SPRITE_GAMEBOY_KID_COPY, $6 + 4, $b + 4, $ff, $d3, $2 ; person
-	db SPRITE_GAMEBOY_KID_COPY, $2 + 4, $7 + 4, $ff, $d0, $3 ; person
-	db SPRITE_GAMEBOY_KID_COPY, $2 + 4, $8 + 4, $ff, $d0, $4 ; person
-	db SPRITE_YOUNG_BOY, $5 + 4, $2 + 4, $ff, $d1, $5 ; person
+	db $5 ; objects
+	object SPRITE_MART_GUY, $10, $5, FACE, STAY, $1 ; person
+	object SPRITE_GAMEBOY_KID_COPY, $b, $6, FACE, LEFT, $2 ; person
+	object SPRITE_GAMEBOY_KID_COPY, $7, $2, FACE, DOWN, $3 ; person
+	object SPRITE_GAMEBOY_KID_COPY, $8, $2, FACE, DOWN, $4 ; person
+	object SPRITE_YOUNG_BOY, $2, $5, FACE, UP, $5 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MART_3_WIDTH, $1, $c ; CELADON_MART_4
--- a/data/mapObjects/celadonmart4.asm
+++ b/data/mapObjects/celadonmart4.asm
@@ -9,10 +9,10 @@
 	db $1 ; signs
 	db $1, $e, $4 ; CeladonMart4Text4
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $7 + 4, $5 + 4, $ff, $ff, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $f + 4, $fe, $2, $2 ; person
-	db SPRITE_BUG_CATCHER, $2 + 4, $5 + 4, $fe, $2, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $5, $7, FACE, STAY, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $f, $5, WALK, $2, $2 ; person
+	object SPRITE_BUG_CATCHER, $5, $2, WALK, $2, $3 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MART_4_WIDTH, $1, $c ; CELADON_MART_3
--- a/data/mapObjects/celadonmart5.asm
+++ b/data/mapObjects/celadonmart5.asm
@@ -9,11 +9,11 @@
 	db $1 ; signs
 	db $1, $e, $5 ; CeladonMart5Text5
 
-	db $4 ; people
-	db SPRITE_GENTLEMAN, $5 + 4, $e + 4, $fe, $1, $1 ; person
-	db SPRITE_SAILOR, $6 + 4, $2 + 4, $ff, $ff, $2 ; person
-	db SPRITE_MART_GUY, $3 + 4, $5 + 4, $ff, $d0, $3 ; person
-	db SPRITE_MART_GUY, $3 + 4, $6 + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_GENTLEMAN, $e, $5, WALK, $1, $1 ; person
+	object SPRITE_SAILOR, $2, $6, FACE, STAY, $2 ; person
+	object SPRITE_MART_GUY, $5, $3, FACE, DOWN, $3 ; person
+	object SPRITE_MART_GUY, $6, $3, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MART_5_WIDTH, $1, $c ; CELADON_MART_ROOF
--- a/data/mapObjects/celadonmartelevator.asm
+++ b/data/mapObjects/celadonmartelevator.asm
@@ -8,7 +8,7 @@
 	db $1 ; signs
 	db $0, $3, $1 ; CeladonMartElevatorText1
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP CELADON_MART_ELEVATOR_WIDTH, $3, $1 ; CELADON_MART_1
--- a/data/mapObjects/celadonmartroof.asm
+++ b/data/mapObjects/celadonmartroof.asm
@@ -10,9 +10,9 @@
 	db $2, $c, $5 ; CeladonMartRoofText5
 	db $2, $d, $6 ; CeladonMartRoofText6
 
-	db $2 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $a + 4, $ff, $d2, $1 ; person
-	db SPRITE_LITTLE_GIRL, $5 + 4, $5 + 4, $fe, $0, $2 ; person
+	db $2 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $a, $4, FACE, RIGHT, $1 ; person
+	object SPRITE_LITTLE_GIRL, $5, $5, WALK, $0, $2 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_MART_ROOF_WIDTH, $2, $f ; CELADON_MART_5
--- a/data/mapObjects/celadonpokecenter.asm
+++ b/data/mapObjects/celadonpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GENTLEMAN, $3 + 4, $7 + 4, $fe, $2, $2 ; person
-	db SPRITE_FOULARD_WOMAN, $5 + 4, $a + 4, $fe, $0, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_GENTLEMAN, $7, $3, WALK, $2, $2 ; person
+	object SPRITE_FOULARD_WOMAN, $a, $5, WALK, $0, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/celadonprizeroom.asm
+++ b/data/mapObjects/celadonprizeroom.asm
@@ -10,9 +10,9 @@
 	db $2, $4, $4 ; CeladonPrizeRoomText4
 	db $2, $6, $5 ; CeladonPrizeRoomText5
 
-	db $2 ; people
-	db SPRITE_BALDING_GUY, $4 + 4, $1 + 4, $ff, $ff, $1 ; person
-	db SPRITE_GAMBLER, $3 + 4, $7 + 4, $fe, $2, $2 ; person
+	db $2 ; objects
+	object SPRITE_BALDING_GUY, $1, $4, FACE, STAY, $1 ; person
+	object SPRITE_GAMBLER, $7, $3, WALK, $2, $2 ; person
 
 	; warp-to
 	EVENT_DISP CELADON_PRIZE_ROOM_WIDTH, $7, $4
--- a/data/mapObjects/ceruleancity.asm
+++ b/data/mapObjects/ceruleancity.asm
@@ -21,18 +21,18 @@
 	db $19, $b, $10 ; CeruleanCityText16
 	db $15, $1b, $11 ; CeruleanCityText17
 
-	db $b ; people
-	db SPRITE_BLUE, $2 + 4, $14 + 4, $ff, $d0, $1 ; person
-	db SPRITE_ROCKET, $8 + 4, $1e + 4, $ff, $ff, TRAINER | $2, ROCKET + $C8, $5
-	db SPRITE_BLACK_HAIR_BOY_1, $14 + 4, $1f + 4, $ff, $d0, $3 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $12 + 4, $f + 4, $fe, $1, $4 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $15 + 4, $9 + 4, $fe, $2, $5 ; person
-	db SPRITE_GUARD, $c + 4, $1c + 4, $ff, $d0, $6 ; person
-	db SPRITE_LASS, $1a + 4, $1d + 4, $ff, $d2, $7 ; person
-	db SPRITE_SLOWBRO, $1a + 4, $1c + 4, $ff, $d0, $8 ; person
-	db SPRITE_LASS, $1b + 4, $9 + 4, $fe, $2, $9 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $c + 4, $4 + 4, $ff, $d0, $a ; person
-	db SPRITE_GUARD, $c + 4, $1b + 4, $ff, $d0, $b ; person
+	db $b ; objects
+	object SPRITE_BLUE, $14, $2, FACE, DOWN, $1 ; person
+	object SPRITE_ROCKET, $1e, $8, FACE, STAY, $2, ROCKET + $C8, $5
+	object SPRITE_BLACK_HAIR_BOY_1, $1f, $14, FACE, DOWN, $3 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $f, $12, WALK, $1, $4 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $9, $15, WALK, $2, $5 ; person
+	object SPRITE_GUARD, $1c, $c, FACE, DOWN, $6 ; person
+	object SPRITE_LASS, $1d, $1a, FACE, RIGHT, $7 ; person
+	object SPRITE_SLOWBRO, $1c, $1a, FACE, DOWN, $8 ; person
+	object SPRITE_LASS, $9, $1b, WALK, $2, $9 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $4, $c, FACE, DOWN, $a ; person
+	object SPRITE_GUARD, $1b, $c, FACE, DOWN, $b ; person
 
 	; warp-to
 	EVENT_DISP CERULEAN_CITY_WIDTH, $b, $1b ; TRASHED_HOUSE
--- a/data/mapObjects/ceruleangym.asm
+++ b/data/mapObjects/ceruleangym.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_BRUNETTE_GIRL, $2 + 4, $4 + 4, $ff, $d0, TRAINER | $1, MISTY + $C8, $1
-	db SPRITE_LASS, $3 + 4, $2 + 4, $ff, $d3, TRAINER | $2, JR__TRAINER_F + $C8, $1
-	db SPRITE_SWIMMER, $7 + 4, $8 + 4, $ff, $d2, TRAINER | $3, SWIMMER + $C8, $1
-	db SPRITE_GYM_HELPER, $a + 4, $7 + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_BRUNETTE_GIRL, $4, $2, FACE, DOWN, $1, MISTY + $C8, $1
+	object SPRITE_LASS, $2, $3, FACE, LEFT, $2, JR__TRAINER_F + $C8, $1
+	object SPRITE_SWIMMER, $8, $7, FACE, RIGHT, $3, SWIMMER + $C8, $1
+	object SPRITE_GYM_HELPER, $7, $a, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP CERULEAN_GYM_WIDTH, $d, $4
--- a/data/mapObjects/ceruleanhouse1.asm
+++ b/data/mapObjects/ceruleanhouse1.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_OLD_MEDIUM_WOMAN, $4 + 4, $5 + 4, $ff, $d2, $1 ; person
-	db SPRITE_GAMBLER, $2 + 4, $1 + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_OLD_MEDIUM_WOMAN, $5, $4, FACE, RIGHT, $1 ; person
+	object SPRITE_GAMBLER, $1, $2, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP CERULEAN_HOUSE_1_WIDTH, $7, $2
--- a/data/mapObjects/ceruleanhouse2.asm
+++ b/data/mapObjects/ceruleanhouse2.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_FAT_BALD_GUY, $3 + 4, $5 + 4, $ff, $d3, $1 ; person
+	db $1 ; objects
+	object SPRITE_FAT_BALD_GUY, $5, $3, FACE, LEFT, $1 ; person
 
 	; warp-to
 	EVENT_DISP CERULEAN_HOUSE_2_WIDTH, $0, $2
--- a/data/mapObjects/ceruleanhousetrashed.asm
+++ b/data/mapObjects/ceruleanhousetrashed.asm
@@ -9,9 +9,9 @@
 	db $1 ; signs
 	db $0, $3, $3 ; CeruleanHouseTrashedText3
 
-	db $2 ; people
-	db SPRITE_FISHER, $1 + 4, $2 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GIRL, $6 + 4, $5 + 4, $fe, $2, $2 ; person
+	db $2 ; objects
+	object SPRITE_FISHER, $2, $1, FACE, DOWN, $1 ; person
+	object SPRITE_GIRL, $5, $6, WALK, $2, $2 ; person
 
 	; warp-to
 	EVENT_DISP TRASHED_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/ceruleanmart.asm
+++ b/data/mapObjects/ceruleanmart.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $4 + 4, $3 + 4, $fe, $1, $2 ; person
-	db SPRITE_LASS, $2 + 4, $6 + 4, $fe, $2, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $3, $4, WALK, $1, $2 ; person
+	object SPRITE_LASS, $6, $2, WALK, $2, $3 ; person
 
 	; warp-to
 	EVENT_DISP CERULEAN_MART_WIDTH, $7, $3
--- a/data/mapObjects/ceruleanpokecenter.asm
+++ b/data/mapObjects/ceruleanpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $a + 4, $fe, $0, $2 ; person
-	db SPRITE_GENTLEMAN, $3 + 4, $4 + 4, $ff, $d0, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $a, $5, WALK, $0, $2 ; person
+	object SPRITE_GENTLEMAN, $4, $3, FACE, DOWN, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP CERULEAN_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/cinnabargym.asm
+++ b/data/mapObjects/cinnabargym.asm
@@ -7,16 +7,16 @@
 
 	db $0 ; signs
 
-	db $9 ; people
-	db SPRITE_FAT_BALD_GUY, $3 + 4, $3 + 4, $ff, $d0, TRAINER | $1, BLAINE + $C8, $1
-	db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $11 + 4, $ff, $d0, TRAINER | $2, SUPER_NERD + $C8, $9
-	db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $11 + 4, $ff, $d0, TRAINER | $3, BURGLAR + $C8, $4
-	db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $b + 4, $ff, $d0, TRAINER | $4, SUPER_NERD + $C8, $a
-	db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $b + 4, $ff, $d0, TRAINER | $5, BURGLAR + $C8, $5
-	db SPRITE_BLACK_HAIR_BOY_2, $e + 4, $b + 4, $ff, $d0, TRAINER | $6, SUPER_NERD + $C8, $b
-	db SPRITE_BLACK_HAIR_BOY_2, $e + 4, $3 + 4, $ff, $d0, TRAINER | $7, BURGLAR + $C8, $6
-	db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $3 + 4, $ff, $d0, TRAINER | $8, SUPER_NERD + $C8, $c
-	db SPRITE_GYM_HELPER, $d + 4, $10 + 4, $ff, $d0, $9 ; person
+	db $9 ; objects
+	object SPRITE_FAT_BALD_GUY, $3, $3, FACE, DOWN, $1, BLAINE + $C8, $1
+	object SPRITE_BLACK_HAIR_BOY_2, $11, $2, FACE, DOWN, $2, SUPER_NERD + $C8, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $11, $8, FACE, DOWN, $3, BURGLAR + $C8, $4
+	object SPRITE_BLACK_HAIR_BOY_2, $b, $4, FACE, DOWN, $4, SUPER_NERD + $C8, $a
+	object SPRITE_BLACK_HAIR_BOY_2, $b, $8, FACE, DOWN, $5, BURGLAR + $C8, $5
+	object SPRITE_BLACK_HAIR_BOY_2, $b, $e, FACE, DOWN, $6, SUPER_NERD + $C8, $b
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $e, FACE, DOWN, $7, BURGLAR + $C8, $6
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $8, FACE, DOWN, $8, SUPER_NERD + $C8, $c
+	object SPRITE_GYM_HELPER, $10, $d, FACE, DOWN, $9 ; person
 
 	; warp-to
 	EVENT_DISP CINNABAR_GYM_WIDTH, $11, $10
--- a/data/mapObjects/cinnabarisland.asm
+++ b/data/mapObjects/cinnabarisland.asm
@@ -15,9 +15,9 @@
 	db $b, $9, $6 ; CinnabarIslandText6
 	db $3, $d, $7 ; CinnabarIslandText7
 
-	db $2 ; people
-	db SPRITE_GIRL, $5 + 4, $c + 4, $fe, $2, $1 ; person
-	db SPRITE_GAMBLER, $6 + 4, $e + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_GIRL, $c, $5, WALK, $2, $1 ; person
+	object SPRITE_GAMBLER, $e, $6, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP CINNABAR_ISLAND_WIDTH, $3, $6 ; MANSION_1
--- a/data/mapObjects/cinnabarmart.asm
+++ b/data/mapObjects/cinnabarmart.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_ERIKA, $2 + 4, $6 + 4, $ff, $ff, $2 ; person
-	db SPRITE_OAK_AIDE, $4 + 4, $3 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_ERIKA, $6, $2, FACE, STAY, $2 ; person
+	object SPRITE_OAK_AIDE, $3, $4, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP CINNABAR_MART_WIDTH, $7, $3
--- a/data/mapObjects/cinnabarpokecenter.asm
+++ b/data/mapObjects/cinnabarpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_LASS, $4 + 4, $9 + 4, $fe, $0, $2 ; person
-	db SPRITE_GENTLEMAN, $6 + 4, $2 + 4, $ff, $ff, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_LASS, $9, $4, WALK, $0, $2 ; person
+	object SPRITE_GENTLEMAN, $2, $6, FACE, STAY, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP CINNABAR_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/colosseum.asm
+++ b/data/mapObjects/colosseum.asm
@@ -5,5 +5,5 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_RED, $2 + 4, $2 + 4, $ff, $0, $1 ; person
+	db $1 ; objects
+	object SPRITE_RED, $2, $2, $ff, $0, $1 ; person
--- a/data/mapObjects/copycatshouse1f.asm
+++ b/data/mapObjects/copycatshouse1f.asm
@@ -8,10 +8,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MOM_GEISHA, $2 + 4, $2 + 4, $ff, $d0, $1 ; person
-	db SPRITE_FAT_BALD_GUY, $4 + 4, $5 + 4, $ff, $d2, $2 ; person
-	db SPRITE_CLEFAIRY, $4 + 4, $1 + 4, $fe, $1, $3 ; person
+	db $3 ; objects
+	object SPRITE_MOM_GEISHA, $2, $2, FACE, DOWN, $1 ; person
+	object SPRITE_FAT_BALD_GUY, $5, $4, FACE, RIGHT, $2 ; person
+	object SPRITE_CLEFAIRY, $1, $4, WALK, $1, $3 ; person
 
 	; warp-to
 	EVENT_DISP COPYCATS_HOUSE_1F_WIDTH, $7, $2
--- a/data/mapObjects/copycatshouse2f.asm
+++ b/data/mapObjects/copycatshouse2f.asm
@@ -8,12 +8,12 @@
 	db $5, $3, $6 ; CopycatsHouse2FText6
 	db $1, $0, $7 ; CopycatsHouse2FText7
 
-	db $5 ; people
-	db SPRITE_BRUNETTE_GIRL, $3 + 4, $4 + 4, $fe, $0, $1 ; person
-	db SPRITE_BIRD, $6 + 4, $4 + 4, $fe, $2, $2 ; person
-	db SPRITE_SLOWBRO, $1 + 4, $5 + 4, $ff, $d0, $3 ; person
-	db SPRITE_BIRD, $0 + 4, $2 + 4, $ff, $d0, $4 ; person
-	db SPRITE_CLEFAIRY, $6 + 4, $1 + 4, $ff, $d3, $5 ; person
+	db $5 ; objects
+	object SPRITE_BRUNETTE_GIRL, $4, $3, WALK, $0, $1 ; person
+	object SPRITE_BIRD, $4, $6, WALK, $2, $2 ; person
+	object SPRITE_SLOWBRO, $5, $1, FACE, DOWN, $3 ; person
+	object SPRITE_BIRD, $2, $0, FACE, DOWN, $4 ; person
+	object SPRITE_CLEFAIRY, $1, $6, FACE, LEFT, $5 ; person
 
 	; warp-to
 	EVENT_DISP COPYCATS_HOUSE_2F_WIDTH, $1, $7 ; COPYCATS_HOUSE_1F
--- a/data/mapObjects/daycarem.asm
+++ b/data/mapObjects/daycarem.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GENTLEMAN, $3 + 4, $2 + 4, $ff, $d3, $1 ; person
+	db $1 ; objects
+	object SPRITE_GENTLEMAN, $2, $3, FACE, LEFT, $1 ; person
 
 	; warp-to
 	EVENT_DISP DAYCAREM_WIDTH, $7, $2
--- a/data/mapObjects/diglettscave.asm
+++ b/data/mapObjects/diglettscave.asm
@@ -7,7 +7,7 @@
 
 	db $0 ; signs
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP DIGLETTS_CAVE_WIDTH, $5, $5 ; DIGLETTS_CAVE_EXIT
--- a/data/mapObjects/diglettscaveroute11.asm
+++ b/data/mapObjects/diglettscaveroute11.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GAMBLER, $3 + 4, $2 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_GAMBLER, $2, $3, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP DIGLETTS_CAVE_ENTRANCE_WIDTH, $7, $2
--- a/data/mapObjects/diglettscaveroute2.asm
+++ b/data/mapObjects/diglettscaveroute2.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_FISHER, $3 + 4, $3 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_FISHER, $3, $3, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP DIGLETTS_CAVE_EXIT_WIDTH, $7, $2
--- a/data/mapObjects/fanclub.asm
+++ b/data/mapObjects/fanclub.asm
@@ -9,13 +9,13 @@
 	db $0, $1, $7 ; FanClubText7
 	db $0, $6, $8 ; FanClubText8
 
-	db $6 ; people
-	db SPRITE_FISHER2, $3 + 4, $6 + 4, $ff, $d2, $1 ; person
-	db SPRITE_GIRL, $3 + 4, $1 + 4, $ff, $d3, $2 ; person
-	db SPRITE_CLEFAIRY, $4 + 4, $6 + 4, $ff, $d2, $3 ; person
-	db SPRITE_SEEL, $4 + 4, $1 + 4, $ff, $d3, $4 ; person
-	db SPRITE_GENTLEMAN, $1 + 4, $3 + 4, $ff, $d0, $5 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $1 + 4, $5 + 4, $ff, $d0, $6 ; person
+	db $6 ; objects
+	object SPRITE_FISHER2, $6, $3, FACE, RIGHT, $1 ; person
+	object SPRITE_GIRL, $1, $3, FACE, LEFT, $2 ; person
+	object SPRITE_CLEFAIRY, $6, $4, FACE, RIGHT, $3 ; person
+	object SPRITE_SEEL, $1, $4, FACE, LEFT, $4 ; person
+	object SPRITE_GENTLEMAN, $3, $1, FACE, DOWN, $5 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $5, $1, FACE, DOWN, $6 ; person
 
 	; warp-to
 	EVENT_DISP POKEMON_FAN_CLUB_WIDTH, $7, $2
--- a/data/mapObjects/fightingdojo.asm
+++ b/data/mapObjects/fightingdojo.asm
@@ -7,14 +7,14 @@
 
 	db $0 ; signs
 
-	db $7 ; people
-	db SPRITE_HIKER, $3 + 4, $5 + 4, $ff, $d0, TRAINER | $1, BLACKBELT + $C8, $1
-	db SPRITE_HIKER, $4 + 4, $3 + 4, $ff, $d3, TRAINER | $2, BLACKBELT + $C8, $2
-	db SPRITE_HIKER, $6 + 4, $3 + 4, $ff, $d3, TRAINER | $3, BLACKBELT + $C8, $3
-	db SPRITE_HIKER, $5 + 4, $5 + 4, $ff, $d2, TRAINER | $4, BLACKBELT + $C8, $4
-	db SPRITE_HIKER, $7 + 4, $5 + 4, $ff, $d2, TRAINER | $5, BLACKBELT + $C8, $5
-	db SPRITE_BALL, $1 + 4, $4 + 4, $ff, $ff, $6 ; person
-	db SPRITE_BALL, $1 + 4, $5 + 4, $ff, $ff, $7 ; person
+	db $7 ; objects
+	object SPRITE_HIKER, $5, $3, FACE, DOWN, $1, BLACKBELT + $C8, $1
+	object SPRITE_HIKER, $3, $4, FACE, LEFT, $2, BLACKBELT + $C8, $2
+	object SPRITE_HIKER, $3, $6, FACE, LEFT, $3, BLACKBELT + $C8, $3
+	object SPRITE_HIKER, $5, $5, FACE, RIGHT, $4, BLACKBELT + $C8, $4
+	object SPRITE_HIKER, $5, $7, FACE, RIGHT, $5, BLACKBELT + $C8, $5
+	object SPRITE_BALL, $4, $1, FACE, STAY, $6 ; person
+	object SPRITE_BALL, $5, $1, FACE, STAY, $7 ; person
 
 	; warp-to
 	EVENT_DISP FIGHTING_DOJO_WIDTH, $b, $4
--- a/data/mapObjects/fuchsiacity.asm
+++ b/data/mapObjects/fuchsiacity.asm
@@ -28,17 +28,17 @@
 	db $f, $d, $17 ; FuchsiaCityText23
 	db $7, $7, $18 ; FuchsiaCityText24
 
-	db $a ; people
-	db SPRITE_BUG_CATCHER, $c + 4, $a + 4, $fe, $2, $1 ; person
-	db SPRITE_GAMBLER, $11 + 4, $1c + 4, $fe, $2, $2 ; person
-	db SPRITE_FISHER2, $e + 4, $1e + 4, $ff, $d0, $3 ; person
-	db SPRITE_BUG_CATCHER, $8 + 4, $18 + 4, $ff, $d1, $4 ; person
-	db SPRITE_CLEFAIRY, $5 + 4, $1f + 4, $fe, $0, $5 ; person
-	db SPRITE_BALL, $6 + 4, $19 + 4, $ff, $ff, $6 ; person
-	db SPRITE_SLOWBRO, $6 + 4, $c + 4, $fe, $2, $7 ; person
-	db SPRITE_SLOWBRO, $c + 4, $1e + 4, $fe, $2, $8 ; person
-	db SPRITE_SEEL, $11 + 4, $8 + 4, $fe, $0, $9 ; person
-	db SPRITE_OMANYTE, $5 + 4, $6 + 4, $ff, $ff, $a ; person
+	db $a ; objects
+	object SPRITE_BUG_CATCHER, $a, $c, WALK, $2, $1 ; person
+	object SPRITE_GAMBLER, $1c, $11, WALK, $2, $2 ; person
+	object SPRITE_FISHER2, $1e, $e, FACE, DOWN, $3 ; person
+	object SPRITE_BUG_CATCHER, $18, $8, FACE, UP, $4 ; person
+	object SPRITE_CLEFAIRY, $1f, $5, WALK, $0, $5 ; person
+	object SPRITE_BALL, $19, $6, FACE, STAY, $6 ; person
+	object SPRITE_SLOWBRO, $c, $6, WALK, $2, $7 ; person
+	object SPRITE_SLOWBRO, $1e, $c, WALK, $2, $8 ; person
+	object SPRITE_SEEL, $8, $11, WALK, $0, $9 ; person
+	object SPRITE_OMANYTE, $6, $5, FACE, STAY, $a ; person
 
 	; warp-to
 	EVENT_DISP FUCHSIA_CITY_WIDTH, $d, $5 ; FUCHSIA_MART
--- a/data/mapObjects/fuchsiagym.asm
+++ b/data/mapObjects/fuchsiagym.asm
@@ -7,15 +7,15 @@
 
 	db $0 ; signs
 
-	db $8 ; people
-	db SPRITE_BLACKBELT, $a + 4, $4 + 4, $ff, $d0, TRAINER | $1, KOGA + $C8, $1
-	db SPRITE_ROCKER, $d + 4, $8 + 4, $ff, $d0, TRAINER | $2, JUGGLER + $C8, $7
-	db SPRITE_ROCKER, $8 + 4, $7 + 4, $ff, $d3, TRAINER | $3, JUGGLER + $C8, $3
-	db SPRITE_ROCKER, $c + 4, $1 + 4, $ff, $d0, TRAINER | $4, JUGGLER + $C8, $8
-	db SPRITE_ROCKER, $5 + 4, $3 + 4, $ff, $d1, TRAINER | $5, TAMER + $C8, $1
-	db SPRITE_ROCKER, $2 + 4, $8 + 4, $ff, $d0, TRAINER | $6, TAMER + $C8, $2
-	db SPRITE_ROCKER, $7 + 4, $2 + 4, $ff, $d2, TRAINER | $7, JUGGLER + $C8, $4
-	db SPRITE_GYM_HELPER, $f + 4, $7 + 4, $ff, $d0, $8 ; person
+	db $8 ; objects
+	object SPRITE_BLACKBELT, $4, $a, FACE, DOWN, $1, KOGA + $C8, $1
+	object SPRITE_ROCKER, $8, $d, FACE, DOWN, $2, JUGGLER + $C8, $7
+	object SPRITE_ROCKER, $7, $8, FACE, LEFT, $3, JUGGLER + $C8, $3
+	object SPRITE_ROCKER, $1, $c, FACE, DOWN, $4, JUGGLER + $C8, $8
+	object SPRITE_ROCKER, $3, $5, FACE, UP, $5, TAMER + $C8, $1
+	object SPRITE_ROCKER, $8, $2, FACE, DOWN, $6, TAMER + $C8, $2
+	object SPRITE_ROCKER, $2, $7, FACE, RIGHT, $7, JUGGLER + $C8, $4
+	object SPRITE_GYM_HELPER, $7, $f, FACE, DOWN, $8 ; person
 
 	; warp-to
 	EVENT_DISP FUCHSIA_GYM_WIDTH, $11, $4
--- a/data/mapObjects/fuchsiahouse1.asm
+++ b/data/mapObjects/fuchsiahouse1.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MOM_GEISHA, $3 + 4, $2 + 4, $ff, $d3, $1 ; person
-	db SPRITE_GAMBLER, $2 + 4, $7 + 4, $ff, $d1, $2 ; person
-	db SPRITE_BUG_CATCHER, $5 + 4, $5 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_MOM_GEISHA, $2, $3, FACE, LEFT, $1 ; person
+	object SPRITE_GAMBLER, $7, $2, FACE, UP, $2 ; person
+	object SPRITE_BUG_CATCHER, $5, $5, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP FUCHSIA_HOUSE_1_WIDTH, $7, $2
--- a/data/mapObjects/fuchsiahouse2.asm
+++ b/data/mapObjects/fuchsiahouse2.asm
@@ -9,10 +9,10 @@
 	db $3, $4, $4 ; FuchsiaHouse2Text4
 	db $3, $5, $5 ; FuchsiaHouse2Text5
 
-	db $3 ; people
-	db SPRITE_WARDEN, $3 + 4, $2 + 4, $ff, $ff, $1 ; person
-	db SPRITE_BALL, $3 + 4, $8 + 4, $ff, $ff, ITEM | $2, RARE_CANDY
-	db SPRITE_BOULDER, $4 + 4, $8 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $3 ; person
+	db $3 ; objects
+	object SPRITE_WARDEN, $2, $3, FACE, STAY, $1 ; person
+	object SPRITE_BALL, $8, $3, FACE, STAY, $2, RARE_CANDY
+	object SPRITE_BOULDER, $8, $4, FACE, BOULDER_MOVEMENT_BYTE_2, $3 ; person
 
 	; warp-to
 	EVENT_DISP FUCHSIA_HOUSE_2_WIDTH, $7, $4
--- a/data/mapObjects/fuchsiahouse3.asm
+++ b/data/mapObjects/fuchsiahouse3.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_FISHER, $3 + 4, $5 + 4, $ff, $d3, $1 ; person
+	db $1 ; objects
+	object SPRITE_FISHER, $5, $3, FACE, LEFT, $1 ; person
 
 	; warp-to
 	EVENT_DISP FUCHSIA_HOUSE_3_WIDTH, $0, $2
--- a/data/mapObjects/fuchsiamart.asm
+++ b/data/mapObjects/fuchsiamart.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_FAT_BALD_GUY, $2 + 4, $4 + 4, $ff, $ff, $2 ; person
-	db SPRITE_LASS, $5 + 4, $6 + 4, $fe, $1, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_FAT_BALD_GUY, $4, $2, FACE, STAY, $2 ; person
+	object SPRITE_LASS, $6, $5, WALK, $1, $3 ; person
 
 	; warp-to
 	EVENT_DISP FUCHSIA_MART_WIDTH, $7, $3
--- a/data/mapObjects/fuchsiameetingroom.asm
+++ b/data/mapObjects/fuchsiameetingroom.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_WHITE_PLAYER, $1 + 4, $4 + 4, $ff, $d0, $1 ; person
-	db SPRITE_WHITE_PLAYER, $2 + 4, $0 + 4, $ff, $d1, $2 ; person
-	db SPRITE_WHITE_PLAYER, $1 + 4, $a + 4, $ff, $d0, $3 ; person
+	db $3 ; objects
+	object SPRITE_WHITE_PLAYER, $4, $1, FACE, DOWN, $1 ; person
+	object SPRITE_WHITE_PLAYER, $0, $2, FACE, UP, $2 ; person
+	object SPRITE_WHITE_PLAYER, $a, $1, FACE, DOWN, $3 ; person
 
 	; warp-to
 	EVENT_DISP FUCHSIA_MEETING_ROOM_WIDTH, $7, $4
--- a/data/mapObjects/fuchsiapokecenter.asm
+++ b/data/mapObjects/fuchsiapokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_ROCKER, $3 + 4, $2 + 4, $ff, $ff, $2 ; person
-	db SPRITE_LASS, $5 + 4, $6 + 4, $fe, $2, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_ROCKER, $2, $3, FACE, STAY, $2 ; person
+	object SPRITE_LASS, $6, $5, WALK, $2, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP FUCHSIA_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/gary.asm
+++ b/data/mapObjects/gary.asm
@@ -9,9 +9,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_BLUE, $2 + 4, $4 + 4, $ff, $d0, $1 ; person
-	db SPRITE_OAK, $7 + 4, $3 + 4, $ff, $d1, $2 ; person
+	db $2 ; objects
+	object SPRITE_BLUE, $4, $2, FACE, DOWN, $1 ; person
+	object SPRITE_OAK, $3, $7, FACE, UP, $2 ; person
 
 	; warp-to
 	EVENT_DISP CHAMPIONS_ROOM_WIDTH, $7, $3 ; LANCES_ROOM
--- a/data/mapObjects/halloffameroom.asm
+++ b/data/mapObjects/halloffameroom.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_OAK, $2 + 4, $5 + 4, $ff, $d0, $1 ; person
+	db $1 ; objects
+	object SPRITE_OAK, $5, $2, FACE, DOWN, $1 ; person
 
 	; warp-to
 	EVENT_DISP HALL_OF_FAME_WIDTH, $7, $4 ; CHAMPIONS_ROOM
--- a/data/mapObjects/indigoplateau.asm
+++ b/data/mapObjects/indigoplateau.asm
@@ -7,7 +7,7 @@
 
 	db $0 ; signs
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP INDIGO_PLATEAU_WIDTH, $5, $9 ; INDIGO_PLATEAU_LOBBY
--- a/data/mapObjects/indigoplateaulobby.asm
+++ b/data/mapObjects/indigoplateaulobby.asm
@@ -8,12 +8,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_NURSE, $5 + 4, $7 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GYM_HELPER, $9 + 4, $4 + 4, $ff, $d3, $2 ; person
-	db SPRITE_LASS, $1 + 4, $5 + 4, $ff, $d0, $3 ; person
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $4 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $6 + 4, $d + 4, $ff, $d0, $5 ; person
+	db $5 ; objects
+	object SPRITE_NURSE, $7, $5, FACE, DOWN, $1 ; person
+	object SPRITE_GYM_HELPER, $4, $9, FACE, LEFT, $2 ; person
+	object SPRITE_LASS, $5, $1, FACE, DOWN, $3 ; person
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $4 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $d, $6, FACE, DOWN, $5 ; person
 
 	; warp-to
 	EVENT_DISP INDIGO_PLATEAU_LOBBY_WIDTH, $b, $7
--- a/data/mapObjects/lab1.asm
+++ b/data/mapObjects/lab1.asm
@@ -14,8 +14,8 @@
 	db $4, $d, $4 ; Lab1Text4
 	db $4, $11, $5 ; Lab1Text5
 
-	db $1 ; people
-	db SPRITE_FISHER, $3 + 4, $1 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_FISHER, $1, $3, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP CINNABAR_LAB_1_WIDTH, $7, $2
--- a/data/mapObjects/lab2.asm
+++ b/data/mapObjects/lab2.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_OLD_PERSON, $4 + 4, $1 + 4, $ff, $ff, $2 ; person
-	db SPRITE_FOULARD_WOMAN, $5 + 4, $5 + 4, $ff, $d1, $3 ; person
+	db $3 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $2, FACE, DOWN, $1 ; person
+	object SPRITE_OLD_PERSON, $1, $4, FACE, STAY, $2 ; person
+	object SPRITE_FOULARD_WOMAN, $5, $5, FACE, UP, $3 ; person
 
 	; warp-to
 	EVENT_DISP CINNABAR_LAB_2_WIDTH, $7, $2 ; CINNABAR_LAB_1
--- a/data/mapObjects/lab3.asm
+++ b/data/mapObjects/lab3.asm
@@ -10,9 +10,9 @@
 	db $4, $1, $4 ; Lab3Text4
 	db $1, $2, $5 ; Lab3Text5
 
-	db $2 ; people
-	db SPRITE_OAK_AIDE, $2 + 4, $7 + 4, $ff, $d0, $1 ; person
-	db SPRITE_OAK_AIDE, $3 + 4, $2 + 4, $fe, $2, $2 ; person
+	db $2 ; objects
+	object SPRITE_OAK_AIDE, $7, $2, FACE, DOWN, $1 ; person
+	object SPRITE_OAK_AIDE, $2, $3, WALK, $2, $2 ; person
 
 	; warp-to
 	EVENT_DISP CINNABAR_LAB_3_WIDTH, $7, $2 ; CINNABAR_LAB_1
--- a/data/mapObjects/lab4.asm
+++ b/data/mapObjects/lab4.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_OAK_AIDE, $2 + 4, $5 + 4, $fe, $2, $1 ; person
-	db SPRITE_OAK_AIDE, $6 + 4, $7 + 4, $ff, $d1, $2 ; person
+	db $2 ; objects
+	object SPRITE_OAK_AIDE, $5, $2, WALK, $2, $1 ; person
+	object SPRITE_OAK_AIDE, $7, $6, FACE, UP, $2 ; person
 
 	; warp-to
 	EVENT_DISP CINNABAR_LAB_4_WIDTH, $7, $2 ; CINNABAR_LAB_1
--- a/data/mapObjects/lance.asm
+++ b/data/mapObjects/lance.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_LANCE, $1 + 4, $6 + 4, $ff, $d0, TRAINER | $1, LANCE + $C8, $1
+	db $1 ; objects
+	object SPRITE_LANCE, $6, $1, FACE, DOWN, $1, LANCE + $C8, $1
 
 	; warp-to
 	EVENT_DISP LANCES_ROOM_WIDTH, $10, $18 ; AGATHAS_ROOM
--- a/data/mapObjects/lavenderhouse1.asm
+++ b/data/mapObjects/lavenderhouse1.asm
@@ -7,13 +7,13 @@
 
 	db $0 ; signs
 
-	db $6 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $3 + 4, $ff, $ff, $1 ; person
-	db SPRITE_LITTLE_GIRL, $3 + 4, $6 + 4, $ff, $d0, $2 ; person
-	db SPRITE_SLOWBRO, $4 + 4, $6 + 4, $ff, $d1, $3 ; person
-	db SPRITE_SLOWBRO, $3 + 4, $1 + 4, $ff, $ff, $4 ; person
-	db SPRITE_MR_FUJI, $1 + 4, $3 + 4, $ff, $ff, $5 ; person
-	db SPRITE_BOOK_MAP_DEX, $3 + 4, $3 + 4, $ff, $ff, $6 ; person
+	db $6 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $5, FACE, STAY, $1 ; person
+	object SPRITE_LITTLE_GIRL, $6, $3, FACE, DOWN, $2 ; person
+	object SPRITE_SLOWBRO, $6, $4, FACE, UP, $3 ; person
+	object SPRITE_SLOWBRO, $1, $3, FACE, STAY, $4 ; person
+	object SPRITE_MR_FUJI, $3, $1, FACE, STAY, $5 ; person
+	object SPRITE_BOOK_MAP_DEX, $3, $3, FACE, STAY, $6 ; person
 
 	; warp-to
 	EVENT_DISP LAVENDER_HOUSE_1_WIDTH, $7, $2
--- a/data/mapObjects/lavenderhouse2.asm
+++ b/data/mapObjects/lavenderhouse2.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_SLOWBRO, $5 + 4, $3 + 4, $ff, $d1, $1 ; person
-	db SPRITE_BRUNETTE_GIRL, $4 + 4, $2 + 4, $ff, $d3, $2 ; person
+	db $2 ; objects
+	object SPRITE_SLOWBRO, $3, $5, FACE, UP, $1 ; person
+	object SPRITE_BRUNETTE_GIRL, $2, $4, FACE, LEFT, $2 ; person
 
 	; warp-to
 	EVENT_DISP LAVENDER_HOUSE_2_WIDTH, $7, $2
--- a/data/mapObjects/lavendermart.asm
+++ b/data/mapObjects/lavendermart.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BALDING_GUY, $4 + 4, $3 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $2 + 4, $7 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_BALDING_GUY, $3, $4, FACE, STAY, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $7, $2, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP LAVENDER_MART_WIDTH, $7, $3
--- a/data/mapObjects/lavenderpokecenter.asm
+++ b/data/mapObjects/lavenderpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GENTLEMAN, $3 + 4, $5 + 4, $ff, $ff, $2 ; person
-	db SPRITE_LITTLE_GIRL, $6 + 4, $2 + 4, $fe, $1, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_GENTLEMAN, $5, $3, FACE, STAY, $2 ; person
+	object SPRITE_LITTLE_GIRL, $2, $6, WALK, $1, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP LAVENDER_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/lavendertown.asm
+++ b/data/mapObjects/lavendertown.asm
@@ -17,10 +17,10 @@
 	db $9, $5, $8 ; LavenderTownText8
 	db $7, $11, $9 ; LavenderTownText9
 
-	db $3 ; people
-	db SPRITE_LITTLE_GIRL, $9 + 4, $f + 4, $fe, $0, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $a + 4, $9 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $7 + 4, $8 + 4, $fe, $2, $3 ; person
+	db $3 ; objects
+	object SPRITE_LITTLE_GIRL, $f, $9, WALK, $0, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $9, $a, FACE, STAY, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $8, $7, WALK, $2, $3 ; person
 
 	; warp-to
 	EVENT_DISP LAVENDER_TOWN_WIDTH, $5, $3 ; LAVENDER_POKECENTER
--- a/data/mapObjects/lorelei.asm
+++ b/data/mapObjects/lorelei.asm
@@ -9,8 +9,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_LORELEI, $2 + 4, $5 + 4, $ff, $d0, TRAINER | $1, LORELEI + $C8, $1
+	db $1 ; objects
+	object SPRITE_LORELEI, $5, $2, FACE, DOWN, $1, LORELEI + $C8, $1
 
 	; warp-to
 	EVENT_DISP LORELEIS_ROOM_WIDTH, $b, $4 ; INDIGO_PLATEAU_LOBBY
--- a/data/mapObjects/mansion1.asm
+++ b/data/mapObjects/mansion1.asm
@@ -13,10 +13,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_OAK_AIDE, $11 + 4, $11 + 4, $ff, $d2, TRAINER | $1, SCIENTIST + $C8, $4
-	db SPRITE_BALL, $3 + 4, $e + 4, $ff, $ff, ITEM | $2, ESCAPE_ROPE
-	db SPRITE_BALL, $15 + 4, $12 + 4, $ff, $ff, ITEM | $3, CARBOS
+	db $3 ; objects
+	object SPRITE_OAK_AIDE, $11, $11, FACE, RIGHT, $1, SCIENTIST + $C8, $4
+	object SPRITE_BALL, $e, $3, FACE, STAY, $2, ESCAPE_ROPE
+	object SPRITE_BALL, $12, $15, FACE, STAY, $3, CARBOS
 
 	; warp-to
 	EVENT_DISP MANSION_1_WIDTH, $1b, $4
--- a/data/mapObjects/mansion2.asm
+++ b/data/mapObjects/mansion2.asm
@@ -9,11 +9,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $11 + 4, $3 + 4, $fe, $2, TRAINER | $1, BURGLAR + $C8, $7
-	db SPRITE_BALL, $7 + 4, $1c + 4, $ff, $ff, ITEM | $2, CALCIUM
-	db SPRITE_BOOK_MAP_DEX, $2 + 4, $12 + 4, $ff, $ff, $3 ; person
-	db SPRITE_BOOK_MAP_DEX, $16 + 4, $3 + 4, $ff, $ff, $4 ; person
+	db $4 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $11, WALK, $2, $1, BURGLAR + $C8, $7
+	object SPRITE_BALL, $1c, $7, FACE, STAY, $2, CALCIUM
+	object SPRITE_BOOK_MAP_DEX, $12, $2, FACE, STAY, $3 ; person
+	object SPRITE_BOOK_MAP_DEX, $3, $16, FACE, STAY, $4 ; person
 
 	; warp-to
 	EVENT_DISP MANSION_2_WIDTH, $a, $5 ; MANSION_1
--- a/data/mapObjects/mansion3.asm
+++ b/data/mapObjects/mansion3.asm
@@ -8,12 +8,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $b + 4, $5 + 4, $fe, $2, TRAINER | $1, BURGLAR + $C8, $8
-	db SPRITE_OAK_AIDE, $b + 4, $14 + 4, $ff, $d2, TRAINER | $2, SCIENTIST + $C8, $c
-	db SPRITE_BALL, $10 + 4, $1 + 4, $ff, $ff, ITEM | $3, MAX_POTION
-	db SPRITE_BALL, $5 + 4, $19 + 4, $ff, $ff, ITEM | $4, IRON
-	db SPRITE_BOOK_MAP_DEX, $c + 4, $6 + 4, $ff, $ff, $5 ; person
+	db $5 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $5, $b, WALK, $2, $1, BURGLAR + $C8, $8
+	object SPRITE_OAK_AIDE, $14, $b, FACE, RIGHT, $2, SCIENTIST + $C8, $c
+	object SPRITE_BALL, $1, $10, FACE, STAY, $3, MAX_POTION
+	object SPRITE_BALL, $19, $5, FACE, STAY, $4, IRON
+	object SPRITE_BOOK_MAP_DEX, $6, $c, FACE, STAY, $5 ; person
 
 	; warp-to
 	EVENT_DISP MANSION_3_WIDTH, $a, $7 ; MANSION_2
--- a/data/mapObjects/mansion4.asm
+++ b/data/mapObjects/mansion4.asm
@@ -6,15 +6,15 @@
 
 	db $0 ; signs
 
-	db $8 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $17 + 4, $10 + 4, $ff, $ff, TRAINER | $1, BURGLAR + $C8, $9
-	db SPRITE_OAK_AIDE, $b + 4, $1b + 4, $ff, $d0, TRAINER | $2, SCIENTIST + $C8, $d
-	db SPRITE_BALL, $2 + 4, $a + 4, $ff, $ff, ITEM | $3, RARE_CANDY
-	db SPRITE_BALL, $16 + 4, $1 + 4, $ff, $ff, ITEM | $4, FULL_RESTORE
-	db SPRITE_BALL, $19 + 4, $13 + 4, $ff, $ff, ITEM | $5, TM_14
-	db SPRITE_BALL, $4 + 4, $5 + 4, $ff, $ff, ITEM | $6, TM_22
-	db SPRITE_BOOK_MAP_DEX, $14 + 4, $10 + 4, $ff, $ff, $7 ; person
-	db SPRITE_BALL, $d + 4, $5 + 4, $ff, $ff, ITEM | $8, SECRET_KEY
+	db $8 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $10, $17, FACE, STAY, $1, BURGLAR + $C8, $9
+	object SPRITE_OAK_AIDE, $1b, $b, FACE, DOWN, $2, SCIENTIST + $C8, $d
+	object SPRITE_BALL, $a, $2, FACE, STAY, $3, RARE_CANDY
+	object SPRITE_BALL, $1, $16, FACE, STAY, $4, FULL_RESTORE
+	object SPRITE_BALL, $13, $19, FACE, STAY, $5, TM_14
+	object SPRITE_BALL, $5, $4, FACE, STAY, $6, TM_22
+	object SPRITE_BOOK_MAP_DEX, $10, $14, FACE, STAY, $7 ; person
+	object SPRITE_BALL, $5, $d, FACE, STAY, $8, SECRET_KEY
 
 	; warp-to
 	EVENT_DISP MANSION_4_WIDTH, $16, $17 ; MANSION_1
--- a/data/mapObjects/mtmoon1.asm
+++ b/data/mapObjects/mtmoon1.asm
@@ -11,20 +11,20 @@
 	db $1 ; signs
 	db $17, $f, $e ; MtMoon1Text14
 
-	db $d ; people
-	db SPRITE_HIKER, $6 + 4, $5 + 4, $ff, $d0, TRAINER | $1, HIKER + $C8, $1
-	db SPRITE_BUG_CATCHER, $10 + 4, $c + 4, $ff, $d3, TRAINER | $2, YOUNGSTER + $C8, $3
-	db SPRITE_LASS, $4 + 4, $1e + 4, $ff, $d0, TRAINER | $3, LASS + $C8, $5
-	db SPRITE_BLACK_HAIR_BOY_2, $1f + 4, $18 + 4, $ff, $d1, TRAINER | $4, SUPER_NERD + $C8, $1
-	db SPRITE_LASS, $17 + 4, $10 + 4, $ff, $d0, TRAINER | $5, LASS + $C8, $6
-	db SPRITE_BUG_CATCHER, $16 + 4, $7 + 4, $ff, $d0, TRAINER | $6, BUG_CATCHER + $C8, $7
-	db SPRITE_BUG_CATCHER, $1b + 4, $1e + 4, $ff, $d3, TRAINER | $7, BUG_CATCHER + $C8, $8
-	db SPRITE_BALL, $14 + 4, $2 + 4, $ff, $ff, ITEM | $8, POTION
-	db SPRITE_BALL, $2 + 4, $2 + 4, $ff, $ff, ITEM | $9, MOON_STONE
-	db SPRITE_BALL, $1f + 4, $23 + 4, $ff, $ff, ITEM | $a, RARE_CANDY
-	db SPRITE_BALL, $17 + 4, $24 + 4, $ff, $ff, ITEM | $b, ESCAPE_ROPE
-	db SPRITE_BALL, $21 + 4, $14 + 4, $ff, $ff, ITEM | $c, POTION
-	db SPRITE_BALL, $20 + 4, $5 + 4, $ff, $ff, ITEM | $d, TM_12
+	db $d ; objects
+	object SPRITE_HIKER, $5, $6, FACE, DOWN, $1, HIKER + $C8, $1
+	object SPRITE_BUG_CATCHER, $c, $10, FACE, LEFT, $2, YOUNGSTER + $C8, $3
+	object SPRITE_LASS, $1e, $4, FACE, DOWN, $3, LASS + $C8, $5
+	object SPRITE_BLACK_HAIR_BOY_2, $18, $1f, FACE, UP, $4, SUPER_NERD + $C8, $1
+	object SPRITE_LASS, $10, $17, FACE, DOWN, $5, LASS + $C8, $6
+	object SPRITE_BUG_CATCHER, $7, $16, FACE, DOWN, $6, BUG_CATCHER + $C8, $7
+	object SPRITE_BUG_CATCHER, $1e, $1b, FACE, LEFT, $7, BUG_CATCHER + $C8, $8
+	object SPRITE_BALL, $2, $14, FACE, STAY, $8, POTION
+	object SPRITE_BALL, $2, $2, FACE, STAY, $9, MOON_STONE
+	object SPRITE_BALL, $23, $1f, FACE, STAY, $a, RARE_CANDY
+	object SPRITE_BALL, $24, $17, FACE, STAY, $b, ESCAPE_ROPE
+	object SPRITE_BALL, $14, $21, FACE, STAY, $c, POTION
+	object SPRITE_BALL, $5, $20, FACE, STAY, $d, TM_12
 
 	; warp-to
 	EVENT_DISP MT_MOON_1_WIDTH, $23, $e
--- a/data/mapObjects/mtmoon2.asm
+++ b/data/mapObjects/mtmoon2.asm
@@ -13,7 +13,7 @@
 
 	db $0 ; signs
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP MT_MOON_2_WIDTH, $5, $5 ; MT_MOON_1
--- a/data/mapObjects/mtmoon3.asm
+++ b/data/mapObjects/mtmoon3.asm
@@ -9,16 +9,16 @@
 
 	db $0 ; signs
 
-	db $9 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $c + 4, $ff, $d3, TRAINER | $1, SUPER_NERD + $C8, $2
-	db SPRITE_ROCKET, $10 + 4, $b + 4, $ff, $d0, TRAINER | $2, ROCKET + $C8, $1
-	db SPRITE_ROCKET, $16 + 4, $f + 4, $ff, $d0, TRAINER | $3, ROCKET + $C8, $2
-	db SPRITE_ROCKET, $b + 4, $1d + 4, $ff, $d1, TRAINER | $4, ROCKET + $C8, $3
-	db SPRITE_ROCKET, $11 + 4, $1d + 4, $ff, $d2, TRAINER | $5, ROCKET + $C8, $4
-	db SPRITE_OMANYTE, $6 + 4, $c + 4, $ff, $ff, $6 ; person
-	db SPRITE_OMANYTE, $6 + 4, $d + 4, $ff, $ff, $7 ; person
-	db SPRITE_BALL, $15 + 4, $19 + 4, $ff, $ff, ITEM | $8, HP_UP
-	db SPRITE_BALL, $5 + 4, $1d + 4, $ff, $ff, ITEM | $9, TM_01
+	db $9 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $c, $8, FACE, LEFT, $1, SUPER_NERD + $C8, $2
+	object SPRITE_ROCKET, $b, $10, FACE, DOWN, $2, ROCKET + $C8, $1
+	object SPRITE_ROCKET, $f, $16, FACE, DOWN, $3, ROCKET + $C8, $2
+	object SPRITE_ROCKET, $1d, $b, FACE, UP, $4, ROCKET + $C8, $3
+	object SPRITE_ROCKET, $1d, $11, FACE, RIGHT, $5, ROCKET + $C8, $4
+	object SPRITE_OMANYTE, $c, $6, FACE, STAY, $6 ; person
+	object SPRITE_OMANYTE, $d, $6, FACE, STAY, $7 ; person
+	object SPRITE_BALL, $19, $15, FACE, STAY, $8, HP_UP
+	object SPRITE_BALL, $1d, $5, FACE, STAY, $9, TM_01
 
 	; warp-to
 	EVENT_DISP MT_MOON_3_WIDTH, $9, $19 ; MT_MOON_2
--- a/data/mapObjects/mtmoonpokecenter.asm
+++ b/data/mapObjects/mtmoonpokecenter.asm
@@ -7,13 +7,13 @@
 
 	db $0 ; signs
 
-	db $6 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_BUG_CATCHER, $3 + 4, $4 + 4, $ff, $d1, $2 ; person
-	db SPRITE_GENTLEMAN, $3 + 4, $7 + 4, $ff, $d1, $3 ; person
-	db SPRITE_FAT_BALD_GUY, $6 + 4, $a + 4, $fe, $2, $4 ; person
-	db SPRITE_CLIPBOARD, $2 + 4, $7 + 4, $ff, $ff, $5 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $6 ; person
+	db $6 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_BUG_CATCHER, $4, $3, FACE, UP, $2 ; person
+	object SPRITE_GENTLEMAN, $7, $3, FACE, UP, $3 ; person
+	object SPRITE_FAT_BALD_GUY, $a, $6, WALK, $2, $4 ; person
+	object SPRITE_CLIPBOARD, $7, $2, FACE, STAY, $5 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $6 ; person
 
 	; warp-to
 	EVENT_DISP MT_MOON_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/museum1f.asm
+++ b/data/mapObjects/museum1f.asm
@@ -10,12 +10,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_OAK_AIDE, $4 + 4, $c + 4, $ff, $d2, $1 ; person
-	db SPRITE_GAMBLER, $4 + 4, $1 + 4, $ff, $ff, $2 ; person
-	db SPRITE_OAK_AIDE, $2 + 4, $f + 4, $ff, $d0, $3 ; person
-	db SPRITE_OAK_AIDE, $4 + 4, $11 + 4, $ff, $ff, $4 ; person
-	db SPRITE_OLD_AMBER, $2 + 4, $10 + 4, $ff, $ff, $5 ; person
+	db $5 ; objects
+	object SPRITE_OAK_AIDE, $c, $4, FACE, RIGHT, $1 ; person
+	object SPRITE_GAMBLER, $1, $4, FACE, STAY, $2 ; person
+	object SPRITE_OAK_AIDE, $f, $2, FACE, DOWN, $3 ; person
+	object SPRITE_OAK_AIDE, $11, $4, FACE, STAY, $4 ; person
+	object SPRITE_OLD_AMBER, $10, $2, FACE, STAY, $5 ; person
 
 	; warp-to
 	EVENT_DISP MUSEUM_1F_WIDTH, $7, $a
--- a/data/mapObjects/museum2f.asm
+++ b/data/mapObjects/museum2f.asm
@@ -8,12 +8,12 @@
 	db $2, $b, $6 ; Museum2FText6
 	db $5, $2, $7 ; Museum2FText7
 
-	db $5 ; people
-	db SPRITE_BUG_CATCHER, $7 + 4, $1 + 4, $fe, $2, $1 ; person
-	db SPRITE_OLD_PERSON, $5 + 4, $0 + 4, $ff, $d0, $2 ; person
-	db SPRITE_OAK_AIDE, $5 + 4, $7 + 4, $ff, $d0, $3 ; person
-	db SPRITE_BRUNETTE_GIRL, $5 + 4, $b + 4, $ff, $ff, $4 ; person
-	db SPRITE_HIKER, $5 + 4, $c + 4, $ff, $d0, $5 ; person
+	db $5 ; objects
+	object SPRITE_BUG_CATCHER, $1, $7, WALK, $2, $1 ; person
+	object SPRITE_OLD_PERSON, $0, $5, FACE, DOWN, $2 ; person
+	object SPRITE_OAK_AIDE, $7, $5, FACE, DOWN, $3 ; person
+	object SPRITE_BRUNETTE_GIRL, $b, $5, FACE, STAY, $4 ; person
+	object SPRITE_HIKER, $c, $5, FACE, DOWN, $5 ; person
 
 	; warp-to
 	EVENT_DISP MUSEUM_2F_WIDTH, $7, $7 ; MUSEUM_1F
--- a/data/mapObjects/namerater.asm
+++ b/data/mapObjects/namerater.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_MR_MASTERBALL, $3 + 4, $5 + 4, $ff, $d2, $1 ; person
+	db $1 ; objects
+	object SPRITE_MR_MASTERBALL, $5, $3, FACE, RIGHT, $1 ; person
 
 	; warp-to
 	EVENT_DISP NAME_RATERS_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/oakslab.asm
+++ b/data/mapObjects/oakslab.asm
@@ -7,18 +7,18 @@
 
 	db $0 ; signs
 
-	db $b ; people
-	db SPRITE_BLUE, $3 + 4, $4 + 4, $ff, $ff, TRAINER | $1, SONY1 + $C8, $1
-	db SPRITE_BALL, $3 + 4, $6 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BALL, $3 + 4, $7 + 4, $ff, $ff, $3 ; person
-	db SPRITE_BALL, $3 + 4, $8 + 4, $ff, $ff, $4 ; person
-	db SPRITE_OAK, $2 + 4, $5 + 4, $ff, $d0, $5 ; person
-	db SPRITE_BOOK_MAP_DEX, $1 + 4, $2 + 4, $ff, $ff, $6 ; person
-	db SPRITE_BOOK_MAP_DEX, $1 + 4, $3 + 4, $ff, $ff, $7 ; person
-	db SPRITE_OAK, $a + 4, $5 + 4, $ff, $d1, $8 ; person
-	db SPRITE_GIRL, $9 + 4, $1 + 4, $fe, $1, $9 ; person
-	db SPRITE_OAK_AIDE, $a + 4, $2 + 4, $ff, $ff, $a ; person
-	db SPRITE_OAK_AIDE, $a + 4, $8 + 4, $ff, $ff, $b ; person
+	db $b ; objects
+	object SPRITE_BLUE, $4, $3, FACE, STAY, $1, SONY1 + $C8, $1
+	object SPRITE_BALL, $6, $3, FACE, STAY, $2 ; person
+	object SPRITE_BALL, $7, $3, FACE, STAY, $3 ; person
+	object SPRITE_BALL, $8, $3, FACE, STAY, $4 ; person
+	object SPRITE_OAK, $5, $2, FACE, DOWN, $5 ; person
+	object SPRITE_BOOK_MAP_DEX, $2, $1, FACE, STAY, $6 ; person
+	object SPRITE_BOOK_MAP_DEX, $3, $1, FACE, STAY, $7 ; person
+	object SPRITE_OAK, $5, $a, FACE, UP, $8 ; person
+	object SPRITE_GIRL, $1, $9, WALK, $1, $9 ; person
+	object SPRITE_OAK_AIDE, $2, $a, FACE, STAY, $a ; person
+	object SPRITE_OAK_AIDE, $8, $a, FACE, STAY, $b ; person
 
 	; warp-to
 	EVENT_DISP OAKS_LAB_WIDTH, $b, $4
--- a/data/mapObjects/pallettown.asm
+++ b/data/mapObjects/pallettown.asm
@@ -12,10 +12,10 @@
 	db $5, $3, $6 ; PalletTownText6
 	db $5, $b, $7 ; PalletTownText7
 
-	db $3 ; people
-	db SPRITE_OAK, $5 + 4, $8 + 4, $ff, $ff, $1 ; person
-	db SPRITE_GIRL, $8 + 4, $3 + 4, $fe, $0, $2 ; person
-	db SPRITE_FISHER2, $e + 4, $b + 4, $fe, $0, $3 ; person
+	db $3 ; objects
+	object SPRITE_OAK, $8, $5, FACE, STAY, $1 ; person
+	object SPRITE_GIRL, $3, $8, WALK, $0, $2 ; person
+	object SPRITE_FISHER2, $b, $e, WALK, $0, $3 ; person
 
 	; warp-to
 	EVENT_DISP PALLET_TOWN_WIDTH, $5, $5 ; REDS_HOUSE_1F
--- a/data/mapObjects/pewtercity.asm
+++ b/data/mapObjects/pewtercity.asm
@@ -19,12 +19,12 @@
 	db $11, $b, $b ; PewterCityText11
 	db $17, $19, $c ; PewterCityText12
 
-	db $5 ; people
-	db SPRITE_LASS, $f + 4, $8 + 4, $ff, $ff, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $19 + 4, $11 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $11 + 4, $1b + 4, $ff, $ff, $3 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $19 + 4, $1a + 4, $fe, $2, $4 ; person
-	db SPRITE_BUG_CATCHER, $10 + 4, $23 + 4, $ff, $d0, $5 ; person
+	db $5 ; objects
+	object SPRITE_LASS, $8, $f, FACE, STAY, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $11, $19, FACE, STAY, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $1b, $11, FACE, STAY, $3 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $1a, $19, WALK, $2, $4 ; person
+	object SPRITE_BUG_CATCHER, $23, $10, FACE, DOWN, $5 ; person
 
 	; warp-to
 	EVENT_DISP PEWTER_CITY_WIDTH, $7, $e ; MUSEUM_1F
--- a/data/mapObjects/pewtergym.asm
+++ b/data/mapObjects/pewtergym.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $1 + 4, $4 + 4, $ff, $d0, TRAINER | $1, BROCK + $C8, $1
-	db SPRITE_BLACK_HAIR_BOY_1, $6 + 4, $3 + 4, $ff, $d3, TRAINER | $2, JR__TRAINER_M + $C8, $1
-	db SPRITE_GYM_HELPER, $a + 4, $7 + 4, $ff, $d0, $3 ; person
+	db $3 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $4, $1, FACE, DOWN, $1, BROCK + $C8, $1
+	object SPRITE_BLACK_HAIR_BOY_1, $3, $6, FACE, LEFT, $2, JR__TRAINER_M + $C8, $1
+	object SPRITE_GYM_HELPER, $7, $a, FACE, DOWN, $3 ; person
 
 	; warp-to
 	EVENT_DISP PEWTER_GYM_WIDTH, $d, $4
--- a/data/mapObjects/pewterhouse1.asm
+++ b/data/mapObjects/pewterhouse1.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_SLOWBRO, $5 + 4, $4 + 4, $ff, $d2, $1 ; person
-	db SPRITE_YOUNG_BOY, $5 + 4, $3 + 4, $ff, $d3, $2 ; person
-	db SPRITE_FAT_BALD_GUY, $2 + 4, $1 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_SLOWBRO, $4, $5, FACE, RIGHT, $1 ; person
+	object SPRITE_YOUNG_BOY, $3, $5, FACE, LEFT, $2 ; person
+	object SPRITE_FAT_BALD_GUY, $1, $2, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP PEWTER_HOUSE_1_WIDTH, $7, $2
--- a/data/mapObjects/pewterhouse2.asm
+++ b/data/mapObjects/pewterhouse2.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_GAMBLER, $3 + 4, $2 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BUG_CATCHER, $5 + 4, $4 + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_GAMBLER, $2, $3, FACE, LEFT, $1 ; person
+	object SPRITE_BUG_CATCHER, $4, $5, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP PEWTER_HOUSE_2_WIDTH, $7, $2
--- a/data/mapObjects/pewtermart.asm
+++ b/data/mapObjects/pewtermart.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BUG_CATCHER, $3 + 4, $3 + 4, $fe, $1, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $5 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_BUG_CATCHER, $3, $3, WALK, $1, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $5, $5, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP PEWTER_MART_WIDTH, $7, $3
--- a/data/mapObjects/pewterpokecenter.asm
+++ b/data/mapObjects/pewterpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GENTLEMAN, $7 + 4, $b + 4, $ff, $d2, $2 ; person
-	db SPRITE_CLEFAIRY, $3 + 4, $1 + 4, $ff, $d0, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_GENTLEMAN, $b, $7, FACE, RIGHT, $2 ; person
+	object SPRITE_CLEFAIRY, $1, $3, FACE, DOWN, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP PEWTER_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/pokemontower1.asm
+++ b/data/mapObjects/pokemontower1.asm
@@ -8,12 +8,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_CABLE_CLUB_WOMAN, $d + 4, $f + 4, $ff, $d1, $1 ; person
-	db SPRITE_MOM_GEISHA, $8 + 4, $6 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BALDING_GUY, $c + 4, $8 + 4, $ff, $ff, $3 ; person
-	db SPRITE_GIRL, $7 + 4, $d + 4, $ff, $ff, $4 ; person
-	db SPRITE_MEDIUM, $7 + 4, $11 + 4, $ff, $d2, $5 ; person
+	db $5 ; objects
+	object SPRITE_CABLE_CLUB_WOMAN, $f, $d, FACE, UP, $1 ; person
+	object SPRITE_MOM_GEISHA, $6, $8, FACE, STAY, $2 ; person
+	object SPRITE_BALDING_GUY, $8, $c, FACE, STAY, $3 ; person
+	object SPRITE_GIRL, $d, $7, FACE, STAY, $4 ; person
+	object SPRITE_MEDIUM, $11, $7, FACE, RIGHT, $5 ; person
 
 	; warp-to
 	EVENT_DISP POKEMONTOWER_1_WIDTH, $11, $a
--- a/data/mapObjects/pokemontower2.asm
+++ b/data/mapObjects/pokemontower2.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_BLUE, $5 + 4, $e + 4, $ff, $ff, $1 ; person
-	db SPRITE_MEDIUM, $7 + 4, $3 + 4, $ff, $d3, $2 ; person
+	db $2 ; objects
+	object SPRITE_BLUE, $e, $5, FACE, STAY, $1 ; person
+	object SPRITE_MEDIUM, $3, $7, FACE, LEFT, $2 ; person
 
 	; warp-to
 	EVENT_DISP POKEMONTOWER_2_WIDTH, $9, $3 ; POKEMONTOWER_3
--- a/data/mapObjects/pokemontower3.asm
+++ b/data/mapObjects/pokemontower3.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_MEDIUM, $3 + 4, $c + 4, $ff, $d2, TRAINER | $1, CHANNELER + $C8, $5
-	db SPRITE_MEDIUM, $8 + 4, $9 + 4, $ff, $d0, TRAINER | $2, CHANNELER + $C8, $6
-	db SPRITE_MEDIUM, $d + 4, $a + 4, $ff, $d0, TRAINER | $3, CHANNELER + $C8, $8
-	db SPRITE_BALL, $1 + 4, $c + 4, $ff, $ff, ITEM | $4, ESCAPE_ROPE
+	db $4 ; objects
+	object SPRITE_MEDIUM, $c, $3, FACE, RIGHT, $1, CHANNELER + $C8, $5
+	object SPRITE_MEDIUM, $9, $8, FACE, DOWN, $2, CHANNELER + $C8, $6
+	object SPRITE_MEDIUM, $a, $d, FACE, DOWN, $3, CHANNELER + $C8, $8
+	object SPRITE_BALL, $c, $1, FACE, STAY, $4, ESCAPE_ROPE
 
 	; warp-to
 	EVENT_DISP POKEMONTOWER_3_WIDTH, $9, $3 ; POKEMONTOWER_2
--- a/data/mapObjects/pokemontower4.asm
+++ b/data/mapObjects/pokemontower4.asm
@@ -7,13 +7,13 @@
 
 	db $0 ; signs
 
-	db $6 ; people
-	db SPRITE_MEDIUM, $a + 4, $5 + 4, $ff, $d3, TRAINER | $1, CHANNELER + $C8, $9
-	db SPRITE_MEDIUM, $7 + 4, $f + 4, $ff, $d0, TRAINER | $2, CHANNELER + $C8, $a
-	db SPRITE_MEDIUM, $c + 4, $e + 4, $ff, $d2, TRAINER | $3, CHANNELER + $C8, $c
-	db SPRITE_BALL, $a + 4, $c + 4, $ff, $ff, ITEM | $4, ELIXER
-	db SPRITE_BALL, $a + 4, $9 + 4, $ff, $ff, ITEM | $5, AWAKENING
-	db SPRITE_BALL, $10 + 4, $c + 4, $ff, $ff, ITEM | $6, HP_UP
+	db $6 ; objects
+	object SPRITE_MEDIUM, $5, $a, FACE, LEFT, $1, CHANNELER + $C8, $9
+	object SPRITE_MEDIUM, $f, $7, FACE, DOWN, $2, CHANNELER + $C8, $a
+	object SPRITE_MEDIUM, $e, $c, FACE, RIGHT, $3, CHANNELER + $C8, $c
+	object SPRITE_BALL, $c, $a, FACE, STAY, $4, ELIXER
+	object SPRITE_BALL, $9, $a, FACE, STAY, $5, AWAKENING
+	object SPRITE_BALL, $c, $10, FACE, STAY, $6, HP_UP
 
 	; warp-to
 	EVENT_DISP POKEMONTOWER_4_WIDTH, $9, $3 ; POKEMONTOWER_5
--- a/data/mapObjects/pokemontower5.asm
+++ b/data/mapObjects/pokemontower5.asm
@@ -7,13 +7,13 @@
 
 	db $0 ; signs
 
-	db $6 ; people
-	db SPRITE_MEDIUM, $8 + 4, $c + 4, $ff, $ff, $1 ; person
-	db SPRITE_MEDIUM, $7 + 4, $11 + 4, $ff, $d2, TRAINER | $2, CHANNELER + $C8, $e
-	db SPRITE_MEDIUM, $3 + 4, $e + 4, $ff, $d2, TRAINER | $3, CHANNELER + $C8, $10
-	db SPRITE_MEDIUM, $a + 4, $6 + 4, $ff, $d3, TRAINER | $4, CHANNELER + $C8, $11
-	db SPRITE_MEDIUM, $10 + 4, $9 + 4, $ff, $d3, TRAINER | $5, CHANNELER + $C8, $12
-	db SPRITE_BALL, $e + 4, $6 + 4, $ff, $ff, ITEM | $6, NUGGET
+	db $6 ; objects
+	object SPRITE_MEDIUM, $c, $8, FACE, STAY, $1 ; person
+	object SPRITE_MEDIUM, $11, $7, FACE, RIGHT, $2, CHANNELER + $C8, $e
+	object SPRITE_MEDIUM, $e, $3, FACE, RIGHT, $3, CHANNELER + $C8, $10
+	object SPRITE_MEDIUM, $6, $a, FACE, LEFT, $4, CHANNELER + $C8, $11
+	object SPRITE_MEDIUM, $9, $10, FACE, LEFT, $5, CHANNELER + $C8, $12
+	object SPRITE_BALL, $6, $e, FACE, STAY, $6, NUGGET
 
 	; warp-to
 	EVENT_DISP POKEMONTOWER_5_WIDTH, $9, $3 ; POKEMONTOWER_4
--- a/data/mapObjects/pokemontower6.asm
+++ b/data/mapObjects/pokemontower6.asm
@@ -7,12 +7,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_MEDIUM, $a + 4, $c + 4, $ff, $d3, TRAINER | $1, CHANNELER + $C8, $13
-	db SPRITE_MEDIUM, $5 + 4, $9 + 4, $ff, $d0, TRAINER | $2, CHANNELER + $C8, $14
-	db SPRITE_MEDIUM, $5 + 4, $10 + 4, $ff, $d2, TRAINER | $3, CHANNELER + $C8, $15
-	db SPRITE_BALL, $8 + 4, $6 + 4, $ff, $ff, ITEM | $4, RARE_CANDY
-	db SPRITE_BALL, $e + 4, $e + 4, $ff, $ff, ITEM | $5, X_ACCURACY
+	db $5 ; objects
+	object SPRITE_MEDIUM, $c, $a, FACE, LEFT, $1, CHANNELER + $C8, $13
+	object SPRITE_MEDIUM, $9, $5, FACE, DOWN, $2, CHANNELER + $C8, $14
+	object SPRITE_MEDIUM, $10, $5, FACE, RIGHT, $3, CHANNELER + $C8, $15
+	object SPRITE_BALL, $6, $8, FACE, STAY, $4, RARE_CANDY
+	object SPRITE_BALL, $e, $e, FACE, STAY, $5, X_ACCURACY
 
 	; warp-to
 	EVENT_DISP POKEMONTOWER_6_WIDTH, $9, $12 ; POKEMONTOWER_5
--- a/data/mapObjects/pokemontower7.asm
+++ b/data/mapObjects/pokemontower7.asm
@@ -7,16 +7,16 @@
 	db $0 ; signs
 
 IF DEF(_YELLOW)
-	db 3 ; people
-	db SPRITE_JESSIE, 8 + 4, $a + 4, $ff, $d0, 1
-	db SPRITE_JAMES, 8 + 4, $b + 4, $ff, $d0, 2
-	db SPRITE_MR_FUJI, 3 + 4, $a + 4, $ff, $d0, 3
+	db 3 ; objects
+	object SPRITE_JESSIE, $a 8, 8, FACE, DOWN, 1
+	object SPRITE_JAMES, $b, 8, FACE, DOWN, 2
+	object SPRITE_MR_FUJI, $a, 3, FACE, DOWN, 3
 ELSE
-	db $4 ; people
-	db SPRITE_ROCKET, $b + 4, $9 + 4, $ff, $d3, TRAINER | $1, ROCKET + $C8, $13
-	db SPRITE_ROCKET, $9 + 4, $c + 4, $ff, $d2, TRAINER | $2, ROCKET + $C8, $14
-	db SPRITE_ROCKET, $7 + 4, $9 + 4, $ff, $d3, TRAINER | $3, ROCKET + $C8, $15
-	db SPRITE_MR_FUJI, $3 + 4, $a + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_ROCKET, $9, $b, FACE, LEFT, $1, ROCKET + $C8, $13
+	object SPRITE_ROCKET, $c, $9, FACE, RIGHT, $2, ROCKET + $C8, $14
+	object SPRITE_ROCKET, $9, $7, FACE, LEFT, $3, ROCKET + $C8, $15
+	object SPRITE_MR_FUJI, $a, $3, FACE, DOWN, $4 ; person
 ENDC
 
 	; warp-to
--- a/data/mapObjects/powerplant.asm
+++ b/data/mapObjects/powerplant.asm
@@ -8,21 +8,21 @@
 
 	db $0 ; signs
 
-	db $e ; people
-	db SPRITE_BALL, $14 + 4, $9 + 4, $ff, $ff, TRAINER | $1, VOLTORB, 40
-	db SPRITE_BALL, $12 + 4, $20 + 4, $ff, $ff, TRAINER | $2, VOLTORB, 40
-	db SPRITE_BALL, $19 + 4, $15 + 4, $ff, $ff, TRAINER | $3, VOLTORB, 40
-	db SPRITE_BALL, $12 + 4, $19 + 4, $ff, $ff, TRAINER | $4, ELECTRODE, 43
-	db SPRITE_BALL, $22 + 4, $17 + 4, $ff, $ff, TRAINER | $5, VOLTORB, 40
-	db SPRITE_BALL, $1c + 4, $1a + 4, $ff, $ff, TRAINER | $6, VOLTORB, 40
-	db SPRITE_BALL, $e + 4, $15 + 4, $ff, $ff, TRAINER | $7, ELECTRODE, 43
-	db SPRITE_BALL, $20 + 4, $25 + 4, $ff, $ff, TRAINER | $8, VOLTORB, 40
-	db SPRITE_BIRD, $9 + 4, $4 + 4, $ff, $d1, TRAINER | $9, ZAPDOS, 50
-	db SPRITE_BALL, $19 + 4, $7 + 4, $ff, $ff, ITEM | $a, CARBOS
-	db SPRITE_BALL, $3 + 4, $1c + 4, $ff, $ff, ITEM | $b, HP_UP
-	db SPRITE_BALL, $3 + 4, $22 + 4, $ff, $ff, ITEM | $c, RARE_CANDY
-	db SPRITE_BALL, $20 + 4, $1a + 4, $ff, $ff, ITEM | $d, TM_25
-	db SPRITE_BALL, $20 + 4, $14 + 4, $ff, $ff, ITEM | $e, TM_33
+	db $e ; objects
+	object SPRITE_BALL, $9, $14, FACE, STAY, $1, VOLTORB, 40
+	object SPRITE_BALL, $20, $12, FACE, STAY, $2, VOLTORB, 40
+	object SPRITE_BALL, $15, $19, FACE, STAY, $3, VOLTORB, 40
+	object SPRITE_BALL, $19, $12, FACE, STAY, $4, ELECTRODE, 43
+	object SPRITE_BALL, $17, $22, FACE, STAY, $5, VOLTORB, 40
+	object SPRITE_BALL, $1a, $1c, FACE, STAY, $6, VOLTORB, 40
+	object SPRITE_BALL, $15, $e, FACE, STAY, $7, ELECTRODE, 43
+	object SPRITE_BALL, $25, $20, FACE, STAY, $8, VOLTORB, 40
+	object SPRITE_BIRD, $4, $9, FACE, UP, $9, ZAPDOS, 50
+	object SPRITE_BALL, $7, $19, FACE, STAY, $a, CARBOS
+	object SPRITE_BALL, $1c, $3, FACE, STAY, $b, HP_UP
+	object SPRITE_BALL, $22, $3, FACE, STAY, $c, RARE_CANDY
+	object SPRITE_BALL, $1a, $20, FACE, STAY, $d, TM_25
+	object SPRITE_BALL, $14, $20, FACE, STAY, $e, TM_33
 
 	; warp-to
 	EVENT_DISP POWER_PLANT_WIDTH, $23, $4
--- a/data/mapObjects/redshouse1f.asm
+++ b/data/mapObjects/redshouse1f.asm
@@ -9,8 +9,8 @@
 	db $1 ; signs
 	db $1, $3, $2 ; TV
 
-	db $1 ; people
-	db $33, $4 + 4, $5 + 4, $FF, $D2, $1 ; Mom
+	db $1 ; objects
+	object SPRITE_MOM, $5, $4, FACE, RIGHT, $1 ; Mom
 
 	; warp-to
 	EVENT_DISP REDS_HOUSE_1F_WIDTH, $7, $2
--- a/data/mapObjects/redshouse2f.asm
+++ b/data/mapObjects/redshouse2f.asm
@@ -6,7 +6,7 @@
 
 	db $0 ; signs
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP REDS_HOUSE_2F_WIDTH, $1, $7
--- a/data/mapObjects/rockethideout1.asm
+++ b/data/mapObjects/rockethideout1.asm
@@ -10,14 +10,14 @@
 
 	db $0 ; signs
 
-	db $7 ; people
-	db SPRITE_ROCKET, $8 + 4, $1a + 4, $ff, $d2, TRAINER | $1, ROCKET + $C8, $8
-	db SPRITE_ROCKET, $6 + 4, $c + 4, $ff, $d3, TRAINER | $2, ROCKET + $C8, $9
-	db SPRITE_ROCKET, $11 + 4, $12 + 4, $ff, $d0, TRAINER | $3, ROCKET + $C8, $a
-	db SPRITE_ROCKET, $19 + 4, $f + 4, $ff, $d3, TRAINER | $4, ROCKET + $C8, $b
-	db SPRITE_ROCKET, $12 + 4, $1c + 4, $ff, $d2, TRAINER | $5, ROCKET + $C8, $c
-	db SPRITE_BALL, $e + 4, $b + 4, $ff, $ff, ITEM | $6, ESCAPE_ROPE
-	db SPRITE_BALL, $11 + 4, $9 + 4, $ff, $ff, ITEM | $7, HYPER_POTION
+	db $7 ; objects
+	object SPRITE_ROCKET, $1a, $8, FACE, RIGHT, $1, ROCKET + $C8, $8
+	object SPRITE_ROCKET, $c, $6, FACE, LEFT, $2, ROCKET + $C8, $9
+	object SPRITE_ROCKET, $12, $11, FACE, DOWN, $3, ROCKET + $C8, $a
+	object SPRITE_ROCKET, $f, $19, FACE, LEFT, $4, ROCKET + $C8, $b
+	object SPRITE_ROCKET, $1c, $12, FACE, RIGHT, $5, ROCKET + $C8, $c
+	object SPRITE_BALL, $b, $e, FACE, STAY, $6, ESCAPE_ROPE
+	object SPRITE_BALL, $9, $11, FACE, STAY, $7, HYPER_POTION
 
 	; warp-to
 	EVENT_DISP ROCKET_HIDEOUT_1_WIDTH, $2, $17 ; ROCKET_HIDEOUT_2
--- a/data/mapObjects/rockethideout2.asm
+++ b/data/mapObjects/rockethideout2.asm
@@ -10,12 +10,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_ROCKET, $c + 4, $14 + 4, $ff, $d0, TRAINER | $1, ROCKET + $C8, $d
-	db SPRITE_BALL, $b + 4, $1 + 4, $ff, $ff, ITEM | $2, MOON_STONE
-	db SPRITE_BALL, $8 + 4, $10 + 4, $ff, $ff, ITEM | $3, NUGGET
-	db SPRITE_BALL, $c + 4, $6 + 4, $ff, $ff, ITEM | $4, TM_07
-	db SPRITE_BALL, $15 + 4, $3 + 4, $ff, $ff, ITEM | $5, SUPER_POTION
+	db $5 ; objects
+	object SPRITE_ROCKET, $14, $c, FACE, DOWN, $1, ROCKET + $C8, $d
+	object SPRITE_BALL, $1, $b, FACE, STAY, $2, MOON_STONE
+	object SPRITE_BALL, $10, $8, FACE, STAY, $3, NUGGET
+	object SPRITE_BALL, $6, $c, FACE, STAY, $4, TM_07
+	object SPRITE_BALL, $3, $15, FACE, STAY, $5, SUPER_POTION
 
 	; warp-to
 	EVENT_DISP ROCKET_HIDEOUT_2_WIDTH, $8, $1b ; ROCKET_HIDEOUT_1
--- a/data/mapObjects/rockethideout3.asm
+++ b/data/mapObjects/rockethideout3.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_ROCKET, $16 + 4, $a + 4, $ff, $d3, TRAINER | $1, ROCKET + $C8, $e
-	db SPRITE_ROCKET, $c + 4, $1a + 4, $ff, $d1, TRAINER | $2, ROCKET + $C8, $f
-	db SPRITE_BALL, $11 + 4, $1a + 4, $ff, $ff, ITEM | $3, TM_10
-	db SPRITE_BALL, $e + 4, $14 + 4, $ff, $ff, ITEM | $4, RARE_CANDY
+	db $4 ; objects
+	object SPRITE_ROCKET, $a, $16, FACE, LEFT, $1, ROCKET + $C8, $e
+	object SPRITE_ROCKET, $1a, $c, FACE, UP, $2, ROCKET + $C8, $f
+	object SPRITE_BALL, $1a, $11, FACE, STAY, $3, TM_10
+	object SPRITE_BALL, $14, $e, FACE, STAY, $4, RARE_CANDY
 
 	; warp-to
 	EVENT_DISP ROCKET_HIDEOUT_3_WIDTH, $6, $19 ; ROCKET_HIDEOUT_2
--- a/data/mapObjects/rockethideout4.asm
+++ b/data/mapObjects/rockethideout4.asm
@@ -8,16 +8,16 @@
 
 	db $0 ; signs
 
-	db $9 ; people
-	db SPRITE_GIOVANNI, $3 + 4, $19 + 4, $ff, $d0, TRAINER | $1, GIOVANNI + $C8, $1
-	db SPRITE_ROCKET, $c + 4, $17 + 4, $ff, $d0, TRAINER | $2, ROCKET + $C8, $10
-	db SPRITE_ROCKET, $c + 4, $1a + 4, $ff, $d0, TRAINER | $3, ROCKET + $C8, $11
-	db SPRITE_ROCKET, $2 + 4, $b + 4, $ff, $d0, TRAINER | $4, ROCKET + $C8, $12
-	db SPRITE_BALL, $c + 4, $a + 4, $ff, $ff, ITEM | $5, HP_UP
-	db SPRITE_BALL, $4 + 4, $9 + 4, $ff, $ff, ITEM | $6, TM_02
-	db SPRITE_BALL, $14 + 4, $c + 4, $ff, $ff, ITEM | $7, IRON
-	db SPRITE_BALL, $2 + 4, $19 + 4, $ff, $ff, ITEM | $8, SILPH_SCOPE
-	db SPRITE_BALL, $2 + 4, $a + 4, $ff, $ff, ITEM | $9, LIFT_KEY
+	db $9 ; objects
+	object SPRITE_GIOVANNI, $19, $3, FACE, DOWN, $1, GIOVANNI + $C8, $1
+	object SPRITE_ROCKET, $17, $c, FACE, DOWN, $2, ROCKET + $C8, $10
+	object SPRITE_ROCKET, $1a, $c, FACE, DOWN, $3, ROCKET + $C8, $11
+	object SPRITE_ROCKET, $b, $2, FACE, DOWN, $4, ROCKET + $C8, $12
+	object SPRITE_BALL, $a, $c, FACE, STAY, $5, HP_UP
+	object SPRITE_BALL, $9, $4, FACE, STAY, $6, TM_02
+	object SPRITE_BALL, $c, $14, FACE, STAY, $7, IRON
+	object SPRITE_BALL, $19, $2, FACE, STAY, $8, SILPH_SCOPE
+	object SPRITE_BALL, $a, $2, FACE, STAY, $9, LIFT_KEY
 
 	; warp-to
 	EVENT_DISP ROCKET_HIDEOUT_4_WIDTH, $a, $13 ; ROCKET_HIDEOUT_3
--- a/data/mapObjects/rockethideoutelevator.asm
+++ b/data/mapObjects/rockethideoutelevator.asm
@@ -8,7 +8,7 @@
 	db $1 ; signs
 	db $1, $1, $1 ; RocketHideoutElevatorText1
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP ROCKET_HIDEOUT_ELEVATOR_WIDTH, $1, $2 ; ROCKET_HIDEOUT_1
--- a/data/mapObjects/rocktunnel1.asm
+++ b/data/mapObjects/rocktunnel1.asm
@@ -14,14 +14,14 @@
 	db $1 ; signs
 	db $1d, $b, $8 ; RockTunnel1Text8
 
-	db $7 ; people
-	db SPRITE_HIKER, $5 + 4, $7 + 4, $ff, $d0, TRAINER | $1, HIKER + $C8, $c
-	db SPRITE_HIKER, $10 + 4, $5 + 4, $ff, $d0, TRAINER | $2, HIKER + $C8, $d
-	db SPRITE_HIKER, $f + 4, $11 + 4, $ff, $d2, TRAINER | $3, HIKER + $C8, $e
-	db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $17 + 4, $ff, $d2, TRAINER | $4, POKEMANIAC + $C8, $7
-	db SPRITE_LASS, $15 + 4, $25 + 4, $ff, $d2, TRAINER | $5, JR__TRAINER_F + $C8, $11
-	db SPRITE_LASS, $18 + 4, $16 + 4, $ff, $d0, TRAINER | $6, JR__TRAINER_F + $C8, $12
-	db SPRITE_LASS, $18 + 4, $20 + 4, $ff, $d3, TRAINER | $7, JR__TRAINER_F + $C8, $13
+	db $7 ; objects
+	object SPRITE_HIKER, $7, $5, FACE, DOWN, $1, HIKER + $C8, $c
+	object SPRITE_HIKER, $5, $10, FACE, DOWN, $2, HIKER + $C8, $d
+	object SPRITE_HIKER, $11, $f, FACE, RIGHT, $3, HIKER + $C8, $e
+	object SPRITE_BLACK_HAIR_BOY_2, $17, $8, FACE, RIGHT, $4, POKEMANIAC + $C8, $7
+	object SPRITE_LASS, $25, $15, FACE, RIGHT, $5, JR__TRAINER_F + $C8, $11
+	object SPRITE_LASS, $16, $18, FACE, DOWN, $6, JR__TRAINER_F + $C8, $12
+	object SPRITE_LASS, $20, $18, FACE, LEFT, $7, JR__TRAINER_F + $C8, $13
 
 	; warp-to
 	EVENT_DISP ROCK_TUNNEL_1_WIDTH, $3, $f
--- a/data/mapObjects/rocktunnel2.asm
+++ b/data/mapObjects/rocktunnel2.asm
@@ -9,15 +9,15 @@
 
 	db $0 ; signs
 
-	db $8 ; people
-	db SPRITE_LASS, $d + 4, $b + 4, $ff, $d0, TRAINER | $1, JR__TRAINER_F + $C8, $9
-	db SPRITE_HIKER, $a + 4, $6 + 4, $ff, $d0, TRAINER | $2, HIKER + $C8, $9
-	db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $3 + 4, $ff, $d0, TRAINER | $3, POKEMANIAC + $C8, $3
-	db SPRITE_BLACK_HAIR_BOY_2, $15 + 4, $14 + 4, $ff, $d3, TRAINER | $4, POKEMANIAC + $C8, $4
-	db SPRITE_HIKER, $a + 4, $1e + 4, $ff, $d0, TRAINER | $5, HIKER + $C8, $a
-	db SPRITE_LASS, $1c + 4, $e + 4, $ff, $d3, TRAINER | $6, JR__TRAINER_F + $C8, $a
-	db SPRITE_HIKER, $5 + 4, $21 + 4, $ff, $d3, TRAINER | $7, HIKER + $C8, $b
-	db SPRITE_BLACK_HAIR_BOY_2, $1e + 4, $1a + 4, $ff, $d0, TRAINER | $8, POKEMANIAC + $C8, $5
+	db $8 ; objects
+	object SPRITE_LASS, $b, $d, FACE, DOWN, $1, JR__TRAINER_F + $C8, $9
+	object SPRITE_HIKER, $6, $a, FACE, DOWN, $2, HIKER + $C8, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $5, FACE, DOWN, $3, POKEMANIAC + $C8, $3
+	object SPRITE_BLACK_HAIR_BOY_2, $14, $15, FACE, LEFT, $4, POKEMANIAC + $C8, $4
+	object SPRITE_HIKER, $1e, $a, FACE, DOWN, $5, HIKER + $C8, $a
+	object SPRITE_LASS, $e, $1c, FACE, LEFT, $6, JR__TRAINER_F + $C8, $a
+	object SPRITE_HIKER, $21, $5, FACE, LEFT, $7, HIKER + $C8, $b
+	object SPRITE_BLACK_HAIR_BOY_2, $1a, $1e, FACE, DOWN, $8, POKEMANIAC + $C8, $5
 
 	; warp-to
 	EVENT_DISP ROCK_TUNNEL_2_WIDTH, $19, $21 ; ROCK_TUNNEL_1
--- a/data/mapObjects/rocktunnelpokecenter.asm
+++ b/data/mapObjects/rocktunnelpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GENTLEMAN, $3 + 4, $7 + 4, $fe, $2, $2 ; person
-	db SPRITE_FISHER2, $5 + 4, $2 + 4, $ff, $ff, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_GENTLEMAN, $7, $3, WALK, $2, $2 ; person
+	object SPRITE_FISHER2, $2, $5, FACE, STAY, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP ROCK_TUNNEL_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/route1.asm
+++ b/data/mapObjects/route1.asm
@@ -6,9 +6,9 @@
 	db $1 ; signs
 	db $1b, $9, $3 ; Route1Text3
 
-	db $2 ; people
-	db SPRITE_BUG_CATCHER, $18 + 4, $5 + 4, $fe, $1, $1 ; person
-	db SPRITE_BUG_CATCHER, $d + 4, $f + 4, $fe, $2, $2 ; person
+	db $2 ; objects
+	object SPRITE_BUG_CATCHER, $5, $18, WALK, $1, $1 ; person
+	object SPRITE_BUG_CATCHER, $f, $d, WALK, $2, $2 ; person
 
 	; warp-to (unused)
 	EVENT_DISP $4, $7, $2
--- a/data/mapObjects/route10.asm
+++ b/data/mapObjects/route10.asm
@@ -13,13 +13,13 @@
 	db $37, $9, $9 ; Route10Text9
 	db $29, $5, $a ; Route10Text10
 
-	db $6 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $2c + 4, $a + 4, $ff, $d2, TRAINER | $1, POKEMANIAC + $C8, $1
-	db SPRITE_HIKER, $39 + 4, $3 + 4, $ff, $d1, TRAINER | $2, HIKER + $C8, $7
-	db SPRITE_BLACK_HAIR_BOY_2, $40 + 4, $e + 4, $ff, $d2, TRAINER | $3, POKEMANIAC + $C8, $2
-	db SPRITE_LASS, $19 + 4, $7 + 4, $ff, $d2, TRAINER | $4, JR__TRAINER_F + $C8, $7
-	db SPRITE_HIKER, $3d + 4, $3 + 4, $ff, $d0, TRAINER | $5, HIKER + $C8, $8
-	db SPRITE_LASS, $36 + 4, $7 + 4, $ff, $d0, TRAINER | $6, JR__TRAINER_F + $C8, $8
+	db $6 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $a, $2c, FACE, RIGHT, $1, POKEMANIAC + $C8, $1
+	object SPRITE_HIKER, $3, $39, FACE, UP, $2, HIKER + $C8, $7
+	object SPRITE_BLACK_HAIR_BOY_2, $e, $40, FACE, RIGHT, $3, POKEMANIAC + $C8, $2
+	object SPRITE_LASS, $7, $19, FACE, RIGHT, $4, JR__TRAINER_F + $C8, $7
+	object SPRITE_HIKER, $3, $3d, FACE, DOWN, $5, HIKER + $C8, $8
+	object SPRITE_LASS, $7, $36, FACE, DOWN, $6, JR__TRAINER_F + $C8, $8
 
 	; warp-to
 	EVENT_DISP ROUTE_10_WIDTH, $13, $b ; ROCK_TUNNEL_POKECENTER
--- a/data/mapObjects/route11.asm
+++ b/data/mapObjects/route11.asm
@@ -11,17 +11,17 @@
 	db $1 ; signs
 	db $5, $1, $b ; Route11Text11
 
-	db $a ; people
-	db SPRITE_GAMBLER, $e + 4, $a + 4, $ff, $d0, TRAINER | $1, GAMBLER + $C8, $1
-	db SPRITE_GAMBLER, $9 + 4, $1a + 4, $ff, $d0, TRAINER | $2, GAMBLER + $C8, $2
-	db SPRITE_BUG_CATCHER, $5 + 4, $d + 4, $ff, $d2, TRAINER | $3, YOUNGSTER + $C8, $9
-	db SPRITE_BLACK_HAIR_BOY_2, $b + 4, $24 + 4, $ff, $d0, TRAINER | $4, ENGINEER + $C8, $2
-	db SPRITE_BUG_CATCHER, $4 + 4, $16 + 4, $ff, $d1, TRAINER | $5, YOUNGSTER + $C8, $a
-	db SPRITE_GAMBLER, $7 + 4, $2d + 4, $ff, $d0, TRAINER | $6, GAMBLER + $C8, $3
-	db SPRITE_GAMBLER, $3 + 4, $21 + 4, $ff, $d1, TRAINER | $7, GAMBLER + $C8, $4
-	db SPRITE_BUG_CATCHER, $5 + 4, $2b + 4, $ff, $d3, TRAINER | $8, YOUNGSTER + $C8, $b
-	db SPRITE_BLACK_HAIR_BOY_2, $10 + 4, $2d + 4, $ff, $d2, TRAINER | $9, ENGINEER + $C8, $3
-	db SPRITE_BUG_CATCHER, $c + 4, $16 + 4, $ff, $d1, TRAINER | $a, YOUNGSTER + $C8, $c
+	db $a ; objects
+	object SPRITE_GAMBLER, $a, $e, FACE, DOWN, $1, GAMBLER + $C8, $1
+	object SPRITE_GAMBLER, $1a, $9, FACE, DOWN, $2, GAMBLER + $C8, $2
+	object SPRITE_BUG_CATCHER, $d, $5, FACE, RIGHT, $3, YOUNGSTER + $C8, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $24, $b, FACE, DOWN, $4, ENGINEER + $C8, $2
+	object SPRITE_BUG_CATCHER, $16, $4, FACE, UP, $5, YOUNGSTER + $C8, $a
+	object SPRITE_GAMBLER, $2d, $7, FACE, DOWN, $6, GAMBLER + $C8, $3
+	object SPRITE_GAMBLER, $21, $3, FACE, UP, $7, GAMBLER + $C8, $4
+	object SPRITE_BUG_CATCHER, $2b, $5, FACE, LEFT, $8, YOUNGSTER + $C8, $b
+	object SPRITE_BLACK_HAIR_BOY_2, $2d, $10, FACE, RIGHT, $9, ENGINEER + $C8, $3
+	object SPRITE_BUG_CATCHER, $16, $c, FACE, UP, $a, YOUNGSTER + $C8, $c
 
 	; warp-to
 	EVENT_DISP ROUTE_11_WIDTH, $8, $31 ; ROUTE_11_GATE_1F
--- a/data/mapObjects/route11gate.asm
+++ b/data/mapObjects/route11gate.asm
@@ -10,8 +10,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $1 + 4, $4 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $4, $1, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_11_GATE_1F_WIDTH, $4, $0
--- a/data/mapObjects/route11gateupstairs.asm
+++ b/data/mapObjects/route11gateupstairs.asm
@@ -8,9 +8,9 @@
 	db $2, $1, $3 ; Route11GateUpstairsText3
 	db $2, $6, $4 ; Route11GateUpstairsText4
 
-	db $2 ; people
-	db SPRITE_BUG_CATCHER, $2 + 4, $4 + 4, $fe, $2, $1 ; person
-	db SPRITE_OAK_AIDE, $6 + 4, $2 + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_BUG_CATCHER, $4, $2, WALK, $2, $1 ; person
+	object SPRITE_OAK_AIDE, $2, $6, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_11_GATE_2F_WIDTH, $7, $7 ; ROUTE_11_GATE_1F
--- a/data/mapObjects/route12.asm
+++ b/data/mapObjects/route12.asm
@@ -11,17 +11,17 @@
 	db $d, $d, $b ; Route12Text11
 	db $3f, $b, $c ; Route12Text12
 
-	db $a ; people
-	db SPRITE_SNORLAX, $3e + 4, $a + 4, $ff, $d0, $1 ; person
-	db SPRITE_FISHER2, $1f + 4, $e + 4, $ff, $d2, TRAINER | $2, FISHER + $C8, $3
-	db SPRITE_FISHER2, $27 + 4, $5 + 4, $ff, $d1, TRAINER | $3, FISHER + $C8, $4
-	db SPRITE_BLACK_HAIR_BOY_1, $5c + 4, $b + 4, $ff, $d2, TRAINER | $4, JR__TRAINER_M + $C8, $9
-	db SPRITE_BLACK_HAIR_BOY_2, $4c + 4, $e + 4, $ff, $d1, TRAINER | $5, ROCKER + $C8, $2
-	db SPRITE_FISHER2, $28 + 4, $c + 4, $ff, $d2, TRAINER | $6, FISHER + $C8, $5
-	db SPRITE_FISHER2, $34 + 4, $9 + 4, $ff, $d3, TRAINER | $7, FISHER + $C8, $6
-	db SPRITE_FISHER2, $57 + 4, $6 + 4, $ff, $d0, TRAINER | $8, FISHER + $C8, $b
-	db SPRITE_BALL, $23 + 4, $e + 4, $ff, $ff, ITEM | $9, TM_16
-	db SPRITE_BALL, $59 + 4, $5 + 4, $ff, $ff, ITEM | $a, IRON
+	db $a ; objects
+	object SPRITE_SNORLAX, $a, $3e, FACE, DOWN, $1 ; person
+	object SPRITE_FISHER2, $e, $1f, FACE, RIGHT, $2, FISHER + $C8, $3
+	object SPRITE_FISHER2, $5, $27, FACE, UP, $3, FISHER + $C8, $4
+	object SPRITE_BLACK_HAIR_BOY_1, $b, $5c, FACE, RIGHT, $4, JR__TRAINER_M + $C8, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $e, $4c, FACE, UP, $5, ROCKER + $C8, $2
+	object SPRITE_FISHER2, $c, $28, FACE, RIGHT, $6, FISHER + $C8, $5
+	object SPRITE_FISHER2, $9, $34, FACE, LEFT, $7, FISHER + $C8, $6
+	object SPRITE_FISHER2, $6, $57, FACE, DOWN, $8, FISHER + $C8, $b
+	object SPRITE_BALL, $e, $23, FACE, STAY, $9, TM_16
+	object SPRITE_BALL, $5, $59, FACE, STAY, $a, IRON
 
 	; warp-to
 	EVENT_DISP ROUTE_12_WIDTH, $f, $a ; ROUTE_12_GATE_1F
--- a/data/mapObjects/route12gate.asm
+++ b/data/mapObjects/route12gate.asm
@@ -10,8 +10,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $3 + 4, $1 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $1, $3, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_12_GATE_1F_WIDTH, $0, $4
--- a/data/mapObjects/route12gateupstairs.asm
+++ b/data/mapObjects/route12gateupstairs.asm
@@ -8,8 +8,8 @@
 	db $2, $1, $2 ; Route12GateUpstairsText2
 	db $2, $6, $3 ; Route12GateUpstairsText3
 
-	db $1 ; people
-	db SPRITE_BRUNETTE_GIRL, $4 + 4, $3 + 4, $fe, $1, $1 ; person
+	db $1 ; objects
+	object SPRITE_BRUNETTE_GIRL, $3, $4, WALK, $1, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_12_GATE_2F_WIDTH, $7, $7 ; ROUTE_12_GATE_1F
--- a/data/mapObjects/route12house.asm
+++ b/data/mapObjects/route12house.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_FISHER, $4 + 4, $2 + 4, $ff, $d3, $1 ; person
+	db $1 ; objects
+	object SPRITE_FISHER, $2, $4, FACE, LEFT, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_12_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/route13.asm
+++ b/data/mapObjects/route13.asm
@@ -8,14 +8,14 @@
 	db $5, $21, $c ; Route13Text12
 	db $b, $1f, $d ; Route13Text13
 
-	db $a ; people
-	db SPRITE_BLACK_HAIR_BOY_1, $a + 4, $31 + 4, $ff, $d3, TRAINER | $1, BIRD_KEEPER + $C8, $1
-	db SPRITE_LASS, $a + 4, $30 + 4, $ff, $d0, TRAINER | $2, JR__TRAINER_F + $C8, $c
-	db SPRITE_LASS, $9 + 4, $1b + 4, $ff, $d0, TRAINER | $3, JR__TRAINER_F + $C8, $d
-	db SPRITE_LASS, $a + 4, $17 + 4, $ff, $d2, TRAINER | $4, JR__TRAINER_F + $C8, $e
-	db SPRITE_LASS, $5 + 4, $32 + 4, $ff, $d0, TRAINER | $5, JR__TRAINER_F + $C8, $f
-	db SPRITE_BLACK_HAIR_BOY_1, $4 + 4, $c + 4, $ff, $d3, TRAINER | $6, BIRD_KEEPER + $C8, $2
-	db SPRITE_FOULARD_WOMAN, $6 + 4, $21 + 4, $ff, $d0, TRAINER | $7, BEAUTY + $C8, $4
-	db SPRITE_FOULARD_WOMAN, $6 + 4, $20 + 4, $ff, $d0, TRAINER | $8, BEAUTY + $C8, $5
-	db SPRITE_BIKER, $7 + 4, $a + 4, $ff, $d1, TRAINER | $9, BIKER + $C8, $1
-	db SPRITE_BLACK_HAIR_BOY_1, $d + 4, $7 + 4, $ff, $d1, TRAINER | $a, BIRD_KEEPER + $C8, $3
+	db $a ; objects
+	object SPRITE_BLACK_HAIR_BOY_1, $31, $a, FACE, LEFT, $1, BIRD_KEEPER + $C8, $1
+	object SPRITE_LASS, $30, $a, FACE, DOWN, $2, JR__TRAINER_F + $C8, $c
+	object SPRITE_LASS, $1b, $9, FACE, DOWN, $3, JR__TRAINER_F + $C8, $d
+	object SPRITE_LASS, $17, $a, FACE, RIGHT, $4, JR__TRAINER_F + $C8, $e
+	object SPRITE_LASS, $32, $5, FACE, DOWN, $5, JR__TRAINER_F + $C8, $f
+	object SPRITE_BLACK_HAIR_BOY_1, $c, $4, FACE, LEFT, $6, BIRD_KEEPER + $C8, $2
+	object SPRITE_FOULARD_WOMAN, $21, $6, FACE, DOWN, $7, BEAUTY + $C8, $4
+	object SPRITE_FOULARD_WOMAN, $20, $6, FACE, DOWN, $8, BEAUTY + $C8, $5
+	object SPRITE_BIKER, $a, $7, FACE, UP, $9, BIKER + $C8, $1
+	object SPRITE_BLACK_HAIR_BOY_1, $7, $d, FACE, UP, $a, BIRD_KEEPER + $C8, $3
--- a/data/mapObjects/route14.asm
+++ b/data/mapObjects/route14.asm
@@ -6,14 +6,14 @@
 	db $1 ; signs
 	db $d, $11, $b ; Route14Text11
 
-	db $a ; people
-	db SPRITE_BLACK_HAIR_BOY_1, $4 + 4, $4 + 4, $ff, $d0, TRAINER | $1, BIRD_KEEPER + $C8, $e
-	db SPRITE_BLACK_HAIR_BOY_1, $6 + 4, $f + 4, $ff, $d0, TRAINER | $2, BIRD_KEEPER + $C8, $f
-	db SPRITE_BLACK_HAIR_BOY_1, $b + 4, $c + 4, $ff, $d0, TRAINER | $3, BIRD_KEEPER + $C8, $10
-	db SPRITE_BLACK_HAIR_BOY_1, $f + 4, $e + 4, $ff, $d1, TRAINER | $4, BIRD_KEEPER + $C8, $11
-	db SPRITE_BLACK_HAIR_BOY_1, $1f + 4, $f + 4, $ff, $d2, TRAINER | $5, BIRD_KEEPER + $C8, $4
-	db SPRITE_BLACK_HAIR_BOY_1, $31 + 4, $6 + 4, $ff, $d1, TRAINER | $6, BIRD_KEEPER + $C8, $5
-	db SPRITE_BIKER, $27 + 4, $5 + 4, $ff, $d0, TRAINER | $7, BIKER + $C8, $d
-	db SPRITE_BIKER, $1e + 4, $4 + 4, $ff, $d3, TRAINER | $8, BIKER + $C8, $e
-	db SPRITE_BIKER, $1e + 4, $f + 4, $ff, $d2, TRAINER | $9, BIKER + $C8, $f
-	db SPRITE_BIKER, $1f + 4, $4 + 4, $ff, $d3, TRAINER | $a, BIKER + $C8, $2
+	db $a ; objects
+	object SPRITE_BLACK_HAIR_BOY_1, $4, $4, FACE, DOWN, $1, BIRD_KEEPER + $C8, $e
+	object SPRITE_BLACK_HAIR_BOY_1, $f, $6, FACE, DOWN, $2, BIRD_KEEPER + $C8, $f
+	object SPRITE_BLACK_HAIR_BOY_1, $c, $b, FACE, DOWN, $3, BIRD_KEEPER + $C8, $10
+	object SPRITE_BLACK_HAIR_BOY_1, $e, $f, FACE, UP, $4, BIRD_KEEPER + $C8, $11
+	object SPRITE_BLACK_HAIR_BOY_1, $f, $1f, FACE, RIGHT, $5, BIRD_KEEPER + $C8, $4
+	object SPRITE_BLACK_HAIR_BOY_1, $6, $31, FACE, UP, $6, BIRD_KEEPER + $C8, $5
+	object SPRITE_BIKER, $5, $27, FACE, DOWN, $7, BIKER + $C8, $d
+	object SPRITE_BIKER, $4, $1e, FACE, LEFT, $8, BIKER + $C8, $e
+	object SPRITE_BIKER, $f, $1e, FACE, RIGHT, $9, BIKER + $C8, $f
+	object SPRITE_BIKER, $4, $1f, FACE, LEFT, $a, BIKER + $C8, $2
--- a/data/mapObjects/route15.asm
+++ b/data/mapObjects/route15.asm
@@ -10,18 +10,18 @@
 	db $1 ; signs
 	db $9, $27, $c ; Route15Text12
 
-	db $b ; people
-	db SPRITE_LASS, $b + 4, $29 + 4, $ff, $d0, TRAINER | $1, JR__TRAINER_F + $C8, $14
-	db SPRITE_LASS, $a + 4, $35 + 4, $ff, $d2, TRAINER | $2, JR__TRAINER_F + $C8, $15
-	db SPRITE_BLACK_HAIR_BOY_1, $d + 4, $1f + 4, $ff, $d1, TRAINER | $3, BIRD_KEEPER + $C8, $6
-	db SPRITE_BLACK_HAIR_BOY_1, $d + 4, $23 + 4, $ff, $d1, TRAINER | $4, BIRD_KEEPER + $C8, $7
-	db SPRITE_FOULARD_WOMAN, $b + 4, $35 + 4, $ff, $d0, TRAINER | $5, BEAUTY + $C8, $9
-	db SPRITE_FOULARD_WOMAN, $a + 4, $29 + 4, $ff, $d3, TRAINER | $6, BEAUTY + $C8, $a
-	db SPRITE_BIKER, $a + 4, $30 + 4, $ff, $d0, TRAINER | $7, BIKER + $C8, $3
-	db SPRITE_BIKER, $a + 4, $2e + 4, $ff, $d0, TRAINER | $8, BIKER + $C8, $4
-	db SPRITE_LASS, $5 + 4, $25 + 4, $ff, $d3, TRAINER | $9, JR__TRAINER_F + $C8, $16
-	db SPRITE_LASS, $d + 4, $12 + 4, $ff, $d1, TRAINER | $a, JR__TRAINER_F + $C8, $17
-	db SPRITE_BALL, $5 + 4, $12 + 4, $ff, $ff, ITEM | $b, TM_20
+	db $b ; objects
+	object SPRITE_LASS, $29, $b, FACE, DOWN, $1, JR__TRAINER_F + $C8, $14
+	object SPRITE_LASS, $35, $a, FACE, RIGHT, $2, JR__TRAINER_F + $C8, $15
+	object SPRITE_BLACK_HAIR_BOY_1, $1f, $d, FACE, UP, $3, BIRD_KEEPER + $C8, $6
+	object SPRITE_BLACK_HAIR_BOY_1, $23, $d, FACE, UP, $4, BIRD_KEEPER + $C8, $7
+	object SPRITE_FOULARD_WOMAN, $35, $b, FACE, DOWN, $5, BEAUTY + $C8, $9
+	object SPRITE_FOULARD_WOMAN, $29, $a, FACE, LEFT, $6, BEAUTY + $C8, $a
+	object SPRITE_BIKER, $30, $a, FACE, DOWN, $7, BIKER + $C8, $3
+	object SPRITE_BIKER, $2e, $a, FACE, DOWN, $8, BIKER + $C8, $4
+	object SPRITE_LASS, $25, $5, FACE, LEFT, $9, JR__TRAINER_F + $C8, $16
+	object SPRITE_LASS, $12, $d, FACE, UP, $a, JR__TRAINER_F + $C8, $17
+	object SPRITE_BALL, $12, $5, FACE, STAY, $b, TM_20
 
 	; warp-to
 	EVENT_DISP ROUTE_15_WIDTH, $8, $7 ; ROUTE_15_GATE_1F
--- a/data/mapObjects/route15gate.asm
+++ b/data/mapObjects/route15gate.asm
@@ -10,8 +10,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $1 + 4, $4 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $4, $1, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_15_GATE_1F_WIDTH, $4, $0
--- a/data/mapObjects/route15gateupstairs.asm
+++ b/data/mapObjects/route15gateupstairs.asm
@@ -7,8 +7,8 @@
 	db $1 ; signs
 	db $2, $6, $2 ; Route15GateUpstairsText2
 
-	db $1 ; people
-	db SPRITE_OAK_AIDE, $2 + 4, $4 + 4, $ff, $d0, $1
+	db $1 ; objects
+	object SPRITE_OAK_AIDE, $4, $2, FACE, DOWN, $1
 
 	; warp-to
 	EVENT_DISP ROUTE_15_GATE_2F_WIDTH, $7, $7 ; ROUTE_15_GATE_1F
--- a/data/mapObjects/route16.asm
+++ b/data/mapObjects/route16.asm
@@ -16,14 +16,14 @@
 	db $b, $1b, $8 ; Route16Text8
 	db $11, $5, $9 ; Route16Text9
 
-	db $7 ; people
-	db SPRITE_BIKER, $c + 4, $11 + 4, $ff, $d2, TRAINER | $1, BIKER + $C8, $5
-	db SPRITE_BIKER, $d + 4, $e + 4, $ff, $d3, TRAINER | $2, CUE_BALL + $C8, $1
-	db SPRITE_BIKER, $c + 4, $b + 4, $ff, $d1, TRAINER | $3, CUE_BALL + $C8, $2
-	db SPRITE_BIKER, $b + 4, $9 + 4, $ff, $d2, TRAINER | $4, BIKER + $C8, $6
-	db SPRITE_BIKER, $a + 4, $6 + 4, $ff, $d3, TRAINER | $5, CUE_BALL + $C8, $3
-	db SPRITE_BIKER, $c + 4, $3 + 4, $ff, $d3, TRAINER | $6, BIKER + $C8, $7
-	db SPRITE_SNORLAX, $a + 4, $1a + 4, $ff, $d0, $7 ; person
+	db $7 ; objects
+	object SPRITE_BIKER, $11, $c, FACE, RIGHT, $1, BIKER + $C8, $5
+	object SPRITE_BIKER, $e, $d, FACE, LEFT, $2, CUE_BALL + $C8, $1
+	object SPRITE_BIKER, $b, $c, FACE, UP, $3, CUE_BALL + $C8, $2
+	object SPRITE_BIKER, $9, $b, FACE, RIGHT, $4, BIKER + $C8, $6
+	object SPRITE_BIKER, $6, $a, FACE, LEFT, $5, CUE_BALL + $C8, $3
+	object SPRITE_BIKER, $3, $c, FACE, LEFT, $6, BIKER + $C8, $7
+	object SPRITE_SNORLAX, $1a, $a, FACE, DOWN, $7 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_16_WIDTH, $a, $11 ; ROUTE_16_GATE_1F
--- a/data/mapObjects/route16gate.asm
+++ b/data/mapObjects/route16gate.asm
@@ -14,9 +14,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_GUARD, $5 + 4, $4 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GAMBLER, $3 + 4, $4 + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_GUARD, $4, $5, FACE, DOWN, $1 ; person
+	object SPRITE_GAMBLER, $4, $3, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_16_GATE_1F_WIDTH, $8, $0
--- a/data/mapObjects/route16gateupstairs.asm
+++ b/data/mapObjects/route16gateupstairs.asm
@@ -8,9 +8,9 @@
 	db $2, $1, $3 ; Route16GateUpstairsText3
 	db $2, $6, $4 ; Route16GateUpstairsText4
 
-	db $2 ; people
-	db SPRITE_YOUNG_BOY, $2 + 4, $4 + 4, $ff, $ff, $1 ; person
-	db SPRITE_LITTLE_GIRL, $5 + 4, $2 + 4, $fe, $2, $2 ; person
+	db $2 ; objects
+	object SPRITE_YOUNG_BOY, $4, $2, FACE, STAY, $1 ; person
+	object SPRITE_LITTLE_GIRL, $2, $5, WALK, $2, $2 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_16_GATE_2F_WIDTH, $7, $7 ; ROUTE_16_GATE_1F
--- a/data/mapObjects/route16house.asm
+++ b/data/mapObjects/route16house.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_BRUNETTE_GIRL, $3 + 4, $2 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BIRD, $4 + 4, $6 + 4, $fe, $0, $2 ; person
+	db $2 ; objects
+	object SPRITE_BRUNETTE_GIRL, $2, $3, FACE, LEFT, $1 ; person
+	object SPRITE_BIRD, $6, $4, WALK, $0, $2 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_16_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/route17.asm
+++ b/data/mapObjects/route17.asm
@@ -11,14 +11,14 @@
 	db $6f, $9, $f ; Route17Text15
 	db $8d, $9, $10 ; Route17Text16
 
-	db $a ; people
-	db SPRITE_BIKER, $13 + 4, $c + 4, $ff, $d2, TRAINER | $1, CUE_BALL + $C8, $4
-	db SPRITE_BIKER, $10 + 4, $b + 4, $ff, $d3, TRAINER | $2, CUE_BALL + $C8, $5
-	db SPRITE_BIKER, $12 + 4, $4 + 4, $ff, $d1, TRAINER | $3, BIKER + $C8, $8
-	db SPRITE_BIKER, $20 + 4, $7 + 4, $ff, $d2, TRAINER | $4, BIKER + $C8, $9
-	db SPRITE_BIKER, $22 + 4, $e + 4, $ff, $d3, TRAINER | $5, BIKER + $C8, $a
-	db SPRITE_BIKER, $3a + 4, $11 + 4, $ff, $d2, TRAINER | $6, CUE_BALL + $C8, $6
-	db SPRITE_BIKER, $44 + 4, $2 + 4, $ff, $d3, TRAINER | $7, CUE_BALL + $C8, $7
-	db SPRITE_BIKER, $62 + 4, $e + 4, $ff, $d3, TRAINER | $8, CUE_BALL + $C8, $8
-	db SPRITE_BIKER, $62 + 4, $5 + 4, $ff, $d2, TRAINER | $9, BIKER + $C8, $b
-	db SPRITE_BIKER, $76 + 4, $a + 4, $ff, $d0, TRAINER | $a, BIKER + $C8, $c
+	db $a ; objects
+	object SPRITE_BIKER, $c, $13, FACE, RIGHT, $1, CUE_BALL + $C8, $4
+	object SPRITE_BIKER, $b, $10, FACE, LEFT, $2, CUE_BALL + $C8, $5
+	object SPRITE_BIKER, $4, $12, FACE, UP, $3, BIKER + $C8, $8
+	object SPRITE_BIKER, $7, $20, FACE, RIGHT, $4, BIKER + $C8, $9
+	object SPRITE_BIKER, $e, $22, FACE, LEFT, $5, BIKER + $C8, $a
+	object SPRITE_BIKER, $11, $3a, FACE, RIGHT, $6, CUE_BALL + $C8, $6
+	object SPRITE_BIKER, $2, $44, FACE, LEFT, $7, CUE_BALL + $C8, $7
+	object SPRITE_BIKER, $e, $62, FACE, LEFT, $8, CUE_BALL + $C8, $8
+	object SPRITE_BIKER, $5, $62, FACE, RIGHT, $9, BIKER + $C8, $b
+	object SPRITE_BIKER, $a, $76, FACE, DOWN, $a, BIKER + $C8, $c
--- a/data/mapObjects/route18.asm
+++ b/data/mapObjects/route18.asm
@@ -11,10 +11,10 @@
 	db $7, $2b, $4 ; Route18Text4
 	db $5, $21, $5 ; Route18Text5
 
-	db $3 ; people
-	db SPRITE_BLACK_HAIR_BOY_1, $b + 4, $24 + 4, $ff, $d3, TRAINER | $1, BIRD_KEEPER + $C8, $8
-	db SPRITE_BLACK_HAIR_BOY_1, $f + 4, $28 + 4, $ff, $d2, TRAINER | $2, BIRD_KEEPER + $C8, $9
-	db SPRITE_BLACK_HAIR_BOY_1, $d + 4, $2a + 4, $ff, $d2, TRAINER | $3, BIRD_KEEPER + $C8, $a
+	db $3 ; objects
+	object SPRITE_BLACK_HAIR_BOY_1, $24, $b, FACE, LEFT, $1, BIRD_KEEPER + $C8, $8
+	object SPRITE_BLACK_HAIR_BOY_1, $28, $f, FACE, RIGHT, $2, BIRD_KEEPER + $C8, $9
+	object SPRITE_BLACK_HAIR_BOY_1, $2a, $d, FACE, RIGHT, $3, BIRD_KEEPER + $C8, $a
 
 	; warp-to
 	EVENT_DISP ROUTE_18_WIDTH, $8, $21 ; ROUTE_18_GATE_1F
--- a/data/mapObjects/route18gate.asm
+++ b/data/mapObjects/route18gate.asm
@@ -10,8 +10,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $1 + 4, $4 + 4, $ff, $d0, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $4, $1, FACE, DOWN, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_18_GATE_1F_WIDTH, $4, $0
--- a/data/mapObjects/route18gateupstairs.asm
+++ b/data/mapObjects/route18gateupstairs.asm
@@ -8,8 +8,8 @@
 	db $2, $1, $2 ; Route18GateUpstairsText2
 	db $2, $6, $3 ; Route18GateUpstairsText3
 
-	db $1 ; people
-	db SPRITE_BUG_CATCHER, $2 + 4, $4 + 4, $fe, $2, $1 ; person
+	db $1 ; objects
+	object SPRITE_BUG_CATCHER, $4, $2, WALK, $2, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_18_GATE_2F_WIDTH, $7, $7 ; ROUTE_18_GATE_1F
--- a/data/mapObjects/route19.asm
+++ b/data/mapObjects/route19.asm
@@ -15,26 +15,26 @@
 	db $9, $b, $b ; Route19Text11
 ENDC
 
-	db $a ; people
+	db $a ; objects
 IF DEF(_OPTION_BEACH_HOUSE)
-	db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $9 + 4, $ff, $d3, TRAINER | 1, SWIMMER + $C8, 2
-	db SPRITE_BLACK_HAIR_BOY_1, $9 + 4, $c + 4, $ff, $d2, TRAINER | 2, SWIMMER + $C8, 3
+	object SPRITE_BLACK_HAIR_BOY_1, $9, $7, FACE, LEFT, 1, SWIMMER + $C8, 2
+	object SPRITE_BLACK_HAIR_BOY_1, $c, $9, FACE, RIGHT, 2, SWIMMER + $C8, 3
 ELSE
-	db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $8 + 4, $ff, $d2, TRAINER | 1, SWIMMER + $C8, 2
-	db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $d + 4, $ff, $d2, TRAINER | 2, SWIMMER + $C8, 3
+	object SPRITE_BLACK_HAIR_BOY_1, $8, $7, FACE, RIGHT, 1, SWIMMER + $C8, 2
+	object SPRITE_BLACK_HAIR_BOY_1, $d, $7, FACE, RIGHT, 2, SWIMMER + $C8, 3
 ENDC
-	db SPRITE_SWIMMER, $19 + 4, $d + 4, $ff, $d2, TRAINER | $3, SWIMMER + $C8, $4
-	db SPRITE_SWIMMER, $1b + 4, $4 + 4, $ff, $d3, TRAINER | $4, SWIMMER + $C8, $5
-	db SPRITE_SWIMMER, $1f + 4, $10 + 4, $ff, $d1, TRAINER | $5, SWIMMER + $C8, $6
+	object SPRITE_SWIMMER, $d, $19, FACE, RIGHT, $3, SWIMMER + $C8, $4
+	object SPRITE_SWIMMER, $4, $1b, FACE, LEFT, $4, SWIMMER + $C8, $5
+	object SPRITE_SWIMMER, $10, $1f, FACE, UP, $5, SWIMMER + $C8, $6
 IF DEF(_OPTION_BEACH_HOUSE)
-	db SPRITE_SWIMMER, $d + 4, $9 + 4, $ff, $d0, TRAINER | $6, SWIMMER + $C8, $7
+	object SPRITE_SWIMMER, $9, $d, FACE, DOWN, $6, SWIMMER + $C8, $7
 ELSE
-	db SPRITE_SWIMMER, $b + 4, $9 + 4, $ff, $d0, TRAINER | $6, SWIMMER + $C8, $7
+	object SPRITE_SWIMMER, $9, $b, FACE, DOWN, $6, SWIMMER + $C8, $7
 ENDC
-	db SPRITE_SWIMMER, $2b + 4, $8 + 4, $ff, $d2, TRAINER | $7, BEAUTY + $C8, $c
-	db SPRITE_SWIMMER, $2b + 4, $b + 4, $ff, $d3, TRAINER | $8, BEAUTY + $C8, $d
-	db SPRITE_SWIMMER, $2a + 4, $9 + 4, $ff, $d1, TRAINER | $9, SWIMMER + $C8, $8
-	db SPRITE_SWIMMER, $2c + 4, $a + 4, $ff, $d0, TRAINER | $a, BEAUTY + $C8, $e
+	object SPRITE_SWIMMER, $8, $2b, FACE, RIGHT, $7, BEAUTY + $C8, $c
+	object SPRITE_SWIMMER, $b, $2b, FACE, LEFT, $8, BEAUTY + $C8, $d
+	object SPRITE_SWIMMER, $9, $2a, FACE, UP, $9, SWIMMER + $C8, $8
+	object SPRITE_SWIMMER, $a, $2c, FACE, DOWN, $a, BEAUTY + $C8, $e
 
 	; warp-to
 	IF DEF(_OPTION_BEACH_HOUSE)
--- a/data/mapObjects/route2.asm
+++ b/data/mapObjects/route2.asm
@@ -13,9 +13,9 @@
 	db $41, $5, $3 ; Route2Text3
 	db $b, $b, $4 ; Route2Text4
 
-	db $2 ; people
-	db SPRITE_BALL, $36 + 4, $d + 4, $ff, $ff, ITEM | $1, MOON_STONE
-	db SPRITE_BALL, $2d + 4, $d + 4, $ff, $ff, ITEM | $2, HP_UP
+	db $2 ; objects
+	object SPRITE_BALL, $d, $36, FACE, STAY, $1, MOON_STONE
+	object SPRITE_BALL, $d, $2d, FACE, STAY, $2, HP_UP
 
 	; warp-to
 	EVENT_DISP ROUTE_2_WIDTH, $9, $c ; DIGLETTS_CAVE_EXIT
--- a/data/mapObjects/route20.asm
+++ b/data/mapObjects/route20.asm
@@ -9,17 +9,17 @@
 	db $7, $33, $b ; Route20Text11
 	db $b, $39, $c ; Route20Text12
 
-	db $a ; people
-	db SPRITE_SWIMMER, $8 + 4, $57 + 4, $ff, $d1, TRAINER | $1, SWIMMER + $C8, $9
-	db SPRITE_SWIMMER, $b + 4, $44 + 4, $ff, $d1, TRAINER | $2, BEAUTY + $C8, $f
-	db SPRITE_SWIMMER, $a + 4, $2d + 4, $ff, $d0, TRAINER | $3, BEAUTY + $C8, $6
-	db SPRITE_SWIMMER, $e + 4, $37 + 4, $ff, $d3, TRAINER | $4, JR__TRAINER_F + $C8, $18
-	db SPRITE_SWIMMER, $d + 4, $26 + 4, $ff, $d0, TRAINER | $5, SWIMMER + $C8, $a
-	db SPRITE_SWIMMER, $d + 4, $57 + 4, $ff, $d1, TRAINER | $6, SWIMMER + $C8, $b
-	db SPRITE_BLACK_HAIR_BOY_1, $9 + 4, $22 + 4, $ff, $d1, TRAINER | $7, BIRD_KEEPER + $C8, $b
-	db SPRITE_SWIMMER, $7 + 4, $19 + 4, $ff, $d1, TRAINER | $8, BEAUTY + $C8, $7
-	db SPRITE_SWIMMER, $c + 4, $18 + 4, $ff, $d0, TRAINER | $9, JR__TRAINER_F + $C8, $10
-	db SPRITE_SWIMMER, $8 + 4, $f + 4, $ff, $d1, TRAINER | $a, BEAUTY + $C8, $8
+	db $a ; objects
+	object SPRITE_SWIMMER, $57, $8, FACE, UP, $1, SWIMMER + $C8, $9
+	object SPRITE_SWIMMER, $44, $b, FACE, UP, $2, BEAUTY + $C8, $f
+	object SPRITE_SWIMMER, $2d, $a, FACE, DOWN, $3, BEAUTY + $C8, $6
+	object SPRITE_SWIMMER, $37, $e, FACE, LEFT, $4, JR__TRAINER_F + $C8, $18
+	object SPRITE_SWIMMER, $26, $d, FACE, DOWN, $5, SWIMMER + $C8, $a
+	object SPRITE_SWIMMER, $57, $d, FACE, UP, $6, SWIMMER + $C8, $b
+	object SPRITE_BLACK_HAIR_BOY_1, $22, $9, FACE, UP, $7, BIRD_KEEPER + $C8, $b
+	object SPRITE_SWIMMER, $19, $7, FACE, UP, $8, BEAUTY + $C8, $7
+	object SPRITE_SWIMMER, $18, $c, FACE, DOWN, $9, JR__TRAINER_F + $C8, $10
+	object SPRITE_SWIMMER, $f, $8, FACE, UP, $a, BEAUTY + $C8, $8
 
 	; warp-to
 	EVENT_DISP ROUTE_20_WIDTH, $5, $30 ; SEAFOAM_ISLANDS_1
--- a/data/mapObjects/route21.asm
+++ b/data/mapObjects/route21.asm
@@ -5,13 +5,13 @@
 
 	db $0 ; signs
 
-	db $9 ; people
-	db SPRITE_FISHER2, $18 + 4, $4 + 4, $ff, $d2, TRAINER | $1, FISHER + $C8, $7
-	db SPRITE_FISHER2, $19 + 4, $6 + 4, $ff, $d0, TRAINER | $2, FISHER + $C8, $9
-	db SPRITE_SWIMMER, $1f + 4, $a + 4, $ff, $d1, TRAINER | $3, SWIMMER + $C8, $c
-	db SPRITE_SWIMMER, $1e + 4, $c + 4, $ff, $d3, TRAINER | $4, CUE_BALL + $C8, $9
-	db SPRITE_SWIMMER, $3f + 4, $10 + 4, $ff, $d0, TRAINER | $5, SWIMMER + $C8, $d
-	db SPRITE_SWIMMER, $47 + 4, $5 + 4, $ff, $d3, TRAINER | $6, SWIMMER + $C8, $e
-	db SPRITE_SWIMMER, $47 + 4, $f + 4, $ff, $d2, TRAINER | $7, SWIMMER + $C8, $f
-	db SPRITE_FISHER2, $38 + 4, $e + 4, $ff, $d2, TRAINER | $8, FISHER + $C8, $8
-	db SPRITE_FISHER2, $39 + 4, $11 + 4, $ff, $d3, TRAINER | $9, FISHER + $C8, $a
+	db $9 ; objects
+	object SPRITE_FISHER2, $4, $18, FACE, RIGHT, $1, FISHER + $C8, $7
+	object SPRITE_FISHER2, $6, $19, FACE, DOWN, $2, FISHER + $C8, $9
+	object SPRITE_SWIMMER, $a, $1f, FACE, UP, $3, SWIMMER + $C8, $c
+	object SPRITE_SWIMMER, $c, $1e, FACE, LEFT, $4, CUE_BALL + $C8, $9
+	object SPRITE_SWIMMER, $10, $3f, FACE, DOWN, $5, SWIMMER + $C8, $d
+	object SPRITE_SWIMMER, $5, $47, FACE, LEFT, $6, SWIMMER + $C8, $e
+	object SPRITE_SWIMMER, $f, $47, FACE, RIGHT, $7, SWIMMER + $C8, $f
+	object SPRITE_FISHER2, $e, $38, FACE, RIGHT, $8, FISHER + $C8, $8
+	object SPRITE_FISHER2, $11, $39, FACE, LEFT, $9, FISHER + $C8, $a
--- a/data/mapObjects/route22.asm
+++ b/data/mapObjects/route22.asm
@@ -7,9 +7,9 @@
 	db $1 ; signs
 	db $b, $7, $3 ; Route22FrontGateText
 
-	db $2 ; people
-	db SPRITE_BLUE, $5 + 4, $19 + 4, $ff, $ff, $1 ; person
-	db SPRITE_BLUE, $5 + 4, $19 + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_BLUE, $19, $5, FACE, STAY, $1 ; person
+	object SPRITE_BLUE, $19, $5, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_22_WIDTH, $5, $8 ; ROUTE_22_GATE
--- a/data/mapObjects/route22gate.asm
+++ b/data/mapObjects/route22gate.asm
@@ -9,8 +9,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $2 + 4, $6 + 4, $ff, $d2, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $6, $2, FACE, RIGHT, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_22_GATE_WIDTH, $7, $4
--- a/data/mapObjects/route23.asm
+++ b/data/mapObjects/route23.asm
@@ -10,14 +10,14 @@
 	db $1 ; signs
 	db $21, $3, $8 ; Route23Text8
 
-	db $7 ; people
-	db SPRITE_GUARD, $23 + 4, $4 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GUARD, $38 + 4, $a + 4, $ff, $d0, $2 ; person
-	db SPRITE_SWIMMER, $55 + 4, $8 + 4, $ff, $d0, $3 ; person
-	db SPRITE_SWIMMER, $60 + 4, $b + 4, $ff, $d0, $4 ; person
-	db SPRITE_GUARD, $69 + 4, $c + 4, $ff, $d0, $5 ; person
-	db SPRITE_GUARD, $77 + 4, $8 + 4, $ff, $d0, $6 ; person
-	db SPRITE_GUARD, $88 + 4, $8 + 4, $ff, $d0, $7 ; person
+	db $7 ; objects
+	object SPRITE_GUARD, $4, $23, FACE, DOWN, $1 ; person
+	object SPRITE_GUARD, $a, $38, FACE, DOWN, $2 ; person
+	object SPRITE_SWIMMER, $8, $55, FACE, DOWN, $3 ; person
+	object SPRITE_SWIMMER, $b, $60, FACE, DOWN, $4 ; person
+	object SPRITE_GUARD, $c, $69, FACE, DOWN, $5 ; person
+	object SPRITE_GUARD, $8, $77, FACE, DOWN, $6 ; person
+	object SPRITE_GUARD, $8, $88, FACE, DOWN, $7 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_23_WIDTH, $8b, $7 ; ROUTE_22_GATE
--- a/data/mapObjects/route24.asm
+++ b/data/mapObjects/route24.asm
@@ -5,12 +5,12 @@
 
 	db $0 ; signs
 
-	db $8 ; people
-	db SPRITE_BLACK_HAIR_BOY_1, $f + 4, $b + 4, $ff, $d2, TRAINER | $1, ROCKET + $C8, $6
-	db SPRITE_BLACK_HAIR_BOY_1, $14 + 4, $5 + 4, $ff, $d1, TRAINER | $2, JR__TRAINER_M + $C8, $2
-	db SPRITE_BLACK_HAIR_BOY_1, $13 + 4, $b + 4, $ff, $d2, TRAINER | $3, JR__TRAINER_M + $C8, $3
-	db SPRITE_LASS, $16 + 4, $a + 4, $ff, $d3, TRAINER | $4, LASS + $C8, $7
-	db SPRITE_BUG_CATCHER, $19 + 4, $b + 4, $ff, $d2, TRAINER | $5, YOUNGSTER + $C8, $4
-	db SPRITE_LASS, $1c + 4, $a + 4, $ff, $d3, TRAINER | $6, LASS + $C8, $8
-	db SPRITE_BUG_CATCHER, $1f + 4, $b + 4, $ff, $d2, TRAINER | $7, BUG_CATCHER + $C8, $9
-	db SPRITE_BALL, $5 + 4, $a + 4, $ff, $ff, ITEM | $8, TM_45
+	db $8 ; objects
+	object SPRITE_BLACK_HAIR_BOY_1, $b, $f, FACE, RIGHT, $1, ROCKET + $C8, $6
+	object SPRITE_BLACK_HAIR_BOY_1, $5, $14, FACE, UP, $2, JR__TRAINER_M + $C8, $2
+	object SPRITE_BLACK_HAIR_BOY_1, $b, $13, FACE, RIGHT, $3, JR__TRAINER_M + $C8, $3
+	object SPRITE_LASS, $a, $16, FACE, LEFT, $4, LASS + $C8, $7
+	object SPRITE_BUG_CATCHER, $b, $19, FACE, RIGHT, $5, YOUNGSTER + $C8, $4
+	object SPRITE_LASS, $a, $1c, FACE, LEFT, $6, LASS + $C8, $8
+	object SPRITE_BUG_CATCHER, $b, $1f, FACE, RIGHT, $7, BUG_CATCHER + $C8, $9
+	object SPRITE_BALL, $a, $5, FACE, STAY, $8, TM_45
--- a/data/mapObjects/route25.asm
+++ b/data/mapObjects/route25.asm
@@ -7,17 +7,17 @@
 	db $1 ; signs
 	db $3, $2b, $b ; Route25Text11
 
-	db $a ; people
-	db SPRITE_BUG_CATCHER, $2 + 4, $e + 4, $ff, $d0, TRAINER | $1, YOUNGSTER + $C8, $5
-	db SPRITE_BUG_CATCHER, $5 + 4, $12 + 4, $ff, $d1, TRAINER | $2, YOUNGSTER + $C8, $6
-	db SPRITE_BLACK_HAIR_BOY_1, $4 + 4, $18 + 4, $ff, $d0, TRAINER | $3, JR__TRAINER_M + $C8, $2
-	db SPRITE_LASS, $8 + 4, $12 + 4, $ff, $d3, TRAINER | $4, LASS + $C8, $9
-	db SPRITE_BUG_CATCHER, $3 + 4, $20 + 4, $ff, $d2, TRAINER | $5, YOUNGSTER + $C8, $7
-	db SPRITE_LASS, $4 + 4, $25 + 4, $ff, $d0, TRAINER | $6, LASS + $C8, $a
-	db SPRITE_HIKER, $4 + 4, $8 + 4, $ff, $d3, TRAINER | $7, HIKER + $C8, $2
-	db SPRITE_HIKER, $9 + 4, $17 + 4, $ff, $d1, TRAINER | $8, HIKER + $C8, $3
-	db SPRITE_HIKER, $7 + 4, $d + 4, $ff, $d3, TRAINER | $9, HIKER + $C8, $4
-	db SPRITE_BALL, $2 + 4, $16 + 4, $ff, $ff, ITEM | $a, TM_19
+	db $a ; objects
+	object SPRITE_BUG_CATCHER, $e, $2, FACE, DOWN, $1, YOUNGSTER + $C8, $5
+	object SPRITE_BUG_CATCHER, $12, $5, FACE, UP, $2, YOUNGSTER + $C8, $6
+	object SPRITE_BLACK_HAIR_BOY_1, $18, $4, FACE, DOWN, $3, JR__TRAINER_M + $C8, $2
+	object SPRITE_LASS, $12, $8, FACE, LEFT, $4, LASS + $C8, $9
+	object SPRITE_BUG_CATCHER, $20, $3, FACE, RIGHT, $5, YOUNGSTER + $C8, $7
+	object SPRITE_LASS, $25, $4, FACE, DOWN, $6, LASS + $C8, $a
+	object SPRITE_HIKER, $8, $4, FACE, LEFT, $7, HIKER + $C8, $2
+	object SPRITE_HIKER, $17, $9, FACE, UP, $8, HIKER + $C8, $3
+	object SPRITE_HIKER, $d, $7, FACE, LEFT, $9, HIKER + $C8, $4
+	object SPRITE_BALL, $16, $2, FACE, STAY, $a, TM_19
 
 	; warp-to
 	EVENT_DISP ROUTE_25_WIDTH, $3, $2d ; BILLS_HOUSE
--- a/data/mapObjects/route2gate.asm
+++ b/data/mapObjects/route2gate.asm
@@ -9,9 +9,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_OAK_AIDE, $4 + 4, $1 + 4, $ff, $d2, $1 ; person
-	db SPRITE_BUG_CATCHER, $4 + 4, $5 + 4, $fe, $2, $2 ; person
+	db $2 ; objects
+	object SPRITE_OAK_AIDE, $1, $4, FACE, RIGHT, $1 ; person
+	object SPRITE_BUG_CATCHER, $5, $4, WALK, $2, $2 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_2_GATE_WIDTH, $0, $4
--- a/data/mapObjects/route2house.asm
+++ b/data/mapObjects/route2house.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_OAK_AIDE, $4 + 4, $2 + 4, $ff, $d3, $1 ; person
-	db SPRITE_GAMEBOY_KID_COPY, $1 + 4, $4 + 4, $ff, $d0, $2 ; person
+	db $2 ; objects
+	object SPRITE_OAK_AIDE, $2, $4, FACE, LEFT, $1 ; person
+	object SPRITE_GAMEBOY_KID_COPY, $4, $1, FACE, DOWN, $2 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_2_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/route3.asm
+++ b/data/mapObjects/route3.asm
@@ -6,13 +6,13 @@
 	db $1 ; signs
 	db $9, $3b, $a ; Route3Text10
 
-	db $9 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $b + 4, $39 + 4, $ff, $ff, $1 ; person
-	db SPRITE_BUG_CATCHER, $6 + 4, $a + 4, $ff, $d3, TRAINER | $2, BUG_CATCHER + $C8, $4
-	db SPRITE_BUG_CATCHER, $4 + 4, $e + 4, $ff, $d0, TRAINER | $3, YOUNGSTER + $C8, $1
-	db SPRITE_LASS, $9 + 4, $10 + 4, $ff, $d2, TRAINER | $4, LASS + $C8, $1
-	db SPRITE_BUG_CATCHER, $5 + 4, $13 + 4, $ff, $d0, TRAINER | $5, BUG_CATCHER + $C8, $5
-	db SPRITE_LASS, $4 + 4, $17 + 4, $ff, $d2, TRAINER | $6, LASS + $C8, $2
-	db SPRITE_BUG_CATCHER, $9 + 4, $16 + 4, $ff, $d2, TRAINER | $7, YOUNGSTER + $C8, $2
-	db SPRITE_BUG_CATCHER, $6 + 4, $18 + 4, $ff, $d3, TRAINER | $8, BUG_CATCHER + $C8, $6
-	db SPRITE_LASS, $a + 4, $21 + 4, $ff, $d1, TRAINER | $9, LASS + $C8, $3
+	db $9 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $39, $b, FACE, STAY, $1 ; person
+	object SPRITE_BUG_CATCHER, $a, $6, FACE, LEFT, $2, BUG_CATCHER + $C8, $4
+	object SPRITE_BUG_CATCHER, $e, $4, FACE, DOWN, $3, YOUNGSTER + $C8, $1
+	object SPRITE_LASS, $10, $9, FACE, RIGHT, $4, LASS + $C8, $1
+	object SPRITE_BUG_CATCHER, $13, $5, FACE, DOWN, $5, BUG_CATCHER + $C8, $5
+	object SPRITE_LASS, $17, $4, FACE, RIGHT, $6, LASS + $C8, $2
+	object SPRITE_BUG_CATCHER, $16, $9, FACE, RIGHT, $7, YOUNGSTER + $C8, $2
+	object SPRITE_BUG_CATCHER, $18, $6, FACE, LEFT, $8, BUG_CATCHER + $C8, $6
+	object SPRITE_LASS, $21, $a, FACE, UP, $9, LASS + $C8, $3
--- a/data/mapObjects/route4.asm
+++ b/data/mapObjects/route4.asm
@@ -11,10 +11,10 @@
 	db $7, $11, $5 ; Route4Text5
 	db $7, $1b, $6 ; Route4Text6
 
-	db $3 ; people
-	db SPRITE_LASS, $8 + 4, $9 + 4, $fe, $0, $1 ; person
-	db SPRITE_LASS, $3 + 4, $3f + 4, $ff, $d3, TRAINER | $2, LASS + $C8, $4
-	db SPRITE_BALL, $3 + 4, $39 + 4, $ff, $ff, ITEM | $3, TM_04
+	db $3 ; objects
+	object SPRITE_LASS, $9, $8, WALK, $0, $1 ; person
+	object SPRITE_LASS, $3f, $3, FACE, LEFT, $2, LASS + $C8, $4
+	object SPRITE_BALL, $39, $3, FACE, STAY, $3, TM_04
 
 	; warp-to
 	EVENT_DISP ROUTE_4_WIDTH, $5, $b ; MT_MOON_POKECENTER
--- a/data/mapObjects/route5.asm
+++ b/data/mapObjects/route5.asm
@@ -11,7 +11,7 @@
 	db $1 ; signs
 	db $1d, $11, $1 ; Route5Text1
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP ROUTE_5_WIDTH, $1d, $a ; ROUTE_5_GATE
--- a/data/mapObjects/route5gate.asm
+++ b/data/mapObjects/route5gate.asm
@@ -9,8 +9,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $3 + 4, $1 + 4, $ff, $d3, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $1, $3, FACE, LEFT, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_5_GATE_WIDTH, $5, $3
--- a/data/mapObjects/route6.asm
+++ b/data/mapObjects/route6.asm
@@ -10,13 +10,13 @@
 	db $1 ; signs
 	db $f, $13, $7 ; Route6Text7
 
-	db $6 ; people
-	db SPRITE_BLACK_HAIR_BOY_1, $15 + 4, $a + 4, $ff, $d3, TRAINER | $1, JR__TRAINER_M + $C8, $4
-	db SPRITE_LASS, $15 + 4, $b + 4, $ff, $d2, TRAINER | $2, JR__TRAINER_F + $C8, $2
-	db SPRITE_BUG_CATCHER, $f + 4, $0 + 4, $ff, $d3, TRAINER | $3, BUG_CATCHER + $C8, $a
-	db SPRITE_BLACK_HAIR_BOY_1, $1f + 4, $b + 4, $ff, $d2, TRAINER | $4, JR__TRAINER_M + $C8, $5
-	db SPRITE_LASS, $1e + 4, $b + 4, $ff, $d2, TRAINER | $5, JR__TRAINER_F + $C8, $3
-	db SPRITE_BUG_CATCHER, $1a + 4, $13 + 4, $ff, $d2, TRAINER | $6, BUG_CATCHER + $C8, $b
+	db $6 ; objects
+	object SPRITE_BLACK_HAIR_BOY_1, $a, $15, FACE, LEFT, $1, JR__TRAINER_M + $C8, $4
+	object SPRITE_LASS, $b, $15, FACE, RIGHT, $2, JR__TRAINER_F + $C8, $2
+	object SPRITE_BUG_CATCHER, $0, $f, FACE, LEFT, $3, BUG_CATCHER + $C8, $a
+	object SPRITE_BLACK_HAIR_BOY_1, $b, $1f, FACE, RIGHT, $4, JR__TRAINER_M + $C8, $5
+	object SPRITE_LASS, $b, $1e, FACE, RIGHT, $5, JR__TRAINER_F + $C8, $3
+	object SPRITE_BUG_CATCHER, $13, $1a, FACE, RIGHT, $6, BUG_CATCHER + $C8, $b
 
 	; warp-to
 	EVENT_DISP ROUTE_6_WIDTH, $1, $9 ; ROUTE_6_GATE
--- a/data/mapObjects/route6gate.asm
+++ b/data/mapObjects/route6gate.asm
@@ -9,8 +9,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $2 + 4, $6 + 4, $ff, $d2, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $6, $2, FACE, RIGHT, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_6_GATE_WIDTH, $5, $3
--- a/data/mapObjects/route7.asm
+++ b/data/mapObjects/route7.asm
@@ -11,7 +11,7 @@
 	db $1 ; signs
 	db $d, $3, $1 ; Route7Text1
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP ROUTE_7_WIDTH, $9, $12 ; ROUTE_7_GATE
--- a/data/mapObjects/route7gate.asm
+++ b/data/mapObjects/route7gate.asm
@@ -9,8 +9,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $3, $1, FACE, DOWN, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_7_GATE_WIDTH, $3, $0
--- a/data/mapObjects/route8.asm
+++ b/data/mapObjects/route8.asm
@@ -11,16 +11,16 @@
 	db $1 ; signs
 	db $3, $11, $a ; Route8Text10
 
-	db $9 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $5 + 4, $8 + 4, $ff, $d3, TRAINER | $1, SUPER_NERD + $C8, $3
-	db SPRITE_GAMBLER, $9 + 4, $d + 4, $ff, $d1, TRAINER | $2, GAMBLER + $C8, $5
-	db SPRITE_BLACK_HAIR_BOY_2, $6 + 4, $2a + 4, $ff, $d1, TRAINER | $3, SUPER_NERD + $C8, $4
-	db SPRITE_LASS, $3 + 4, $1a + 4, $ff, $d2, TRAINER | $4, LASS + $C8, $d
-	db SPRITE_BLACK_HAIR_BOY_2, $4 + 4, $1a + 4, $ff, $d3, TRAINER | $5, SUPER_NERD + $C8, $5
-	db SPRITE_LASS, $5 + 4, $1a + 4, $ff, $d2, TRAINER | $6, LASS + $C8, $e
-	db SPRITE_LASS, $6 + 4, $1a + 4, $ff, $d3, TRAINER | $7, LASS + $C8, $f
-	db SPRITE_GAMBLER, $d + 4, $2e + 4, $ff, $d0, TRAINER | $8, GAMBLER + $C8, $7
-	db SPRITE_LASS, $c + 4, $33 + 4, $ff, $d2, TRAINER | $9, LASS + $C8, $10
+	db $9 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $8, $5, FACE, LEFT, $1, SUPER_NERD + $C8, $3
+	object SPRITE_GAMBLER, $d, $9, FACE, UP, $2, GAMBLER + $C8, $5
+	object SPRITE_BLACK_HAIR_BOY_2, $2a, $6, FACE, UP, $3, SUPER_NERD + $C8, $4
+	object SPRITE_LASS, $1a, $3, FACE, RIGHT, $4, LASS + $C8, $d
+	object SPRITE_BLACK_HAIR_BOY_2, $1a, $4, FACE, LEFT, $5, SUPER_NERD + $C8, $5
+	object SPRITE_LASS, $1a, $5, FACE, RIGHT, $6, LASS + $C8, $e
+	object SPRITE_LASS, $1a, $6, FACE, LEFT, $7, LASS + $C8, $f
+	object SPRITE_GAMBLER, $2e, $d, FACE, DOWN, $8, GAMBLER + $C8, $7
+	object SPRITE_LASS, $33, $c, FACE, RIGHT, $9, LASS + $C8, $10
 
 	; warp-to
 	EVENT_DISP ROUTE_8_WIDTH, $9, $1 ; ROUTE_8_GATE
--- a/data/mapObjects/route8gate.asm
+++ b/data/mapObjects/route8gate.asm
@@ -9,8 +9,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GUARD, $1 + 4, $2 + 4, $ff, $d0, $1 ; person
+	db $1 ; objects
+	object SPRITE_GUARD, $2, $1, FACE, DOWN, $1 ; person
 
 	; warp-to
 	EVENT_DISP ROUTE_8_GATE_WIDTH, $3, $0
--- a/data/mapObjects/route9.asm
+++ b/data/mapObjects/route9.asm
@@ -6,14 +6,14 @@
 	db $1 ; signs
 	db $7, $19, $b ; Route9Text11
 
-	db $a ; people
-	db SPRITE_LASS, $a + 4, $d + 4, $ff, $d2, TRAINER | $1, JR__TRAINER_F + $C8, $5
-	db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $18 + 4, $ff, $d2, TRAINER | $2, JR__TRAINER_M + $C8, $7
-	db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $1f + 4, $ff, $d3, TRAINER | $3, JR__TRAINER_M + $C8, $8
-	db SPRITE_LASS, $8 + 4, $30 + 4, $ff, $d3, TRAINER | $4, JR__TRAINER_F + $C8, $6
-	db SPRITE_HIKER, $f + 4, $10 + 4, $ff, $d2, TRAINER | $5, HIKER + $C8, $b
-	db SPRITE_HIKER, $3 + 4, $2b + 4, $ff, $d2, TRAINER | $6, HIKER + $C8, $6
-	db SPRITE_BUG_CATCHER, $2 + 4, $16 + 4, $ff, $d0, TRAINER | $7, BUG_CATCHER + $C8, $d
-	db SPRITE_HIKER, $f + 4, $2d + 4, $ff, $d3, TRAINER | $8, HIKER + $C8, $5
-	db SPRITE_BUG_CATCHER, $8 + 4, $28 + 4, $ff, $d3, TRAINER | $9, BUG_CATCHER + $C8, $e
-	db SPRITE_BALL, $f + 4, $a + 4, $ff, $ff, ITEM | $a, TM_30
+	db $a ; objects
+	object SPRITE_LASS, $d, $a, FACE, RIGHT, $1, JR__TRAINER_F + $C8, $5
+	object SPRITE_BLACK_HAIR_BOY_1, $18, $7, FACE, RIGHT, $2, JR__TRAINER_M + $C8, $7
+	object SPRITE_BLACK_HAIR_BOY_1, $1f, $7, FACE, LEFT, $3, JR__TRAINER_M + $C8, $8
+	object SPRITE_LASS, $30, $8, FACE, LEFT, $4, JR__TRAINER_F + $C8, $6
+	object SPRITE_HIKER, $10, $f, FACE, RIGHT, $5, HIKER + $C8, $b
+	object SPRITE_HIKER, $2b, $3, FACE, RIGHT, $6, HIKER + $C8, $6
+	object SPRITE_BUG_CATCHER, $16, $2, FACE, DOWN, $7, BUG_CATCHER + $C8, $d
+	object SPRITE_HIKER, $2d, $f, FACE, LEFT, $8, HIKER + $C8, $5
+	object SPRITE_BUG_CATCHER, $28, $8, FACE, LEFT, $9, BUG_CATCHER + $C8, $e
+	object SPRITE_BALL, $a, $f, FACE, STAY, $a, TM_30
--- a/data/mapObjects/safarizonecenter.asm
+++ b/data/mapObjects/safarizonecenter.asm
@@ -16,8 +16,8 @@
 	db $14, $12, $2 ; SafariZoneCenterText2
 	db $16, $e, $3 ; SafariZoneCenterText3
 
-	db $1 ; people
-	db SPRITE_BALL, $a + 4, $e + 4, $ff, $ff, ITEM | $1, NUGGET
+	db $1 ; objects
+	object SPRITE_BALL, $e, $a, FACE, STAY, $1, NUGGET
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_CENTER_WIDTH, $19, $e ; SAFARI_ZONE_ENTRANCE
--- a/data/mapObjects/safarizoneeast.asm
+++ b/data/mapObjects/safarizoneeast.asm
@@ -13,11 +13,11 @@
 	db $4, $6, $6 ; SafariZoneEastText6
 	db $17, $5, $7 ; SafariZoneEastText7
 
-	db $4 ; people
-	db SPRITE_BALL, $a + 4, $15 + 4, $ff, $ff, ITEM | $1, FULL_RESTORE
-	db SPRITE_BALL, $7 + 4, $3 + 4, $ff, $ff, ITEM | $2, MAX_POTION
-	db SPRITE_BALL, $d + 4, $14 + 4, $ff, $ff, ITEM | $3, CARBOS
-	db SPRITE_BALL, $c + 4, $f + 4, $ff, $ff, ITEM | $4, TM_37
+	db $4 ; objects
+	object SPRITE_BALL, $15, $a, FACE, STAY, $1, FULL_RESTORE
+	object SPRITE_BALL, $3, $7, FACE, STAY, $2, MAX_POTION
+	object SPRITE_BALL, $14, $d, FACE, STAY, $3, CARBOS
+	object SPRITE_BALL, $f, $c, FACE, STAY, $4, TM_37
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_EAST_WIDTH, $4, $0 ; SAFARI_ZONE_NORTH
--- a/data/mapObjects/safarizoneentrance.asm
+++ b/data/mapObjects/safarizoneentrance.asm
@@ -9,9 +9,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_WHITE_PLAYER, $2 + 4, $6 + 4, $ff, $d2, $1 ; person
-	db SPRITE_WHITE_PLAYER, $4 + 4, $1 + 4, $ff, $d3, $2 ; person
+	db $2 ; objects
+	object SPRITE_WHITE_PLAYER, $6, $2, FACE, RIGHT, $1 ; person
+	object SPRITE_WHITE_PLAYER, $1, $4, FACE, LEFT, $2 ; person
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_ENTRANCE_WIDTH, $5, $3
--- a/data/mapObjects/safarizonenorth.asm
+++ b/data/mapObjects/safarizonenorth.asm
@@ -19,9 +19,9 @@
 	db $21, $13, $6 ; SafariZoneNorthText6
 	db $1c, $1a, $7 ; SafariZoneNorthText7
 
-	db $2 ; people
-	db SPRITE_BALL, $1 + 4, $19 + 4, $ff, $ff, ITEM | $1, PROTEIN
-	db SPRITE_BALL, $7 + 4, $13 + 4, $ff, $ff, ITEM | $2, TM_40
+	db $2 ; objects
+	object SPRITE_BALL, $19, $1, FACE, STAY, $1, PROTEIN
+	object SPRITE_BALL, $13, $7, FACE, STAY, $2, TM_40
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_NORTH_WIDTH, $23, $2 ; SAFARI_ZONE_WEST
--- a/data/mapObjects/safarizoneresthouse1.asm
+++ b/data/mapObjects/safarizoneresthouse1.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_GIRL, $2 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_OAK_AIDE, $4 + 4, $1 + 4, $fe, $1, $2 ; person
+	db $2 ; objects
+	object SPRITE_GIRL, $3, $2, FACE, DOWN, $1 ; person
+	object SPRITE_OAK_AIDE, $1, $4, WALK, $1, $2 ; person
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_REST_HOUSE_1_WIDTH, $7, $2 ; SAFARI_ZONE_CENTER
--- a/data/mapObjects/safarizoneresthouse2.asm
+++ b/data/mapObjects/safarizoneresthouse2.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_OAK_AIDE, $4 + 4, $4 + 4, $fe, $0, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $2 + 4, $0 + 4, $ff, $d3, $2 ; person
-	db SPRITE_ERIKA, $2 + 4, $6 + 4, $ff, $d0, $3 ; person
+	db $3 ; objects
+	object SPRITE_OAK_AIDE, $4, $4, WALK, $0, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $0, $2, FACE, LEFT, $2 ; person
+	object SPRITE_ERIKA, $6, $2, FACE, DOWN, $3 ; person
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_REST_HOUSE_2_WIDTH, $7, $2 ; SAFARI_ZONE_WEST
--- a/data/mapObjects/safarizoneresthouse3.asm
+++ b/data/mapObjects/safarizoneresthouse3.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_OAK_AIDE, $3 + 4, $1 + 4, $fe, $1, $1 ; person
-	db SPRITE_ROCKER, $2 + 4, $4 + 4, $ff, $ff, $2 ; person
-	db SPRITE_LAPRAS_GIVER, $2 + 4, $5 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_OAK_AIDE, $1, $3, WALK, $1, $1 ; person
+	object SPRITE_ROCKER, $4, $2, FACE, STAY, $2 ; person
+	object SPRITE_LAPRAS_GIVER, $5, $2, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_REST_HOUSE_3_WIDTH, $7, $2 ; SAFARI_ZONE_EAST
--- a/data/mapObjects/safarizoneresthouse4.asm
+++ b/data/mapObjects/safarizoneresthouse4.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_OAK_AIDE, $3 + 4, $6 + 4, $fe, $2, $1 ; person
-	db SPRITE_WHITE_PLAYER, $4 + 4, $3 + 4, $ff, $ff, $2 ; person
-	db SPRITE_GENTLEMAN, $5 + 4, $1 + 4, $fe, $1, $3 ; person
+	db $3 ; objects
+	object SPRITE_OAK_AIDE, $6, $3, WALK, $2, $1 ; person
+	object SPRITE_WHITE_PLAYER, $3, $4, FACE, STAY, $2 ; person
+	object SPRITE_GENTLEMAN, $1, $5, WALK, $1, $3 ; person
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_REST_HOUSE_4_WIDTH, $7, $2 ; SAFARI_ZONE_NORTH
--- a/data/mapObjects/safarizonesecrethouse.asm
+++ b/data/mapObjects/safarizonesecrethouse.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_FISHER, $3 + 4, $3 + 4, $ff, $d0, $1 ; person
+	db $1 ; objects
+	object SPRITE_FISHER, $3, $3, FACE, DOWN, $1 ; person
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_SECRET_HOUSE_WIDTH, $7, $2 ; SAFARI_ZONE_WEST
--- a/data/mapObjects/safarizonewest.asm
+++ b/data/mapObjects/safarizonewest.asm
@@ -17,11 +17,11 @@
 	db $4, $1a, $7 ; SafariZoneWestText7
 	db $16, $18, $8 ; SafariZoneWestText8
 
-	db $4 ; people
-	db SPRITE_BALL, $14 + 4, $8 + 4, $ff, $ff, ITEM | $1, MAX_POTION
-	db SPRITE_BALL, $7 + 4, $9 + 4, $ff, $ff, ITEM | $2, TM_32
-	db SPRITE_BALL, $12 + 4, $12 + 4, $ff, $ff, ITEM | $3, MAX_REVIVE
-	db SPRITE_BALL, $7 + 4, $13 + 4, $ff, $ff, ITEM | $4, GOLD_TEETH
+	db $4 ; objects
+	object SPRITE_BALL, $8, $14, FACE, STAY, $1, MAX_POTION
+	object SPRITE_BALL, $9, $7, FACE, STAY, $2, TM_32
+	object SPRITE_BALL, $12, $12, FACE, STAY, $3, MAX_REVIVE
+	object SPRITE_BALL, $13, $7, FACE, STAY, $4, GOLD_TEETH
 
 	; warp-to
 	EVENT_DISP SAFARI_ZONE_WEST_WIDTH, $0, $14 ; SAFARI_ZONE_NORTH
--- a/data/mapObjects/saffroncity.asm
+++ b/data/mapObjects/saffroncity.asm
@@ -23,22 +23,22 @@
 	db $1d, $1b, $18 ; SaffronCityText24
 	db $13, $1, $19 ; SaffronCityText25
 
-	db $f ; people
-	db SPRITE_ROCKET, $6 + 4, $7 + 4, $ff, $ff, $1 ; person
-	db SPRITE_ROCKET, $8 + 4, $14 + 4, $fe, $2, $2 ; person
-	db SPRITE_ROCKET, $4 + 4, $22 + 4, $ff, $ff, $3 ; person
-	db SPRITE_ROCKET, $c + 4, $d + 4, $ff, $ff, $4 ; person
-	db SPRITE_ROCKET, $19 + 4, $b + 4, $fe, $2, $5 ; person
-	db SPRITE_ROCKET, $d + 4, $20 + 4, $fe, $2, $6 ; person
-	db SPRITE_ROCKET, $1e + 4, $12 + 4, $fe, $2, $7 ; person
-	db SPRITE_OAK_AIDE, $e + 4, $8 + 4, $fe, $0, $8 ; person
-	db SPRITE_LAPRAS_GIVER, $17 + 4, $17 + 4, $ff, $ff, $9 ; person
-	db SPRITE_ERIKA, $1e + 4, $11 + 4, $fe, $2, $a ; person
-	db SPRITE_GENTLEMAN, $c + 4, $1e + 4, $ff, $d0, $b ; person
-	db SPRITE_BIRD, $c + 4, $1f + 4, $ff, $d0, $c ; person
-	db SPRITE_ROCKER, $8 + 4, $12 + 4, $ff, $d1, $d ; person
-	db SPRITE_ROCKET, $16 + 4, $12 + 4, $ff, $d0, $e ; person
-	db SPRITE_ROCKET, $16 + 4, $13 + 4, $ff, $d0, $f ; person
+	db $f ; objects
+	object SPRITE_ROCKET, $7, $6, FACE, STAY, $1 ; person
+	object SPRITE_ROCKET, $14, $8, WALK, $2, $2 ; person
+	object SPRITE_ROCKET, $22, $4, FACE, STAY, $3 ; person
+	object SPRITE_ROCKET, $d, $c, FACE, STAY, $4 ; person
+	object SPRITE_ROCKET, $b, $19, WALK, $2, $5 ; person
+	object SPRITE_ROCKET, $20, $d, WALK, $2, $6 ; person
+	object SPRITE_ROCKET, $12, $1e, WALK, $2, $7 ; person
+	object SPRITE_OAK_AIDE, $8, $e, WALK, $0, $8 ; person
+	object SPRITE_LAPRAS_GIVER, $17, $17, FACE, STAY, $9 ; person
+	object SPRITE_ERIKA, $11, $1e, WALK, $2, $a ; person
+	object SPRITE_GENTLEMAN, $1e, $c, FACE, DOWN, $b ; person
+	object SPRITE_BIRD, $1f, $c, FACE, DOWN, $c ; person
+	object SPRITE_ROCKER, $12, $8, FACE, UP, $d ; person
+	object SPRITE_ROCKET, $12, $16, FACE, DOWN, $e ; person
+	object SPRITE_ROCKET, $13, $16, FACE, DOWN, $f ; person
 
 	; warp-to
 	EVENT_DISP SAFFRON_CITY_WIDTH, $5, $7 ; COPYCATS_HOUSE_1F
--- a/data/mapObjects/saffrongym.asm
+++ b/data/mapObjects/saffrongym.asm
@@ -37,16 +37,16 @@
 
 	db $0 ; signs
 
-	db $9 ; people
-	db SPRITE_GIRL, $8 + 4, $9 + 4, $ff, $d0, TRAINER | $1, SABRINA + $C8, $1
-	db SPRITE_MEDIUM, $1 + 4, $a + 4, $ff, $d0, TRAINER | $2, CHANNELER + $C8, $16
-	db SPRITE_BUG_CATCHER, $1 + 4, $11 + 4, $ff, $d0, TRAINER | $3, PSYCHIC_TR + $C8, $1
-	db SPRITE_MEDIUM, $7 + 4, $3 + 4, $ff, $d0, TRAINER | $4, CHANNELER + $C8, $17
-	db SPRITE_BUG_CATCHER, $7 + 4, $11 + 4, $ff, $d0, TRAINER | $5, PSYCHIC_TR + $C8, $2
-	db SPRITE_MEDIUM, $d + 4, $3 + 4, $ff, $d0, TRAINER | $6, CHANNELER + $C8, $18
-	db SPRITE_BUG_CATCHER, $d + 4, $11 + 4, $ff, $d0, TRAINER | $7, PSYCHIC_TR + $C8, $3
-	db SPRITE_BUG_CATCHER, $1 + 4, $3 + 4, $ff, $d0, TRAINER | $8, PSYCHIC_TR + $C8, $4
-	db SPRITE_GYM_HELPER, $f + 4, $a + 4, $ff, $d0, $9 ; person
+	db $9 ; objects
+	object SPRITE_GIRL, $9, $8, FACE, DOWN, $1, SABRINA + $C8, $1
+	object SPRITE_MEDIUM, $a, $1, FACE, DOWN, $2, CHANNELER + $C8, $16
+	object SPRITE_BUG_CATCHER, $11, $1, FACE, DOWN, $3, PSYCHIC_TR + $C8, $1
+	object SPRITE_MEDIUM, $3, $7, FACE, DOWN, $4, CHANNELER + $C8, $17
+	object SPRITE_BUG_CATCHER, $11, $7, FACE, DOWN, $5, PSYCHIC_TR + $C8, $2
+	object SPRITE_MEDIUM, $3, $d, FACE, DOWN, $6, CHANNELER + $C8, $18
+	object SPRITE_BUG_CATCHER, $11, $d, FACE, DOWN, $7, PSYCHIC_TR + $C8, $3
+	object SPRITE_BUG_CATCHER, $3, $1, FACE, DOWN, $8, PSYCHIC_TR + $C8, $4
+	object SPRITE_GYM_HELPER, $a, $f, FACE, DOWN, $9 ; person
 
 	; warp-to
 	EVENT_DISP SAFFRON_GYM_WIDTH, $11, $8
--- a/data/mapObjects/saffronhouse1.asm
+++ b/data/mapObjects/saffronhouse1.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_BRUNETTE_GIRL, $3 + 4, $2 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BIRD, $4 + 4, $0 + 4, $fe, $1, $2 ; person
-	db SPRITE_BUG_CATCHER, $1 + 4, $4 + 4, $ff, $d0, $3 ; person
-	db SPRITE_PAPER_SHEET, $3 + 4, $3 + 4, $ff, $ff, $4 ; person
+	db $4 ; objects
+	object SPRITE_BRUNETTE_GIRL, $2, $3, FACE, LEFT, $1 ; person
+	object SPRITE_BIRD, $0, $4, WALK, $1, $2 ; person
+	object SPRITE_BUG_CATCHER, $4, $1, FACE, DOWN, $3 ; person
+	object SPRITE_PAPER_SHEET, $3, $3, FACE, STAY, $4 ; person
 
 	; warp-to
 	EVENT_DISP SAFFRON_HOUSE_1_WIDTH, $7, $2
--- a/data/mapObjects/saffronhouse2.asm
+++ b/data/mapObjects/saffronhouse2.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_FISHER, $3 + 4, $5 + 4, $ff, $d2, $1 ; person
+	db $1 ; objects
+	object SPRITE_FISHER, $5, $3, FACE, RIGHT, $1 ; person
 
 	; warp-to
 	EVENT_DISP SAFFRON_HOUSE_2_WIDTH, $7, $2
--- a/data/mapObjects/saffronmart.asm
+++ b/data/mapObjects/saffronmart.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $4 + 4, $ff, $ff, $2 ; person
-	db SPRITE_LASS, $5 + 4, $6 + 4, $fe, $0, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_2, $4, $2, FACE, STAY, $2 ; person
+	object SPRITE_LASS, $6, $5, WALK, $0, $3 ; person
 
 	; warp-to
 	EVENT_DISP SAFFRON_MART_WIDTH, $7, $3
--- a/data/mapObjects/saffronpokecenter.asm
+++ b/data/mapObjects/saffronpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_FOULARD_WOMAN, $5 + 4, $5 + 4, $ff, $ff, $2 ; person
-	db SPRITE_GENTLEMAN, $3 + 4, $8 + 4, $ff, $d0, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_FOULARD_WOMAN, $5, $5, FACE, STAY, $2 ; person
+	object SPRITE_GENTLEMAN, $8, $3, FACE, DOWN, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP SAFFRON_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/school.asm
+++ b/data/mapObjects/school.asm
@@ -7,9 +7,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_BRUNETTE_GIRL, $5 + 4, $3 + 4, $ff, $d1, $1 ; person
-	db SPRITE_LASS, $1 + 4, $4 + 4, $ff, $d0, $2 ; person
+	db $2 ; objects
+	object SPRITE_BRUNETTE_GIRL, $3, $5, FACE, UP, $1 ; person
+	object SPRITE_LASS, $4, $1, FACE, DOWN, $2 ; person
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_SCHOOL_WIDTH, $7, $2
--- a/data/mapObjects/seafoamislands1.asm
+++ b/data/mapObjects/seafoamislands1.asm
@@ -12,9 +12,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_BOULDER, $a + 4, $12 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $1 ; person
-	db SPRITE_BOULDER, $7 + 4, $1a + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $2 ; person
+	db $2 ; objects
+	object SPRITE_BOULDER, $12, $a, FACE, BOULDER_MOVEMENT_BYTE_2, $1 ; person
+	object SPRITE_BOULDER, $1a, $7, FACE, BOULDER_MOVEMENT_BYTE_2, $2 ; person
 
 	; warp-to
 	EVENT_DISP SEAFOAM_ISLANDS_1_WIDTH, $11, $4
--- a/data/mapObjects/seafoamislands2.asm
+++ b/data/mapObjects/seafoamislands2.asm
@@ -12,9 +12,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_BOULDER, $6 + 4, $11 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $1 ; person
-	db SPRITE_BOULDER, $6 + 4, $16 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $2 ; person
+	db $2 ; objects
+	object SPRITE_BOULDER, $11, $6, FACE, BOULDER_MOVEMENT_BYTE_2, $1 ; person
+	object SPRITE_BOULDER, $16, $6, FACE, BOULDER_MOVEMENT_BYTE_2, $2 ; person
 
 	; warp-to
 	EVENT_DISP SEAFOAM_ISLANDS_2_WIDTH, $2, $4 ; SEAFOAM_ISLANDS_3
--- a/data/mapObjects/seafoamislands3.asm
+++ b/data/mapObjects/seafoamislands3.asm
@@ -12,9 +12,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_BOULDER, $6 + 4, $12 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $1 ; person
-	db SPRITE_BOULDER, $6 + 4, $17 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $2 ; person
+	db $2 ; objects
+	object SPRITE_BOULDER, $12, $6, FACE, BOULDER_MOVEMENT_BYTE_2, $1 ; person
+	object SPRITE_BOULDER, $17, $6, FACE, BOULDER_MOVEMENT_BYTE_2, $2 ; person
 
 	; warp-to
 	EVENT_DISP SEAFOAM_ISLANDS_3_WIDTH, $3, $5 ; SEAFOAM_ISLANDS_2
--- a/data/mapObjects/seafoamislands4.asm
+++ b/data/mapObjects/seafoamislands4.asm
@@ -12,13 +12,13 @@
 
 	db $0 ; signs
 
-	db $6 ; people
-	db SPRITE_BOULDER, $e + 4, $5 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $1 ; person
-	db SPRITE_BOULDER, $f + 4, $3 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $2 ; person
-	db SPRITE_BOULDER, $e + 4, $8 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $3 ; person
-	db SPRITE_BOULDER, $e + 4, $9 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $4 ; person
-	db SPRITE_BOULDER, $6 + 4, $12 + 4, $ff, $ff, $5 ; person
-	db SPRITE_BOULDER, $6 + 4, $13 + 4, $ff, $ff, $6 ; person
+	db $6 ; objects
+	object SPRITE_BOULDER, $5, $e, FACE, BOULDER_MOVEMENT_BYTE_2, $1 ; person
+	object SPRITE_BOULDER, $3, $f, FACE, BOULDER_MOVEMENT_BYTE_2, $2 ; person
+	object SPRITE_BOULDER, $8, $e, FACE, BOULDER_MOVEMENT_BYTE_2, $3 ; person
+	object SPRITE_BOULDER, $9, $e, FACE, BOULDER_MOVEMENT_BYTE_2, $4 ; person
+	object SPRITE_BOULDER, $12, $6, FACE, STAY, $5 ; person
+	object SPRITE_BOULDER, $13, $6, FACE, STAY, $6 ; person
 
 	; warp-to
 	EVENT_DISP SEAFOAM_ISLANDS_4_WIDTH, $c, $5 ; SEAFOAM_ISLANDS_3
--- a/data/mapObjects/seafoamislands5.asm
+++ b/data/mapObjects/seafoamislands5.asm
@@ -11,10 +11,10 @@
 	db $f, $9, $4 ; SeafoamIslands5Text4
 	db $1, $17, $5 ; SeafoamIslands5Text5
 
-	db $3 ; people
-	db SPRITE_BOULDER, $f + 4, $4 + 4, $ff, $ff, $1 ; person
-	db SPRITE_BOULDER, $f + 4, $5 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BIRD, $1 + 4, $6 + 4, $ff, $d0, TRAINER | $3, ARTICUNO, 50
+	db $3 ; objects
+	object SPRITE_BOULDER, $4, $f, FACE, STAY, $1 ; person
+	object SPRITE_BOULDER, $5, $f, FACE, STAY, $2 ; person
+	object SPRITE_BIRD, $6, $1, FACE, DOWN, $3, ARTICUNO, 50
 
 	; warp-to
 	EVENT_DISP SEAFOAM_ISLANDS_5_WIDTH, $11, $14 ; SEAFOAM_ISLANDS_4
--- a/data/mapObjects/silphco1.asm
+++ b/data/mapObjects/silphco1.asm
@@ -10,8 +10,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $4 + 4, $ff, $d0, $1 ; person
+	db $1 ; objects
+	object SPRITE_CABLE_CLUB_WOMAN, $4, $2, FACE, DOWN, $1 ; person
 
 	; warp-to
 	EVENT_DISP SILPH_CO_1F_WIDTH, $11, $a
--- a/data/mapObjects/silphco10.asm
+++ b/data/mapObjects/silphco10.asm
@@ -11,13 +11,13 @@
 
 	db $0 ; signs
 
-	db $6 ; people
-	db SPRITE_ROCKET, $9 + 4, $1 + 4, $ff, $d3, TRAINER | $1, ROCKET + $C8, $27
-	db SPRITE_OAK_AIDE, $2 + 4, $a + 4, $ff, $d2, TRAINER | $2, SCIENTIST + $C8, $b
-	db SPRITE_ERIKA, $f + 4, $9 + 4, $fe, $0, $3 ; person
-	db SPRITE_BALL, $c + 4, $2 + 4, $ff, $ff, ITEM | $4, TM_26
-	db SPRITE_BALL, $e + 4, $4 + 4, $ff, $ff, ITEM | $5, RARE_CANDY
-	db SPRITE_BALL, $b + 4, $5 + 4, $ff, $ff, ITEM | $6, CARBOS
+	db $6 ; objects
+	object SPRITE_ROCKET, $1, $9, FACE, LEFT, $1, ROCKET + $C8, $27
+	object SPRITE_OAK_AIDE, $a, $2, FACE, RIGHT, $2, SCIENTIST + $C8, $b
+	object SPRITE_ERIKA, $9, $f, WALK, $0, $3 ; person
+	object SPRITE_BALL, $2, $c, FACE, STAY, $4, TM_26
+	object SPRITE_BALL, $4, $e, FACE, STAY, $5, RARE_CANDY
+	object SPRITE_BALL, $5, $b, FACE, STAY, $6, CARBOS
 
 	; warp-to
 	EVENT_DISP SILPH_CO_10F_WIDTH, $0, $8 ; SILPH_CO_9F
--- a/data/mapObjects/silphco11.asm
+++ b/data/mapObjects/silphco11.asm
@@ -9,12 +9,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_MR_MASTERBALL, $5 + 4, $7 + 4, $ff, $d0, $1 ; person
-	db SPRITE_FOULARD_WOMAN, $5 + 4, $a + 4, $ff, $d0, $2 ; person
-	db SPRITE_GIOVANNI, $9 + 4, $6 + 4, $ff, $d0, TRAINER | $3, GIOVANNI + $C8, $2
-	db SPRITE_ROCKET, $10 + 4, $3 + 4, $ff, $d1, TRAINER | $4, ROCKET + $C8, $29
-	db SPRITE_ROCKET, $9 + 4, $f + 4, $ff, $d1, TRAINER | $5, ROCKET + $C8, $28
+	db $5 ; objects
+	object SPRITE_MR_MASTERBALL, $7, $5, FACE, DOWN, $1 ; person
+	object SPRITE_FOULARD_WOMAN, $a, $5, FACE, DOWN, $2 ; person
+	object SPRITE_GIOVANNI, $6, $9, FACE, DOWN, $3, GIOVANNI + $C8, $2
+	object SPRITE_ROCKET, $3, $10, FACE, UP, $4, ROCKET + $C8, $29
+	object SPRITE_ROCKET, $f, $9, FACE, UP, $5, ROCKET + $C8, $28
 
 	; warp-to
 	EVENT_DISP SILPH_CO_11F_WIDTH, $0, $9 ; SILPH_CO_10F
--- a/data/mapObjects/silphco2.asm
+++ b/data/mapObjects/silphco2.asm
@@ -12,12 +12,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_ERIKA, $1 + 4, $a + 4, $ff, $d1, $1 ; person
-	db SPRITE_OAK_AIDE, $c + 4, $5 + 4, $ff, $d0, TRAINER | $2, SCIENTIST + $C8, $2
-	db SPRITE_OAK_AIDE, $d + 4, $18 + 4, $ff, $d2, TRAINER | $3, SCIENTIST + $C8, $3
-	db SPRITE_ROCKET, $b + 4, $10 + 4, $ff, $d1, TRAINER | $4, ROCKET + $C8, $17
-	db SPRITE_ROCKET, $7 + 4, $18 + 4, $ff, $d1, TRAINER | $5, ROCKET + $C8, $18
+	db $5 ; objects
+	object SPRITE_ERIKA, $a, $1, FACE, UP, $1 ; person
+	object SPRITE_OAK_AIDE, $5, $c, FACE, DOWN, $2, SCIENTIST + $C8, $2
+	object SPRITE_OAK_AIDE, $18, $d, FACE, RIGHT, $3, SCIENTIST + $C8, $3
+	object SPRITE_ROCKET, $10, $b, FACE, UP, $4, ROCKET + $C8, $17
+	object SPRITE_ROCKET, $18, $7, FACE, UP, $5, ROCKET + $C8, $18
 
 	; warp-to
 	EVENT_DISP SILPH_CO_2F_WIDTH, $0, $18 ; SILPH_CO_1F
--- a/data/mapObjects/silphco3.asm
+++ b/data/mapObjects/silphco3.asm
@@ -15,11 +15,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_LAPRAS_GIVER, $8 + 4, $18 + 4, $ff, $ff, $1 ; person
-	db SPRITE_ROCKET, $7 + 4, $14 + 4, $ff, $d2, TRAINER | $2, ROCKET + $C8, $19
-	db SPRITE_OAK_AIDE, $9 + 4, $7 + 4, $ff, $d0, TRAINER | $3, SCIENTIST + $C8, $4
-	db SPRITE_BALL, $5 + 4, $8 + 4, $ff, $ff, ITEM | $4, HYPER_POTION
+	db $4 ; objects
+	object SPRITE_LAPRAS_GIVER, $18, $8, FACE, STAY, $1 ; person
+	object SPRITE_ROCKET, $14, $7, FACE, RIGHT, $2, ROCKET + $C8, $19
+	object SPRITE_OAK_AIDE, $7, $9, FACE, DOWN, $3, SCIENTIST + $C8, $4
+	object SPRITE_BALL, $8, $5, FACE, STAY, $4, HYPER_POTION
 
 	; warp-to
 	EVENT_DISP SILPH_CO_3F_WIDTH, $0, $1a ; SILPH_CO_2F
--- a/data/mapObjects/silphco4.asm
+++ b/data/mapObjects/silphco4.asm
@@ -12,14 +12,14 @@
 
 	db $0 ; signs
 
-	db $7 ; people
-	db SPRITE_LAPRAS_GIVER, $2 + 4, $6 + 4, $ff, $ff, $1 ; person
-	db SPRITE_ROCKET, $e + 4, $9 + 4, $ff, $d3, TRAINER | $2, ROCKET + $C8, $1a
-	db SPRITE_OAK_AIDE, $6 + 4, $e + 4, $ff, $d2, TRAINER | $3, SCIENTIST + $C8, $5
-	db SPRITE_ROCKET, $a + 4, $1a + 4, $ff, $d1, TRAINER | $4, ROCKET + $C8, $1b
-	db SPRITE_BALL, $9 + 4, $3 + 4, $ff, $ff, ITEM | $5, FULL_HEAL
-	db SPRITE_BALL, $7 + 4, $4 + 4, $ff, $ff, ITEM | $6, MAX_REVIVE
-	db SPRITE_BALL, $8 + 4, $5 + 4, $ff, $ff, ITEM | $7, ESCAPE_ROPE
+	db $7 ; objects
+	object SPRITE_LAPRAS_GIVER, $6, $2, FACE, STAY, $1 ; person
+	object SPRITE_ROCKET, $9, $e, FACE, LEFT, $2, ROCKET + $C8, $1a
+	object SPRITE_OAK_AIDE, $e, $6, FACE, RIGHT, $3, SCIENTIST + $C8, $5
+	object SPRITE_ROCKET, $1a, $a, FACE, UP, $4, ROCKET + $C8, $1b
+	object SPRITE_BALL, $3, $9, FACE, STAY, $5, FULL_HEAL
+	object SPRITE_BALL, $4, $7, FACE, STAY, $6, MAX_REVIVE
+	object SPRITE_BALL, $5, $8, FACE, STAY, $7, ESCAPE_ROPE
 
 	; warp-to
 	EVENT_DISP SILPH_CO_4F_WIDTH, $0, $18 ; SILPH_CO_3F
--- a/data/mapObjects/silphco5.asm
+++ b/data/mapObjects/silphco5.asm
@@ -12,18 +12,18 @@
 
 	db $0 ; signs
 
-	db $b ; people
-	db SPRITE_LAPRAS_GIVER, $9 + 4, $d + 4, $ff, $ff, $1 ; person
-	db SPRITE_ROCKET, $10 + 4, $8 + 4, $ff, $d3, TRAINER | $2, ROCKET + $C8, $1c
-	db SPRITE_OAK_AIDE, $3 + 4, $8 + 4, $ff, $d3, TRAINER | $3, SCIENTIST + $C8, $6
-	db SPRITE_ROCKER, $a + 4, $12 + 4, $ff, $d1, TRAINER | $4, JUGGLER + $C8, $1
-	db SPRITE_ROCKET, $4 + 4, $1c + 4, $ff, $d1, TRAINER | $5, ROCKET + $C8, $1d
-	db SPRITE_BALL, $d + 4, $2 + 4, $ff, $ff, ITEM | $6, TM_09
-	db SPRITE_BALL, $6 + 4, $4 + 4, $ff, $ff, ITEM | $7, PROTEIN
-	db SPRITE_BALL, $10 + 4, $15 + 4, $ff, $ff, ITEM | $8, CARD_KEY
-	db SPRITE_CLIPBOARD, $c + 4, $16 + 4, $ff, $ff, $9 ; person
-	db SPRITE_CLIPBOARD, $a + 4, $19 + 4, $ff, $ff, $a ; person
-	db SPRITE_CLIPBOARD, $6 + 4, $18 + 4, $ff, $ff, $b ; person
+	db $b ; objects
+	object SPRITE_LAPRAS_GIVER, $d, $9, FACE, STAY, $1 ; person
+	object SPRITE_ROCKET, $8, $10, FACE, LEFT, $2, ROCKET + $C8, $1c
+	object SPRITE_OAK_AIDE, $8, $3, FACE, LEFT, $3, SCIENTIST + $C8, $6
+	object SPRITE_ROCKER, $12, $a, FACE, UP, $4, JUGGLER + $C8, $1
+	object SPRITE_ROCKET, $1c, $4, FACE, UP, $5, ROCKET + $C8, $1d
+	object SPRITE_BALL, $2, $d, FACE, STAY, $6, TM_09
+	object SPRITE_BALL, $4, $6, FACE, STAY, $7, PROTEIN
+	object SPRITE_BALL, $15, $10, FACE, STAY, $8, CARD_KEY
+	object SPRITE_CLIPBOARD, $16, $c, FACE, STAY, $9 ; person
+	object SPRITE_CLIPBOARD, $19, $a, FACE, STAY, $a ; person
+	object SPRITE_CLIPBOARD, $18, $6, FACE, STAY, $b ; person
 
 	; warp-to
 	EVENT_DISP SILPH_CO_5F_WIDTH, $0, $18 ; SILPH_CO_6F
--- a/data/mapObjects/silphco6.asm
+++ b/data/mapObjects/silphco6.asm
@@ -10,17 +10,17 @@
 
 	db $0 ; signs
 
-	db $a ; people
-	db SPRITE_LAPRAS_GIVER, $6 + 4, $a + 4, $ff, $ff, $1 ; person
-	db SPRITE_LAPRAS_GIVER, $6 + 4, $14 + 4, $ff, $ff, $2 ; person
-	db SPRITE_ERIKA, $6 + 4, $15 + 4, $ff, $d0, $3 ; person
-	db SPRITE_ERIKA, $a + 4, $b + 4, $ff, $d3, $4 ; person
-	db SPRITE_LAPRAS_GIVER, $d + 4, $12 + 4, $ff, $d1, $5 ; person
-	db SPRITE_ROCKET, $3 + 4, $11 + 4, $ff, $d3, TRAINER | $6, ROCKET + $C8, $1e
-	db SPRITE_OAK_AIDE, $8 + 4, $7 + 4, $ff, $d0, TRAINER | $7, SCIENTIST + $C8, $7
-	db SPRITE_ROCKET, $f + 4, $e + 4, $ff, $d2, TRAINER | $8, ROCKET + $C8, $1f
-	db SPRITE_BALL, $c + 4, $3 + 4, $ff, $ff, ITEM | $9, HP_UP
-	db SPRITE_BALL, $f + 4, $2 + 4, $ff, $ff, ITEM | $a, X_ACCURACY
+	db $a ; objects
+	object SPRITE_LAPRAS_GIVER, $a, $6, FACE, STAY, $1 ; person
+	object SPRITE_LAPRAS_GIVER, $14, $6, FACE, STAY, $2 ; person
+	object SPRITE_ERIKA, $15, $6, FACE, DOWN, $3 ; person
+	object SPRITE_ERIKA, $b, $a, FACE, LEFT, $4 ; person
+	object SPRITE_LAPRAS_GIVER, $12, $d, FACE, UP, $5 ; person
+	object SPRITE_ROCKET, $11, $3, FACE, LEFT, $6, ROCKET + $C8, $1e
+	object SPRITE_OAK_AIDE, $7, $8, FACE, DOWN, $7, SCIENTIST + $C8, $7
+	object SPRITE_ROCKET, $e, $f, FACE, RIGHT, $8, ROCKET + $C8, $1f
+	object SPRITE_BALL, $3, $c, FACE, STAY, $9, HP_UP
+	object SPRITE_BALL, $2, $f, FACE, STAY, $a, X_ACCURACY
 
 	; warp-to
 	EVENT_DISP SILPH_CO_6F_WIDTH, $0, $10 ; SILPH_CO_7F
--- a/data/mapObjects/silphco7.asm
+++ b/data/mapObjects/silphco7.asm
@@ -11,18 +11,18 @@
 
 	db $0 ; signs
 
-	db $b ; people
-	db SPRITE_LAPRAS_GIVER, $5 + 4, $1 + 4, $ff, $ff, $1 ; person
-	db SPRITE_LAPRAS_GIVER, $d + 4, $d + 4, $ff, $d1, $2 ; person
-	db SPRITE_LAPRAS_GIVER, $a + 4, $7 + 4, $ff, $ff, $3 ; person
-	db SPRITE_ERIKA, $8 + 4, $a + 4, $ff, $ff, $4 ; person
-	db SPRITE_ROCKET, $1 + 4, $d + 4, $ff, $d0, TRAINER | $5, ROCKET + $C8, $20
-	db SPRITE_OAK_AIDE, $d + 4, $2 + 4, $ff, $d0, TRAINER | $6, SCIENTIST + $C8, $8
-	db SPRITE_ROCKET, $2 + 4, $14 + 4, $ff, $d2, TRAINER | $7, ROCKET + $C8, $21
-	db SPRITE_ROCKET, $e + 4, $13 + 4, $ff, $d3, TRAINER | $8, ROCKET + $C8, $22
-	db SPRITE_BLUE, $7 + 4, $3 + 4, $ff, $d1, $9 ; person
-	db SPRITE_BALL, $9 + 4, $1 + 4, $ff, $ff, ITEM | $a, CALCIUM
-	db SPRITE_BALL, $b + 4, $18 + 4, $ff, $ff, ITEM | $b, TM_03
+	db $b ; objects
+	object SPRITE_LAPRAS_GIVER, $1, $5, FACE, STAY, $1 ; person
+	object SPRITE_LAPRAS_GIVER, $d, $d, FACE, UP, $2 ; person
+	object SPRITE_LAPRAS_GIVER, $7, $a, FACE, STAY, $3 ; person
+	object SPRITE_ERIKA, $a, $8, FACE, STAY, $4 ; person
+	object SPRITE_ROCKET, $d, $1, FACE, DOWN, $5, ROCKET + $C8, $20
+	object SPRITE_OAK_AIDE, $2, $d, FACE, DOWN, $6, SCIENTIST + $C8, $8
+	object SPRITE_ROCKET, $14, $2, FACE, RIGHT, $7, ROCKET + $C8, $21
+	object SPRITE_ROCKET, $13, $e, FACE, LEFT, $8, ROCKET + $C8, $22
+	object SPRITE_BLUE, $3, $7, FACE, UP, $9 ; person
+	object SPRITE_BALL, $1, $9, FACE, STAY, $a, CALCIUM
+	object SPRITE_BALL, $18, $b, FACE, STAY, $b, TM_03
 
 	; warp-to
 	EVENT_DISP SILPH_CO_7F_WIDTH, $0, $10 ; SILPH_CO_8F
--- a/data/mapObjects/silphco8.asm
+++ b/data/mapObjects/silphco8.asm
@@ -12,11 +12,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_LAPRAS_GIVER, $2 + 4, $4 + 4, $ff, $ff, $1 ; person
-	db SPRITE_ROCKET, $2 + 4, $13 + 4, $ff, $d2, TRAINER | $2, ROCKET + $C8, $23
-	db SPRITE_OAK_AIDE, $2 + 4, $a + 4, $ff, $d0, TRAINER | $3, SCIENTIST + $C8, $9
-	db SPRITE_ROCKET, $f + 4, $c + 4, $ff, $d3, TRAINER | $4, ROCKET + $C8, $24
+	db $4 ; objects
+	object SPRITE_LAPRAS_GIVER, $4, $2, FACE, STAY, $1 ; person
+	object SPRITE_ROCKET, $13, $2, FACE, RIGHT, $2, ROCKET + $C8, $23
+	object SPRITE_OAK_AIDE, $a, $2, FACE, DOWN, $3, SCIENTIST + $C8, $9
+	object SPRITE_ROCKET, $c, $f, FACE, LEFT, $4, ROCKET + $C8, $24
 
 	; warp-to
 	EVENT_DISP SILPH_CO_8F_WIDTH, $0, $10 ; SILPH_CO_9F
--- a/data/mapObjects/silphco9.asm
+++ b/data/mapObjects/silphco9.asm
@@ -10,11 +10,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $e + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_ROCKET, $4 + 4, $2 + 4, $ff, $d1, TRAINER | $2, ROCKET + $C8, $25
-	db SPRITE_OAK_AIDE, $d + 4, $15 + 4, $ff, $d0, TRAINER | $3, SCIENTIST + $C8, $a
-	db SPRITE_ROCKET, $10 + 4, $d + 4, $ff, $d1, TRAINER | $4, ROCKET + $C8, $26
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $e, FACE, DOWN, $1 ; person
+	object SPRITE_ROCKET, $2, $4, FACE, UP, $2, ROCKET + $C8, $25
+	object SPRITE_OAK_AIDE, $15, $d, FACE, DOWN, $3, SCIENTIST + $C8, $a
+	object SPRITE_ROCKET, $d, $10, FACE, UP, $4, ROCKET + $C8, $26
 
 	; warp-to
 	EVENT_DISP SILPH_CO_9F_WIDTH, $0, $e ; SILPH_CO_10F
--- a/data/mapObjects/silphcoelevator.asm
+++ b/data/mapObjects/silphcoelevator.asm
@@ -8,7 +8,7 @@
 	db $1 ; signs
 	db $0, $3, $1 ; SilphCoElevatorText1
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP SILPH_CO_ELEVATOR_WIDTH, $3, $1
--- a/data/mapObjects/ssanne1.asm
+++ b/data/mapObjects/ssanne1.asm
@@ -16,9 +16,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_WAITER, $6 + 4, $c + 4, $fe, $2, $1 ; person
-	db SPRITE_SAILOR, $5 + 4, $1b + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_WAITER, $c, $6, WALK, $2, $1 ; person
+	object SPRITE_SAILOR, $1b, $5, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP SS_ANNE_1_WIDTH, $0, $1a ; VERMILION_DOCK
--- a/data/mapObjects/ssanne10.asm
+++ b/data/mapObjects/ssanne10.asm
@@ -15,18 +15,18 @@
 
 	db $0 ; signs
 
-	db $b ; people
-	db SPRITE_SAILOR, $d + 4, $0 + 4, $ff, $d0, TRAINER | $1, SAILOR + $C8, $3
-	db SPRITE_SAILOR, $b + 4, $2 + 4, $ff, $d0, TRAINER | $2, SAILOR + $C8, $4
-	db SPRITE_SAILOR, $3 + 4, $c + 4, $ff, $d2, TRAINER | $3, SAILOR + $C8, $5
-	db SPRITE_SAILOR, $2 + 4, $16 + 4, $ff, $d0, TRAINER | $4, SAILOR + $C8, $6
-	db SPRITE_SAILOR, $2 + 4, $0 + 4, $ff, $d3, TRAINER | $5, SAILOR + $C8, $7
-	db SPRITE_FISHER2, $4 + 4, $0 + 4, $ff, $d3, TRAINER | $6, FISHER + $C8, $2
-	db SPRITE_BLACK_HAIR_BOY_2, $d + 4, $a + 4, $ff, $d3, $7 ; person
-	db SPRITE_SLOWBRO, $c + 4, $b + 4, $ff, $ff, $8 ; person
-	db SPRITE_BALL, $2 + 4, $14 + 4, $ff, $ff, ITEM | $9, ETHER
-	db SPRITE_BALL, $2 + 4, $a + 4, $ff, $ff, ITEM | $a, TM_44
-	db SPRITE_BALL, $b + 4, $c + 4, $ff, $ff, ITEM | $b, MAX_POTION
+	db $b ; objects
+	object SPRITE_SAILOR, $0, $d, FACE, DOWN, $1, SAILOR + $C8, $3
+	object SPRITE_SAILOR, $2, $b, FACE, DOWN, $2, SAILOR + $C8, $4
+	object SPRITE_SAILOR, $c, $3, FACE, RIGHT, $3, SAILOR + $C8, $5
+	object SPRITE_SAILOR, $16, $2, FACE, DOWN, $4, SAILOR + $C8, $6
+	object SPRITE_SAILOR, $0, $2, FACE, LEFT, $5, SAILOR + $C8, $7
+	object SPRITE_FISHER2, $0, $4, FACE, LEFT, $6, FISHER + $C8, $2
+	object SPRITE_BLACK_HAIR_BOY_2, $a, $d, FACE, LEFT, $7 ; person
+	object SPRITE_SLOWBRO, $b, $c, FACE, STAY, $8 ; person
+	object SPRITE_BALL, $14, $2, FACE, STAY, $9, ETHER
+	object SPRITE_BALL, $a, $2, FACE, STAY, $a, TM_44
+	object SPRITE_BALL, $c, $b, FACE, STAY, $b, MAX_POTION
 
 	; warp-to
 	EVENT_DISP SS_ANNE_10_WIDTH, $5, $2 ; SS_ANNE_4
--- a/data/mapObjects/ssanne2.asm
+++ b/data/mapObjects/ssanne2.asm
@@ -14,9 +14,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_WAITER, $7 + 4, $3 + 4, $fe, $1, $1 ; person
-	db SPRITE_BLUE, $4 + 4, $24 + 4, $ff, $d0, TRAINER | $2, SONY1 + $C8, $1
+	db $2 ; objects
+	object SPRITE_WAITER, $3, $7, WALK, $1, $1 ; person
+	object SPRITE_BLUE, $24, $4, FACE, DOWN, $2, SONY1 + $C8, $1
 
 	; warp-to
 	EVENT_DISP SS_ANNE_2_WIDTH, $b, $9 ; SS_ANNE_9
--- a/data/mapObjects/ssanne3.asm
+++ b/data/mapObjects/ssanne3.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_SAILOR, $3 + 4, $9 + 4, $fe, $2, $1 ; person
+	db $1 ; objects
+	object SPRITE_SAILOR, $9, $3, WALK, $2, $1 ; person
 
 	; warp-to
 	EVENT_DISP SS_ANNE_3_WIDTH, $3, $0 ; SS_ANNE_5
--- a/data/mapObjects/ssanne4.asm
+++ b/data/mapObjects/ssanne4.asm
@@ -11,7 +11,7 @@
 
 	db $0 ; signs
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP SS_ANNE_4_WIDTH, $3, $17 ; SS_ANNE_10
--- a/data/mapObjects/ssanne5.asm
+++ b/data/mapObjects/ssanne5.asm
@@ -7,12 +7,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $5 + 4, $ff, $d1, $1 ; person
-	db SPRITE_SAILOR, $9 + 4, $4 + 4, $ff, $ff, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $b + 4, $7 + 4, $ff, $ff, $3 ; person
-	db SPRITE_SAILOR, $4 + 4, $4 + 4, $ff, $d0, TRAINER | $4, SAILOR + $C8, $1
-	db SPRITE_SAILOR, $8 + 4, $a + 4, $ff, $d1, TRAINER | $5, SAILOR + $C8, $2
+	db $5 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $5, $2, FACE, UP, $1 ; person
+	object SPRITE_SAILOR, $4, $9, FACE, STAY, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $7, $b, FACE, STAY, $3 ; person
+	object SPRITE_SAILOR, $4, $4, FACE, DOWN, $4, SAILOR + $C8, $1
+	object SPRITE_SAILOR, $a, $8, FACE, UP, $5, SAILOR + $C8, $2
 
 	; warp-to
 	EVENT_DISP SS_ANNE_5_WIDTH, $6, $d ; SS_ANNE_3
--- a/data/mapObjects/ssanne6.asm
+++ b/data/mapObjects/ssanne6.asm
@@ -6,14 +6,14 @@
 
 	db $0 ; signs
 
-	db $7 ; people
-	db SPRITE_COOK, $8 + 4, $1 + 4, $fe, $1, $1 ; person
-	db SPRITE_COOK, $8 + 4, $5 + 4, $fe, $1, $2 ; person
-	db SPRITE_COOK, $7 + 4, $9 + 4, $fe, $1, $3 ; person
-	db SPRITE_COOK, $6 + 4, $d + 4, $ff, $ff, $4 ; person
-	db SPRITE_COOK, $8 + 4, $d + 4, $ff, $ff, $5 ; person
-	db SPRITE_COOK, $a + 4, $d + 4, $ff, $ff, $6 ; person
-	db SPRITE_COOK, $d + 4, $b + 4, $ff, $d1, $7 ; person
+	db $7 ; objects
+	object SPRITE_COOK, $1, $8, WALK, $1, $1 ; person
+	object SPRITE_COOK, $5, $8, WALK, $1, $2 ; person
+	object SPRITE_COOK, $9, $7, WALK, $1, $3 ; person
+	object SPRITE_COOK, $d, $6, FACE, STAY, $4 ; person
+	object SPRITE_COOK, $d, $8, FACE, STAY, $5 ; person
+	object SPRITE_COOK, $d, $a, FACE, STAY, $6 ; person
+	object SPRITE_COOK, $b, $d, FACE, UP, $7 ; person
 
 	; warp-to
 	EVENT_DISP SS_ANNE_6_WIDTH, $0, $6 ; SS_ANNE_1
--- a/data/mapObjects/ssanne7.asm
+++ b/data/mapObjects/ssanne7.asm
@@ -8,8 +8,8 @@
 	db $1, $4, $2 ; SSAnne7Text2
 	db $2, $1, $3 ; SSAnne7Text3
 
-	db $1 ; people
-	db SPRITE_SS_CAPTAIN, $2 + 4, $4 + 4, $ff, $d1, $1 ; person
+	db $1 ; objects
+	object SPRITE_SS_CAPTAIN, $4, $2, FACE, UP, $1 ; person
 
 	; warp-to
 	EVENT_DISP SS_ANNE_7_WIDTH, $7, $0 ; SS_ANNE_2
--- a/data/mapObjects/ssanne8.asm
+++ b/data/mapObjects/ssanne8.asm
@@ -11,18 +11,18 @@
 
 	db $0 ; signs
 
-	db $b ; people
-	db SPRITE_GENTLEMAN, $3 + 4, $2 + 4, $ff, $d2, TRAINER | $1, GENTLEMAN + $C8, $1
-	db SPRITE_GENTLEMAN, $4 + 4, $b + 4, $ff, $d1, TRAINER | $2, GENTLEMAN + $C8, $2
-	db SPRITE_BUG_CATCHER, $e + 4, $b + 4, $ff, $d1, TRAINER | $3, YOUNGSTER + $C8, $8
-	db SPRITE_LASS, $b + 4, $d + 4, $ff, $d2, TRAINER | $4, LASS + $C8, $b
-	db SPRITE_GIRL, $3 + 4, $16 + 4, $fe, $1, $5 ; person
-	db SPRITE_FAT_BALD_GUY, $e + 4, $0 + 4, $ff, $ff, $6 ; person
-	db SPRITE_LITTLE_GIRL, $b + 4, $2 + 4, $ff, $d0, $7 ; person
-	db SPRITE_CLEFAIRY, $b + 4, $3 + 4, $ff, $d0, $8 ; person
-	db SPRITE_GIRL, $d + 4, $a + 4, $ff, $d3, $9 ; person
-	db SPRITE_BALL, $f + 4, $c + 4, $ff, $ff, ITEM | $a, TM_08
-	db SPRITE_GENTLEMAN, $d + 4, $15 + 4, $fe, $2, $b ; person
+	db $b ; objects
+	object SPRITE_GENTLEMAN, $2, $3, FACE, RIGHT, $1, GENTLEMAN + $C8, $1
+	object SPRITE_GENTLEMAN, $b, $4, FACE, UP, $2, GENTLEMAN + $C8, $2
+	object SPRITE_BUG_CATCHER, $b, $e, FACE, UP, $3, YOUNGSTER + $C8, $8
+	object SPRITE_LASS, $d, $b, FACE, RIGHT, $4, LASS + $C8, $b
+	object SPRITE_GIRL, $16, $3, WALK, $1, $5 ; person
+	object SPRITE_FAT_BALD_GUY, $0, $e, FACE, STAY, $6 ; person
+	object SPRITE_LITTLE_GIRL, $2, $b, FACE, DOWN, $7 ; person
+	object SPRITE_CLEFAIRY, $3, $b, FACE, DOWN, $8 ; person
+	object SPRITE_GIRL, $a, $d, FACE, LEFT, $9 ; person
+	object SPRITE_BALL, $c, $f, FACE, STAY, $a, TM_08
+	object SPRITE_GENTLEMAN, $15, $d, WALK, $2, $b ; person
 
 	; warp-to
 	EVENT_DISP SS_ANNE_8_WIDTH, $0, $0 ; SS_ANNE_1
--- a/data/mapObjects/ssanne9.asm
+++ b/data/mapObjects/ssanne9.asm
@@ -17,20 +17,20 @@
 
 	db $0 ; signs
 
-	db $d ; people
-	db SPRITE_GENTLEMAN, $2 + 4, $a + 4, $ff, $d3, TRAINER | $1, GENTLEMAN + $C8, $3
-	db SPRITE_FISHER2, $4 + 4, $d + 4, $ff, $d2, TRAINER | $2, FISHER + $C8, $1
-	db SPRITE_GENTLEMAN, $e + 4, $0 + 4, $ff, $d3, TRAINER | $3, GENTLEMAN + $C8, $5
-	db SPRITE_LASS, $b + 4, $2 + 4, $ff, $d0, TRAINER | $4, LASS + $C8, $c
-	db SPRITE_GENTLEMAN, $2 + 4, $1 + 4, $ff, $d0, $5 ; person
-	db SPRITE_BALL, $1 + 4, $c + 4, $ff, $ff, ITEM | $6, MAX_ETHER
-	db SPRITE_GENTLEMAN, $2 + 4, $15 + 4, $ff, $d0, $7 ; person
-	db SPRITE_OLD_PERSON, $1 + 4, $16 + 4, $ff, $d0, $8 ; person
-	db SPRITE_BALL, $c + 4, $0 + 4, $ff, $ff, ITEM | $9, RARE_CANDY
-	db SPRITE_GENTLEMAN, $c + 4, $c + 4, $ff, $d0, $a ; person
-	db SPRITE_YOUNG_BOY, $e + 4, $b + 4, $ff, $ff, $b ; person
-	db SPRITE_BRUNETTE_GIRL, $c + 4, $16 + 4, $ff, $d2, $c ; person
-	db SPRITE_FOULARD_WOMAN, $c + 4, $14 + 4, $ff, $d3, $d ; person
+	db $d ; objects
+	object SPRITE_GENTLEMAN, $a, $2, FACE, LEFT, $1, GENTLEMAN + $C8, $3
+	object SPRITE_FISHER2, $d, $4, FACE, RIGHT, $2, FISHER + $C8, $1
+	object SPRITE_GENTLEMAN, $0, $e, FACE, LEFT, $3, GENTLEMAN + $C8, $5
+	object SPRITE_LASS, $2, $b, FACE, DOWN, $4, LASS + $C8, $c
+	object SPRITE_GENTLEMAN, $1, $2, FACE, DOWN, $5 ; person
+	object SPRITE_BALL, $c, $1, FACE, STAY, $6, MAX_ETHER
+	object SPRITE_GENTLEMAN, $15, $2, FACE, DOWN, $7 ; person
+	object SPRITE_OLD_PERSON, $16, $1, FACE, DOWN, $8 ; person
+	object SPRITE_BALL, $0, $c, FACE, STAY, $9, RARE_CANDY
+	object SPRITE_GENTLEMAN, $c, $c, FACE, DOWN, $a ; person
+	object SPRITE_YOUNG_BOY, $b, $e, FACE, STAY, $b ; person
+	object SPRITE_BRUNETTE_GIRL, $16, $c, FACE, RIGHT, $c ; person
+	object SPRITE_FOULARD_WOMAN, $14, $c, FACE, LEFT, $d ; person
 
 	; warp-to
 	EVENT_DISP SS_ANNE_9_WIDTH, $5, $2 ; SS_ANNE_2
--- a/data/mapObjects/tradecenter.asm
+++ b/data/mapObjects/tradecenter.asm
@@ -5,5 +5,5 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_RED, $2 + 4, $2 + 4, $ff, $0, $1 ; person
+	db $1 ; objects
+	object SPRITE_RED, $2, $2, $ff, $0, $1 ; person
--- a/data/mapObjects/undergroundpathentranceroute5.asm
+++ b/data/mapObjects/undergroundpathentranceroute5.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_LITTLE_GIRL, $3 + 4, $2 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_LITTLE_GIRL, $2, $3, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP PATH_ENTRANCE_ROUTE_5_WIDTH, $7, $3
--- a/data/mapObjects/undergroundpathentranceroute6.asm
+++ b/data/mapObjects/undergroundpathentranceroute6.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GIRL, $3 + 4, $2 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_GIRL, $2, $3, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP PATH_ENTRANCE_ROUTE_6_WIDTH, $7, $3
--- a/data/mapObjects/undergroundpathentranceroute7.asm
+++ b/data/mapObjects/undergroundpathentranceroute7.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_FAT_BALD_GUY, $4 + 4, $2 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_FAT_BALD_GUY, $2, $4, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP PATH_ENTRANCE_ROUTE_7_WIDTH, $7, $3
--- a/data/mapObjects/undergroundpathentranceroute7copy.asm
+++ b/data/mapObjects/undergroundpathentranceroute7copy.asm
@@ -8,9 +8,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_GIRL, $2 + 4, $3 + 4, $ff, $ff, $1 ; person
-	db SPRITE_FAT_BALD_GUY, $4 + 4, $2 + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_GIRL, $3, $2, FACE, STAY, $1 ; person
+	object SPRITE_FAT_BALD_GUY, $2, $4, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP PATH_ENTRANCE_ROUTE_7_COPY_WIDTH, $7, $3
--- a/data/mapObjects/undergroundpathentranceroute8.asm
+++ b/data/mapObjects/undergroundpathentranceroute8.asm
@@ -8,8 +8,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_GIRL, $4 + 4, $3 + 4, $ff, $ff, $1 ; person
+	db $1 ; objects
+	object SPRITE_GIRL, $3, $4, FACE, STAY, $1 ; person
 
 	; warp-to
 	EVENT_DISP PATH_ENTRANCE_ROUTE_8_WIDTH, $7, $3
--- a/data/mapObjects/undergroundpathns.asm
+++ b/data/mapObjects/undergroundpathns.asm
@@ -7,7 +7,7 @@
 
 	db $0 ; signs
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP UNDERGROUND_PATH_NS_WIDTH, $4, $5 ; PATH_ENTRANCE_ROUTE_5
--- a/data/mapObjects/undergroundpathwe.asm
+++ b/data/mapObjects/undergroundpathwe.asm
@@ -7,7 +7,7 @@
 
 	db $0 ; signs
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP UNDERGROUND_PATH_WE_WIDTH, $5, $2 ; PATH_ENTRANCE_ROUTE_7
--- a/data/mapObjects/unknowndungeon1.asm
+++ b/data/mapObjects/unknowndungeon1.asm
@@ -14,10 +14,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_BALL, $d + 4, $7 + 4, $ff, $ff, ITEM | $1, FULL_RESTORE
-	db SPRITE_BALL, $3 + 4, $13 + 4, $ff, $ff, ITEM | $2, MAX_ELIXER
-	db SPRITE_BALL, $0 + 4, $5 + 4, $ff, $ff, ITEM | $3, NUGGET
+	db $3 ; objects
+	object SPRITE_BALL, $7, $d, FACE, STAY, $1, FULL_RESTORE
+	object SPRITE_BALL, $13, $3, FACE, STAY, $2, MAX_ELIXER
+	object SPRITE_BALL, $5, $0, FACE, STAY, $3, NUGGET
 
 	; warp-to
 	EVENT_DISP UNKNOWN_DUNGEON_1_WIDTH, $11, $18
--- a/data/mapObjects/unknowndungeon2.asm
+++ b/data/mapObjects/unknowndungeon2.asm
@@ -11,10 +11,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_BALL, $9 + 4, $1d + 4, $ff, $ff, ITEM | $1, PP_UP
-	db SPRITE_BALL, $f + 4, $4 + 4, $ff, $ff, ITEM | $2, ULTRA_BALL
-	db SPRITE_BALL, $6 + 4, $d + 4, $ff, $ff, ITEM | $3, FULL_RESTORE
+	db $3 ; objects
+	object SPRITE_BALL, $1d, $9, FACE, STAY, $1, PP_UP
+	object SPRITE_BALL, $4, $f, FACE, STAY, $2, ULTRA_BALL
+	object SPRITE_BALL, $d, $6, FACE, STAY, $3, FULL_RESTORE
 
 	; warp-to
 	EVENT_DISP UNKNOWN_DUNGEON_2_WIDTH, $1, $1d ; UNKNOWN_DUNGEON_1
--- a/data/mapObjects/unknowndungeon3.asm
+++ b/data/mapObjects/unknowndungeon3.asm
@@ -6,10 +6,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_SLOWBRO, $d + 4, $1b + 4, $ff, $d0, TRAINER | $1, MEWTWO, 70
-	db SPRITE_BALL, $9 + 4, $10 + 4, $ff, $ff, ITEM | $2, ULTRA_BALL
-	db SPRITE_BALL, $1 + 4, $12 + 4, $ff, $ff, ITEM | $3, MAX_REVIVE
+	db $3 ; objects
+	object SPRITE_SLOWBRO, $1b, $d, FACE, DOWN, $1, MEWTWO, 70
+	object SPRITE_BALL, $10, $9, FACE, STAY, $2, ULTRA_BALL
+	object SPRITE_BALL, $12, $1, FACE, STAY, $3, MAX_REVIVE
 
 	; warp-to
 	EVENT_DISP UNKNOWN_DUNGEON_3_WIDTH, $6, $3 ; UNKNOWN_DUNGEON_1
--- a/data/mapObjects/vermilioncity.asm
+++ b/data/mapObjects/vermilioncity.asm
@@ -21,13 +21,13 @@
 	db $13, $7, $c ; VermilionCityText12
 	db $f, $1d, $d ; VermilionCityText13
 
-	db $6 ; people
-	db SPRITE_FOULARD_WOMAN, $7 + 4, $13 + 4, $fe, $2, $1 ; person
-	db SPRITE_GAMBLER, $6 + 4, $e + 4, $ff, $ff, $2 ; person
-	db SPRITE_SAILOR, $1e + 4, $13 + 4, $ff, $d1, $3 ; person
-	db SPRITE_GAMBLER, $7 + 4, $1e + 4, $ff, $ff, $4 ; person
-	db SPRITE_SLOWBRO, $9 + 4, $1d + 4, $fe, $1, $5 ; person
-	db SPRITE_SAILOR, $1b + 4, $19 + 4, $fe, $2, $6 ; person
+	db $6 ; objects
+	object SPRITE_FOULARD_WOMAN, $13, $7, WALK, $2, $1 ; person
+	object SPRITE_GAMBLER, $e, $6, FACE, STAY, $2 ; person
+	object SPRITE_SAILOR, $13, $1e, FACE, UP, $3 ; person
+	object SPRITE_GAMBLER, $1e, $7, FACE, STAY, $4 ; person
+	object SPRITE_SLOWBRO, $1d, $9, WALK, $1, $5 ; person
+	object SPRITE_SAILOR, $19, $1b, WALK, $2, $6 ; person
 
 	; warp-to
 	EVENT_DISP VERMILION_CITY_WIDTH, $3, $b ; VERMILION_POKECENTER
--- a/data/mapObjects/vermiliondock.asm
+++ b/data/mapObjects/vermiliondock.asm
@@ -7,7 +7,7 @@
 
 	db $0 ; signs
 
-	db $0 ; people
+	db $0 ; objects
 
 	; warp-to
 	EVENT_DISP VERMILION_DOCK_WIDTH, $0, $e
--- a/data/mapObjects/vermiliongym.asm
+++ b/data/mapObjects/vermiliongym.asm
@@ -7,12 +7,12 @@
 
 	db $0 ; signs
 
-	db $5 ; people
-	db SPRITE_ROCKER, $1 + 4, $5 + 4, $ff, $d0, TRAINER | $1, LT__SURGE + $C8, $1
-	db SPRITE_GENTLEMAN, $6 + 4, $9 + 4, $ff, $d2, TRAINER | $2, GENTLEMAN + $C8, $3
-	db SPRITE_BLACK_HAIR_BOY_2, $8 + 4, $3 + 4, $ff, $d2, TRAINER | $3, ROCKER + $C8, $1
-	db SPRITE_SAILOR, $a + 4, $0 + 4, $ff, $d3, TRAINER | $4, SAILOR + $C8, $8
-	db SPRITE_GYM_HELPER, $e + 4, $4 + 4, $ff, $d0, $5 ; person
+	db $5 ; objects
+	object SPRITE_ROCKER, $5, $1, FACE, DOWN, $1, LT__SURGE + $C8, $1
+	object SPRITE_GENTLEMAN, $9, $6, FACE, RIGHT, $2, GENTLEMAN + $C8, $3
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $8, FACE, RIGHT, $3, ROCKER + $C8, $1
+	object SPRITE_SAILOR, $0, $a, FACE, LEFT, $4, SAILOR + $C8, $8
+	object SPRITE_GYM_HELPER, $4, $e, FACE, DOWN, $5 ; person
 
 	; warp-to
 	EVENT_DISP VERMILION_GYM_WIDTH, $11, $4
--- a/data/mapObjects/vermilionhouse1.asm
+++ b/data/mapObjects/vermilionhouse1.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_BUG_CATCHER, $3 + 4, $5 + 4, $ff, $d2, $1 ; person
-	db SPRITE_BIRD, $5 + 4, $3 + 4, $fe, $2, $2 ; person
-	db SPRITE_PAPER_SHEET, $3 + 4, $4 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_BUG_CATCHER, $5, $3, FACE, RIGHT, $1 ; person
+	object SPRITE_BIRD, $3, $5, WALK, $2, $2 ; person
+	object SPRITE_PAPER_SHEET, $4, $3, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP VERMILION_HOUSE_1_WIDTH, $7, $2
--- a/data/mapObjects/vermilionhouse2.asm
+++ b/data/mapObjects/vermilionhouse2.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_FISHER, $4 + 4, $2 + 4, $ff, $d3, $1 ; person
+	db $1 ; objects
+	object SPRITE_FISHER, $2, $4, FACE, LEFT, $1 ; person
 
 	; warp-to
 	EVENT_DISP VERMILION_HOUSE_2_WIDTH, $7, $2
--- a/data/mapObjects/vermilionhouse3.asm
+++ b/data/mapObjects/vermilionhouse3.asm
@@ -7,8 +7,8 @@
 
 	db $0 ; signs
 
-	db $1 ; people
-	db SPRITE_LITTLE_GIRL, $5 + 4, $3 + 4, $ff, $d1, $1 ; person
+	db $1 ; objects
+	object SPRITE_LITTLE_GIRL, $3, $5, FACE, UP, $1 ; person
 
 	; warp-to
 	EVENT_DISP VERMILION_HOUSE_3_WIDTH, $7, $2
--- a/data/mapObjects/vermilionmart.asm
+++ b/data/mapObjects/vermilionmart.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $6 + 4, $5 + 4, $ff, $ff, $2 ; person
-	db SPRITE_LASS, $3 + 4, $3 + 4, $fe, $2, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $5, $6, FACE, STAY, $2 ; person
+	object SPRITE_LASS, $3, $3, WALK, $2, $3 ; person
 
 	; warp-to
 	EVENT_DISP VERMILION_MART_WIDTH, $7, $3
--- a/data/mapObjects/vermilionpokecenter.asm
+++ b/data/mapObjects/vermilionpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_FISHER, $5 + 4, $a + 4, $ff, $ff, $2 ; person
-	db SPRITE_SAILOR, $4 + 4, $5 + 4, $ff, $ff, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_FISHER, $a, $5, FACE, STAY, $2 ; person
+	object SPRITE_SAILOR, $5, $4, FACE, STAY, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP VERMILION_POKECENTER_WIDTH, $7, $3
--- a/data/mapObjects/victoryroad1.asm
+++ b/data/mapObjects/victoryroad1.asm
@@ -8,14 +8,14 @@
 
 	db $0 ; signs
 
-	db $7 ; people
-	db SPRITE_LASS, $5 + 4, $7 + 4, $ff, $d3, TRAINER | $1, COOLTRAINER_F + $C8, $5
-	db SPRITE_BLACK_HAIR_BOY_1, $2 + 4, $3 + 4, $ff, $d0, TRAINER | $2, COOLTRAINER_M + $C8, $5
-	db SPRITE_BALL, $0 + 4, $b + 4, $ff, $ff, ITEM | $3, TM_43
-	db SPRITE_BALL, $2 + 4, $9 + 4, $ff, $ff, ITEM | $4, RARE_CANDY
-	db SPRITE_BOULDER, $f + 4, $5 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $5 ; person
-	db SPRITE_BOULDER, $2 + 4, $e + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $6 ; person
-	db SPRITE_BOULDER, $a + 4, $2 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $7 ; person
+	db $7 ; objects
+	object SPRITE_LASS, $7, $5, FACE, LEFT, $1, COOLTRAINER_F + $C8, $5
+	object SPRITE_BLACK_HAIR_BOY_1, $3, $2, FACE, DOWN, $2, COOLTRAINER_M + $C8, $5
+	object SPRITE_BALL, $b, $0, FACE, STAY, $3, TM_43
+	object SPRITE_BALL, $9, $2, FACE, STAY, $4, RARE_CANDY
+	object SPRITE_BOULDER, $5, $f, FACE, BOULDER_MOVEMENT_BYTE_2, $5 ; person
+	object SPRITE_BOULDER, $e, $2, FACE, BOULDER_MOVEMENT_BYTE_2, $6 ; person
+	object SPRITE_BOULDER, $2, $a, FACE, BOULDER_MOVEMENT_BYTE_2, $7 ; person
 
 	; warp-to
 	EVENT_DISP VICTORY_ROAD_1_WIDTH, $11, $8
--- a/data/mapObjects/victoryroad2.asm
+++ b/data/mapObjects/victoryroad2.asm
@@ -12,20 +12,20 @@
 
 	db $0 ; signs
 
-	db $d ; people
-	db SPRITE_HIKER, $9 + 4, $c + 4, $ff, $d2, TRAINER | $1, BLACKBELT + $C8, $9
-	db SPRITE_BLACK_HAIR_BOY_2, $d + 4, $15 + 4, $ff, $d2, TRAINER | $2, JUGGLER + $C8, $2
-	db SPRITE_BLACK_HAIR_BOY_1, $8 + 4, $13 + 4, $ff, $d0, TRAINER | $3, TAMER + $C8, $5
-	db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $4 + 4, $ff, $d0, TRAINER | $4, POKEMANIAC + $C8, $6
-	db SPRITE_BLACK_HAIR_BOY_2, $3 + 4, $1a + 4, $ff, $d2, TRAINER | $5, JUGGLER + $C8, $5
-	db SPRITE_BIRD, $5 + 4, $b + 4, $ff, $d1, TRAINER | $6, MOLTRES, 50
-	db SPRITE_BALL, $5 + 4, $1b + 4, $ff, $ff, ITEM | $7, TM_17
-	db SPRITE_BALL, $9 + 4, $12 + 4, $ff, $ff, ITEM | $8, FULL_HEAL
-	db SPRITE_BALL, $b + 4, $9 + 4, $ff, $ff, ITEM | $9, TM_05
-	db SPRITE_BALL, $0 + 4, $b + 4, $ff, $ff, ITEM | $a, GUARD_SPEC_
-	db SPRITE_BOULDER, $e + 4, $4 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $b ; person
-	db SPRITE_BOULDER, $5 + 4, $5 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $c ; person
-	db SPRITE_BOULDER, $10 + 4, $17 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $d ; person
+	db $d ; objects
+	object SPRITE_HIKER, $c, $9, FACE, RIGHT, $1, BLACKBELT + $C8, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $15, $d, FACE, RIGHT, $2, JUGGLER + $C8, $2
+	object SPRITE_BLACK_HAIR_BOY_1, $13, $8, FACE, DOWN, $3, TAMER + $C8, $5
+	object SPRITE_BLACK_HAIR_BOY_2, $4, $2, FACE, DOWN, $4, POKEMANIAC + $C8, $6
+	object SPRITE_BLACK_HAIR_BOY_2, $1a, $3, FACE, RIGHT, $5, JUGGLER + $C8, $5
+	object SPRITE_BIRD, $b, $5, FACE, UP, $6, MOLTRES, 50
+	object SPRITE_BALL, $1b, $5, FACE, STAY, $7, TM_17
+	object SPRITE_BALL, $12, $9, FACE, STAY, $8, FULL_HEAL
+	object SPRITE_BALL, $9, $b, FACE, STAY, $9, TM_05
+	object SPRITE_BALL, $b, $0, FACE, STAY, $a, GUARD_SPEC_
+	object SPRITE_BOULDER, $4, $e, FACE, BOULDER_MOVEMENT_BYTE_2, $b ; person
+	object SPRITE_BOULDER, $5, $5, FACE, BOULDER_MOVEMENT_BYTE_2, $c ; person
+	object SPRITE_BOULDER, $17, $10, FACE, BOULDER_MOVEMENT_BYTE_2, $d ; person
 
 	; warp-to
 	EVENT_DISP VICTORY_ROAD_2_WIDTH, $8, $0 ; VICTORY_ROAD_1
--- a/data/mapObjects/victoryroad3.asm
+++ b/data/mapObjects/victoryroad3.asm
@@ -9,17 +9,17 @@
 
 	db $0 ; signs
 
-	db $a ; people
-	db SPRITE_BLACK_HAIR_BOY_1, $5 + 4, $1c + 4, $ff, $d2, TRAINER | $1, COOLTRAINER_M + $C8, $2
-	db SPRITE_LASS, $d + 4, $7 + 4, $ff, $d3, TRAINER | $2, COOLTRAINER_F + $C8, $2
-	db SPRITE_BLACK_HAIR_BOY_1, $e + 4, $6 + 4, $ff, $d2, TRAINER | $3, COOLTRAINER_M + $C8, $3
-	db SPRITE_LASS, $3 + 4, $d + 4, $ff, $d3, TRAINER | $4, COOLTRAINER_F + $C8, $3
-	db SPRITE_BALL, $5 + 4, $1a + 4, $ff, $ff, ITEM | $5, MAX_REVIVE
-	db SPRITE_BALL, $7 + 4, $7 + 4, $ff, $ff, ITEM | $6, TM_47
-	db SPRITE_BOULDER, $3 + 4, $16 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $7 ; person
-	db SPRITE_BOULDER, $c + 4, $d + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $8 ; person
-	db SPRITE_BOULDER, $a + 4, $18 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $9 ; person
-	db SPRITE_BOULDER, $f + 4, $16 + 4, $ff, BOULDER_MOVEMENT_BYTE_2, $a ; person
+	db $a ; objects
+	object SPRITE_BLACK_HAIR_BOY_1, $1c, $5, FACE, RIGHT, $1, COOLTRAINER_M + $C8, $2
+	object SPRITE_LASS, $7, $d, FACE, LEFT, $2, COOLTRAINER_F + $C8, $2
+	object SPRITE_BLACK_HAIR_BOY_1, $6, $e, FACE, RIGHT, $3, COOLTRAINER_M + $C8, $3
+	object SPRITE_LASS, $d, $3, FACE, LEFT, $4, COOLTRAINER_F + $C8, $3
+	object SPRITE_BALL, $1a, $5, FACE, STAY, $5, MAX_REVIVE
+	object SPRITE_BALL, $7, $7, FACE, STAY, $6, TM_47
+	object SPRITE_BOULDER, $16, $3, FACE, BOULDER_MOVEMENT_BYTE_2, $7 ; person
+	object SPRITE_BOULDER, $d, $c, FACE, BOULDER_MOVEMENT_BYTE_2, $8 ; person
+	object SPRITE_BOULDER, $18, $a, FACE, BOULDER_MOVEMENT_BYTE_2, $9 ; person
+	object SPRITE_BOULDER, $16, $f, FACE, BOULDER_MOVEMENT_BYTE_2, $a ; person
 
 	; warp-to
 	EVENT_DISP VICTORY_ROAD_3_WIDTH, $7, $17 ; VICTORY_ROAD_2
--- a/data/mapObjects/viridiancity.asm
+++ b/data/mapObjects/viridiancity.asm
@@ -16,14 +16,14 @@
 	db $19, $18, $c ; PokeCenterSignText
 	db $7, $1b, $d ; ViridianCityText13
 
-	db $7 ; people
-	db SPRITE_BUG_CATCHER, $14 + 4, $d + 4, $fe, $0, $1 ; person
-	db SPRITE_GAMBLER, $8 + 4, $1e + 4, $ff, $ff, $2 ; person
-	db SPRITE_BUG_CATCHER, $19 + 4, $1e + 4, $fe, $0, $3 ; person
-	db SPRITE_GIRL, $9 + 4, $11 + 4, $ff, $d3, $4 ; person
-	db SPRITE_LYING_OLD_MAN, $9 + 4, $12 + 4, $ff, $ff, $5 ; person
-	db SPRITE_FISHER2, $17 + 4, $6 + 4, $ff, $d0, $6 ; person
-	db SPRITE_GAMBLER, $5 + 4, $11 + 4, $fe, $2, $7 ; person
+	db $7 ; objects
+	object SPRITE_BUG_CATCHER, $d, $14, WALK, $0, $1 ; person
+	object SPRITE_GAMBLER, $1e, $8, FACE, STAY, $2 ; person
+	object SPRITE_BUG_CATCHER, $1e, $19, WALK, $0, $3 ; person
+	object SPRITE_GIRL, $11, $9, FACE, LEFT, $4 ; person
+	object SPRITE_LYING_OLD_MAN, $12, $9, FACE, STAY, $5 ; person
+	object SPRITE_FISHER2, $6, $17, FACE, DOWN, $6 ; person
+	object SPRITE_GAMBLER, $11, $5, WALK, $2, $7 ; person
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_CITY_WIDTH, $19, $17 ; VIRIDIAN_POKECENTER
--- a/data/mapObjects/viridianforest.asm
+++ b/data/mapObjects/viridianforest.asm
@@ -17,15 +17,15 @@
 	db $2d, $12, $d ; ViridianForestText13
 	db $1, $2, $e ; ViridianForestText14
 
-	db $8 ; people
-	db SPRITE_BUG_CATCHER, $2b + 4, $10 + 4, $ff, $ff, $1 ; person
-	db SPRITE_BUG_CATCHER, $21 + 4, $1e + 4, $ff, $d2, TRAINER | $2, BUG_CATCHER + $C8, $1
-	db SPRITE_BUG_CATCHER, $13 + 4, $1e + 4, $ff, $d2, TRAINER | $3, BUG_CATCHER + $C8, $2
-	db SPRITE_BUG_CATCHER, $12 + 4, $2 + 4, $ff, $d2, TRAINER | $4, BUG_CATCHER + $C8, $3
-	db SPRITE_BALL, $b + 4, $19 + 4, $ff, $ff, ITEM | $5, ANTIDOTE
-	db SPRITE_BALL, $1d + 4, $c + 4, $ff, $ff, ITEM | $6, POTION
-	db SPRITE_BALL, $1f + 4, $1 + 4, $ff, $ff, ITEM | $7, POKE_BALL
-	db SPRITE_BUG_CATCHER, $28 + 4, $1b + 4, $ff, $ff, $8 ; person
+	db $8 ; objects
+	object SPRITE_BUG_CATCHER, $10, $2b, FACE, STAY, $1 ; person
+	object SPRITE_BUG_CATCHER, $1e, $21, FACE, RIGHT, $2, BUG_CATCHER + $C8, $1
+	object SPRITE_BUG_CATCHER, $1e, $13, FACE, RIGHT, $3, BUG_CATCHER + $C8, $2
+	object SPRITE_BUG_CATCHER, $2, $12, FACE, RIGHT, $4, BUG_CATCHER + $C8, $3
+	object SPRITE_BALL, $19, $b, FACE, STAY, $5, ANTIDOTE
+	object SPRITE_BALL, $c, $1d, FACE, STAY, $6, POTION
+	object SPRITE_BALL, $1, $1f, FACE, STAY, $7, POKE_BALL
+	object SPRITE_BUG_CATCHER, $1b, $28, FACE, STAY, $8 ; person
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_FOREST_WIDTH, $0, $1 ; VIRIDIAN_FOREST_EXIT
--- a/data/mapObjects/viridianforestentrance.asm
+++ b/data/mapObjects/viridianforestentrance.asm
@@ -9,9 +9,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_GIRL, $4 + 4, $8 + 4, $ff, $d2, $1 ; person
-	db SPRITE_LITTLE_GIRL, $4 + 4, $2 + 4, $fe, $1, $2 ; person
+	db $2 ; objects
+	object SPRITE_GIRL, $8, $4, FACE, RIGHT, $1 ; person
+	object SPRITE_LITTLE_GIRL, $2, $4, WALK, $1, $2 ; person
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_FOREST_ENTRANCE_WIDTH, $0, $4 ; VIRIDIAN_FOREST
--- a/data/mapObjects/viridianforestexit.asm
+++ b/data/mapObjects/viridianforestexit.asm
@@ -9,9 +9,9 @@
 
 	db $0 ; signs
 
-	db $2 ; people
-	db SPRITE_BLACK_HAIR_BOY_2, $2 + 4, $3 + 4, $ff, $ff, $1 ; person
-	db SPRITE_OLD_PERSON, $5 + 4, $2 + 4, $ff, $ff, $2 ; person
+	db $2 ; objects
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $2, FACE, STAY, $1 ; person
+	object SPRITE_OLD_PERSON, $2, $5, FACE, STAY, $2 ; person
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_FOREST_EXIT_WIDTH, $0, $4
--- a/data/mapObjects/viridiangym.asm
+++ b/data/mapObjects/viridiangym.asm
@@ -7,18 +7,18 @@
 
 	db $0 ; signs
 
-	db $b ; people
-	db SPRITE_GIOVANNI, $1 + 4, $2 + 4, $ff, $d0, TRAINER | $1, GIOVANNI + $C8, $3
-	db SPRITE_BLACK_HAIR_BOY_1, $7 + 4, $c + 4, $ff, $d0, TRAINER | $2, COOLTRAINER_M + $C8, $9
-	db SPRITE_HIKER, $b + 4, $b + 4, $ff, $d1, TRAINER | $3, BLACKBELT + $C8, $6
-	db SPRITE_ROCKER, $7 + 4, $a + 4, $ff, $d0, TRAINER | $4, TAMER + $C8, $3
-	db SPRITE_HIKER, $7 + 4, $3 + 4, $ff, $d2, TRAINER | $5, BLACKBELT + $C8, $7
-	db SPRITE_BLACK_HAIR_BOY_1, $5 + 4, $d + 4, $ff, $d3, TRAINER | $6, COOLTRAINER_M + $C8, $a
-	db SPRITE_HIKER, $1 + 4, $a + 4, $ff, $d0, TRAINER | $7, BLACKBELT + $C8, $8
-	db SPRITE_ROCKER, $10 + 4, $2 + 4, $ff, $d3, TRAINER | $8, TAMER + $C8, $4
-	db SPRITE_BLACK_HAIR_BOY_1, $5 + 4, $6 + 4, $ff, $d0, TRAINER | $9, COOLTRAINER_M + $C8, $1
-	db SPRITE_GYM_HELPER, $f + 4, $10 + 4, $ff, $d0, $a ; person
-	db SPRITE_BALL, $9 + 4, $10 + 4, $ff, $ff, ITEM | $b, REVIVE
+	db $b ; objects
+	object SPRITE_GIOVANNI, $2, $1, FACE, DOWN, $1, GIOVANNI + $C8, $3
+	object SPRITE_BLACK_HAIR_BOY_1, $c, $7, FACE, DOWN, $2, COOLTRAINER_M + $C8, $9
+	object SPRITE_HIKER, $b, $b, FACE, UP, $3, BLACKBELT + $C8, $6
+	object SPRITE_ROCKER, $a, $7, FACE, DOWN, $4, TAMER + $C8, $3
+	object SPRITE_HIKER, $3, $7, FACE, RIGHT, $5, BLACKBELT + $C8, $7
+	object SPRITE_BLACK_HAIR_BOY_1, $d, $5, FACE, LEFT, $6, COOLTRAINER_M + $C8, $a
+	object SPRITE_HIKER, $a, $1, FACE, DOWN, $7, BLACKBELT + $C8, $8
+	object SPRITE_ROCKER, $2, $10, FACE, LEFT, $8, TAMER + $C8, $4
+	object SPRITE_BLACK_HAIR_BOY_1, $6, $5, FACE, DOWN, $9, COOLTRAINER_M + $C8, $1
+	object SPRITE_GYM_HELPER, $10, $f, FACE, DOWN, $a ; person
+	object SPRITE_BALL, $10, $9, FACE, STAY, $b, REVIVE
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_GYM_WIDTH, $11, $10
--- a/data/mapObjects/viridianhouse.asm
+++ b/data/mapObjects/viridianhouse.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_BALDING_GUY, $3 + 4, $5 + 4, $ff, $ff, $1 ; person
-	db SPRITE_LITTLE_GIRL, $4 + 4, $1 + 4, $fe, $1, $2 ; person
-	db SPRITE_BIRD, $5 + 4, $5 + 4, $fe, $2, $3 ; person
-	db SPRITE_CLIPBOARD, $0 + 4, $4 + 4, $ff, $ff, $4 ; person
+	db $4 ; objects
+	object SPRITE_BALDING_GUY, $5, $3, FACE, STAY, $1 ; person
+	object SPRITE_LITTLE_GIRL, $1, $4, WALK, $1, $2 ; person
+	object SPRITE_BIRD, $5, $5, WALK, $2, $3 ; person
+	object SPRITE_CLIPBOARD, $4, $0, FACE, STAY, $4 ; person
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_HOUSE_WIDTH, $7, $2
--- a/data/mapObjects/viridianmart.asm
+++ b/data/mapObjects/viridianmart.asm
@@ -7,10 +7,10 @@
 
 	db $0 ; signs
 
-	db $3 ; people
-	db SPRITE_MART_GUY, $5 + 4, $0 + 4, $ff, $d3, $1 ; person
-	db SPRITE_BUG_CATCHER, $5 + 4, $5 + 4, $fe, $1, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $3 + 4, $3 + 4, $ff, $ff, $3 ; person
+	db $3 ; objects
+	object SPRITE_MART_GUY, $0, $5, FACE, LEFT, $1 ; person
+	object SPRITE_BUG_CATCHER, $5, $5, WALK, $1, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $3, $3, FACE, STAY, $3 ; person
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_MART_WIDTH, $7, $3
--- a/data/mapObjects/viridianpokecenter.asm
+++ b/data/mapObjects/viridianpokecenter.asm
@@ -7,11 +7,11 @@
 
 	db $0 ; signs
 
-	db $4 ; people
-	db SPRITE_NURSE, $1 + 4, $3 + 4, $ff, $d0, $1 ; person
-	db SPRITE_GENTLEMAN, $5 + 4, $a + 4, $fe, $1, $2 ; person
-	db SPRITE_BLACK_HAIR_BOY_1, $3 + 4, $4 + 4, $ff, $ff, $3 ; person
-	db SPRITE_CABLE_CLUB_WOMAN, $2 + 4, $b + 4, $ff, $d0, $4 ; person
+	db $4 ; objects
+	object SPRITE_NURSE, $3, $1, FACE, DOWN, $1 ; person
+	object SPRITE_GENTLEMAN, $a, $5, WALK, $1, $2 ; person
+	object SPRITE_BLACK_HAIR_BOY_1, $4, $3, FACE, STAY, $3 ; person
+	object SPRITE_CABLE_CLUB_WOMAN, $b, $2, FACE, DOWN, $4 ; person
 
 	; warp-to
 	EVENT_DISP VIRIDIAN_POKECENTER_WIDTH, $7, $3
--- a/macros.asm
+++ b/macros.asm
@@ -232,6 +232,44 @@
 	jp PrintPredefTextID
 ENDM
 
+WALK EQU $FE
+FACE EQU $FF
+
+DOWN  EQU $D0
+UP    EQU $D1
+RIGHT EQU $D2
+LEFT  EQU $D3
+STAY  EQU $FF
+
+;\1 sprite id
+;\2 x position
+;\3 y position
+;\4 movement (WALK/FACE)
+;\5 range or direction
+;\6 text id
+;\7 items only: item id
+;\7 trainers only: trainer class/pokemon id
+;\8 trainers only: trainer number/pokemon level
+object: MACRO
+    db \1
+	db \3 + 4
+	db \2 + 4
+	db \4
+	db \5
+	IF (_NARG > 7)
+		db TRAINER | \6
+		db \7
+		db \8
+	ELSE
+		IF (_NARG > 6)
+			db ITEM | \6
+			db \7
+		ELSE
+			db \6
+		ENDC
+	ENDC
+ENDM
+
 
 ;1_channel	EQU $00
 ;2_channels	EQU $40