shithub: pokered

Download patch

ref: dfc152d667e3695f83eb0fbabb839b0fad275ceb
parent: 31d267d4ad87042dbdd30be645ad4b43e4e3ceb1
author: dannye <corrnondacqb@yahoo.com>
date: Mon Aug 10 07:09:16 EDT 2015

No more $C8

Use OPP_ constants separate from trainer constants since
valid opponents can be all Pokemon and trainers

--- a/audio.asm
+++ b/audio.asm
@@ -378,11 +378,11 @@
 	jr .playSong
 .notGymLeaderBattle
 	ld a, [W_CUROPPONENT]
-	cp $c8
+	cp 200
 	jr c, .wildBattle
-	cp SONY3 + $c8
+	cp OPP_SONY3
 	jr z, .finalBattle
-	cp LANCE + $c8
+	cp OPP_LANCE
 	jr nz, .normalTrainerBattle
 	ld a, MUSIC_GYM_LEADER_BATTLE ; lance also plays gym leader theme
 	jr .playSong
--- a/constants/trainer_constants.asm
+++ b/constants/trainer_constants.asm
@@ -1,50 +1,55 @@
-; sometimes it's necessary to add $C8 to these values
+trainer_const: MACRO
+\1     EQU const_value
+OPP_\1 EQU const_value + 200
+const_value = const_value + 1
+ENDM
+
 const_value = 1
 
-	const YOUNGSTER     ; $01
-	const BUG_CATCHER   ; $02
-	const LASS          ; $03
-	const SAILOR        ; $04
-	const JR__TRAINER_M ; $05
-	const JR__TRAINER_F ; $06
-	const POKEMANIAC    ; $07
-	const SUPER_NERD    ; $08
-	const HIKER         ; $09
-	const BIKER         ; $0A
-	const BURGLAR       ; $0B
-	const ENGINEER      ; $0C
-	const JUGGLER_X     ; $0D
-	const FISHER        ; $0E
-	const SWIMMER       ; $0F
-	const CUE_BALL      ; $10
-	const GAMBLER       ; $11
-	const BEAUTY        ; $12
-	const PSYCHIC_TR    ; $13
-	const ROCKER        ; $14
-	const JUGGLER       ; $15
-	const TAMER         ; $16
-	const BIRD_KEEPER   ; $17
-	const BLACKBELT     ; $18
-	const SONY1         ; $19
-	const PROF_OAK      ; $1A
-	const CHIEF         ; $1B
-	const SCIENTIST     ; $1C
-	const GIOVANNI      ; $1D
-	const ROCKET        ; $1E
-	const COOLTRAINER_M ; $1F
-	const COOLTRAINER_F ; $20
-	const BRUNO         ; $21
-	const BROCK         ; $22
-	const MISTY         ; $23
-	const LT__SURGE     ; $24
-	const ERIKA         ; $25
-	const KOGA          ; $26
-	const BLAINE        ; $27
-	const SABRINA       ; $28
-	const GENTLEMAN     ; $29
-	const SONY2         ; $2A
-	const SONY3         ; $2B
-	const LORELEI       ; $2C
-	const CHANNELER     ; $2D
-	const AGATHA        ; $2E
-	const LANCE         ; $2F
+	trainer_const YOUNGSTER     ; $01
+	trainer_const BUG_CATCHER   ; $02
+	trainer_const LASS          ; $03
+	trainer_const SAILOR        ; $04
+	trainer_const JR__TRAINER_M ; $05
+	trainer_const JR__TRAINER_F ; $06
+	trainer_const POKEMANIAC    ; $07
+	trainer_const SUPER_NERD    ; $08
+	trainer_const HIKER         ; $09
+	trainer_const BIKER         ; $0A
+	trainer_const BURGLAR       ; $0B
+	trainer_const ENGINEER      ; $0C
+	trainer_const JUGGLER_X     ; $0D
+	trainer_const FISHER        ; $0E
+	trainer_const SWIMMER       ; $0F
+	trainer_const CUE_BALL      ; $10
+	trainer_const GAMBLER       ; $11
+	trainer_const BEAUTY        ; $12
+	trainer_const PSYCHIC_TR    ; $13
+	trainer_const ROCKER        ; $14
+	trainer_const JUGGLER       ; $15
+	trainer_const TAMER         ; $16
+	trainer_const BIRD_KEEPER   ; $17
+	trainer_const BLACKBELT     ; $18
+	trainer_const SONY1         ; $19
+	trainer_const PROF_OAK      ; $1A
+	trainer_const CHIEF         ; $1B
+	trainer_const SCIENTIST     ; $1C
+	trainer_const GIOVANNI      ; $1D
+	trainer_const ROCKET        ; $1E
+	trainer_const COOLTRAINER_M ; $1F
+	trainer_const COOLTRAINER_F ; $20
+	trainer_const BRUNO         ; $21
+	trainer_const BROCK         ; $22
+	trainer_const MISTY         ; $23
+	trainer_const LT__SURGE     ; $24
+	trainer_const ERIKA         ; $25
+	trainer_const KOGA          ; $26
+	trainer_const BLAINE        ; $27
+	trainer_const SABRINA       ; $28
+	trainer_const GENTLEMAN     ; $29
+	trainer_const SONY2         ; $2A
+	trainer_const SONY3         ; $2B
+	trainer_const LORELEI       ; $2C
+	trainer_const CHANNELER     ; $2D
+	trainer_const AGATHA        ; $2E
+	trainer_const LANCE         ; $2F
--- a/data/mapObjects/agatha.asm
+++ b/data/mapObjects/agatha.asm
@@ -10,7 +10,7 @@
 	db $0 ; signs
 
 	db $1 ; objects
-	object SPRITE_AGATHA, $5, $2, STAY, DOWN, $1, AGATHA + $C8, $1
+	object SPRITE_AGATHA, $5, $2, STAY, DOWN, $1, OPP_AGATHA, $1
 
 	; warp-to
 	EVENT_DISP AGATHAS_ROOM_WIDTH, $b, $4 ; BRUNOS_ROOM
--- a/data/mapObjects/bruno.asm
+++ b/data/mapObjects/bruno.asm
@@ -10,7 +10,7 @@
 	db $0 ; signs
 
 	db $1 ; objects
-	object SPRITE_BRUNO, $5, $2, STAY, DOWN, $1, BRUNO + $C8, $1
+	object SPRITE_BRUNO, $5, $2, STAY, DOWN, $1, OPP_BRUNO, $1
 
 	; warp-to
 	EVENT_DISP BRUNOS_ROOM_WIDTH, $b, $4 ; LORELEIS_ROOM
--- a/data/mapObjects/celadongamecorner.asm
+++ b/data/mapObjects/celadongamecorner.asm
@@ -20,7 +20,7 @@
 	object SPRITE_GAMBLER, $b, $f, STAY, RIGHT, $8 ; person
 	object SPRITE_MART_GUY, $e, $b, STAY, LEFT, $9 ; person
 	object SPRITE_GENTLEMAN, $11, $d, STAY, RIGHT, $a ; person
-	object SPRITE_ROCKET, $9, $5, STAY, UP, $b, ROCKET + $C8, $7
+	object SPRITE_ROCKET, $9, $5, STAY, UP, $b, OPP_ROCKET, $7
 
 	; warp-to
 	EVENT_DISP GAME_CORNER_WIDTH, $11, $f
--- a/data/mapObjects/celadongym.asm
+++ b/data/mapObjects/celadongym.asm
@@ -8,14 +8,14 @@
 	db $0 ; signs
 
 	db $8 ; objects
-	object SPRITE_ERIKA, $4, $3, STAY, DOWN, $1, ERIKA + $C8, $1
-	object SPRITE_LASS, $2, $b, STAY, RIGHT, $2, LASS + $C8, $11
-	object SPRITE_FOULARD_WOMAN, $7, $a, STAY, LEFT, $3, BEAUTY + $C8, $1
-	object SPRITE_LASS, $9, $5, STAY, DOWN, $4, JR__TRAINER_F + $C8, $b
-	object SPRITE_FOULARD_WOMAN, $1, $5, STAY, DOWN, $5, BEAUTY + $C8, $2
-	object SPRITE_LASS, $6, $3, STAY, DOWN, $6, LASS + $C8, $12
-	object SPRITE_FOULARD_WOMAN, $3, $3, STAY, DOWN, $7, BEAUTY + $C8, $3
-	object SPRITE_LASS, $5, $3, STAY, DOWN, $8, COOLTRAINER_F + $C8, $1
+	object SPRITE_ERIKA, $4, $3, STAY, DOWN, $1, OPP_ERIKA, $1
+	object SPRITE_LASS, $2, $b, STAY, RIGHT, $2, OPP_LASS, $11
+	object SPRITE_FOULARD_WOMAN, $7, $a, STAY, LEFT, $3, OPP_BEAUTY, $1
+	object SPRITE_LASS, $9, $5, STAY, DOWN, $4, OPP_JR__TRAINER_F, $b
+	object SPRITE_FOULARD_WOMAN, $1, $5, STAY, DOWN, $5, OPP_BEAUTY, $2
+	object SPRITE_LASS, $6, $3, STAY, DOWN, $6, OPP_LASS, $12
+	object SPRITE_FOULARD_WOMAN, $3, $3, STAY, DOWN, $7, OPP_BEAUTY, $3
+	object SPRITE_LASS, $5, $3, STAY, DOWN, $8, OPP_COOLTRAINER_F, $1
 
 	; warp-to
 	EVENT_DISP CELADON_GYM_WIDTH, $11, $4
--- a/data/mapObjects/ceruleancity.asm
+++ b/data/mapObjects/ceruleancity.asm
@@ -23,7 +23,7 @@
 
 	db $b ; objects
 	object SPRITE_BLUE, $14, $2, STAY, DOWN, $1 ; person
-	object SPRITE_ROCKET, $1e, $8, STAY, NONE, $2, ROCKET + $C8, $5
+	object SPRITE_ROCKET, $1e, $8, STAY, NONE, $2, OPP_ROCKET, $5
 	object SPRITE_BLACK_HAIR_BOY_1, $1f, $14, STAY, 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
--- a/data/mapObjects/ceruleangym.asm
+++ b/data/mapObjects/ceruleangym.asm
@@ -8,9 +8,9 @@
 	db $0 ; signs
 
 	db $4 ; objects
-	object SPRITE_BRUNETTE_GIRL, $4, $2, STAY, DOWN, $1, MISTY + $C8, $1
-	object SPRITE_LASS, $2, $3, STAY, RIGHT, $2, JR__TRAINER_F + $C8, $1
-	object SPRITE_SWIMMER, $8, $7, STAY, LEFT, $3, SWIMMER + $C8, $1
+	object SPRITE_BRUNETTE_GIRL, $4, $2, STAY, DOWN, $1, OPP_MISTY, $1
+	object SPRITE_LASS, $2, $3, STAY, RIGHT, $2, OPP_JR__TRAINER_F, $1
+	object SPRITE_SWIMMER, $8, $7, STAY, LEFT, $3, OPP_SWIMMER, $1
 	object SPRITE_GYM_HELPER, $7, $a, STAY, DOWN, $4 ; person
 
 	; warp-to
--- a/data/mapObjects/cinnabargym.asm
+++ b/data/mapObjects/cinnabargym.asm
@@ -8,14 +8,14 @@
 	db $0 ; signs
 
 	db $9 ; objects
-	object SPRITE_FAT_BALD_GUY, $3, $3, STAY, DOWN, $1, BLAINE + $C8, $1
-	object SPRITE_BLACK_HAIR_BOY_2, $11, $2, STAY, DOWN, $2, SUPER_NERD + $C8, $9
-	object SPRITE_BLACK_HAIR_BOY_2, $11, $8, STAY, DOWN, $3, BURGLAR + $C8, $4
-	object SPRITE_BLACK_HAIR_BOY_2, $b, $4, STAY, DOWN, $4, SUPER_NERD + $C8, $a
-	object SPRITE_BLACK_HAIR_BOY_2, $b, $8, STAY, DOWN, $5, BURGLAR + $C8, $5
-	object SPRITE_BLACK_HAIR_BOY_2, $b, $e, STAY, DOWN, $6, SUPER_NERD + $C8, $b
-	object SPRITE_BLACK_HAIR_BOY_2, $3, $e, STAY, DOWN, $7, BURGLAR + $C8, $6
-	object SPRITE_BLACK_HAIR_BOY_2, $3, $8, STAY, DOWN, $8, SUPER_NERD + $C8, $c
+	object SPRITE_FAT_BALD_GUY, $3, $3, STAY, DOWN, $1, OPP_BLAINE, $1
+	object SPRITE_BLACK_HAIR_BOY_2, $11, $2, STAY, DOWN, $2, OPP_SUPER_NERD, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $11, $8, STAY, DOWN, $3, OPP_BURGLAR, $4
+	object SPRITE_BLACK_HAIR_BOY_2, $b, $4, STAY, DOWN, $4, OPP_SUPER_NERD, $a
+	object SPRITE_BLACK_HAIR_BOY_2, $b, $8, STAY, DOWN, $5, OPP_BURGLAR, $5
+	object SPRITE_BLACK_HAIR_BOY_2, $b, $e, STAY, DOWN, $6, OPP_SUPER_NERD, $b
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $e, STAY, DOWN, $7, OPP_BURGLAR, $6
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $8, STAY, DOWN, $8, OPP_SUPER_NERD, $c
 	object SPRITE_GYM_HELPER, $10, $d, STAY, DOWN, $9 ; person
 
 	; warp-to
--- a/data/mapObjects/fightingdojo.asm
+++ b/data/mapObjects/fightingdojo.asm
@@ -8,11 +8,11 @@
 	db $0 ; signs
 
 	db $7 ; objects
-	object SPRITE_HIKER, $5, $3, STAY, DOWN, $1, BLACKBELT + $C8, $1
-	object SPRITE_HIKER, $3, $4, STAY, RIGHT, $2, BLACKBELT + $C8, $2
-	object SPRITE_HIKER, $3, $6, STAY, RIGHT, $3, BLACKBELT + $C8, $3
-	object SPRITE_HIKER, $5, $5, STAY, LEFT, $4, BLACKBELT + $C8, $4
-	object SPRITE_HIKER, $5, $7, STAY, LEFT, $5, BLACKBELT + $C8, $5
+	object SPRITE_HIKER, $5, $3, STAY, DOWN, $1, OPP_BLACKBELT, $1
+	object SPRITE_HIKER, $3, $4, STAY, RIGHT, $2, OPP_BLACKBELT, $2
+	object SPRITE_HIKER, $3, $6, STAY, RIGHT, $3, OPP_BLACKBELT, $3
+	object SPRITE_HIKER, $5, $5, STAY, LEFT, $4, OPP_BLACKBELT, $4
+	object SPRITE_HIKER, $5, $7, STAY, LEFT, $5, OPP_BLACKBELT, $5
 	object SPRITE_BALL, $4, $1, STAY, NONE, $6 ; person
 	object SPRITE_BALL, $5, $1, STAY, NONE, $7 ; person
 
--- a/data/mapObjects/fuchsiagym.asm
+++ b/data/mapObjects/fuchsiagym.asm
@@ -8,13 +8,13 @@
 	db $0 ; signs
 
 	db $8 ; objects
-	object SPRITE_BLACKBELT, $4, $a, STAY, DOWN, $1, KOGA + $C8, $1
-	object SPRITE_ROCKER, $8, $d, STAY, DOWN, $2, JUGGLER + $C8, $7
-	object SPRITE_ROCKER, $7, $8, STAY, RIGHT, $3, JUGGLER + $C8, $3
-	object SPRITE_ROCKER, $1, $c, STAY, DOWN, $4, JUGGLER + $C8, $8
-	object SPRITE_ROCKER, $3, $5, STAY, UP, $5, TAMER + $C8, $1
-	object SPRITE_ROCKER, $8, $2, STAY, DOWN, $6, TAMER + $C8, $2
-	object SPRITE_ROCKER, $2, $7, STAY, LEFT, $7, JUGGLER + $C8, $4
+	object SPRITE_BLACKBELT, $4, $a, STAY, DOWN, $1, OPP_KOGA, $1
+	object SPRITE_ROCKER, $8, $d, STAY, DOWN, $2, OPP_JUGGLER, $7
+	object SPRITE_ROCKER, $7, $8, STAY, RIGHT, $3, OPP_JUGGLER, $3
+	object SPRITE_ROCKER, $1, $c, STAY, DOWN, $4, OPP_JUGGLER, $8
+	object SPRITE_ROCKER, $3, $5, STAY, UP, $5, OPP_TAMER, $1
+	object SPRITE_ROCKER, $8, $2, STAY, DOWN, $6, OPP_TAMER, $2
+	object SPRITE_ROCKER, $2, $7, STAY, LEFT, $7, OPP_JUGGLER, $4
 	object SPRITE_GYM_HELPER, $7, $f, STAY, DOWN, $8 ; person
 
 	; warp-to
--- a/data/mapObjects/lance.asm
+++ b/data/mapObjects/lance.asm
@@ -9,7 +9,7 @@
 	db $0 ; signs
 
 	db $1 ; objects
-	object SPRITE_LANCE, $6, $1, STAY, DOWN, $1, LANCE + $C8, $1
+	object SPRITE_LANCE, $6, $1, STAY, DOWN, $1, OPP_LANCE, $1
 
 	; warp-to
 	EVENT_DISP LANCES_ROOM_WIDTH, $10, $18 ; AGATHAS_ROOM
--- a/data/mapObjects/lorelei.asm
+++ b/data/mapObjects/lorelei.asm
@@ -10,7 +10,7 @@
 	db $0 ; signs
 
 	db $1 ; objects
-	object SPRITE_LORELEI, $5, $2, STAY, DOWN, $1, LORELEI + $C8, $1
+	object SPRITE_LORELEI, $5, $2, STAY, DOWN, $1, OPP_LORELEI, $1
 
 	; warp-to
 	EVENT_DISP LORELEIS_ROOM_WIDTH, $b, $4 ; INDIGO_PLATEAU_LOBBY
--- a/data/mapObjects/mansion1.asm
+++ b/data/mapObjects/mansion1.asm
@@ -14,7 +14,7 @@
 	db $0 ; signs
 
 	db $3 ; objects
-	object SPRITE_OAK_AIDE, $11, $11, STAY, LEFT, $1, SCIENTIST + $C8, $4
+	object SPRITE_OAK_AIDE, $11, $11, STAY, LEFT, $1, OPP_SCIENTIST, $4
 	object SPRITE_BALL, $e, $3, STAY, NONE, $2, ESCAPE_ROPE
 	object SPRITE_BALL, $12, $15, STAY, NONE, $3, CARBOS
 
--- a/data/mapObjects/mansion2.asm
+++ b/data/mapObjects/mansion2.asm
@@ -10,7 +10,7 @@
 	db $0 ; signs
 
 	db $4 ; objects
-	object SPRITE_BLACK_HAIR_BOY_2, $3, $11, WALK, $2, $1, BURGLAR + $C8, $7
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $11, WALK, $2, $1, OPP_BURGLAR, $7
 	object SPRITE_BALL, $1c, $7, STAY, NONE, $2, CALCIUM
 	object SPRITE_BOOK_MAP_DEX, $12, $2, STAY, NONE, $3 ; person
 	object SPRITE_BOOK_MAP_DEX, $3, $16, STAY, NONE, $4 ; person
--- a/data/mapObjects/mansion3.asm
+++ b/data/mapObjects/mansion3.asm
@@ -9,8 +9,8 @@
 	db $0 ; signs
 
 	db $5 ; objects
-	object SPRITE_BLACK_HAIR_BOY_2, $5, $b, WALK, $2, $1, BURGLAR + $C8, $8
-	object SPRITE_OAK_AIDE, $14, $b, STAY, LEFT, $2, SCIENTIST + $C8, $c
+	object SPRITE_BLACK_HAIR_BOY_2, $5, $b, WALK, $2, $1, OPP_BURGLAR, $8
+	object SPRITE_OAK_AIDE, $14, $b, STAY, LEFT, $2, OPP_SCIENTIST, $c
 	object SPRITE_BALL, $1, $10, STAY, NONE, $3, MAX_POTION
 	object SPRITE_BALL, $19, $5, STAY, NONE, $4, IRON
 	object SPRITE_BOOK_MAP_DEX, $6, $c, STAY, NONE, $5 ; person
--- a/data/mapObjects/mansion4.asm
+++ b/data/mapObjects/mansion4.asm
@@ -7,8 +7,8 @@
 	db $0 ; signs
 
 	db $8 ; objects
-	object SPRITE_BLACK_HAIR_BOY_2, $10, $17, STAY, NONE, $1, BURGLAR + $C8, $9
-	object SPRITE_OAK_AIDE, $1b, $b, STAY, DOWN, $2, SCIENTIST + $C8, $d
+	object SPRITE_BLACK_HAIR_BOY_2, $10, $17, STAY, NONE, $1, OPP_BURGLAR, $9
+	object SPRITE_OAK_AIDE, $1b, $b, STAY, DOWN, $2, OPP_SCIENTIST, $d
 	object SPRITE_BALL, $a, $2, STAY, NONE, $3, RARE_CANDY
 	object SPRITE_BALL, $1, $16, STAY, NONE, $4, FULL_RESTORE
 	object SPRITE_BALL, $13, $19, STAY, NONE, $5, TM_14
--- a/data/mapObjects/mtmoon1.asm
+++ b/data/mapObjects/mtmoon1.asm
@@ -12,13 +12,13 @@
 	db $17, $f, $e ; MtMoon1Text14
 
 	db $d ; objects
-	object SPRITE_HIKER, $5, $6, STAY, DOWN, $1, HIKER + $C8, $1
-	object SPRITE_BUG_CATCHER, $c, $10, STAY, RIGHT, $2, YOUNGSTER + $C8, $3
-	object SPRITE_LASS, $1e, $4, STAY, DOWN, $3, LASS + $C8, $5
-	object SPRITE_BLACK_HAIR_BOY_2, $18, $1f, STAY, UP, $4, SUPER_NERD + $C8, $1
-	object SPRITE_LASS, $10, $17, STAY, DOWN, $5, LASS + $C8, $6
-	object SPRITE_BUG_CATCHER, $7, $16, STAY, DOWN, $6, BUG_CATCHER + $C8, $7
-	object SPRITE_BUG_CATCHER, $1e, $1b, STAY, RIGHT, $7, BUG_CATCHER + $C8, $8
+	object SPRITE_HIKER, $5, $6, STAY, DOWN, $1, OPP_HIKER, $1
+	object SPRITE_BUG_CATCHER, $c, $10, STAY, RIGHT, $2, OPP_YOUNGSTER, $3
+	object SPRITE_LASS, $1e, $4, STAY, DOWN, $3, OPP_LASS, $5
+	object SPRITE_BLACK_HAIR_BOY_2, $18, $1f, STAY, UP, $4, OPP_SUPER_NERD, $1
+	object SPRITE_LASS, $10, $17, STAY, DOWN, $5, OPP_LASS, $6
+	object SPRITE_BUG_CATCHER, $7, $16, STAY, DOWN, $6, OPP_BUG_CATCHER, $7
+	object SPRITE_BUG_CATCHER, $1e, $1b, STAY, RIGHT, $7, OPP_BUG_CATCHER, $8
 	object SPRITE_BALL, $2, $14, STAY, NONE, $8, POTION
 	object SPRITE_BALL, $2, $2, STAY, NONE, $9, MOON_STONE
 	object SPRITE_BALL, $23, $1f, STAY, NONE, $a, RARE_CANDY
--- a/data/mapObjects/mtmoon3.asm
+++ b/data/mapObjects/mtmoon3.asm
@@ -10,11 +10,11 @@
 	db $0 ; signs
 
 	db $9 ; objects
-	object SPRITE_BLACK_HAIR_BOY_2, $c, $8, STAY, RIGHT, $1, SUPER_NERD + $C8, $2
-	object SPRITE_ROCKET, $b, $10, STAY, DOWN, $2, ROCKET + $C8, $1
-	object SPRITE_ROCKET, $f, $16, STAY, DOWN, $3, ROCKET + $C8, $2
-	object SPRITE_ROCKET, $1d, $b, STAY, UP, $4, ROCKET + $C8, $3
-	object SPRITE_ROCKET, $1d, $11, STAY, LEFT, $5, ROCKET + $C8, $4
+	object SPRITE_BLACK_HAIR_BOY_2, $c, $8, STAY, RIGHT, $1, OPP_SUPER_NERD, $2
+	object SPRITE_ROCKET, $b, $10, STAY, DOWN, $2, OPP_ROCKET, $1
+	object SPRITE_ROCKET, $f, $16, STAY, DOWN, $3, OPP_ROCKET, $2
+	object SPRITE_ROCKET, $1d, $b, STAY, UP, $4, OPP_ROCKET, $3
+	object SPRITE_ROCKET, $1d, $11, STAY, LEFT, $5, OPP_ROCKET, $4
 	object SPRITE_OMANYTE, $c, $6, STAY, NONE, $6 ; person
 	object SPRITE_OMANYTE, $d, $6, STAY, NONE, $7 ; person
 	object SPRITE_BALL, $19, $15, STAY, NONE, $8, HP_UP
--- a/data/mapObjects/oakslab.asm
+++ b/data/mapObjects/oakslab.asm
@@ -8,7 +8,7 @@
 	db $0 ; signs
 
 	db $b ; objects
-	object SPRITE_BLUE, $4, $3, STAY, NONE, $1, SONY1 + $C8, $1
+	object SPRITE_BLUE, $4, $3, STAY, NONE, $1, OPP_SONY1, $1
 	object SPRITE_BALL, $6, $3, STAY, NONE, $2 ; person
 	object SPRITE_BALL, $7, $3, STAY, NONE, $3 ; person
 	object SPRITE_BALL, $8, $3, STAY, NONE, $4 ; person
--- a/data/mapObjects/pewtergym.asm
+++ b/data/mapObjects/pewtergym.asm
@@ -8,8 +8,8 @@
 	db $0 ; signs
 
 	db $3 ; objects
-	object SPRITE_BLACK_HAIR_BOY_2, $4, $1, STAY, DOWN, $1, BROCK + $C8, $1
-	object SPRITE_BLACK_HAIR_BOY_1, $3, $6, STAY, RIGHT, $2, JR__TRAINER_M + $C8, $1
+	object SPRITE_BLACK_HAIR_BOY_2, $4, $1, STAY, DOWN, $1, OPP_BROCK, $1
+	object SPRITE_BLACK_HAIR_BOY_1, $3, $6, STAY, RIGHT, $2, OPP_JR__TRAINER_M, $1
 	object SPRITE_GYM_HELPER, $7, $a, STAY, DOWN, $3 ; person
 
 	; warp-to
--- a/data/mapObjects/pokemontower3.asm
+++ b/data/mapObjects/pokemontower3.asm
@@ -8,9 +8,9 @@
 	db $0 ; signs
 
 	db $4 ; objects
-	object SPRITE_MEDIUM, $c, $3, STAY, LEFT, $1, CHANNELER + $C8, $5
-	object SPRITE_MEDIUM, $9, $8, STAY, DOWN, $2, CHANNELER + $C8, $6
-	object SPRITE_MEDIUM, $a, $d, STAY, DOWN, $3, CHANNELER + $C8, $8
+	object SPRITE_MEDIUM, $c, $3, STAY, LEFT, $1, OPP_CHANNELER, $5
+	object SPRITE_MEDIUM, $9, $8, STAY, DOWN, $2, OPP_CHANNELER, $6
+	object SPRITE_MEDIUM, $a, $d, STAY, DOWN, $3, OPP_CHANNELER, $8
 	object SPRITE_BALL, $c, $1, STAY, NONE, $4, ESCAPE_ROPE
 
 	; warp-to
--- a/data/mapObjects/pokemontower4.asm
+++ b/data/mapObjects/pokemontower4.asm
@@ -8,9 +8,9 @@
 	db $0 ; signs
 
 	db $6 ; objects
-	object SPRITE_MEDIUM, $5, $a, STAY, RIGHT, $1, CHANNELER + $C8, $9
-	object SPRITE_MEDIUM, $f, $7, STAY, DOWN, $2, CHANNELER + $C8, $a
-	object SPRITE_MEDIUM, $e, $c, STAY, LEFT, $3, CHANNELER + $C8, $c
+	object SPRITE_MEDIUM, $5, $a, STAY, RIGHT, $1, OPP_CHANNELER, $9
+	object SPRITE_MEDIUM, $f, $7, STAY, DOWN, $2, OPP_CHANNELER, $a
+	object SPRITE_MEDIUM, $e, $c, STAY, LEFT, $3, OPP_CHANNELER, $c
 	object SPRITE_BALL, $c, $a, STAY, NONE, $4, ELIXER
 	object SPRITE_BALL, $9, $a, STAY, NONE, $5, AWAKENING
 	object SPRITE_BALL, $c, $10, STAY, NONE, $6, HP_UP
--- a/data/mapObjects/pokemontower5.asm
+++ b/data/mapObjects/pokemontower5.asm
@@ -9,10 +9,10 @@
 
 	db $6 ; objects
 	object SPRITE_MEDIUM, $c, $8, STAY, NONE, $1 ; person
-	object SPRITE_MEDIUM, $11, $7, STAY, LEFT, $2, CHANNELER + $C8, $e
-	object SPRITE_MEDIUM, $e, $3, STAY, LEFT, $3, CHANNELER + $C8, $10
-	object SPRITE_MEDIUM, $6, $a, STAY, RIGHT, $4, CHANNELER + $C8, $11
-	object SPRITE_MEDIUM, $9, $10, STAY, RIGHT, $5, CHANNELER + $C8, $12
+	object SPRITE_MEDIUM, $11, $7, STAY, LEFT, $2, OPP_CHANNELER, $e
+	object SPRITE_MEDIUM, $e, $3, STAY, LEFT, $3, OPP_CHANNELER, $10
+	object SPRITE_MEDIUM, $6, $a, STAY, RIGHT, $4, OPP_CHANNELER, $11
+	object SPRITE_MEDIUM, $9, $10, STAY, RIGHT, $5, OPP_CHANNELER, $12
 	object SPRITE_BALL, $6, $e, STAY, NONE, $6, NUGGET
 
 	; warp-to
--- a/data/mapObjects/pokemontower6.asm
+++ b/data/mapObjects/pokemontower6.asm
@@ -8,9 +8,9 @@
 	db $0 ; signs
 
 	db $5 ; objects
-	object SPRITE_MEDIUM, $c, $a, STAY, RIGHT, $1, CHANNELER + $C8, $13
-	object SPRITE_MEDIUM, $9, $5, STAY, DOWN, $2, CHANNELER + $C8, $14
-	object SPRITE_MEDIUM, $10, $5, STAY, LEFT, $3, CHANNELER + $C8, $15
+	object SPRITE_MEDIUM, $c, $a, STAY, RIGHT, $1, OPP_CHANNELER, $13
+	object SPRITE_MEDIUM, $9, $5, STAY, DOWN, $2, OPP_CHANNELER, $14
+	object SPRITE_MEDIUM, $10, $5, STAY, LEFT, $3, OPP_CHANNELER, $15
 	object SPRITE_BALL, $6, $8, STAY, NONE, $4, RARE_CANDY
 	object SPRITE_BALL, $e, $e, STAY, NONE, $5, X_ACCURACY
 
--- a/data/mapObjects/pokemontower7.asm
+++ b/data/mapObjects/pokemontower7.asm
@@ -13,9 +13,9 @@
 	object SPRITE_MR_FUJI, $a, 3, STAY, DOWN, 3
 ELSE
 	db $4 ; objects
-	object SPRITE_ROCKET, $9, $b, STAY, RIGHT, $1, ROCKET + $C8, $13
-	object SPRITE_ROCKET, $c, $9, STAY, LEFT, $2, ROCKET + $C8, $14
-	object SPRITE_ROCKET, $9, $7, STAY, RIGHT, $3, ROCKET + $C8, $15
+	object SPRITE_ROCKET, $9, $b, STAY, RIGHT, $1, OPP_ROCKET, $13
+	object SPRITE_ROCKET, $c, $9, STAY, LEFT, $2, OPP_ROCKET, $14
+	object SPRITE_ROCKET, $9, $7, STAY, RIGHT, $3, OPP_ROCKET, $15
 	object SPRITE_MR_FUJI, $a, $3, STAY, DOWN, $4 ; person
 ENDC
 
--- a/data/mapObjects/rockethideout1.asm
+++ b/data/mapObjects/rockethideout1.asm
@@ -11,11 +11,11 @@
 	db $0 ; signs
 
 	db $7 ; objects
-	object SPRITE_ROCKET, $1a, $8, STAY, LEFT, $1, ROCKET + $C8, $8
-	object SPRITE_ROCKET, $c, $6, STAY, RIGHT, $2, ROCKET + $C8, $9
-	object SPRITE_ROCKET, $12, $11, STAY, DOWN, $3, ROCKET + $C8, $a
-	object SPRITE_ROCKET, $f, $19, STAY, RIGHT, $4, ROCKET + $C8, $b
-	object SPRITE_ROCKET, $1c, $12, STAY, LEFT, $5, ROCKET + $C8, $c
+	object SPRITE_ROCKET, $1a, $8, STAY, LEFT, $1, OPP_ROCKET, $8
+	object SPRITE_ROCKET, $c, $6, STAY, RIGHT, $2, OPP_ROCKET, $9
+	object SPRITE_ROCKET, $12, $11, STAY, DOWN, $3, OPP_ROCKET, $a
+	object SPRITE_ROCKET, $f, $19, STAY, RIGHT, $4, OPP_ROCKET, $b
+	object SPRITE_ROCKET, $1c, $12, STAY, LEFT, $5, OPP_ROCKET, $c
 	object SPRITE_BALL, $b, $e, STAY, NONE, $6, ESCAPE_ROPE
 	object SPRITE_BALL, $9, $11, STAY, NONE, $7, HYPER_POTION
 
--- a/data/mapObjects/rockethideout2.asm
+++ b/data/mapObjects/rockethideout2.asm
@@ -11,7 +11,7 @@
 	db $0 ; signs
 
 	db $5 ; objects
-	object SPRITE_ROCKET, $14, $c, STAY, DOWN, $1, ROCKET + $C8, $d
+	object SPRITE_ROCKET, $14, $c, STAY, DOWN, $1, OPP_ROCKET, $d
 	object SPRITE_BALL, $1, $b, STAY, NONE, $2, MOON_STONE
 	object SPRITE_BALL, $10, $8, STAY, NONE, $3, NUGGET
 	object SPRITE_BALL, $6, $c, STAY, NONE, $4, TM_07
--- a/data/mapObjects/rockethideout3.asm
+++ b/data/mapObjects/rockethideout3.asm
@@ -8,8 +8,8 @@
 	db $0 ; signs
 
 	db $4 ; objects
-	object SPRITE_ROCKET, $a, $16, STAY, RIGHT, $1, ROCKET + $C8, $e
-	object SPRITE_ROCKET, $1a, $c, STAY, UP, $2, ROCKET + $C8, $f
+	object SPRITE_ROCKET, $a, $16, STAY, RIGHT, $1, OPP_ROCKET, $e
+	object SPRITE_ROCKET, $1a, $c, STAY, UP, $2, OPP_ROCKET, $f
 	object SPRITE_BALL, $1a, $11, STAY, NONE, $3, TM_10
 	object SPRITE_BALL, $14, $e, STAY, NONE, $4, RARE_CANDY
 
--- a/data/mapObjects/rockethideout4.asm
+++ b/data/mapObjects/rockethideout4.asm
@@ -9,10 +9,10 @@
 	db $0 ; signs
 
 	db $9 ; objects
-	object SPRITE_GIOVANNI, $19, $3, STAY, DOWN, $1, GIOVANNI + $C8, $1
-	object SPRITE_ROCKET, $17, $c, STAY, DOWN, $2, ROCKET + $C8, $10
-	object SPRITE_ROCKET, $1a, $c, STAY, DOWN, $3, ROCKET + $C8, $11
-	object SPRITE_ROCKET, $b, $2, STAY, DOWN, $4, ROCKET + $C8, $12
+	object SPRITE_GIOVANNI, $19, $3, STAY, DOWN, $1, OPP_GIOVANNI, $1
+	object SPRITE_ROCKET, $17, $c, STAY, DOWN, $2, OPP_ROCKET, $10
+	object SPRITE_ROCKET, $1a, $c, STAY, DOWN, $3, OPP_ROCKET, $11
+	object SPRITE_ROCKET, $b, $2, STAY, DOWN, $4, OPP_ROCKET, $12
 	object SPRITE_BALL, $a, $c, STAY, NONE, $5, HP_UP
 	object SPRITE_BALL, $9, $4, STAY, NONE, $6, TM_02
 	object SPRITE_BALL, $c, $14, STAY, NONE, $7, IRON
--- a/data/mapObjects/rocktunnel1.asm
+++ b/data/mapObjects/rocktunnel1.asm
@@ -15,13 +15,13 @@
 	db $1d, $b, $8 ; RockTunnel1Text8
 
 	db $7 ; objects
-	object SPRITE_HIKER, $7, $5, STAY, DOWN, $1, HIKER + $C8, $c
-	object SPRITE_HIKER, $5, $10, STAY, DOWN, $2, HIKER + $C8, $d
-	object SPRITE_HIKER, $11, $f, STAY, LEFT, $3, HIKER + $C8, $e
-	object SPRITE_BLACK_HAIR_BOY_2, $17, $8, STAY, LEFT, $4, POKEMANIAC + $C8, $7
-	object SPRITE_LASS, $25, $15, STAY, LEFT, $5, JR__TRAINER_F + $C8, $11
-	object SPRITE_LASS, $16, $18, STAY, DOWN, $6, JR__TRAINER_F + $C8, $12
-	object SPRITE_LASS, $20, $18, STAY, RIGHT, $7, JR__TRAINER_F + $C8, $13
+	object SPRITE_HIKER, $7, $5, STAY, DOWN, $1, OPP_HIKER, $c
+	object SPRITE_HIKER, $5, $10, STAY, DOWN, $2, OPP_HIKER, $d
+	object SPRITE_HIKER, $11, $f, STAY, LEFT, $3, OPP_HIKER, $e
+	object SPRITE_BLACK_HAIR_BOY_2, $17, $8, STAY, LEFT, $4, OPP_POKEMANIAC, $7
+	object SPRITE_LASS, $25, $15, STAY, LEFT, $5, OPP_JR__TRAINER_F, $11
+	object SPRITE_LASS, $16, $18, STAY, DOWN, $6, OPP_JR__TRAINER_F, $12
+	object SPRITE_LASS, $20, $18, STAY, RIGHT, $7, OPP_JR__TRAINER_F, $13
 
 	; warp-to
 	EVENT_DISP ROCK_TUNNEL_1_WIDTH, $3, $f
--- a/data/mapObjects/rocktunnel2.asm
+++ b/data/mapObjects/rocktunnel2.asm
@@ -10,14 +10,14 @@
 	db $0 ; signs
 
 	db $8 ; objects
-	object SPRITE_LASS, $b, $d, STAY, DOWN, $1, JR__TRAINER_F + $C8, $9
-	object SPRITE_HIKER, $6, $a, STAY, DOWN, $2, HIKER + $C8, $9
-	object SPRITE_BLACK_HAIR_BOY_2, $3, $5, STAY, DOWN, $3, POKEMANIAC + $C8, $3
-	object SPRITE_BLACK_HAIR_BOY_2, $14, $15, STAY, RIGHT, $4, POKEMANIAC + $C8, $4
-	object SPRITE_HIKER, $1e, $a, STAY, DOWN, $5, HIKER + $C8, $a
-	object SPRITE_LASS, $e, $1c, STAY, RIGHT, $6, JR__TRAINER_F + $C8, $a
-	object SPRITE_HIKER, $21, $5, STAY, RIGHT, $7, HIKER + $C8, $b
-	object SPRITE_BLACK_HAIR_BOY_2, $1a, $1e, STAY, DOWN, $8, POKEMANIAC + $C8, $5
+	object SPRITE_LASS, $b, $d, STAY, DOWN, $1, OPP_JR__TRAINER_F, $9
+	object SPRITE_HIKER, $6, $a, STAY, DOWN, $2, OPP_HIKER, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $5, STAY, DOWN, $3, OPP_POKEMANIAC, $3
+	object SPRITE_BLACK_HAIR_BOY_2, $14, $15, STAY, RIGHT, $4, OPP_POKEMANIAC, $4
+	object SPRITE_HIKER, $1e, $a, STAY, DOWN, $5, OPP_HIKER, $a
+	object SPRITE_LASS, $e, $1c, STAY, RIGHT, $6, OPP_JR__TRAINER_F, $a
+	object SPRITE_HIKER, $21, $5, STAY, RIGHT, $7, OPP_HIKER, $b
+	object SPRITE_BLACK_HAIR_BOY_2, $1a, $1e, STAY, DOWN, $8, OPP_POKEMANIAC, $5
 
 	; warp-to
 	EVENT_DISP ROCK_TUNNEL_2_WIDTH, $19, $21 ; ROCK_TUNNEL_1
--- a/data/mapObjects/route10.asm
+++ b/data/mapObjects/route10.asm
@@ -14,12 +14,12 @@
 	db $29, $5, $a ; Route10Text10
 
 	db $6 ; objects
-	object SPRITE_BLACK_HAIR_BOY_2, $a, $2c, STAY, LEFT, $1, POKEMANIAC + $C8, $1
-	object SPRITE_HIKER, $3, $39, STAY, UP, $2, HIKER + $C8, $7
-	object SPRITE_BLACK_HAIR_BOY_2, $e, $40, STAY, LEFT, $3, POKEMANIAC + $C8, $2
-	object SPRITE_LASS, $7, $19, STAY, LEFT, $4, JR__TRAINER_F + $C8, $7
-	object SPRITE_HIKER, $3, $3d, STAY, DOWN, $5, HIKER + $C8, $8
-	object SPRITE_LASS, $7, $36, STAY, DOWN, $6, JR__TRAINER_F + $C8, $8
+	object SPRITE_BLACK_HAIR_BOY_2, $a, $2c, STAY, LEFT, $1, OPP_POKEMANIAC, $1
+	object SPRITE_HIKER, $3, $39, STAY, UP, $2, OPP_HIKER, $7
+	object SPRITE_BLACK_HAIR_BOY_2, $e, $40, STAY, LEFT, $3, OPP_POKEMANIAC, $2
+	object SPRITE_LASS, $7, $19, STAY, LEFT, $4, OPP_JR__TRAINER_F, $7
+	object SPRITE_HIKER, $3, $3d, STAY, DOWN, $5, OPP_HIKER, $8
+	object SPRITE_LASS, $7, $36, STAY, DOWN, $6, OPP_JR__TRAINER_F, $8
 
 	; warp-to
 	EVENT_DISP ROUTE_10_WIDTH, $13, $b ; ROCK_TUNNEL_POKECENTER
--- a/data/mapObjects/route11.asm
+++ b/data/mapObjects/route11.asm
@@ -12,16 +12,16 @@
 	db $5, $1, $b ; Route11Text11
 
 	db $a ; objects
-	object SPRITE_GAMBLER, $a, $e, STAY, DOWN, $1, GAMBLER + $C8, $1
-	object SPRITE_GAMBLER, $1a, $9, STAY, DOWN, $2, GAMBLER + $C8, $2
-	object SPRITE_BUG_CATCHER, $d, $5, STAY, LEFT, $3, YOUNGSTER + $C8, $9
-	object SPRITE_BLACK_HAIR_BOY_2, $24, $b, STAY, DOWN, $4, ENGINEER + $C8, $2
-	object SPRITE_BUG_CATCHER, $16, $4, STAY, UP, $5, YOUNGSTER + $C8, $a
-	object SPRITE_GAMBLER, $2d, $7, STAY, DOWN, $6, GAMBLER + $C8, $3
-	object SPRITE_GAMBLER, $21, $3, STAY, UP, $7, GAMBLER + $C8, $4
-	object SPRITE_BUG_CATCHER, $2b, $5, STAY, RIGHT, $8, YOUNGSTER + $C8, $b
-	object SPRITE_BLACK_HAIR_BOY_2, $2d, $10, STAY, LEFT, $9, ENGINEER + $C8, $3
-	object SPRITE_BUG_CATCHER, $16, $c, STAY, UP, $a, YOUNGSTER + $C8, $c
+	object SPRITE_GAMBLER, $a, $e, STAY, DOWN, $1, OPP_GAMBLER, $1
+	object SPRITE_GAMBLER, $1a, $9, STAY, DOWN, $2, OPP_GAMBLER, $2
+	object SPRITE_BUG_CATCHER, $d, $5, STAY, LEFT, $3, OPP_YOUNGSTER, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $24, $b, STAY, DOWN, $4, OPP_ENGINEER, $2
+	object SPRITE_BUG_CATCHER, $16, $4, STAY, UP, $5, OPP_YOUNGSTER, $a
+	object SPRITE_GAMBLER, $2d, $7, STAY, DOWN, $6, OPP_GAMBLER, $3
+	object SPRITE_GAMBLER, $21, $3, STAY, UP, $7, OPP_GAMBLER, $4
+	object SPRITE_BUG_CATCHER, $2b, $5, STAY, RIGHT, $8, OPP_YOUNGSTER, $b
+	object SPRITE_BLACK_HAIR_BOY_2, $2d, $10, STAY, LEFT, $9, OPP_ENGINEER, $3
+	object SPRITE_BUG_CATCHER, $16, $c, STAY, UP, $a, OPP_YOUNGSTER, $c
 
 	; warp-to
 	EVENT_DISP ROUTE_11_WIDTH, $8, $31 ; ROUTE_11_GATE_1F
--- a/data/mapObjects/route12.asm
+++ b/data/mapObjects/route12.asm
@@ -13,13 +13,13 @@
 
 	db $a ; objects
 	object SPRITE_SNORLAX, $a, $3e, STAY, DOWN, $1 ; person
-	object SPRITE_FISHER2, $e, $1f, STAY, LEFT, $2, FISHER + $C8, $3
-	object SPRITE_FISHER2, $5, $27, STAY, UP, $3, FISHER + $C8, $4
-	object SPRITE_BLACK_HAIR_BOY_1, $b, $5c, STAY, LEFT, $4, JR__TRAINER_M + $C8, $9
-	object SPRITE_BLACK_HAIR_BOY_2, $e, $4c, STAY, UP, $5, ROCKER + $C8, $2
-	object SPRITE_FISHER2, $c, $28, STAY, LEFT, $6, FISHER + $C8, $5
-	object SPRITE_FISHER2, $9, $34, STAY, RIGHT, $7, FISHER + $C8, $6
-	object SPRITE_FISHER2, $6, $57, STAY, DOWN, $8, FISHER + $C8, $b
+	object SPRITE_FISHER2, $e, $1f, STAY, LEFT, $2, OPP_FISHER, $3
+	object SPRITE_FISHER2, $5, $27, STAY, UP, $3, OPP_FISHER, $4
+	object SPRITE_BLACK_HAIR_BOY_1, $b, $5c, STAY, LEFT, $4, OPP_JR__TRAINER_M, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $e, $4c, STAY, UP, $5, OPP_ROCKER, $2
+	object SPRITE_FISHER2, $c, $28, STAY, LEFT, $6, OPP_FISHER, $5
+	object SPRITE_FISHER2, $9, $34, STAY, RIGHT, $7, OPP_FISHER, $6
+	object SPRITE_FISHER2, $6, $57, STAY, DOWN, $8, OPP_FISHER, $b
 	object SPRITE_BALL, $e, $23, STAY, NONE, $9, TM_16
 	object SPRITE_BALL, $5, $59, STAY, NONE, $a, IRON
 
--- a/data/mapObjects/route13.asm
+++ b/data/mapObjects/route13.asm
@@ -9,13 +9,13 @@
 	db $b, $1f, $d ; Route13Text13
 
 	db $a ; objects
-	object SPRITE_BLACK_HAIR_BOY_1, $31, $a, STAY, RIGHT, $1, BIRD_KEEPER + $C8, $1
-	object SPRITE_LASS, $30, $a, STAY, DOWN, $2, JR__TRAINER_F + $C8, $c
-	object SPRITE_LASS, $1b, $9, STAY, DOWN, $3, JR__TRAINER_F + $C8, $d
-	object SPRITE_LASS, $17, $a, STAY, LEFT, $4, JR__TRAINER_F + $C8, $e
-	object SPRITE_LASS, $32, $5, STAY, DOWN, $5, JR__TRAINER_F + $C8, $f
-	object SPRITE_BLACK_HAIR_BOY_1, $c, $4, STAY, RIGHT, $6, BIRD_KEEPER + $C8, $2
-	object SPRITE_FOULARD_WOMAN, $21, $6, STAY, DOWN, $7, BEAUTY + $C8, $4
-	object SPRITE_FOULARD_WOMAN, $20, $6, STAY, DOWN, $8, BEAUTY + $C8, $5
-	object SPRITE_BIKER, $a, $7, STAY, UP, $9, BIKER + $C8, $1
-	object SPRITE_BLACK_HAIR_BOY_1, $7, $d, STAY, UP, $a, BIRD_KEEPER + $C8, $3
+	object SPRITE_BLACK_HAIR_BOY_1, $31, $a, STAY, RIGHT, $1, OPP_BIRD_KEEPER, $1
+	object SPRITE_LASS, $30, $a, STAY, DOWN, $2, OPP_JR__TRAINER_F, $c
+	object SPRITE_LASS, $1b, $9, STAY, DOWN, $3, OPP_JR__TRAINER_F, $d
+	object SPRITE_LASS, $17, $a, STAY, LEFT, $4, OPP_JR__TRAINER_F, $e
+	object SPRITE_LASS, $32, $5, STAY, DOWN, $5, OPP_JR__TRAINER_F, $f
+	object SPRITE_BLACK_HAIR_BOY_1, $c, $4, STAY, RIGHT, $6, OPP_BIRD_KEEPER, $2
+	object SPRITE_FOULARD_WOMAN, $21, $6, STAY, DOWN, $7, OPP_BEAUTY, $4
+	object SPRITE_FOULARD_WOMAN, $20, $6, STAY, DOWN, $8, OPP_BEAUTY, $5
+	object SPRITE_BIKER, $a, $7, STAY, UP, $9, OPP_BIKER, $1
+	object SPRITE_BLACK_HAIR_BOY_1, $7, $d, STAY, UP, $a, OPP_BIRD_KEEPER, $3
--- a/data/mapObjects/route14.asm
+++ b/data/mapObjects/route14.asm
@@ -7,13 +7,13 @@
 	db $d, $11, $b ; Route14Text11
 
 	db $a ; objects
-	object SPRITE_BLACK_HAIR_BOY_1, $4, $4, STAY, DOWN, $1, BIRD_KEEPER + $C8, $e
-	object SPRITE_BLACK_HAIR_BOY_1, $f, $6, STAY, DOWN, $2, BIRD_KEEPER + $C8, $f
-	object SPRITE_BLACK_HAIR_BOY_1, $c, $b, STAY, DOWN, $3, BIRD_KEEPER + $C8, $10
-	object SPRITE_BLACK_HAIR_BOY_1, $e, $f, STAY, UP, $4, BIRD_KEEPER + $C8, $11
-	object SPRITE_BLACK_HAIR_BOY_1, $f, $1f, STAY, LEFT, $5, BIRD_KEEPER + $C8, $4
-	object SPRITE_BLACK_HAIR_BOY_1, $6, $31, STAY, UP, $6, BIRD_KEEPER + $C8, $5
-	object SPRITE_BIKER, $5, $27, STAY, DOWN, $7, BIKER + $C8, $d
-	object SPRITE_BIKER, $4, $1e, STAY, RIGHT, $8, BIKER + $C8, $e
-	object SPRITE_BIKER, $f, $1e, STAY, LEFT, $9, BIKER + $C8, $f
-	object SPRITE_BIKER, $4, $1f, STAY, RIGHT, $a, BIKER + $C8, $2
+	object SPRITE_BLACK_HAIR_BOY_1, $4, $4, STAY, DOWN, $1, OPP_BIRD_KEEPER, $e
+	object SPRITE_BLACK_HAIR_BOY_1, $f, $6, STAY, DOWN, $2, OPP_BIRD_KEEPER, $f
+	object SPRITE_BLACK_HAIR_BOY_1, $c, $b, STAY, DOWN, $3, OPP_BIRD_KEEPER, $10
+	object SPRITE_BLACK_HAIR_BOY_1, $e, $f, STAY, UP, $4, OPP_BIRD_KEEPER, $11
+	object SPRITE_BLACK_HAIR_BOY_1, $f, $1f, STAY, LEFT, $5, OPP_BIRD_KEEPER, $4
+	object SPRITE_BLACK_HAIR_BOY_1, $6, $31, STAY, UP, $6, OPP_BIRD_KEEPER, $5
+	object SPRITE_BIKER, $5, $27, STAY, DOWN, $7, OPP_BIKER, $d
+	object SPRITE_BIKER, $4, $1e, STAY, RIGHT, $8, OPP_BIKER, $e
+	object SPRITE_BIKER, $f, $1e, STAY, LEFT, $9, OPP_BIKER, $f
+	object SPRITE_BIKER, $4, $1f, STAY, RIGHT, $a, OPP_BIKER, $2
--- a/data/mapObjects/route15.asm
+++ b/data/mapObjects/route15.asm
@@ -11,16 +11,16 @@
 	db $9, $27, $c ; Route15Text12
 
 	db $b ; objects
-	object SPRITE_LASS, $29, $b, STAY, DOWN, $1, JR__TRAINER_F + $C8, $14
-	object SPRITE_LASS, $35, $a, STAY, LEFT, $2, JR__TRAINER_F + $C8, $15
-	object SPRITE_BLACK_HAIR_BOY_1, $1f, $d, STAY, UP, $3, BIRD_KEEPER + $C8, $6
-	object SPRITE_BLACK_HAIR_BOY_1, $23, $d, STAY, UP, $4, BIRD_KEEPER + $C8, $7
-	object SPRITE_FOULARD_WOMAN, $35, $b, STAY, DOWN, $5, BEAUTY + $C8, $9
-	object SPRITE_FOULARD_WOMAN, $29, $a, STAY, RIGHT, $6, BEAUTY + $C8, $a
-	object SPRITE_BIKER, $30, $a, STAY, DOWN, $7, BIKER + $C8, $3
-	object SPRITE_BIKER, $2e, $a, STAY, DOWN, $8, BIKER + $C8, $4
-	object SPRITE_LASS, $25, $5, STAY, RIGHT, $9, JR__TRAINER_F + $C8, $16
-	object SPRITE_LASS, $12, $d, STAY, UP, $a, JR__TRAINER_F + $C8, $17
+	object SPRITE_LASS, $29, $b, STAY, DOWN, $1, OPP_JR__TRAINER_F, $14
+	object SPRITE_LASS, $35, $a, STAY, LEFT, $2, OPP_JR__TRAINER_F, $15
+	object SPRITE_BLACK_HAIR_BOY_1, $1f, $d, STAY, UP, $3, OPP_BIRD_KEEPER, $6
+	object SPRITE_BLACK_HAIR_BOY_1, $23, $d, STAY, UP, $4, OPP_BIRD_KEEPER, $7
+	object SPRITE_FOULARD_WOMAN, $35, $b, STAY, DOWN, $5, OPP_BEAUTY, $9
+	object SPRITE_FOULARD_WOMAN, $29, $a, STAY, RIGHT, $6, OPP_BEAUTY, $a
+	object SPRITE_BIKER, $30, $a, STAY, DOWN, $7, OPP_BIKER, $3
+	object SPRITE_BIKER, $2e, $a, STAY, DOWN, $8, OPP_BIKER, $4
+	object SPRITE_LASS, $25, $5, STAY, RIGHT, $9, OPP_JR__TRAINER_F, $16
+	object SPRITE_LASS, $12, $d, STAY, UP, $a, OPP_JR__TRAINER_F, $17
 	object SPRITE_BALL, $12, $5, STAY, NONE, $b, TM_20
 
 	; warp-to
--- a/data/mapObjects/route16.asm
+++ b/data/mapObjects/route16.asm
@@ -17,12 +17,12 @@
 	db $11, $5, $9 ; Route16Text9
 
 	db $7 ; objects
-	object SPRITE_BIKER, $11, $c, STAY, LEFT, $1, BIKER + $C8, $5
-	object SPRITE_BIKER, $e, $d, STAY, RIGHT, $2, CUE_BALL + $C8, $1
-	object SPRITE_BIKER, $b, $c, STAY, UP, $3, CUE_BALL + $C8, $2
-	object SPRITE_BIKER, $9, $b, STAY, LEFT, $4, BIKER + $C8, $6
-	object SPRITE_BIKER, $6, $a, STAY, RIGHT, $5, CUE_BALL + $C8, $3
-	object SPRITE_BIKER, $3, $c, STAY, RIGHT, $6, BIKER + $C8, $7
+	object SPRITE_BIKER, $11, $c, STAY, LEFT, $1, OPP_BIKER, $5
+	object SPRITE_BIKER, $e, $d, STAY, RIGHT, $2, OPP_CUE_BALL, $1
+	object SPRITE_BIKER, $b, $c, STAY, UP, $3, OPP_CUE_BALL, $2
+	object SPRITE_BIKER, $9, $b, STAY, LEFT, $4, OPP_BIKER, $6
+	object SPRITE_BIKER, $6, $a, STAY, RIGHT, $5, OPP_CUE_BALL, $3
+	object SPRITE_BIKER, $3, $c, STAY, RIGHT, $6, OPP_BIKER, $7
 	object SPRITE_SNORLAX, $1a, $a, STAY, DOWN, $7 ; person
 
 	; warp-to
--- a/data/mapObjects/route17.asm
+++ b/data/mapObjects/route17.asm
@@ -12,13 +12,13 @@
 	db $8d, $9, $10 ; Route17Text16
 
 	db $a ; objects
-	object SPRITE_BIKER, $c, $13, STAY, LEFT, $1, CUE_BALL + $C8, $4
-	object SPRITE_BIKER, $b, $10, STAY, RIGHT, $2, CUE_BALL + $C8, $5
-	object SPRITE_BIKER, $4, $12, STAY, UP, $3, BIKER + $C8, $8
-	object SPRITE_BIKER, $7, $20, STAY, LEFT, $4, BIKER + $C8, $9
-	object SPRITE_BIKER, $e, $22, STAY, RIGHT, $5, BIKER + $C8, $a
-	object SPRITE_BIKER, $11, $3a, STAY, LEFT, $6, CUE_BALL + $C8, $6
-	object SPRITE_BIKER, $2, $44, STAY, RIGHT, $7, CUE_BALL + $C8, $7
-	object SPRITE_BIKER, $e, $62, STAY, RIGHT, $8, CUE_BALL + $C8, $8
-	object SPRITE_BIKER, $5, $62, STAY, LEFT, $9, BIKER + $C8, $b
-	object SPRITE_BIKER, $a, $76, STAY, DOWN, $a, BIKER + $C8, $c
+	object SPRITE_BIKER, $c, $13, STAY, LEFT, $1, OPP_CUE_BALL, $4
+	object SPRITE_BIKER, $b, $10, STAY, RIGHT, $2, OPP_CUE_BALL, $5
+	object SPRITE_BIKER, $4, $12, STAY, UP, $3, OPP_BIKER, $8
+	object SPRITE_BIKER, $7, $20, STAY, LEFT, $4, OPP_BIKER, $9
+	object SPRITE_BIKER, $e, $22, STAY, RIGHT, $5, OPP_BIKER, $a
+	object SPRITE_BIKER, $11, $3a, STAY, LEFT, $6, OPP_CUE_BALL, $6
+	object SPRITE_BIKER, $2, $44, STAY, RIGHT, $7, OPP_CUE_BALL, $7
+	object SPRITE_BIKER, $e, $62, STAY, RIGHT, $8, OPP_CUE_BALL, $8
+	object SPRITE_BIKER, $5, $62, STAY, LEFT, $9, OPP_BIKER, $b
+	object SPRITE_BIKER, $a, $76, STAY, DOWN, $a, OPP_BIKER, $c
--- a/data/mapObjects/route18.asm
+++ b/data/mapObjects/route18.asm
@@ -12,9 +12,9 @@
 	db $5, $21, $5 ; Route18Text5
 
 	db $3 ; objects
-	object SPRITE_BLACK_HAIR_BOY_1, $24, $b, STAY, RIGHT, $1, BIRD_KEEPER + $C8, $8
-	object SPRITE_BLACK_HAIR_BOY_1, $28, $f, STAY, LEFT, $2, BIRD_KEEPER + $C8, $9
-	object SPRITE_BLACK_HAIR_BOY_1, $2a, $d, STAY, LEFT, $3, BIRD_KEEPER + $C8, $a
+	object SPRITE_BLACK_HAIR_BOY_1, $24, $b, STAY, RIGHT, $1, OPP_BIRD_KEEPER, $8
+	object SPRITE_BLACK_HAIR_BOY_1, $28, $f, STAY, LEFT, $2, OPP_BIRD_KEEPER, $9
+	object SPRITE_BLACK_HAIR_BOY_1, $2a, $d, STAY, LEFT, $3, OPP_BIRD_KEEPER, $a
 
 	; warp-to
 	EVENT_DISP ROUTE_18_WIDTH, $8, $21 ; ROUTE_18_GATE_1F
--- a/data/mapObjects/route19.asm
+++ b/data/mapObjects/route19.asm
@@ -17,24 +17,24 @@
 
 	db $a ; objects
 IF DEF(_OPTION_BEACH_HOUSE)
-	object SPRITE_BLACK_HAIR_BOY_1, $9, $7, STAY, RIGHT, 1, SWIMMER + $C8, 2
-	object SPRITE_BLACK_HAIR_BOY_1, $c, $9, STAY, LEFT, 2, SWIMMER + $C8, 3
+	object SPRITE_BLACK_HAIR_BOY_1, $9, $7, STAY, RIGHT, 1, OPP_SWIMMER, 2
+	object SPRITE_BLACK_HAIR_BOY_1, $c, $9, STAY, LEFT, 2, OPP_SWIMMER, 3
 ELSE
-	object SPRITE_BLACK_HAIR_BOY_1, $8, $7, STAY, LEFT, 1, SWIMMER + $C8, 2
-	object SPRITE_BLACK_HAIR_BOY_1, $d, $7, STAY, LEFT, 2, SWIMMER + $C8, 3
+	object SPRITE_BLACK_HAIR_BOY_1, $8, $7, STAY, LEFT, 1, OPP_SWIMMER, 2
+	object SPRITE_BLACK_HAIR_BOY_1, $d, $7, STAY, LEFT, 2, OPP_SWIMMER, 3
 ENDC
-	object SPRITE_SWIMMER, $d, $19, STAY, LEFT, $3, SWIMMER + $C8, $4
-	object SPRITE_SWIMMER, $4, $1b, STAY, RIGHT, $4, SWIMMER + $C8, $5
-	object SPRITE_SWIMMER, $10, $1f, STAY, UP, $5, SWIMMER + $C8, $6
+	object SPRITE_SWIMMER, $d, $19, STAY, LEFT, $3, OPP_SWIMMER, $4
+	object SPRITE_SWIMMER, $4, $1b, STAY, RIGHT, $4, OPP_SWIMMER, $5
+	object SPRITE_SWIMMER, $10, $1f, STAY, UP, $5, OPP_SWIMMER, $6
 IF DEF(_OPTION_BEACH_HOUSE)
-	object SPRITE_SWIMMER, $9, $d, STAY, DOWN, $6, SWIMMER + $C8, $7
+	object SPRITE_SWIMMER, $9, $d, STAY, DOWN, $6, OPP_SWIMMER, $7
 ELSE
-	object SPRITE_SWIMMER, $9, $b, STAY, DOWN, $6, SWIMMER + $C8, $7
+	object SPRITE_SWIMMER, $9, $b, STAY, DOWN, $6, OPP_SWIMMER, $7
 ENDC
-	object SPRITE_SWIMMER, $8, $2b, STAY, LEFT, $7, BEAUTY + $C8, $c
-	object SPRITE_SWIMMER, $b, $2b, STAY, RIGHT, $8, BEAUTY + $C8, $d
-	object SPRITE_SWIMMER, $9, $2a, STAY, UP, $9, SWIMMER + $C8, $8
-	object SPRITE_SWIMMER, $a, $2c, STAY, DOWN, $a, BEAUTY + $C8, $e
+	object SPRITE_SWIMMER, $8, $2b, STAY, LEFT, $7, OPP_BEAUTY, $c
+	object SPRITE_SWIMMER, $b, $2b, STAY, RIGHT, $8, OPP_BEAUTY, $d
+	object SPRITE_SWIMMER, $9, $2a, STAY, UP, $9, OPP_SWIMMER, $8
+	object SPRITE_SWIMMER, $a, $2c, STAY, DOWN, $a, OPP_BEAUTY, $e
 
 	; warp-to
 	IF DEF(_OPTION_BEACH_HOUSE)
--- a/data/mapObjects/route20.asm
+++ b/data/mapObjects/route20.asm
@@ -10,16 +10,16 @@
 	db $b, $39, $c ; Route20Text12
 
 	db $a ; objects
-	object SPRITE_SWIMMER, $57, $8, STAY, UP, $1, SWIMMER + $C8, $9
-	object SPRITE_SWIMMER, $44, $b, STAY, UP, $2, BEAUTY + $C8, $f
-	object SPRITE_SWIMMER, $2d, $a, STAY, DOWN, $3, BEAUTY + $C8, $6
-	object SPRITE_SWIMMER, $37, $e, STAY, RIGHT, $4, JR__TRAINER_F + $C8, $18
-	object SPRITE_SWIMMER, $26, $d, STAY, DOWN, $5, SWIMMER + $C8, $a
-	object SPRITE_SWIMMER, $57, $d, STAY, UP, $6, SWIMMER + $C8, $b
-	object SPRITE_BLACK_HAIR_BOY_1, $22, $9, STAY, UP, $7, BIRD_KEEPER + $C8, $b
-	object SPRITE_SWIMMER, $19, $7, STAY, UP, $8, BEAUTY + $C8, $7
-	object SPRITE_SWIMMER, $18, $c, STAY, DOWN, $9, JR__TRAINER_F + $C8, $10
-	object SPRITE_SWIMMER, $f, $8, STAY, UP, $a, BEAUTY + $C8, $8
+	object SPRITE_SWIMMER, $57, $8, STAY, UP, $1, OPP_SWIMMER, $9
+	object SPRITE_SWIMMER, $44, $b, STAY, UP, $2, OPP_BEAUTY, $f
+	object SPRITE_SWIMMER, $2d, $a, STAY, DOWN, $3, OPP_BEAUTY, $6
+	object SPRITE_SWIMMER, $37, $e, STAY, RIGHT, $4, OPP_JR__TRAINER_F, $18
+	object SPRITE_SWIMMER, $26, $d, STAY, DOWN, $5, OPP_SWIMMER, $a
+	object SPRITE_SWIMMER, $57, $d, STAY, UP, $6, OPP_SWIMMER, $b
+	object SPRITE_BLACK_HAIR_BOY_1, $22, $9, STAY, UP, $7, OPP_BIRD_KEEPER, $b
+	object SPRITE_SWIMMER, $19, $7, STAY, UP, $8, OPP_BEAUTY, $7
+	object SPRITE_SWIMMER, $18, $c, STAY, DOWN, $9, OPP_JR__TRAINER_F, $10
+	object SPRITE_SWIMMER, $f, $8, STAY, UP, $a, OPP_BEAUTY, $8
 
 	; warp-to
 	EVENT_DISP ROUTE_20_WIDTH, $5, $30 ; SEAFOAM_ISLANDS_1
--- a/data/mapObjects/route21.asm
+++ b/data/mapObjects/route21.asm
@@ -6,12 +6,12 @@
 	db $0 ; signs
 
 	db $9 ; objects
-	object SPRITE_FISHER2, $4, $18, STAY, LEFT, $1, FISHER + $C8, $7
-	object SPRITE_FISHER2, $6, $19, STAY, DOWN, $2, FISHER + $C8, $9
-	object SPRITE_SWIMMER, $a, $1f, STAY, UP, $3, SWIMMER + $C8, $c
-	object SPRITE_SWIMMER, $c, $1e, STAY, RIGHT, $4, CUE_BALL + $C8, $9
-	object SPRITE_SWIMMER, $10, $3f, STAY, DOWN, $5, SWIMMER + $C8, $d
-	object SPRITE_SWIMMER, $5, $47, STAY, RIGHT, $6, SWIMMER + $C8, $e
-	object SPRITE_SWIMMER, $f, $47, STAY, LEFT, $7, SWIMMER + $C8, $f
-	object SPRITE_FISHER2, $e, $38, STAY, LEFT, $8, FISHER + $C8, $8
-	object SPRITE_FISHER2, $11, $39, STAY, RIGHT, $9, FISHER + $C8, $a
+	object SPRITE_FISHER2, $4, $18, STAY, LEFT, $1, OPP_FISHER, $7
+	object SPRITE_FISHER2, $6, $19, STAY, DOWN, $2, OPP_FISHER, $9
+	object SPRITE_SWIMMER, $a, $1f, STAY, UP, $3, OPP_SWIMMER, $c
+	object SPRITE_SWIMMER, $c, $1e, STAY, RIGHT, $4, OPP_CUE_BALL, $9
+	object SPRITE_SWIMMER, $10, $3f, STAY, DOWN, $5, OPP_SWIMMER, $d
+	object SPRITE_SWIMMER, $5, $47, STAY, RIGHT, $6, OPP_SWIMMER, $e
+	object SPRITE_SWIMMER, $f, $47, STAY, LEFT, $7, OPP_SWIMMER, $f
+	object SPRITE_FISHER2, $e, $38, STAY, LEFT, $8, OPP_FISHER, $8
+	object SPRITE_FISHER2, $11, $39, STAY, RIGHT, $9, OPP_FISHER, $a
--- a/data/mapObjects/route24.asm
+++ b/data/mapObjects/route24.asm
@@ -6,11 +6,11 @@
 	db $0 ; signs
 
 	db $8 ; objects
-	object SPRITE_BLACK_HAIR_BOY_1, $b, $f, STAY, LEFT, $1, ROCKET + $C8, $6
-	object SPRITE_BLACK_HAIR_BOY_1, $5, $14, STAY, UP, $2, JR__TRAINER_M + $C8, $2
-	object SPRITE_BLACK_HAIR_BOY_1, $b, $13, STAY, LEFT, $3, JR__TRAINER_M + $C8, $3
-	object SPRITE_LASS, $a, $16, STAY, RIGHT, $4, LASS + $C8, $7
-	object SPRITE_BUG_CATCHER, $b, $19, STAY, LEFT, $5, YOUNGSTER + $C8, $4
-	object SPRITE_LASS, $a, $1c, STAY, RIGHT, $6, LASS + $C8, $8
-	object SPRITE_BUG_CATCHER, $b, $1f, STAY, LEFT, $7, BUG_CATCHER + $C8, $9
+	object SPRITE_BLACK_HAIR_BOY_1, $b, $f, STAY, LEFT, $1, OPP_ROCKET, $6
+	object SPRITE_BLACK_HAIR_BOY_1, $5, $14, STAY, UP, $2, OPP_JR__TRAINER_M, $2
+	object SPRITE_BLACK_HAIR_BOY_1, $b, $13, STAY, LEFT, $3, OPP_JR__TRAINER_M, $3
+	object SPRITE_LASS, $a, $16, STAY, RIGHT, $4, OPP_LASS, $7
+	object SPRITE_BUG_CATCHER, $b, $19, STAY, LEFT, $5, OPP_YOUNGSTER, $4
+	object SPRITE_LASS, $a, $1c, STAY, RIGHT, $6, OPP_LASS, $8
+	object SPRITE_BUG_CATCHER, $b, $1f, STAY, LEFT, $7, OPP_BUG_CATCHER, $9
 	object SPRITE_BALL, $a, $5, STAY, NONE, $8, TM_45
--- a/data/mapObjects/route25.asm
+++ b/data/mapObjects/route25.asm
@@ -8,15 +8,15 @@
 	db $3, $2b, $b ; Route25Text11
 
 	db $a ; objects
-	object SPRITE_BUG_CATCHER, $e, $2, STAY, DOWN, $1, YOUNGSTER + $C8, $5
-	object SPRITE_BUG_CATCHER, $12, $5, STAY, UP, $2, YOUNGSTER + $C8, $6
-	object SPRITE_BLACK_HAIR_BOY_1, $18, $4, STAY, DOWN, $3, JR__TRAINER_M + $C8, $2
-	object SPRITE_LASS, $12, $8, STAY, RIGHT, $4, LASS + $C8, $9
-	object SPRITE_BUG_CATCHER, $20, $3, STAY, LEFT, $5, YOUNGSTER + $C8, $7
-	object SPRITE_LASS, $25, $4, STAY, DOWN, $6, LASS + $C8, $a
-	object SPRITE_HIKER, $8, $4, STAY, RIGHT, $7, HIKER + $C8, $2
-	object SPRITE_HIKER, $17, $9, STAY, UP, $8, HIKER + $C8, $3
-	object SPRITE_HIKER, $d, $7, STAY, RIGHT, $9, HIKER + $C8, $4
+	object SPRITE_BUG_CATCHER, $e, $2, STAY, DOWN, $1, OPP_YOUNGSTER, $5
+	object SPRITE_BUG_CATCHER, $12, $5, STAY, UP, $2, OPP_YOUNGSTER, $6
+	object SPRITE_BLACK_HAIR_BOY_1, $18, $4, STAY, DOWN, $3, OPP_JR__TRAINER_M, $2
+	object SPRITE_LASS, $12, $8, STAY, RIGHT, $4, OPP_LASS, $9
+	object SPRITE_BUG_CATCHER, $20, $3, STAY, LEFT, $5, OPP_YOUNGSTER, $7
+	object SPRITE_LASS, $25, $4, STAY, DOWN, $6, OPP_LASS, $a
+	object SPRITE_HIKER, $8, $4, STAY, RIGHT, $7, OPP_HIKER, $2
+	object SPRITE_HIKER, $17, $9, STAY, UP, $8, OPP_HIKER, $3
+	object SPRITE_HIKER, $d, $7, STAY, RIGHT, $9, OPP_HIKER, $4
 	object SPRITE_BALL, $16, $2, STAY, NONE, $a, TM_19
 
 	; warp-to
--- a/data/mapObjects/route3.asm
+++ b/data/mapObjects/route3.asm
@@ -8,11 +8,11 @@
 
 	db $9 ; objects
 	object SPRITE_BLACK_HAIR_BOY_2, $39, $b, STAY, NONE, $1 ; person
-	object SPRITE_BUG_CATCHER, $a, $6, STAY, RIGHT, $2, BUG_CATCHER + $C8, $4
-	object SPRITE_BUG_CATCHER, $e, $4, STAY, DOWN, $3, YOUNGSTER + $C8, $1
-	object SPRITE_LASS, $10, $9, STAY, LEFT, $4, LASS + $C8, $1
-	object SPRITE_BUG_CATCHER, $13, $5, STAY, DOWN, $5, BUG_CATCHER + $C8, $5
-	object SPRITE_LASS, $17, $4, STAY, LEFT, $6, LASS + $C8, $2
-	object SPRITE_BUG_CATCHER, $16, $9, STAY, LEFT, $7, YOUNGSTER + $C8, $2
-	object SPRITE_BUG_CATCHER, $18, $6, STAY, RIGHT, $8, BUG_CATCHER + $C8, $6
-	object SPRITE_LASS, $21, $a, STAY, UP, $9, LASS + $C8, $3
+	object SPRITE_BUG_CATCHER, $a, $6, STAY, RIGHT, $2, OPP_BUG_CATCHER, $4
+	object SPRITE_BUG_CATCHER, $e, $4, STAY, DOWN, $3, OPP_YOUNGSTER, $1
+	object SPRITE_LASS, $10, $9, STAY, LEFT, $4, OPP_LASS, $1
+	object SPRITE_BUG_CATCHER, $13, $5, STAY, DOWN, $5, OPP_BUG_CATCHER, $5
+	object SPRITE_LASS, $17, $4, STAY, LEFT, $6, OPP_LASS, $2
+	object SPRITE_BUG_CATCHER, $16, $9, STAY, LEFT, $7, OPP_YOUNGSTER, $2
+	object SPRITE_BUG_CATCHER, $18, $6, STAY, RIGHT, $8, OPP_BUG_CATCHER, $6
+	object SPRITE_LASS, $21, $a, STAY, UP, $9, OPP_LASS, $3
--- a/data/mapObjects/route4.asm
+++ b/data/mapObjects/route4.asm
@@ -13,7 +13,7 @@
 
 	db $3 ; objects
 	object SPRITE_LASS, $9, $8, WALK, $0, $1 ; person
-	object SPRITE_LASS, $3f, $3, STAY, RIGHT, $2, LASS + $C8, $4
+	object SPRITE_LASS, $3f, $3, STAY, RIGHT, $2, OPP_LASS, $4
 	object SPRITE_BALL, $39, $3, STAY, NONE, $3, TM_04
 
 	; warp-to
--- a/data/mapObjects/route6.asm
+++ b/data/mapObjects/route6.asm
@@ -11,12 +11,12 @@
 	db $f, $13, $7 ; Route6Text7
 
 	db $6 ; objects
-	object SPRITE_BLACK_HAIR_BOY_1, $a, $15, STAY, RIGHT, $1, JR__TRAINER_M + $C8, $4
-	object SPRITE_LASS, $b, $15, STAY, LEFT, $2, JR__TRAINER_F + $C8, $2
-	object SPRITE_BUG_CATCHER, $0, $f, STAY, RIGHT, $3, BUG_CATCHER + $C8, $a
-	object SPRITE_BLACK_HAIR_BOY_1, $b, $1f, STAY, LEFT, $4, JR__TRAINER_M + $C8, $5
-	object SPRITE_LASS, $b, $1e, STAY, LEFT, $5, JR__TRAINER_F + $C8, $3
-	object SPRITE_BUG_CATCHER, $13, $1a, STAY, LEFT, $6, BUG_CATCHER + $C8, $b
+	object SPRITE_BLACK_HAIR_BOY_1, $a, $15, STAY, RIGHT, $1, OPP_JR__TRAINER_M, $4
+	object SPRITE_LASS, $b, $15, STAY, LEFT, $2, OPP_JR__TRAINER_F, $2
+	object SPRITE_BUG_CATCHER, $0, $f, STAY, RIGHT, $3, OPP_BUG_CATCHER, $a
+	object SPRITE_BLACK_HAIR_BOY_1, $b, $1f, STAY, LEFT, $4, OPP_JR__TRAINER_M, $5
+	object SPRITE_LASS, $b, $1e, STAY, LEFT, $5, OPP_JR__TRAINER_F, $3
+	object SPRITE_BUG_CATCHER, $13, $1a, STAY, LEFT, $6, OPP_BUG_CATCHER, $b
 
 	; warp-to
 	EVENT_DISP ROUTE_6_WIDTH, $1, $9 ; ROUTE_6_GATE
--- a/data/mapObjects/route8.asm
+++ b/data/mapObjects/route8.asm
@@ -12,15 +12,15 @@
 	db $3, $11, $a ; Route8Text10
 
 	db $9 ; objects
-	object SPRITE_BLACK_HAIR_BOY_2, $8, $5, STAY, RIGHT, $1, SUPER_NERD + $C8, $3
-	object SPRITE_GAMBLER, $d, $9, STAY, UP, $2, GAMBLER + $C8, $5
-	object SPRITE_BLACK_HAIR_BOY_2, $2a, $6, STAY, UP, $3, SUPER_NERD + $C8, $4
-	object SPRITE_LASS, $1a, $3, STAY, LEFT, $4, LASS + $C8, $d
-	object SPRITE_BLACK_HAIR_BOY_2, $1a, $4, STAY, RIGHT, $5, SUPER_NERD + $C8, $5
-	object SPRITE_LASS, $1a, $5, STAY, LEFT, $6, LASS + $C8, $e
-	object SPRITE_LASS, $1a, $6, STAY, RIGHT, $7, LASS + $C8, $f
-	object SPRITE_GAMBLER, $2e, $d, STAY, DOWN, $8, GAMBLER + $C8, $7
-	object SPRITE_LASS, $33, $c, STAY, LEFT, $9, LASS + $C8, $10
+	object SPRITE_BLACK_HAIR_BOY_2, $8, $5, STAY, RIGHT, $1, OPP_SUPER_NERD, $3
+	object SPRITE_GAMBLER, $d, $9, STAY, UP, $2, OPP_GAMBLER, $5
+	object SPRITE_BLACK_HAIR_BOY_2, $2a, $6, STAY, UP, $3, OPP_SUPER_NERD, $4
+	object SPRITE_LASS, $1a, $3, STAY, LEFT, $4, OPP_LASS, $d
+	object SPRITE_BLACK_HAIR_BOY_2, $1a, $4, STAY, RIGHT, $5, OPP_SUPER_NERD, $5
+	object SPRITE_LASS, $1a, $5, STAY, LEFT, $6, OPP_LASS, $e
+	object SPRITE_LASS, $1a, $6, STAY, RIGHT, $7, OPP_LASS, $f
+	object SPRITE_GAMBLER, $2e, $d, STAY, DOWN, $8, OPP_GAMBLER, $7
+	object SPRITE_LASS, $33, $c, STAY, LEFT, $9, OPP_LASS, $10
 
 	; warp-to
 	EVENT_DISP ROUTE_8_WIDTH, $9, $1 ; ROUTE_8_GATE
--- a/data/mapObjects/route9.asm
+++ b/data/mapObjects/route9.asm
@@ -7,13 +7,13 @@
 	db $7, $19, $b ; Route9Text11
 
 	db $a ; objects
-	object SPRITE_LASS, $d, $a, STAY, LEFT, $1, JR__TRAINER_F + $C8, $5
-	object SPRITE_BLACK_HAIR_BOY_1, $18, $7, STAY, LEFT, $2, JR__TRAINER_M + $C8, $7
-	object SPRITE_BLACK_HAIR_BOY_1, $1f, $7, STAY, RIGHT, $3, JR__TRAINER_M + $C8, $8
-	object SPRITE_LASS, $30, $8, STAY, RIGHT, $4, JR__TRAINER_F + $C8, $6
-	object SPRITE_HIKER, $10, $f, STAY, LEFT, $5, HIKER + $C8, $b
-	object SPRITE_HIKER, $2b, $3, STAY, LEFT, $6, HIKER + $C8, $6
-	object SPRITE_BUG_CATCHER, $16, $2, STAY, DOWN, $7, BUG_CATCHER + $C8, $d
-	object SPRITE_HIKER, $2d, $f, STAY, RIGHT, $8, HIKER + $C8, $5
-	object SPRITE_BUG_CATCHER, $28, $8, STAY, RIGHT, $9, BUG_CATCHER + $C8, $e
+	object SPRITE_LASS, $d, $a, STAY, LEFT, $1, OPP_JR__TRAINER_F, $5
+	object SPRITE_BLACK_HAIR_BOY_1, $18, $7, STAY, LEFT, $2, OPP_JR__TRAINER_M, $7
+	object SPRITE_BLACK_HAIR_BOY_1, $1f, $7, STAY, RIGHT, $3, OPP_JR__TRAINER_M, $8
+	object SPRITE_LASS, $30, $8, STAY, RIGHT, $4, OPP_JR__TRAINER_F, $6
+	object SPRITE_HIKER, $10, $f, STAY, LEFT, $5, OPP_HIKER, $b
+	object SPRITE_HIKER, $2b, $3, STAY, LEFT, $6, OPP_HIKER, $6
+	object SPRITE_BUG_CATCHER, $16, $2, STAY, DOWN, $7, OPP_BUG_CATCHER, $d
+	object SPRITE_HIKER, $2d, $f, STAY, RIGHT, $8, OPP_HIKER, $5
+	object SPRITE_BUG_CATCHER, $28, $8, STAY, RIGHT, $9, OPP_BUG_CATCHER, $e
 	object SPRITE_BALL, $a, $f, STAY, NONE, $a, TM_30
--- a/data/mapObjects/saffrongym.asm
+++ b/data/mapObjects/saffrongym.asm
@@ -38,14 +38,14 @@
 	db $0 ; signs
 
 	db $9 ; objects
-	object SPRITE_GIRL, $9, $8, STAY, DOWN, $1, SABRINA + $C8, $1
-	object SPRITE_MEDIUM, $a, $1, STAY, DOWN, $2, CHANNELER + $C8, $16
-	object SPRITE_BUG_CATCHER, $11, $1, STAY, DOWN, $3, PSYCHIC_TR + $C8, $1
-	object SPRITE_MEDIUM, $3, $7, STAY, DOWN, $4, CHANNELER + $C8, $17
-	object SPRITE_BUG_CATCHER, $11, $7, STAY, DOWN, $5, PSYCHIC_TR + $C8, $2
-	object SPRITE_MEDIUM, $3, $d, STAY, DOWN, $6, CHANNELER + $C8, $18
-	object SPRITE_BUG_CATCHER, $11, $d, STAY, DOWN, $7, PSYCHIC_TR + $C8, $3
-	object SPRITE_BUG_CATCHER, $3, $1, STAY, DOWN, $8, PSYCHIC_TR + $C8, $4
+	object SPRITE_GIRL, $9, $8, STAY, DOWN, $1, OPP_SABRINA, $1
+	object SPRITE_MEDIUM, $a, $1, STAY, DOWN, $2, OPP_CHANNELER, $16
+	object SPRITE_BUG_CATCHER, $11, $1, STAY, DOWN, $3, OPP_PSYCHIC_TR, $1
+	object SPRITE_MEDIUM, $3, $7, STAY, DOWN, $4, OPP_CHANNELER, $17
+	object SPRITE_BUG_CATCHER, $11, $7, STAY, DOWN, $5, OPP_PSYCHIC_TR, $2
+	object SPRITE_MEDIUM, $3, $d, STAY, DOWN, $6, OPP_CHANNELER, $18
+	object SPRITE_BUG_CATCHER, $11, $d, STAY, DOWN, $7, OPP_PSYCHIC_TR, $3
+	object SPRITE_BUG_CATCHER, $3, $1, STAY, DOWN, $8, OPP_PSYCHIC_TR, $4
 	object SPRITE_GYM_HELPER, $a, $f, STAY, DOWN, $9 ; person
 
 	; warp-to
--- a/data/mapObjects/silphco10.asm
+++ b/data/mapObjects/silphco10.asm
@@ -12,8 +12,8 @@
 	db $0 ; signs
 
 	db $6 ; objects
-	object SPRITE_ROCKET, $1, $9, STAY, RIGHT, $1, ROCKET + $C8, $27
-	object SPRITE_OAK_AIDE, $a, $2, STAY, LEFT, $2, SCIENTIST + $C8, $b
+	object SPRITE_ROCKET, $1, $9, STAY, RIGHT, $1, OPP_ROCKET, $27
+	object SPRITE_OAK_AIDE, $a, $2, STAY, LEFT, $2, OPP_SCIENTIST, $b
 	object SPRITE_ERIKA, $9, $f, WALK, $0, $3 ; person
 	object SPRITE_BALL, $2, $c, STAY, NONE, $4, TM_26
 	object SPRITE_BALL, $4, $e, STAY, NONE, $5, RARE_CANDY
--- a/data/mapObjects/silphco11.asm
+++ b/data/mapObjects/silphco11.asm
@@ -12,9 +12,9 @@
 	db $5 ; objects
 	object SPRITE_MR_MASTERBALL, $7, $5, STAY, DOWN, $1 ; person
 	object SPRITE_FOULARD_WOMAN, $a, $5, STAY, DOWN, $2 ; person
-	object SPRITE_GIOVANNI, $6, $9, STAY, DOWN, $3, GIOVANNI + $C8, $2
-	object SPRITE_ROCKET, $3, $10, STAY, UP, $4, ROCKET + $C8, $29
-	object SPRITE_ROCKET, $f, $9, STAY, UP, $5, ROCKET + $C8, $28
+	object SPRITE_GIOVANNI, $6, $9, STAY, DOWN, $3, OPP_GIOVANNI, $2
+	object SPRITE_ROCKET, $3, $10, STAY, UP, $4, OPP_ROCKET, $29
+	object SPRITE_ROCKET, $f, $9, STAY, UP, $5, OPP_ROCKET, $28
 
 	; warp-to
 	EVENT_DISP SILPH_CO_11F_WIDTH, $0, $9 ; SILPH_CO_10F
--- a/data/mapObjects/silphco2.asm
+++ b/data/mapObjects/silphco2.asm
@@ -14,10 +14,10 @@
 
 	db $5 ; objects
 	object SPRITE_ERIKA, $a, $1, STAY, UP, $1 ; person
-	object SPRITE_OAK_AIDE, $5, $c, STAY, DOWN, $2, SCIENTIST + $C8, $2
-	object SPRITE_OAK_AIDE, $18, $d, STAY, LEFT, $3, SCIENTIST + $C8, $3
-	object SPRITE_ROCKET, $10, $b, STAY, UP, $4, ROCKET + $C8, $17
-	object SPRITE_ROCKET, $18, $7, STAY, UP, $5, ROCKET + $C8, $18
+	object SPRITE_OAK_AIDE, $5, $c, STAY, DOWN, $2, OPP_SCIENTIST, $2
+	object SPRITE_OAK_AIDE, $18, $d, STAY, LEFT, $3, OPP_SCIENTIST, $3
+	object SPRITE_ROCKET, $10, $b, STAY, UP, $4, OPP_ROCKET, $17
+	object SPRITE_ROCKET, $18, $7, STAY, UP, $5, OPP_ROCKET, $18
 
 	; warp-to
 	EVENT_DISP SILPH_CO_2F_WIDTH, $0, $18 ; SILPH_CO_1F
--- a/data/mapObjects/silphco3.asm
+++ b/data/mapObjects/silphco3.asm
@@ -17,8 +17,8 @@
 
 	db $4 ; objects
 	object SPRITE_LAPRAS_GIVER, $18, $8, STAY, NONE, $1 ; person
-	object SPRITE_ROCKET, $14, $7, STAY, LEFT, $2, ROCKET + $C8, $19
-	object SPRITE_OAK_AIDE, $7, $9, STAY, DOWN, $3, SCIENTIST + $C8, $4
+	object SPRITE_ROCKET, $14, $7, STAY, LEFT, $2, OPP_ROCKET, $19
+	object SPRITE_OAK_AIDE, $7, $9, STAY, DOWN, $3, OPP_SCIENTIST, $4
 	object SPRITE_BALL, $8, $5, STAY, NONE, $4, HYPER_POTION
 
 	; warp-to
--- a/data/mapObjects/silphco4.asm
+++ b/data/mapObjects/silphco4.asm
@@ -14,9 +14,9 @@
 
 	db $7 ; objects
 	object SPRITE_LAPRAS_GIVER, $6, $2, STAY, NONE, $1 ; person
-	object SPRITE_ROCKET, $9, $e, STAY, RIGHT, $2, ROCKET + $C8, $1a
-	object SPRITE_OAK_AIDE, $e, $6, STAY, LEFT, $3, SCIENTIST + $C8, $5
-	object SPRITE_ROCKET, $1a, $a, STAY, UP, $4, ROCKET + $C8, $1b
+	object SPRITE_ROCKET, $9, $e, STAY, RIGHT, $2, OPP_ROCKET, $1a
+	object SPRITE_OAK_AIDE, $e, $6, STAY, LEFT, $3, OPP_SCIENTIST, $5
+	object SPRITE_ROCKET, $1a, $a, STAY, UP, $4, OPP_ROCKET, $1b
 	object SPRITE_BALL, $3, $9, STAY, NONE, $5, FULL_HEAL
 	object SPRITE_BALL, $4, $7, STAY, NONE, $6, MAX_REVIVE
 	object SPRITE_BALL, $5, $8, STAY, NONE, $7, ESCAPE_ROPE
--- a/data/mapObjects/silphco5.asm
+++ b/data/mapObjects/silphco5.asm
@@ -14,10 +14,10 @@
 
 	db $b ; objects
 	object SPRITE_LAPRAS_GIVER, $d, $9, STAY, NONE, $1 ; person
-	object SPRITE_ROCKET, $8, $10, STAY, RIGHT, $2, ROCKET + $C8, $1c
-	object SPRITE_OAK_AIDE, $8, $3, STAY, RIGHT, $3, SCIENTIST + $C8, $6
-	object SPRITE_ROCKER, $12, $a, STAY, UP, $4, JUGGLER + $C8, $1
-	object SPRITE_ROCKET, $1c, $4, STAY, UP, $5, ROCKET + $C8, $1d
+	object SPRITE_ROCKET, $8, $10, STAY, RIGHT, $2, OPP_ROCKET, $1c
+	object SPRITE_OAK_AIDE, $8, $3, STAY, RIGHT, $3, OPP_SCIENTIST, $6
+	object SPRITE_ROCKER, $12, $a, STAY, UP, $4, OPP_JUGGLER, $1
+	object SPRITE_ROCKET, $1c, $4, STAY, UP, $5, OPP_ROCKET, $1d
 	object SPRITE_BALL, $2, $d, STAY, NONE, $6, TM_09
 	object SPRITE_BALL, $4, $6, STAY, NONE, $7, PROTEIN
 	object SPRITE_BALL, $15, $10, STAY, NONE, $8, CARD_KEY
--- a/data/mapObjects/silphco6.asm
+++ b/data/mapObjects/silphco6.asm
@@ -16,9 +16,9 @@
 	object SPRITE_ERIKA, $15, $6, STAY, DOWN, $3 ; person
 	object SPRITE_ERIKA, $b, $a, STAY, RIGHT, $4 ; person
 	object SPRITE_LAPRAS_GIVER, $12, $d, STAY, UP, $5 ; person
-	object SPRITE_ROCKET, $11, $3, STAY, RIGHT, $6, ROCKET + $C8, $1e
-	object SPRITE_OAK_AIDE, $7, $8, STAY, DOWN, $7, SCIENTIST + $C8, $7
-	object SPRITE_ROCKET, $e, $f, STAY, LEFT, $8, ROCKET + $C8, $1f
+	object SPRITE_ROCKET, $11, $3, STAY, RIGHT, $6, OPP_ROCKET, $1e
+	object SPRITE_OAK_AIDE, $7, $8, STAY, DOWN, $7, OPP_SCIENTIST, $7
+	object SPRITE_ROCKET, $e, $f, STAY, LEFT, $8, OPP_ROCKET, $1f
 	object SPRITE_BALL, $3, $c, STAY, NONE, $9, HP_UP
 	object SPRITE_BALL, $2, $f, STAY, NONE, $a, X_ACCURACY
 
--- a/data/mapObjects/silphco7.asm
+++ b/data/mapObjects/silphco7.asm
@@ -16,10 +16,10 @@
 	object SPRITE_LAPRAS_GIVER, $d, $d, STAY, UP, $2 ; person
 	object SPRITE_LAPRAS_GIVER, $7, $a, STAY, NONE, $3 ; person
 	object SPRITE_ERIKA, $a, $8, STAY, NONE, $4 ; person
-	object SPRITE_ROCKET, $d, $1, STAY, DOWN, $5, ROCKET + $C8, $20
-	object SPRITE_OAK_AIDE, $2, $d, STAY, DOWN, $6, SCIENTIST + $C8, $8
-	object SPRITE_ROCKET, $14, $2, STAY, LEFT, $7, ROCKET + $C8, $21
-	object SPRITE_ROCKET, $13, $e, STAY, RIGHT, $8, ROCKET + $C8, $22
+	object SPRITE_ROCKET, $d, $1, STAY, DOWN, $5, OPP_ROCKET, $20
+	object SPRITE_OAK_AIDE, $2, $d, STAY, DOWN, $6, OPP_SCIENTIST, $8
+	object SPRITE_ROCKET, $14, $2, STAY, LEFT, $7, OPP_ROCKET, $21
+	object SPRITE_ROCKET, $13, $e, STAY, RIGHT, $8, OPP_ROCKET, $22
 	object SPRITE_BLUE, $3, $7, STAY, UP, $9 ; person
 	object SPRITE_BALL, $1, $9, STAY, NONE, $a, CALCIUM
 	object SPRITE_BALL, $18, $b, STAY, NONE, $b, TM_03
--- a/data/mapObjects/silphco8.asm
+++ b/data/mapObjects/silphco8.asm
@@ -14,9 +14,9 @@
 
 	db $4 ; objects
 	object SPRITE_LAPRAS_GIVER, $4, $2, STAY, NONE, $1 ; person
-	object SPRITE_ROCKET, $13, $2, STAY, LEFT, $2, ROCKET + $C8, $23
-	object SPRITE_OAK_AIDE, $a, $2, STAY, DOWN, $3, SCIENTIST + $C8, $9
-	object SPRITE_ROCKET, $c, $f, STAY, RIGHT, $4, ROCKET + $C8, $24
+	object SPRITE_ROCKET, $13, $2, STAY, LEFT, $2, OPP_ROCKET, $23
+	object SPRITE_OAK_AIDE, $a, $2, STAY, DOWN, $3, OPP_SCIENTIST, $9
+	object SPRITE_ROCKET, $c, $f, STAY, RIGHT, $4, OPP_ROCKET, $24
 
 	; warp-to
 	EVENT_DISP SILPH_CO_8F_WIDTH, $0, $10 ; SILPH_CO_9F
--- a/data/mapObjects/silphco9.asm
+++ b/data/mapObjects/silphco9.asm
@@ -12,9 +12,9 @@
 
 	db $4 ; objects
 	object SPRITE_NURSE, $3, $e, STAY, DOWN, $1 ; person
-	object SPRITE_ROCKET, $2, $4, STAY, UP, $2, ROCKET + $C8, $25
-	object SPRITE_OAK_AIDE, $15, $d, STAY, DOWN, $3, SCIENTIST + $C8, $a
-	object SPRITE_ROCKET, $d, $10, STAY, UP, $4, ROCKET + $C8, $26
+	object SPRITE_ROCKET, $2, $4, STAY, UP, $2, OPP_ROCKET, $25
+	object SPRITE_OAK_AIDE, $15, $d, STAY, DOWN, $3, OPP_SCIENTIST, $a
+	object SPRITE_ROCKET, $d, $10, STAY, UP, $4, OPP_ROCKET, $26
 
 	; warp-to
 	EVENT_DISP SILPH_CO_9F_WIDTH, $0, $e ; SILPH_CO_10F
--- a/data/mapObjects/ssanne10.asm
+++ b/data/mapObjects/ssanne10.asm
@@ -16,12 +16,12 @@
 	db $0 ; signs
 
 	db $b ; objects
-	object SPRITE_SAILOR, $0, $d, STAY, DOWN, $1, SAILOR + $C8, $3
-	object SPRITE_SAILOR, $2, $b, STAY, DOWN, $2, SAILOR + $C8, $4
-	object SPRITE_SAILOR, $c, $3, STAY, LEFT, $3, SAILOR + $C8, $5
-	object SPRITE_SAILOR, $16, $2, STAY, DOWN, $4, SAILOR + $C8, $6
-	object SPRITE_SAILOR, $0, $2, STAY, RIGHT, $5, SAILOR + $C8, $7
-	object SPRITE_FISHER2, $0, $4, STAY, RIGHT, $6, FISHER + $C8, $2
+	object SPRITE_SAILOR, $0, $d, STAY, DOWN, $1, OPP_SAILOR, $3
+	object SPRITE_SAILOR, $2, $b, STAY, DOWN, $2, OPP_SAILOR, $4
+	object SPRITE_SAILOR, $c, $3, STAY, LEFT, $3, OPP_SAILOR, $5
+	object SPRITE_SAILOR, $16, $2, STAY, DOWN, $4, OPP_SAILOR, $6
+	object SPRITE_SAILOR, $0, $2, STAY, RIGHT, $5, OPP_SAILOR, $7
+	object SPRITE_FISHER2, $0, $4, STAY, RIGHT, $6, OPP_FISHER, $2
 	object SPRITE_BLACK_HAIR_BOY_2, $a, $d, STAY, RIGHT, $7 ; person
 	object SPRITE_SLOWBRO, $b, $c, STAY, NONE, $8 ; person
 	object SPRITE_BALL, $14, $2, STAY, NONE, $9, ETHER
--- a/data/mapObjects/ssanne2.asm
+++ b/data/mapObjects/ssanne2.asm
@@ -16,7 +16,7 @@
 
 	db $2 ; objects
 	object SPRITE_WAITER, $3, $7, WALK, $1, $1 ; person
-	object SPRITE_BLUE, $24, $4, STAY, DOWN, $2, SONY1 + $C8, $1
+	object SPRITE_BLUE, $24, $4, STAY, DOWN, $2, OPP_SONY1, $1
 
 	; warp-to
 	EVENT_DISP SS_ANNE_2_WIDTH, $b, $9 ; SS_ANNE_9
--- a/data/mapObjects/ssanne5.asm
+++ b/data/mapObjects/ssanne5.asm
@@ -11,8 +11,8 @@
 	object SPRITE_BLACK_HAIR_BOY_2, $5, $2, STAY, UP, $1 ; person
 	object SPRITE_SAILOR, $4, $9, STAY, NONE, $2 ; person
 	object SPRITE_BLACK_HAIR_BOY_1, $7, $b, STAY, NONE, $3 ; person
-	object SPRITE_SAILOR, $4, $4, STAY, DOWN, $4, SAILOR + $C8, $1
-	object SPRITE_SAILOR, $a, $8, STAY, UP, $5, SAILOR + $C8, $2
+	object SPRITE_SAILOR, $4, $4, STAY, DOWN, $4, OPP_SAILOR, $1
+	object SPRITE_SAILOR, $a, $8, STAY, UP, $5, OPP_SAILOR, $2
 
 	; warp-to
 	EVENT_DISP SS_ANNE_5_WIDTH, $6, $d ; SS_ANNE_3
--- a/data/mapObjects/ssanne8.asm
+++ b/data/mapObjects/ssanne8.asm
@@ -12,10 +12,10 @@
 	db $0 ; signs
 
 	db $b ; objects
-	object SPRITE_GENTLEMAN, $2, $3, STAY, LEFT, $1, GENTLEMAN + $C8, $1
-	object SPRITE_GENTLEMAN, $b, $4, STAY, UP, $2, GENTLEMAN + $C8, $2
-	object SPRITE_BUG_CATCHER, $b, $e, STAY, UP, $3, YOUNGSTER + $C8, $8
-	object SPRITE_LASS, $d, $b, STAY, LEFT, $4, LASS + $C8, $b
+	object SPRITE_GENTLEMAN, $2, $3, STAY, LEFT, $1, OPP_GENTLEMAN, $1
+	object SPRITE_GENTLEMAN, $b, $4, STAY, UP, $2, OPP_GENTLEMAN, $2
+	object SPRITE_BUG_CATCHER, $b, $e, STAY, UP, $3, OPP_YOUNGSTER, $8
+	object SPRITE_LASS, $d, $b, STAY, LEFT, $4, OPP_LASS, $b
 	object SPRITE_GIRL, $16, $3, WALK, $1, $5 ; person
 	object SPRITE_FAT_BALD_GUY, $0, $e, STAY, NONE, $6 ; person
 	object SPRITE_LITTLE_GIRL, $2, $b, STAY, DOWN, $7 ; person
--- a/data/mapObjects/ssanne9.asm
+++ b/data/mapObjects/ssanne9.asm
@@ -18,10 +18,10 @@
 	db $0 ; signs
 
 	db $d ; objects
-	object SPRITE_GENTLEMAN, $a, $2, STAY, RIGHT, $1, GENTLEMAN + $C8, $3
-	object SPRITE_FISHER2, $d, $4, STAY, LEFT, $2, FISHER + $C8, $1
-	object SPRITE_GENTLEMAN, $0, $e, STAY, RIGHT, $3, GENTLEMAN + $C8, $5
-	object SPRITE_LASS, $2, $b, STAY, DOWN, $4, LASS + $C8, $c
+	object SPRITE_GENTLEMAN, $a, $2, STAY, RIGHT, $1, OPP_GENTLEMAN, $3
+	object SPRITE_FISHER2, $d, $4, STAY, LEFT, $2, OPP_FISHER, $1
+	object SPRITE_GENTLEMAN, $0, $e, STAY, RIGHT, $3, OPP_GENTLEMAN, $5
+	object SPRITE_LASS, $2, $b, STAY, DOWN, $4, OPP_LASS, $c
 	object SPRITE_GENTLEMAN, $1, $2, STAY, DOWN, $5 ; person
 	object SPRITE_BALL, $c, $1, STAY, NONE, $6, MAX_ETHER
 	object SPRITE_GENTLEMAN, $15, $2, STAY, DOWN, $7 ; person
--- a/data/mapObjects/vermiliongym.asm
+++ b/data/mapObjects/vermiliongym.asm
@@ -8,10 +8,10 @@
 	db $0 ; signs
 
 	db $5 ; objects
-	object SPRITE_ROCKER, $5, $1, STAY, DOWN, $1, LT__SURGE + $C8, $1
-	object SPRITE_GENTLEMAN, $9, $6, STAY, LEFT, $2, GENTLEMAN + $C8, $3
-	object SPRITE_BLACK_HAIR_BOY_2, $3, $8, STAY, LEFT, $3, ROCKER + $C8, $1
-	object SPRITE_SAILOR, $0, $a, STAY, RIGHT, $4, SAILOR + $C8, $8
+	object SPRITE_ROCKER, $5, $1, STAY, DOWN, $1, OPP_LT__SURGE, $1
+	object SPRITE_GENTLEMAN, $9, $6, STAY, LEFT, $2, OPP_GENTLEMAN, $3
+	object SPRITE_BLACK_HAIR_BOY_2, $3, $8, STAY, LEFT, $3, OPP_ROCKER, $1
+	object SPRITE_SAILOR, $0, $a, STAY, RIGHT, $4, OPP_SAILOR, $8
 	object SPRITE_GYM_HELPER, $4, $e, STAY, DOWN, $5 ; person
 
 	; warp-to
--- a/data/mapObjects/victoryroad1.asm
+++ b/data/mapObjects/victoryroad1.asm
@@ -9,8 +9,8 @@
 	db $0 ; signs
 
 	db $7 ; objects
-	object SPRITE_LASS, $7, $5, STAY, RIGHT, $1, COOLTRAINER_F + $C8, $5
-	object SPRITE_BLACK_HAIR_BOY_1, $3, $2, STAY, DOWN, $2, COOLTRAINER_M + $C8, $5
+	object SPRITE_LASS, $7, $5, STAY, RIGHT, $1, OPP_COOLTRAINER_F, $5
+	object SPRITE_BLACK_HAIR_BOY_1, $3, $2, STAY, DOWN, $2, OPP_COOLTRAINER_M, $5
 	object SPRITE_BALL, $b, $0, STAY, NONE, $3, TM_43
 	object SPRITE_BALL, $9, $2, STAY, NONE, $4, RARE_CANDY
 	object SPRITE_BOULDER, $5, $f, STAY, BOULDER_MOVEMENT_BYTE_2, $5 ; person
--- a/data/mapObjects/victoryroad2.asm
+++ b/data/mapObjects/victoryroad2.asm
@@ -13,11 +13,11 @@
 	db $0 ; signs
 
 	db $d ; objects
-	object SPRITE_HIKER, $c, $9, STAY, LEFT, $1, BLACKBELT + $C8, $9
-	object SPRITE_BLACK_HAIR_BOY_2, $15, $d, STAY, LEFT, $2, JUGGLER + $C8, $2
-	object SPRITE_BLACK_HAIR_BOY_1, $13, $8, STAY, DOWN, $3, TAMER + $C8, $5
-	object SPRITE_BLACK_HAIR_BOY_2, $4, $2, STAY, DOWN, $4, POKEMANIAC + $C8, $6
-	object SPRITE_BLACK_HAIR_BOY_2, $1a, $3, STAY, LEFT, $5, JUGGLER + $C8, $5
+	object SPRITE_HIKER, $c, $9, STAY, LEFT, $1, OPP_BLACKBELT, $9
+	object SPRITE_BLACK_HAIR_BOY_2, $15, $d, STAY, LEFT, $2, OPP_JUGGLER, $2
+	object SPRITE_BLACK_HAIR_BOY_1, $13, $8, STAY, DOWN, $3, OPP_TAMER, $5
+	object SPRITE_BLACK_HAIR_BOY_2, $4, $2, STAY, DOWN, $4, OPP_POKEMANIAC, $6
+	object SPRITE_BLACK_HAIR_BOY_2, $1a, $3, STAY, LEFT, $5, OPP_JUGGLER, $5
 	object SPRITE_BIRD, $b, $5, STAY, UP, $6, MOLTRES, 50
 	object SPRITE_BALL, $1b, $5, STAY, NONE, $7, TM_17
 	object SPRITE_BALL, $12, $9, STAY, NONE, $8, FULL_HEAL
--- a/data/mapObjects/victoryroad3.asm
+++ b/data/mapObjects/victoryroad3.asm
@@ -10,10 +10,10 @@
 	db $0 ; signs
 
 	db $a ; objects
-	object SPRITE_BLACK_HAIR_BOY_1, $1c, $5, STAY, LEFT, $1, COOLTRAINER_M + $C8, $2
-	object SPRITE_LASS, $7, $d, STAY, RIGHT, $2, COOLTRAINER_F + $C8, $2
-	object SPRITE_BLACK_HAIR_BOY_1, $6, $e, STAY, LEFT, $3, COOLTRAINER_M + $C8, $3
-	object SPRITE_LASS, $d, $3, STAY, RIGHT, $4, COOLTRAINER_F + $C8, $3
+	object SPRITE_BLACK_HAIR_BOY_1, $1c, $5, STAY, LEFT, $1, OPP_COOLTRAINER_M, $2
+	object SPRITE_LASS, $7, $d, STAY, RIGHT, $2, OPP_COOLTRAINER_F, $2
+	object SPRITE_BLACK_HAIR_BOY_1, $6, $e, STAY, LEFT, $3, OPP_COOLTRAINER_M, $3
+	object SPRITE_LASS, $d, $3, STAY, RIGHT, $4, OPP_COOLTRAINER_F, $3
 	object SPRITE_BALL, $1a, $5, STAY, NONE, $5, MAX_REVIVE
 	object SPRITE_BALL, $7, $7, STAY, NONE, $6, TM_47
 	object SPRITE_BOULDER, $16, $3, STAY, BOULDER_MOVEMENT_BYTE_2, $7 ; person
--- a/data/mapObjects/viridianforest.asm
+++ b/data/mapObjects/viridianforest.asm
@@ -19,9 +19,9 @@
 
 	db $8 ; objects
 	object SPRITE_BUG_CATCHER, $10, $2b, STAY, NONE, $1 ; person
-	object SPRITE_BUG_CATCHER, $1e, $21, STAY, LEFT, $2, BUG_CATCHER + $C8, $1
-	object SPRITE_BUG_CATCHER, $1e, $13, STAY, LEFT, $3, BUG_CATCHER + $C8, $2
-	object SPRITE_BUG_CATCHER, $2, $12, STAY, LEFT, $4, BUG_CATCHER + $C8, $3
+	object SPRITE_BUG_CATCHER, $1e, $21, STAY, LEFT, $2, OPP_BUG_CATCHER, $1
+	object SPRITE_BUG_CATCHER, $1e, $13, STAY, LEFT, $3, OPP_BUG_CATCHER, $2
+	object SPRITE_BUG_CATCHER, $2, $12, STAY, LEFT, $4, OPP_BUG_CATCHER, $3
 	object SPRITE_BALL, $19, $b, STAY, NONE, $5, ANTIDOTE
 	object SPRITE_BALL, $c, $1d, STAY, NONE, $6, POTION
 	object SPRITE_BALL, $1, $1f, STAY, NONE, $7, POKE_BALL
--- a/data/mapObjects/viridiangym.asm
+++ b/data/mapObjects/viridiangym.asm
@@ -8,15 +8,15 @@
 	db $0 ; signs
 
 	db $b ; objects
-	object SPRITE_GIOVANNI, $2, $1, STAY, DOWN, $1, GIOVANNI + $C8, $3
-	object SPRITE_BLACK_HAIR_BOY_1, $c, $7, STAY, DOWN, $2, COOLTRAINER_M + $C8, $9
-	object SPRITE_HIKER, $b, $b, STAY, UP, $3, BLACKBELT + $C8, $6
-	object SPRITE_ROCKER, $a, $7, STAY, DOWN, $4, TAMER + $C8, $3
-	object SPRITE_HIKER, $3, $7, STAY, LEFT, $5, BLACKBELT + $C8, $7
-	object SPRITE_BLACK_HAIR_BOY_1, $d, $5, STAY, RIGHT, $6, COOLTRAINER_M + $C8, $a
-	object SPRITE_HIKER, $a, $1, STAY, DOWN, $7, BLACKBELT + $C8, $8
-	object SPRITE_ROCKER, $2, $10, STAY, RIGHT, $8, TAMER + $C8, $4
-	object SPRITE_BLACK_HAIR_BOY_1, $6, $5, STAY, DOWN, $9, COOLTRAINER_M + $C8, $1
+	object SPRITE_GIOVANNI, $2, $1, STAY, DOWN, $1, OPP_GIOVANNI, $3
+	object SPRITE_BLACK_HAIR_BOY_1, $c, $7, STAY, DOWN, $2, OPP_COOLTRAINER_M, $9
+	object SPRITE_HIKER, $b, $b, STAY, UP, $3, OPP_BLACKBELT, $6
+	object SPRITE_ROCKER, $a, $7, STAY, DOWN, $4, OPP_TAMER, $3
+	object SPRITE_HIKER, $3, $7, STAY, LEFT, $5, OPP_BLACKBELT, $7
+	object SPRITE_BLACK_HAIR_BOY_1, $d, $5, STAY, RIGHT, $6, OPP_COOLTRAINER_M, $a
+	object SPRITE_HIKER, $a, $1, STAY, DOWN, $7, OPP_BLACKBELT, $8
+	object SPRITE_ROCKER, $2, $10, STAY, RIGHT, $8, OPP_TAMER, $4
+	object SPRITE_BLACK_HAIR_BOY_1, $6, $5, STAY, DOWN, $9, OPP_COOLTRAINER_M, $1
 	object SPRITE_GYM_HELPER, $10, $f, STAY, DOWN, $a ; person
 	object SPRITE_BALL, $10, $9, STAY, NONE, $b, REVIVE
 
--- a/data/trainer_types.asm
+++ b/data/trainer_types.asm
@@ -1,17 +1,17 @@
 FemaleTrainerList:: ; 3434 (0:3434)
-	db $c8+LASS
-	db $c8+JR__TRAINER_F
-	db $c8+BEAUTY
-	db $c8+COOLTRAINER_F
+	db OPP_LASS
+	db OPP_JR__TRAINER_F
+	db OPP_BEAUTY
+	db OPP_COOLTRAINER_F
 	db $FF
 
 EvilTrainerList:: ; 3439 (0:3439)
-	db $c8+JUGGLER_X
-	db $c8+GAMBLER
-	db $c8+ROCKER
-	db $c8+JUGGLER
-	db $c8+CHIEF
-	db $c8+SCIENTIST
-	db $c8+GIOVANNI
-	db $c8+ROCKET
+	db OPP_JUGGLER_X
+	db OPP_GAMBLER
+	db OPP_ROCKER
+	db OPP_JUGGLER
+	db OPP_CHIEF
+	db OPP_SCIENTIST
+	db OPP_GIOVANNI
+	db OPP_ROCKET
 	db $FF
--- a/engine/battle/battle_transitions.asm
+++ b/engine/battle/battle_transitions.asm
@@ -82,7 +82,7 @@
 
 GetBattleTransitionID_WildOrTrainer: ; 709e2 (1c:49e2)
 	ld a, [W_CUROPPONENT]
-	cp $c8
+	cp 200
 	jr nc, .trainer
 	res 0, c
 	ret
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -1214,7 +1214,7 @@
 	cp LINK_STATE_BATTLING
 	jr z, .notSony1Battle
 	ld a, [W_CUROPPONENT]
-	cp $c8 + SONY1
+	cp OPP_SONY1
 	jr nz, .notSony1Battle
 	coord hl, 0, 0  ; sony 1 battle
 	lb bc, 8, 21
@@ -6861,7 +6861,7 @@
 	res 1, [hl]
 	callab InitBattleVariables
 	ld a, [wEnemyMonSpecies2]
-	sub $c8
+	sub 200
 	jp c, InitWildBattle
 	ld [W_TRAINERCLASS], a
 	call GetTrainerInformation
--- a/engine/battle/read_trainer_party.asm
+++ b/engine/battle/read_trainer_party.asm
@@ -101,7 +101,7 @@
 
 ; get trainer class number
 	ld a,[W_CUROPPONENT]
-	sub $C8
+	sub 200
 	ld b,a
 	ld hl,TeamMoves
 
--- a/engine/cable_club.asm
+++ b/engine/cable_club.asm
@@ -274,7 +274,7 @@
 	jr nz, .asm_5506
 	ld a, LINK_STATE_BATTLING
 	ld [wLinkState], a
-	ld a, SONY1 + $c8
+	ld a, OPP_SONY1
 	ld [W_CUROPPONENT], a
 	call ClearScreen
 	call Delay3
--- a/engine/overworld/npc_movement.asm
+++ b/engine/overworld/npc_movement.asm
@@ -286,7 +286,7 @@
 	jp SetSpriteMovementBytesToFF
 
 RivalIDs: ; 1a605 (6:6605)
-	db SONY1 + $c8
-	db SONY2 + $c8
-	db SONY3 + $c8
+	db OPP_SONY1
+	db OPP_SONY2
+	db OPP_SONY3
 	db $ff
--- a/home.asm
+++ b/home.asm
@@ -2396,7 +2396,7 @@
 	ld b, FLAG_SET
 	call TrainerFlagAction   ; flag trainer as fought
 	ld a, [W_ENEMYMONORTRAINERCLASS]
-	cp $c8
+	cp 200
 	jr nc, .skipRemoveSprite    ; test if trainer was fought (in that case skip removing the corresponding sprite)
 	ld hl, W_MISSABLEOBJECTLIST
 	ld de, $2
@@ -2430,7 +2430,7 @@
 	ld a, [wEngagedTrainerClass]
 	ld [W_CUROPPONENT], a
 	ld [W_ENEMYMONORTRAINERCLASS], a
-	cp $c8
+	cp 200
 	ld a, [wEngagedTrainerSet]
 	jr c, .noTrainer
 	ld [W_TRAINERNO], a
@@ -2594,11 +2594,11 @@
 
 PlayTrainerMusic:: ; 33e8 (0:33e8)
 	ld a, [wEngagedTrainerClass]
-	cp $c8 + SONY1
+	cp OPP_SONY1
 	ret z
-	cp $c8 + SONY2
+	cp OPP_SONY2
 	ret z
-	cp $c8 + SONY3
+	cp OPP_SONY3
 	ret z
 	ld a, [W_GYMLEADERNO]
 	and a
--- a/scripts/ceruleancity.asm
+++ b/scripts/ceruleancity.asm
@@ -134,7 +134,7 @@
 	ld hl, CeruleanCityText_1966d
 	ld de, CeruleanCityText_19672
 	call SaveEndBattleTextPointers
-	ld a, SONY1 + $c8
+	ld a, OPP_SONY1
 	ld [W_CUROPPONENT], a
 
 	; select which team to use during the encounter
--- a/scripts/gary.asm
+++ b/scripts/gary.asm
@@ -64,7 +64,7 @@
 	ld hl, GaryText_760f9
 	ld de, GaryText_760fe
 	call SaveEndBattleTextPointers
-	ld a, SONY3 + $c8
+	ld a, OPP_SONY3
 	ld [W_CUROPPONENT], a
 
 	; select which team to use during the encounter
--- a/scripts/oakslab.asm
+++ b/scripts/oakslab.asm
@@ -381,7 +381,7 @@
 	ret nz
 
 	; define which team rival uses, and fight it
-	ld a, SONY1 + $C8
+	ld a, OPP_SONY1
 	ld [W_CUROPPONENT], a
 	ld a, [W_RIVALSTARTER]
 	cp STARTER2
--- a/scripts/pokemontower2.asm
+++ b/scripts/pokemontower2.asm
@@ -142,7 +142,7 @@
 	ld hl, PokemonTower2Text_60632
 	ld de, PokemonTower2Text_60637
 	call SaveEndBattleTextPointers
-	ld a, SONY2 + $c8
+	ld a, OPP_SONY2
 	ld [W_CUROPPONENT], a
 
 	; select which team to use during the encounter
--- a/scripts/route22.asm
+++ b/scripts/route22.asm
@@ -131,7 +131,7 @@
 	ld hl, Route22RivalDefeatedText1
 	ld de, Route22Text_511bc
 	call SaveEndBattleTextPointers
-	ld a, SONY1 + $c8
+	ld a, OPP_SONY1
 	ld [W_CUROPPONENT], a
 	ld hl, StarterMons_50faf
 	call Route22Script_50ed6
@@ -287,7 +287,7 @@
 	ld hl, Route22RivalDefeatedText2
 	ld de, Route22Text_511d0
 	call SaveEndBattleTextPointers
-	ld a, SONY2 + $c8
+	ld a, OPP_SONY2
 	ld [W_CUROPPONENT], a
 	ld hl, StarterMons_510d9
 	call Route22Script_50ed6
--- a/scripts/silphco7.asm
+++ b/scripts/silphco7.asm
@@ -183,7 +183,7 @@
 	ld hl, SilphCo7Text14
 	ld de, SilphCo7Text_51ecd
 	call SaveEndBattleTextPointers
-	ld a, SONY2 + $c8
+	ld a, OPP_SONY2
 	ld [W_CUROPPONENT], a
 	ld a, [W_RIVALSTARTER]
 	cp STARTER2
--- a/scripts/ssanne2.asm
+++ b/scripts/ssanne2.asm
@@ -97,7 +97,7 @@
 	ld [hSpriteIndexOrTextID], a
 	call DisplayTextID
 	call Delay3
-	ld a, SONY2 + $c8
+	ld a, OPP_SONY2
 	ld [W_CUROPPONENT], a
 
 	; select which team to use during the encounter
--- a/wram.asm
+++ b/wram.asm
@@ -1518,7 +1518,7 @@
 
 W_CUROPPONENT:: ; d059
 ; in a wild battle, this is the species of pokemon
-; in a trainer battle, this is the trainer class + $C8
+; in a trainer battle, this is the trainer class + 200
 	ds 1
 
 W_BATTLETYPE:: ; d05a
@@ -2789,7 +2789,7 @@
 	ds 2
 
 W_ENEMYMONORTRAINERCLASS:: ; d713
-; trainer classes start at $c8
+; trainer classes start at 200
 	ds 1
 
 wPlayerJumpingYScreenCoordsIndex:: ; d714