diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 28f010ef2..ee98219c5 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1730,6 +1730,28 @@ .2byte \quantity .endm + @ sets an NPC up to follow the player + .macro setfollower localId:req, flags:req + .byte 0xe3 + .byte \localId + .2byte \flags + .endm + + @ remove the following NPC (assumes there will only ever be one) + .macro destroyfollower + .byte 0xe4 + .endm + + @ makes the player and follower face one another + .macro facefollower + .byte 0xe5 + .endm + + @ checks if you have a follower. returns the result to VAR_RESULT + .macro checkfollower + .byte 0xe6 + .endm + @ Supplementary @@ -1932,3 +1954,21 @@ waitbuttonpress closebraillemessage .endm + + .macro pokemonfaceplayer objectId=254 + setvar VAR_UNUSED_0x8014, \objectId + callnative ScrCmd_pokemonfaceplayer + .endm + + .macro updatefollowerpokemongraphic + setvar VAR_UNUSED_0x8014, 1 + callnative UpdateFollowerPokemonGraphic + .endm + + .macro hidefollower + callnative HideFollower + .endm + + .macro showfollower + callnative ShowFollower + .endm diff --git a/asm/macros/map.inc b/asm/macros/map.inc index 74ed06917..c99167233 100644 --- a/asm/macros/map.inc +++ b/asm/macros/map.inc @@ -15,7 +15,8 @@ .endm .macro object_event index:req, gfx:req, replacement:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req - .byte \index, \gfx, \replacement, 0 + .byte \index, 0 + .2byte \gfx .2byte \x .2byte \y .byte \elevation, \movement_type, ((\y_radius << 4) | \x_radius), 0 diff --git a/data/event_scripts.s b/data/event_scripts.s index 1f3db6aa2..66877b25c 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -53,6 +53,7 @@ #include "constants/union_room.h" #include "constants/vars.h" #include "constants/weather.h" +#include "constants/follow_me.h" .include "asm/macros.inc" .include "asm/macros/event.inc" .include "constants/constants.inc" diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/map.json b/data/maps/LittlerootTown_ProfessorBirchsLab/map.json index deee3e264..c7bf196ef 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/map.json +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/map.json @@ -91,6 +91,19 @@ "trainer_sight_or_berry_tree_id": "0", "script": "LittlerootTown_ProfessorBirchsLab_EventScript_Chikorita", "flag": "FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_POKEBALL_CHIKORITA" + }, + { + "graphics_id": "OBJ_EVENT_GFX_VAR_1", + "x": 6, + "y": 6, + "elevation": 3, + "movement_type": "MOVEMENT_TYPE_NONE", + "movement_range_x": 0, + "movement_range_y": 0, + "trainer_type": "TRAINER_TYPE_NONE", + "trainer_sight_or_berry_tree_id": "0", + "script": "NULL", + "flag": "FLAG_UNUSED_0x020" } ], "warp_events": [ diff --git a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc index 7c7f47d2e..e7c3bf5dc 100644 --- a/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc +++ b/data/maps/LittlerootTown_ProfessorBirchsLab/scripts.inc @@ -29,6 +29,7 @@ LittlerootTown_ProfessorBirchsLab_MapScripts:: LittlerootTown_ProfessorBirchsLab_OnTransition: call Common_EventScript_SetupRivalGfxId call ProfBirch_EventScript_UpdateLocation + setflag FLAG_UNUSED_0x020 goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 6, LittlerootTown_ProfessorBirchsLab_EventScript_SetAfterJohtoStarterLayout goto_if_ge VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 4, LittlerootTown_ProfessorBirchsLab_EventScript_SetJohtoStarterLayout goto_if_eq VAR_DEX_UPGRADE_JOHTO_STARTER_STATE, 3, LittlerootTown_ProfessorBirchsLab_EventScript_CheckReadyForJohtoStarter @@ -139,6 +140,9 @@ LittlerootTown_ProfessorBirchsLab_EventScript_AgreeToSeeRival:: msgbox LittlerootTown_ProfessorBirchsLab_Text_GetRivalToTeachYou, MSGBOX_DEFAULT clearflag FLAG_HIDE_ROUTE_101_BOY setvar VAR_BIRCH_LAB_STATE, 3 + addobject 7 + setfollower 7, 0x7E + updatefollowerpokemongraphic releaseall end diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 48ec7918a..7d7c028f2 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -227,6 +227,10 @@ gScriptCmdTable:: .4byte ScrCmd_warpwhitefade @ 0xe0 .4byte ScrCmd_buffercontestname @ 0xe1 .4byte ScrCmd_bufferitemnameplural @ 0xe2 + .4byte ScrCmd_setfollower @ 0xe3 + .4byte ScrCmd_destroyfollower @ 0xe4 + .4byte ScrCmd_facefollower @ 0xe5 + .4byte ScrCmd_checkfollower @ 0xe6 gScriptCmdTableEnd:: .4byte ScrCmd_nop diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index 3e99fc08e..14570cf99 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -287,3 +287,69 @@ EventScript_FailSweetScent:: Text_FailSweetScent: .string "Looks like there's nothing here…$" + +FollowerPositionFixScript:: + setvar 0x8000 0x0 + callnative FollowerTrainerSightingPositionFix + compare VAR_RESULT 0xFFFF + goto_if_eq FollowerPositionFixScriptReturn + call WalkCall + setvar 0x8000 0x1 + callnative FollowerTrainerSightingPositionFix +FollowerPositionFixScriptReturn: + return + +FollowerIntoPlayerScript:: + setvar 0x8000 0x0 + callnative FollowerIntoPlayer + compare VAR_RESULT 0xFFFF + goto_if_eq FollowerPositionFixScriptReturn + setvar 0x8005 0xFE @ follower + call WalkCall + setvar 0x8000 0x1 + callnative FollowerIntoPlayer + return + +WalkCall: + compare VAR_RESULT 0x0 + call_if_eq WalkDownCall + compare VAR_RESULT 0x1 + call_if_eq WalkUpCall + compare VAR_RESULT 0x2 + call_if_eq WalkLeftCall + compare VAR_RESULT 0x3 + call_if_eq WalkRightCall + waitmovement 0x8005 + return + +WalkDownCall: + applymovement 0x8005 WalkDown + return + +WalkUpCall: + applymovement 0x8005 WalkUp + return + +WalkLeftCall: + applymovement 0x8005 WalkLeft + return + +WalkRightCall: + applymovement 0x8005 WalkRight + return + +WalkDown: + walk_down + step_end + +WalkUp: + walk_up + step_end + +WalkLeft: + walk_left + step_end + +WalkRight: + walk_right + step_end diff --git a/data/scripts/pkmn_center_nurse.inc b/data/scripts/pkmn_center_nurse.inc index 64ccdfa77..c08acd26a 100644 --- a/data/scripts/pkmn_center_nurse.inc +++ b/data/scripts/pkmn_center_nurse.inc @@ -33,6 +33,7 @@ EventScript_PkmnCenterNurse_IllTakeYourPkmn2:: return EventScript_PkmnCenterNurse_TakeAndHealPkmn:: + hidefollower applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterLeft waitmovement 0 dofieldeffect FLDEFF_POKECENTER_HEAL @@ -40,6 +41,8 @@ EventScript_PkmnCenterNurse_TakeAndHealPkmn:: applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterDown waitmovement 0 special HealPlayerParty + updatefollowerpokemongraphic + showfollower return EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom:: diff --git a/gflib/sprite.c b/gflib/sprite.c index f05fe76f2..3805409a8 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -2,6 +2,7 @@ #include "sprite.h" #include "main.h" #include "palette.h" +#include "global.fieldmap.h" #define MAX_SPRITE_COPY_REQUESTS 64 @@ -970,6 +971,29 @@ void ContinueAnim(struct Sprite *sprite) } } +bool8 IsFlyingPokemonGraphic(u16 graphicsId) +{ + switch(graphicsId) + { + case 250: + case 253: + case 255: + case 256: + case 260: + case 279: + case 280: + case 287: + case 380: + case 382: + case 383: + case 384: + case 387: + return TRUE; + default: + return FALSE; + } +} + void AnimCmd_frame(struct Sprite *sprite) { s16 imageValue; @@ -987,6 +1011,15 @@ void AnimCmd_frame(struct Sprite *sprite) sprite->animDelayCounter = duration; + if(gSaveBlock2Ptr->follower.inProgress && sprite == &gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId] && sprite->y2 >= -1 + && !IsFlyingPokemonGraphic(gObjectEvents[gSaveBlock2Ptr->follower.objId].graphicsId)) + { + if(sprite->animCmdIndex % 2 == 0) + sprite->y2 = 0; + else + sprite->y2 = -1; + } + if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) SetSpriteOamFlipBits(sprite, hFlip, vFlip); @@ -1020,6 +1053,15 @@ void AnimCmd_jump(struct Sprite *sprite) duration--; sprite->animDelayCounter = duration; + + if(gSaveBlock2Ptr->follower.inProgress && sprite == &gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId] && sprite->y2 >= -1 + && !IsFlyingPokemonGraphic(gObjectEvents[gSaveBlock2Ptr->follower.objId].graphicsId)) + { + if(sprite->animCmdIndex % 2 == 0) + sprite->y2 = 0; + else + sprite->y2 = -1; + } if (!(sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK)) SetSpriteOamFlipBits(sprite, hFlip, vFlip); diff --git a/graphics/object_events/palettes/followers/abra.pal b/graphics/object_events/palettes/followers/abra.pal new file mode 100644 index 000000000..dd409648b --- /dev/null +++ b/graphics/object_events/palettes/followers/abra.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 153 41 +1 1 1 +73 57 25 +145 121 97 +249 217 97 +121 97 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/aerodactyl.pal b/graphics/object_events/palettes/followers/aerodactyl.pal new file mode 100644 index 000000000..57c8403dd --- /dev/null +++ b/graphics/object_events/palettes/followers/aerodactyl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +201 201 209 +73 65 97 +145 137 201 +129 113 177 +177 177 225 +97 17 17 +233 233 249 +129 89 129 +185 137 193 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/alakazam.pal b/graphics/object_events/palettes/followers/alakazam.pal new file mode 100644 index 000000000..ba8f7100d --- /dev/null +++ b/graphics/object_events/palettes/followers/alakazam.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 169 49 +177 177 185 +105 81 57 +1 1 1 +249 241 193 +145 121 57 +73 57 25 +249 217 97 +233 233 249 +145 121 97 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/arbok.pal b/graphics/object_events/palettes/followers/arbok.pal new file mode 100644 index 000000000..a2c93dc60 --- /dev/null +++ b/graphics/object_events/palettes/followers/arbok.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 169 81 +121 89 169 +57 49 81 +177 129 193 +193 65 65 +1 1 1 +65 65 65 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/arcanine.pal b/graphics/object_events/palettes/followers/arcanine.pal new file mode 100644 index 000000000..5707ca4a6 --- /dev/null +++ b/graphics/object_events/palettes/followers/arcanine.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 105 +145 73 33 +225 193 145 +185 81 25 +73 49 25 +177 177 209 +89 89 89 +1 1 1 +233 233 249 +249 105 49 +121 89 57 +49 49 49 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/articuno.pal b/graphics/object_events/palettes/followers/articuno.pal new file mode 100644 index 000000000..417a8deb9 --- /dev/null +++ b/graphics/object_events/palettes/followers/articuno.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 129 25 +49 177 193 +161 225 249 +57 57 41 +57 129 137 +177 177 209 +217 249 249 +49 105 153 +161 33 49 +201 185 73 +1 1 1 +121 201 249 +105 161 233 +49 65 89 +233 233 249 diff --git a/graphics/object_events/palettes/followers/beedrill.pal b/graphics/object_events/palettes/followers/beedrill.pal new file mode 100644 index 000000000..e4cedddf9 --- /dev/null +++ b/graphics/object_events/palettes/followers/beedrill.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 41 +193 193 193 +105 81 41 +145 145 145 +193 41 65 +249 209 65 +233 233 249 +81 81 81 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/bellsprout.pal b/graphics/object_events/palettes/followers/bellsprout.pal new file mode 100644 index 000000000..4084780e4 --- /dev/null +++ b/graphics/object_events/palettes/followers/bellsprout.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 153 57 +1 1 1 +81 65 49 +241 121 161 +137 217 81 +169 65 113 +121 9 5 +185 161 49 +241 225 73 +65 89 41 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/blastoise.pal b/graphics/object_events/palettes/followers/blastoise.pal new file mode 100644 index 000000000..020dadbe0 --- /dev/null +++ b/graphics/object_events/palettes/followers/blastoise.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 137 81 +145 137 233 +129 81 9 +241 201 81 +97 97 169 +49 57 89 +137 137 137 +233 233 249 +81 81 81 +185 185 185 +1 1 1 +73 41 9 +177 113 25 +201 169 81 +0 0 0 diff --git a/graphics/object_events/palettes/followers/bulbasaur1.pal b/graphics/object_events/palettes/followers/bulbasaur1.pal new file mode 100644 index 000000000..96cbecffe --- /dev/null +++ b/graphics/object_events/palettes/followers/bulbasaur1.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 169 17 +201 201 201 +65 65 65 +65 153 81 +105 17 25 +105 209 121 +137 225 33 +233 233 249 +1 1 1 +185 49 25 +65 97 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/butterfree.pal b/graphics/object_events/palettes/followers/butterfree.pal new file mode 100644 index 000000000..9d7c7c4e3 --- /dev/null +++ b/graphics/object_events/palettes/followers/butterfree.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 145 145 +50 65 145 +105 201 249 +97 97 97 +249 113 137 +193 40 65 +81 145 225 +185 193 225 +65 40 89 +161 105 225 +233 233 249 +113 81 201 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/caterpie.pal b/graphics/object_events/palettes/followers/caterpie.pal new file mode 100644 index 000000000..86d3379ec --- /dev/null +++ b/graphics/object_events/palettes/followers/caterpie.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +129 177 177 +105 153 41 +169 233 65 +65 89 33 +249 121 113 +81 81 81 +161 49 73 +169 153 65 +249 233 97 +1 1 1 +129 97 41 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/chansey.pal b/graphics/object_events/palettes/followers/chansey.pal new file mode 100644 index 000000000..72f30866b --- /dev/null +++ b/graphics/object_events/palettes/followers/chansey.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +233 193 217 +105 57 89 +217 137 185 +153 89 129 +233 233 249 +169 185 209 +225 97 121 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/charizard.pal b/graphics/object_events/palettes/followers/charizard.pal new file mode 100644 index 000000000..e817695ce --- /dev/null +++ b/graphics/object_events/palettes/followers/charizard.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 129 129 +161 161 161 +97 49 1 +249 185 17 +41 73 89 +201 89 41 +1 1 1 +145 65 33 +217 217 249 +249 121 57 +193 17 33 +241 209 113 +217 169 49 +97 65 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/charmander.pal b/graphics/object_events/palettes/followers/charmander.pal new file mode 100644 index 000000000..8df0fb2ef --- /dev/null +++ b/graphics/object_events/palettes/followers/charmander.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +167 177 129 +249 137 57 +97 65 33 +233 233 249 +1 1 1 +185 89 33 +225 41 41 +217 169 49 +41 73 89 +241 209 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/charmeleon.pal b/graphics/object_events/palettes/followers/charmeleon.pal new file mode 100644 index 000000000..108320b28 --- /dev/null +++ b/graphics/object_events/palettes/followers/charmeleon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 169 49 +41 105 129 +177 185 249 +241 209 113 +201 17 41 +145 145 145 +185 65 57 +97 25 33 +233 233 249 +249 105 89 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/clefable.pal b/graphics/object_events/palettes/followers/clefable.pal new file mode 100644 index 000000000..a9968049c --- /dev/null +++ b/graphics/object_events/palettes/followers/clefable.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 129 169 +73 57 57 +1 1 1 +217 81 121 +121 97 73 +201 201 201 +225 145 153 +121 57 73 +249 193 193 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/clefairy.pal b/graphics/object_events/palettes/followers/clefairy.pal new file mode 100644 index 000000000..e207e246c --- /dev/null +++ b/graphics/object_events/palettes/followers/clefairy.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +97 57 65 +233 233 249 +121 89 57 +169 169 169 +161 81 97 +185 105 129 +241 153 169 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/cloyster.pal b/graphics/object_events/palettes/followers/cloyster.pal new file mode 100644 index 000000000..b15a51ee6 --- /dev/null +++ b/graphics/object_events/palettes/followers/cloyster.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 153 153 +97 97 97 +57 57 57 +233 233 249 +193 177 233 +145 113 185 +41 41 49 +1 1 1 +81 81 81 +97 89 121 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/cubone.pal b/graphics/object_events/palettes/followers/cubone.pal new file mode 100644 index 000000000..19517af25 --- /dev/null +++ b/graphics/object_events/palettes/followers/cubone.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 137 89 +193 193 193 +1 1 1 +137 97 25 +217 225 225 +161 161 161 +73 49 49 +129 129 129 +73 73 73 +209 177 145 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dewgong.pal b/graphics/object_events/palettes/followers/dewgong.pal new file mode 100644 index 000000000..0897c29ff --- /dev/null +++ b/graphics/object_events/palettes/followers/dewgong.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +113 129 185 +177 185 217 +49 49 81 +225 225 241 +1 1 1 +73 81 121 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/diglett.pal b/graphics/object_events/palettes/followers/diglett.pal new file mode 100644 index 000000000..761624524 --- /dev/null +++ b/graphics/object_events/palettes/followers/diglett.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 137 3 +113 113 113 +65 49 17 +1 1 1 +65 65 65 +169 169 169 +153 33 73 +153 121 57 +209 65 105 +233 113 153 +201 201 201 +113 73 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ditto.pal b/graphics/object_events/palettes/followers/ditto.pal new file mode 100644 index 000000000..c366583be --- /dev/null +++ b/graphics/object_events/palettes/followers/ditto.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 177 +185 145 225 +113 81 145 +65 65 65 +1 1 1 +225 177 241 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dodrio.pal b/graphics/object_events/palettes/followers/dodrio.pal new file mode 100644 index 000000000..183414bf0 --- /dev/null +++ b/graphics/object_events/palettes/followers/dodrio.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 129 73 +121 81 41 +177 177 153 +129 129 129 +65 49 33 +137 97 41 +193 161 65 +1 1 1 +233 233 249 +97 25 33 +185 65 89 +225 129 145 +249 177 49 +57 57 57 +137 113 41 diff --git a/graphics/object_events/palettes/followers/doduo.pal b/graphics/object_events/palettes/followers/doduo.pal new file mode 100644 index 000000000..eea5b6958 --- /dev/null +++ b/graphics/object_events/palettes/followers/doduo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 97 41 +1 1 1 +113 105 97 +73 57 41 +193 121 25 +225 177 105 +185 129 73 +105 73 33 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dragonair.pal b/graphics/object_events/palettes/followers/dragonair.pal new file mode 100644 index 000000000..5f7e4eaa8 --- /dev/null +++ b/graphics/object_events/palettes/followers/dragonair.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +209 209 209 +65 65 65 +41 121 169 +81 145 217 +233 233 249 +105 105 105 +89 177 217 +145 41 33 +161 201 249 +49 65 105 +113 177 241 +81 113 177 +241 241 241 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dragonite.pal b/graphics/object_events/palettes/followers/dragonite.pal new file mode 100644 index 000000000..c17cc58ce --- /dev/null +++ b/graphics/object_events/palettes/followers/dragonite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 129 65 +145 153 161 +241 177 81 +65 57 33 +57 129 113 +1 1 1 +41 97 81 +233 233 249 +185 193 209 +153 97 49 +153 153 153 +233 201 153 +97 97 97 +209 169 121 +217 137 65 diff --git a/graphics/object_events/palettes/followers/dratini.pal b/graphics/object_events/palettes/followers/dratini.pal new file mode 100644 index 000000000..b8472f998 --- /dev/null +++ b/graphics/object_events/palettes/followers/dratini.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +65 65 65 +193 193 217 +97 113 169 +129 137 209 +105 105 105 +217 217 217 +145 41 33 +153 161 225 +233 233 249 +57 65 97 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/drowzee.pal b/graphics/object_events/palettes/followers/drowzee.pal new file mode 100644 index 000000000..d19de6d0d --- /dev/null +++ b/graphics/object_events/palettes/followers/drowzee.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 153 41 +81 65 49 +233 233 249 +105 81 121 +1 1 1 +121 105 33 +49 49 49 +233 201 81 +89 81 73 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/dugtrio.pal b/graphics/object_events/palettes/followers/dugtrio.pal new file mode 100644 index 000000000..19bbad592 --- /dev/null +++ b/graphics/object_events/palettes/followers/dugtrio.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 105 57 +57 41 17 +1 1 1 +113 113 113 +65 65 65 +129 17 49 +169 169 169 +153 121 57 +209 65 105 +233 121 153 +201 201 201 +113 73 33 +153 33 73 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/eevee.pal b/graphics/object_events/palettes/followers/eevee.pal new file mode 100644 index 000000000..c04ada4ee --- /dev/null +++ b/graphics/object_events/palettes/followers/eevee.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 129 65 +225 209 169 +97 65 57 +185 161 97 +129 97 49 +65 49 25 +193 145 81 +233 233 249 +1 1 1 +121 97 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ekans.pal b/graphics/object_events/palettes/followers/ekans.pal new file mode 100644 index 000000000..cbe0d93b6 --- /dev/null +++ b/graphics/object_events/palettes/followers/ekans.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +129 177 169 +209 161 49 +113 97 41 +201 129 193 +121 81 121 +97 49 105 +249 217 65 +1 1 1 +145 97 145 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/electabuzz.pal b/graphics/object_events/palettes/followers/electabuzz.pal new file mode 100644 index 000000000..9c31f633c --- /dev/null +++ b/graphics/object_events/palettes/followers/electabuzz.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 17 +145 145 145 +65 57 33 +233 233 249 +73 81 81 +241 209 1 +1 1 1 +49 49 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/electrode.pal b/graphics/object_events/palettes/followers/electrode.pal new file mode 100644 index 000000000..335df9141 --- /dev/null +++ b/graphics/object_events/palettes/followers/electrode.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +185 185 193 +105 105 105 +201 33 33 +217 217 217 +49 49 49 +161 161 161 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/exeggcute.pal b/graphics/object_events/palettes/followers/exeggcute.pal new file mode 100644 index 000000000..665e1c152 --- /dev/null +++ b/graphics/object_events/palettes/followers/exeggcute.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 121 105 +233 177 185 +89 73 65 +233 177 57 +241 209 217 +161 97 105 +1 1 1 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/exeggutor.pal b/graphics/object_events/palettes/followers/exeggutor.pal new file mode 100644 index 000000000..9e45a52b5 --- /dev/null +++ b/graphics/object_events/palettes/followers/exeggutor.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 169 41 +161 161 161 +57 81 41 +129 217 89 +201 137 89 +201 89 121 +145 97 57 +209 161 89 +233 233 249 +65 41 41 +249 201 89 +1 1 1 +89 73 65 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/farfetchd.pal b/graphics/object_events/palettes/followers/farfetchd.pal new file mode 100644 index 000000000..5c23264c2 --- /dev/null +++ b/graphics/object_events/palettes/followers/farfetchd.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +81 145 33 +169 169 169 +249 201 49 +81 81 81 +153 161 113 +241 225 161 +1 1 1 +177 145 41 +73 57 41 +233 233 249 +137 113 65 +209 209 193 +177 129 73 +217 169 121 +201 185 121 diff --git a/graphics/object_events/palettes/followers/fearow.pal b/graphics/object_events/palettes/followers/fearow.pal new file mode 100644 index 000000000..04f68a619 --- /dev/null +++ b/graphics/object_events/palettes/followers/fearow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 145 33 +241 129 153 +193 65 1 +225 129 97 +185 185 185 +65 65 65 +89 57 17 +185 169 113 +233 233 249 +177 81 121 +177 113 17 +89 17 9 +225 201 169 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/flareon.pal b/graphics/object_events/palettes/followers/flareon.pal new file mode 100644 index 000000000..df0c348e5 --- /dev/null +++ b/graphics/object_events/palettes/followers/flareon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 49 +233 217 153 +73 57 41 +153 65 41 +217 169 73 +233 233 249 +217 89 33 +249 129 73 +1 1 1 +217 193 193 +81 65 65 +193 65 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gastly.pal b/graphics/object_events/palettes/followers/gastly.pal new file mode 100644 index 000000000..e3337fe80 --- /dev/null +++ b/graphics/object_events/palettes/followers/gastly.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 137 137 +73 73 73 +65 17 57 +233 233 249 +41 41 57 +1 1 1 +113 89 153 +81 57 105 +153 9 5 +185 185 185 +137 113 161 +57 57 57 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gengar.pal b/graphics/object_events/palettes/followers/gengar.pal new file mode 100644 index 000000000..374fed5aa --- /dev/null +++ b/graphics/object_events/palettes/followers/gengar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 97 97 +153 153 153 +81 57 105 +185 185 185 +145 121 161 +41 41 57 +217 97 97 +1 1 1 +249 169 161 +105 81 129 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/geodude.pal b/graphics/object_events/palettes/followers/geodude.pal new file mode 100644 index 000000000..ef0621ad0 --- /dev/null +++ b/graphics/object_events/palettes/followers/geodude.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 169 129 +121 113 97 +233 233 249 +65 49 33 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gloom.pal b/graphics/object_events/palettes/followers/gloom.pal new file mode 100644 index 000000000..638da245d --- /dev/null +++ b/graphics/object_events/palettes/followers/gloom.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 113 25 +81 41 129 +65 113 153 +217 145 145 +169 49 73 +169 81 17 +49 81 113 +1 1 1 +217 97 113 +121 33 17 +169 169 169 +33 57 105 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/golbat.pal b/graphics/object_events/palettes/followers/golbat.pal new file mode 100644 index 000000000..7d30f2f34 --- /dev/null +++ b/graphics/object_events/palettes/followers/golbat.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 145 153 +97 65 129 +233 233 249 +57 25 89 +81 185 177 +65 113 121 +17 57 65 +1 1 1 +137 97 185 +185 185 193 +57 57 81 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/goldeen.pal b/graphics/object_events/palettes/followers/goldeen.pal new file mode 100644 index 000000000..3e9389b60 --- /dev/null +++ b/graphics/object_events/palettes/followers/goldeen.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +41 129 113 +177 177 177 +233 73 33 +249 233 161 +217 161 81 +97 17 1 +81 81 81 +241 129 161 +233 233 249 +1 1 1 +201 89 121 +161 33 17 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/golduck.pal b/graphics/object_events/palettes/followers/golduck.pal new file mode 100644 index 000000000..c1568e666 --- /dev/null +++ b/graphics/object_events/palettes/followers/golduck.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 185 65 +81 121 169 +241 49 113 +65 65 65 +249 233 137 +233 233 249 +1 1 1 +177 177 209 +89 17 33 +121 161 249 +249 193 81 +49 57 81 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/golem.pal b/graphics/object_events/palettes/followers/golem.pal new file mode 100644 index 000000000..d2852e60c --- /dev/null +++ b/graphics/object_events/palettes/followers/golem.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 145 105 +89 81 57 +193 193 193 +153 153 153 +121 113 81 +49 49 49 +1 1 1 +105 17 25 +233 233 249 +193 153 121 +113 89 73 +145 113 97 +161 161 161 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/graveler.pal b/graphics/object_events/palettes/followers/graveler.pal new file mode 100644 index 000000000..b4d24683f --- /dev/null +++ b/graphics/object_events/palettes/followers/graveler.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 137 105 +81 73 65 +233 233 249 +169 169 177 +185 169 129 +121 113 97 +57 49 49 +177 81 105 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/grimer.pal b/graphics/object_events/palettes/followers/grimer.pal new file mode 100644 index 000000000..fef0c2dba --- /dev/null +++ b/graphics/object_events/palettes/followers/grimer.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +65 57 65 +233 233 249 +105 81 121 +177 145 185 +129 105 137 +201 177 217 +121 97 153 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/growlithe.pal b/graphics/object_events/palettes/followers/growlithe.pal new file mode 100644 index 000000000..cc0737467 --- /dev/null +++ b/graphics/object_events/palettes/followers/growlithe.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 121 73 +73 49 25 +177 177 209 +89 89 89 +1 1 1 +145 73 33 +137 89 41 +201 153 81 +233 233 249 +225 193 145 +185 81 25 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/gyarados.pal b/graphics/object_events/palettes/followers/gyarados.pal new file mode 100644 index 000000000..3019ff479 --- /dev/null +++ b/graphics/object_events/palettes/followers/gyarados.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 129 1 +41 129 129 +193 193 209 +137 97 33 +73 177 225 +1 1 1 +33 97 129 +249 201 105 +185 65 105 +49 57 81 +217 113 153 +233 233 249 +137 145 145 +177 137 49 +65 121 153 diff --git a/graphics/object_events/palettes/followers/haunter.pal b/graphics/object_events/palettes/followers/haunter.pal new file mode 100644 index 000000000..aab1166f2 --- /dev/null +++ b/graphics/object_events/palettes/followers/haunter.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 137 161 +73 73 73 +233 233 249 +65 17 57 +1 1 1 +97 73 105 +65 49 57 +153 153 153 +185 185 185 +129 97 129 +97 33 89 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/hitmonchan.pal b/graphics/object_events/palettes/followers/hitmonchan.pal new file mode 100644 index 000000000..7c6c8e38c --- /dev/null +++ b/graphics/object_events/palettes/followers/hitmonchan.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 161 105 +113 81 57 +145 25 41 +233 233 249 +73 49 49 +161 137 201 +113 105 129 +1 1 1 +225 57 57 +153 113 65 +57 57 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/hitmonlee.pal b/graphics/object_events/palettes/followers/hitmonlee.pal new file mode 100644 index 000000000..16a145cac --- /dev/null +++ b/graphics/object_events/palettes/followers/hitmonlee.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 121 49 +161 161 161 +1 1 1 +89 73 41 +177 145 129 +161 129 81 +201 201 209 +97 97 97 +73 49 49 +233 233 249 +121 97 57 +209 185 113 +153 137 89 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/horsea.pal b/graphics/object_events/palettes/followers/horsea.pal new file mode 100644 index 000000000..4a5c74fdb --- /dev/null +++ b/graphics/object_events/palettes/followers/horsea.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 161 97 +97 153 193 +25 57 97 +233 233 249 +65 65 65 +249 209 161 +169 185 209 +145 17 17 +41 89 137 +1 1 1 +145 185 225 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/hypno.pal b/graphics/object_events/palettes/followers/hypno.pal new file mode 100644 index 000000000..1edc1ee50 --- /dev/null +++ b/graphics/object_events/palettes/followers/hypno.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 153 41 +169 169 169 +121 105 33 +57 49 41 +1 1 1 +233 233 249 +233 201 81 +201 201 209 +105 81 121 +49 49 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ivysaur.pal b/graphics/object_events/palettes/followers/ivysaur.pal new file mode 100644 index 000000000..db3e0fda9 --- /dev/null +++ b/graphics/object_events/palettes/followers/ivysaur.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 169 17 +73 169 153 +49 89 25 +105 209 193 +201 89 121 +137 225 33 +145 65 33 +65 129 121 +241 129 161 +201 201 217 +1 1 1 +105 33 41 +233 233 249 +41 65 65 +65 65 65 diff --git a/graphics/object_events/palettes/followers/jigglypuff.pal b/graphics/object_events/palettes/followers/jigglypuff.pal new file mode 100644 index 000000000..cf6b522cc --- /dev/null +++ b/graphics/object_events/palettes/followers/jigglypuff.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +97 73 65 +113 161 249 +81 81 121 +97 41 65 +249 169 185 +145 73 89 +233 233 249 +209 113 145 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/jolteon.pal b/graphics/object_events/palettes/followers/jolteon.pal new file mode 100644 index 000000000..1398b039a --- /dev/null +++ b/graphics/object_events/palettes/followers/jolteon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 161 33 +169 169 193 +65 57 41 +249 249 81 +1 1 1 +209 225 233 +169 105 33 +249 201 25 +73 65 81 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/jynx.pal b/graphics/object_events/palettes/followers/jynx.pal new file mode 100644 index 000000000..10f616466 --- /dev/null +++ b/graphics/object_events/palettes/followers/jynx.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 25 +153 153 185 +105 73 137 +193 193 209 +65 57 57 +249 225 33 +137 97 193 +233 233 249 +1 1 1 +177 57 33 +249 89 73 +249 233 185 +249 209 97 +241 129 161 +201 89 121 diff --git a/graphics/object_events/palettes/followers/kabuto.pal b/graphics/object_events/palettes/followers/kabuto.pal new file mode 100644 index 000000000..aa01d9002 --- /dev/null +++ b/graphics/object_events/palettes/followers/kabuto.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +121 97 65 +49 41 41 +233 185 89 +209 65 65 +169 129 57 +89 73 57 +137 25 25 +49 57 73 +1 1 1 +153 121 73 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/kabutops.pal b/graphics/object_events/palettes/followers/kabutops.pal new file mode 100644 index 000000000..10c3bb588 --- /dev/null +++ b/graphics/object_events/palettes/followers/kabutops.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 73 +89 57 33 +193 193 201 +105 105 121 +137 97 41 +153 153 153 +65 65 65 +49 41 41 +233 233 249 +1 1 1 +105 73 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/kadabra.pal b/graphics/object_events/palettes/followers/kadabra.pal new file mode 100644 index 000000000..1e20369be --- /dev/null +++ b/graphics/object_events/palettes/followers/kadabra.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 169 49 +97 73 49 +177 177 185 +145 121 57 +193 41 65 +1 1 1 +89 89 89 +249 241 193 +73 57 25 +249 217 97 +233 97 121 +233 233 249 +145 121 97 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/kakuna.pal b/graphics/object_events/palettes/followers/kakuna.pal new file mode 100644 index 000000000..4dd491adc --- /dev/null +++ b/graphics/object_events/palettes/followers/kakuna.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 65 +97 73 41 +233 233 249 +249 209 65 +145 113 33 +1 1 1 +65 65 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/kangaskhan.pal b/graphics/object_events/palettes/followers/kangaskhan.pal new file mode 100644 index 000000000..131f73a28 --- /dev/null +++ b/graphics/object_events/palettes/followers/kangaskhan.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 121 41 +89 73 41 +169 185 209 +209 169 97 +113 113 113 +65 49 33 +73 73 73 +249 201 121 +233 233 249 +185 121 113 +105 9 1 +1 1 1 +57 57 65 +129 113 145 +121 81 57 diff --git a/graphics/object_events/palettes/followers/kingler.pal b/graphics/object_events/palettes/followers/kingler.pal new file mode 100644 index 000000000..bc35398e4 --- /dev/null +++ b/graphics/object_events/palettes/followers/kingler.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 129 81 +201 201 209 +169 65 57 +1 1 1 +65 41 41 +177 153 105 +233 233 249 +217 105 49 +225 193 153 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/koffing.pal b/graphics/object_events/palettes/followers/koffing.pal new file mode 100644 index 000000000..e33a361cc --- /dev/null +++ b/graphics/object_events/palettes/followers/koffing.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 129 41 +137 129 209 +89 81 121 +57 41 57 +129 129 129 +233 233 249 +129 73 81 +1 1 1 +121 105 193 +169 169 209 +105 57 65 +201 185 121 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/krabby.pal b/graphics/object_events/palettes/followers/krabby.pal new file mode 100644 index 000000000..6a430a736 --- /dev/null +++ b/graphics/object_events/palettes/followers/krabby.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 129 81 +201 201 209 +81 57 49 +1 1 1 +201 97 33 +233 233 249 +169 65 57 +193 169 129 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/lapras.pal b/graphics/object_events/palettes/followers/lapras.pal new file mode 100644 index 000000000..cb7e199bd --- /dev/null +++ b/graphics/object_events/palettes/followers/lapras.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 153 73 +89 129 177 +105 81 17 +145 153 161 +193 201 209 +49 73 105 +49 57 57 +249 209 105 +97 177 233 +113 113 129 +233 233 249 +1 1 1 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/lickitung.pal b/graphics/object_events/palettes/followers/lickitung.pal new file mode 100644 index 000000000..7c028935c --- /dev/null +++ b/graphics/object_events/palettes/followers/lickitung.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 129 129 +161 161 161 +233 233 249 +177 97 121 +233 185 201 +217 201 49 +217 153 177 +89 49 73 +1 1 1 +241 169 169 +169 89 137 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/machamp.pal b/graphics/object_events/palettes/followers/machamp.pal new file mode 100644 index 000000000..a84bfe10a --- /dev/null +++ b/graphics/object_events/palettes/followers/machamp.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 129 25 +129 129 145 +249 209 9 +233 201 153 +65 65 65 +177 153 113 +209 185 73 +233 233 249 +193 41 65 +241 233 113 +161 161 201 +81 89 105 +201 201 201 +1 1 1 +0 0 0 diff --git a/graphics/object_events/palettes/followers/machoke.pal b/graphics/object_events/palettes/followers/machoke.pal new file mode 100644 index 000000000..4585ebaa7 --- /dev/null +++ b/graphics/object_events/palettes/followers/machoke.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 129 25 +129 129 145 +73 73 73 +249 209 9 +233 201 153 +177 153 113 +97 105 129 +193 41 65 +1 1 1 +233 233 249 +161 161 201 +209 161 17 +89 89 89 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/machop.pal b/graphics/object_events/palettes/followers/machop.pal new file mode 100644 index 000000000..828328b78 --- /dev/null +++ b/graphics/object_events/palettes/followers/machop.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +113 129 137 +233 201 153 +57 57 57 +1 1 1 +193 41 65 +177 153 113 +233 233 249 +73 97 105 +137 169 185 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/magikarp.pal b/graphics/object_events/palettes/followers/magikarp.pal new file mode 100644 index 000000000..d29c0357d --- /dev/null +++ b/graphics/object_events/palettes/followers/magikarp.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 25 +185 65 105 +145 145 145 +137 41 25 +1 1 1 +81 33 17 +249 193 17 +217 113 153 +193 193 209 +233 233 249 +121 33 65 +233 169 73 +233 97 65 +49 49 49 +201 57 17 diff --git a/graphics/object_events/palettes/followers/magmar.pal b/graphics/object_events/palettes/followers/magmar.pal new file mode 100644 index 000000000..ce9d6c30d --- /dev/null +++ b/graphics/object_events/palettes/followers/magmar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 121 9 +49 49 49 +145 145 145 +201 89 129 +193 193 209 +185 57 25 +129 1 1 +241 209 1 +241 185 201 +233 233 249 +113 81 17 +225 153 17 +105 33 17 +1 1 1 +241 73 33 diff --git a/graphics/object_events/palettes/followers/magnemite.pal b/graphics/object_events/palettes/followers/magnemite.pal new file mode 100644 index 000000000..041b62f37 --- /dev/null +++ b/graphics/object_events/palettes/followers/magnemite.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 129 145 +193 209 217 +81 81 81 +73 137 233 +233 65 65 +153 169 185 +57 57 57 +1 1 1 +113 113 121 +233 233 249 +177 177 185 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/magneton.pal b/graphics/object_events/palettes/followers/magneton.pal new file mode 100644 index 000000000..041b62f37 --- /dev/null +++ b/graphics/object_events/palettes/followers/magneton.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 129 145 +193 209 217 +81 81 81 +73 137 233 +233 65 65 +153 169 185 +57 57 57 +1 1 1 +113 113 121 +233 233 249 +177 177 185 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mankey.pal b/graphics/object_events/palettes/followers/mankey.pal new file mode 100644 index 000000000..91522b4e5 --- /dev/null +++ b/graphics/object_events/palettes/followers/mankey.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 129 49 +241 129 161 +73 65 57 +1 1 1 +145 17 49 +153 121 97 +233 233 249 +177 105 129 +177 177 209 +177 169 129 +233 217 137 +137 105 57 +121 41 65 +209 177 129 +0 0 0 diff --git a/graphics/object_events/palettes/followers/marowak.pal b/graphics/object_events/palettes/followers/marowak.pal new file mode 100644 index 000000000..2f8424f47 --- /dev/null +++ b/graphics/object_events/palettes/followers/marowak.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 129 73 +193 193 193 +1 1 1 +129 129 129 +73 49 49 +217 225 225 +201 153 81 +225 193 145 +193 161 105 +73 73 73 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/meowth.pal b/graphics/object_events/palettes/followers/meowth.pal new file mode 100644 index 000000000..1c7fd519a --- /dev/null +++ b/graphics/object_events/palettes/followers/meowth.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 129 49 +81 57 25 +217 177 65 +121 105 81 +1 1 1 +169 121 81 +153 81 25 +169 33 81 +241 217 129 +249 201 33 +177 89 81 +217 145 25 +65 57 49 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/metapod.pal b/graphics/object_events/palettes/followers/metapod.pal new file mode 100644 index 000000000..c070c1405 --- /dev/null +++ b/graphics/object_events/palettes/followers/metapod.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 137 49 +225 225 225 +161 217 73 +57 73 25 +1 1 1 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mew.pal b/graphics/object_events/palettes/followers/mew.pal new file mode 100644 index 000000000..d99299b99 --- /dev/null +++ b/graphics/object_events/palettes/followers/mew.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 129 129 +201 201 249 +97 97 97 +1 1 1 +233 233 249 +177 105 169 +89 49 81 +249 209 233 +217 161 185 +113 89 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/mewtwo.pal b/graphics/object_events/palettes/followers/mewtwo.pal new file mode 100644 index 000000000..6f5afee0f --- /dev/null +++ b/graphics/object_events/palettes/followers/mewtwo.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 121 153 +137 73 137 +217 201 217 +65 65 65 +153 153 153 +177 153 193 +65 49 81 +185 89 209 +97 97 97 +233 233 249 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/moltres.pal b/graphics/object_events/palettes/followers/moltres.pal new file mode 100644 index 000000000..524c5a1d4 --- /dev/null +++ b/graphics/object_events/palettes/followers/moltres.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 137 33 +177 177 209 +65 65 65 +249 185 33 +233 73 49 +1 1 1 +161 25 41 +249 137 121 +233 233 249 +65 49 49 +185 113 97 +249 201 121 +233 177 81 +201 129 57 +113 73 57 diff --git a/graphics/object_events/palettes/followers/mr_mime.pal b/graphics/object_events/palettes/followers/mr_mime.pal new file mode 100644 index 000000000..156deec2c --- /dev/null +++ b/graphics/object_events/palettes/followers/mr_mime.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 145 161 +33 65 89 +241 193 201 +145 65 81 +41 49 65 +1 1 1 +49 97 113 +233 233 249 +169 105 121 +201 201 233 +209 65 89 +105 105 105 +193 145 145 +73 49 57 +0 0 0 diff --git a/graphics/object_events/palettes/followers/muk.pal b/graphics/object_events/palettes/followers/muk.pal new file mode 100644 index 000000000..25c53904a --- /dev/null +++ b/graphics/object_events/palettes/followers/muk.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +65 57 65 +105 81 121 +233 233 249 +177 145 185 +129 105 137 +97 73 105 +201 177 217 +121 97 153 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidoking.pal b/graphics/object_events/palettes/followers/nidoking.pal new file mode 100644 index 000000000..0f1679f32 --- /dev/null +++ b/graphics/object_events/palettes/followers/nidoking.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +25 169 153 +201 201 201 +217 153 241 +49 113 105 +185 129 185 +1 1 1 +65 49 81 +241 233 225 +153 105 161 +89 25 25 +161 161 161 +233 233 249 +169 169 153 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidoqueen.pal b/graphics/object_events/palettes/followers/nidoqueen.pal new file mode 100644 index 000000000..9fb7ed22a --- /dev/null +++ b/graphics/object_events/palettes/followers/nidoqueen.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +97 137 177 +89 65 49 +201 201 201 +241 193 121 +73 65 121 +233 233 249 +97 41 25 +129 177 217 +193 161 81 +169 97 49 +169 201 241 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidoran_f.pal b/graphics/object_events/palettes/followers/nidoran_f.pal new file mode 100644 index 000000000..a268e55b6 --- /dev/null +++ b/graphics/object_events/palettes/followers/nidoran_f.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +89 169 137 +49 89 73 +153 241 225 +161 81 105 +17 153 241 +1 1 1 +217 105 137 +161 33 17 +65 81 137 +233 233 249 +161 161 161 +241 121 113 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidoran_m.pal b/graphics/object_events/palettes/followers/nidoran_m.pal new file mode 100644 index 000000000..91d4ac518 --- /dev/null +++ b/graphics/object_events/palettes/followers/nidoran_m.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +25 169 153 +137 97 153 +193 65 105 +233 233 249 +217 153 241 +185 25 9 +1 1 1 +81 49 81 +49 113 105 +177 113 209 +161 161 161 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidorina.pal b/graphics/object_events/palettes/followers/nidorina.pal new file mode 100644 index 000000000..f59ffda8b --- /dev/null +++ b/graphics/object_events/palettes/followers/nidorina.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +41 137 209 +113 193 225 +1 1 1 +49 89 105 +153 225 249 +169 169 193 +161 41 33 +81 161 177 +241 161 153 +233 233 249 +49 97 137 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/nidorino.pal b/graphics/object_events/palettes/followers/nidorino.pal new file mode 100644 index 000000000..571d26a69 --- /dev/null +++ b/graphics/object_events/palettes/followers/nidorino.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +25 169 153 +233 233 249 +49 113 105 +177 121 201 +185 25 9 +177 177 193 +73 57 81 +1 1 1 +137 97 153 +217 153 241 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ninetales.pal b/graphics/object_events/palettes/followers/ninetales.pal new file mode 100644 index 000000000..393b1073b --- /dev/null +++ b/graphics/object_events/palettes/followers/ninetales.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 169 1 +193 65 105 +1 1 1 +89 57 49 +233 233 249 +185 161 105 +145 113 73 +233 217 153 +137 57 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/oddish.pal b/graphics/object_events/palettes/followers/oddish.pal new file mode 100644 index 000000000..a707d037a --- /dev/null +++ b/graphics/object_events/palettes/followers/oddish.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +57 113 65 +17 161 49 +33 73 41 +1 1 1 +113 1 1 +65 113 153 +41 73 73 +137 193 129 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/omanyte.pal b/graphics/object_events/palettes/followers/omanyte.pal new file mode 100644 index 000000000..121eb8cc6 --- /dev/null +++ b/graphics/object_events/palettes/followers/omanyte.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +57 129 161 +233 201 153 +81 65 57 +73 169 217 +145 113 73 +1 1 1 +121 201 241 +177 153 105 +233 233 249 +169 169 177 +105 105 105 +49 73 81 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/omastar.pal b/graphics/object_events/palettes/followers/omastar.pal new file mode 100644 index 000000000..1f042f749 --- /dev/null +++ b/graphics/object_events/palettes/followers/omastar.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 145 65 +57 129 161 +81 65 57 +249 225 105 +233 225 185 +129 105 81 +177 153 105 +73 169 217 +121 201 241 +233 201 153 +1 1 1 +105 105 105 +49 65 73 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/onix.pal b/graphics/object_events/palettes/followers/onix.pal new file mode 100644 index 000000000..41933ba53 --- /dev/null +++ b/graphics/object_events/palettes/followers/onix.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +129 129 129 +193 193 193 +81 73 73 +1 1 1 +49 49 49 +145 145 145 +233 233 249 +105 97 97 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/paras.pal b/graphics/object_events/palettes/followers/paras.pal new file mode 100644 index 000000000..e2285d9db --- /dev/null +++ b/graphics/object_events/palettes/followers/paras.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 161 41 +169 81 17 +169 169 169 +113 113 113 +97 41 25 +1 1 1 +249 113 25 +233 233 249 +169 49 73 +217 97 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/parasect.pal b/graphics/object_events/palettes/followers/parasect.pal new file mode 100644 index 000000000..b07e4319f --- /dev/null +++ b/graphics/object_events/palettes/followers/parasect.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 161 33 +169 81 17 +169 169 169 +97 41 25 +233 201 89 +217 97 113 +249 113 25 +233 233 249 +1 1 1 +169 49 73 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/persian.pal b/graphics/object_events/palettes/followers/persian.pal new file mode 100644 index 000000000..16d9b1527 --- /dev/null +++ b/graphics/object_events/palettes/followers/persian.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +105 137 3 +1 1 1 +81 57 25 +145 129 73 +185 65 113 +233 233 249 +193 169 121 +241 217 129 +145 105 81 +161 129 105 +65 57 49 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pidgeot.pal b/graphics/object_events/palettes/followers/pidgeot.pal new file mode 100644 index 000000000..22828bc3f --- /dev/null +++ b/graphics/object_events/palettes/followers/pidgeot.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +233 137 1 +241 105 225 +145 89 49 +1 1 1 +177 65 97 +193 153 65 +129 25 113 +209 113 41 +233 233 249 +241 209 113 +249 193 49 +81 57 25 +225 113 113 +201 73 33 +161 161 161 diff --git a/graphics/object_events/palettes/followers/pidgeotto.pal b/graphics/object_events/palettes/followers/pidgeotto.pal new file mode 100644 index 000000000..8b3242b54 --- /dev/null +++ b/graphics/object_events/palettes/followers/pidgeotto.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +129 177 169 +209 129 33 +153 153 153 +97 65 33 +233 233 249 +225 113 113 +241 209 113 +241 137 225 +201 73 33 +161 33 161 +193 153 65 +1 1 1 +177 81 33 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pidgey.pal b/graphics/object_events/palettes/followers/pidgey.pal new file mode 100644 index 000000000..f843a7e59 --- /dev/null +++ b/graphics/object_events/palettes/followers/pidgey.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 153 65 +217 145 177 +97 65 33 +241 209 113 +233 233 249 +201 113 33 +153 57 97 +1 1 1 +185 185 185 +185 89 33 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pikachu.pal b/graphics/object_events/palettes/followers/pikachu.pal new file mode 100644 index 000000000..987f609d0 --- /dev/null +++ b/graphics/object_events/palettes/followers/pikachu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 161 65 +113 81 57 +233 233 249 +49 49 49 +249 209 81 +153 113 57 +1 1 1 +201 89 57 +145 57 25 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/pinsir.pal b/graphics/object_events/palettes/followers/pinsir.pal new file mode 100644 index 000000000..bb6f6e121 --- /dev/null +++ b/graphics/object_events/palettes/followers/pinsir.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 129 97 +81 65 49 +193 193 209 +121 105 81 +1 1 1 +49 49 49 +145 145 145 +97 81 57 +233 233 249 +105 105 105 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/poliwag.pal b/graphics/object_events/palettes/followers/poliwag.pal new file mode 100644 index 000000000..207b398d6 --- /dev/null +++ b/graphics/object_events/palettes/followers/poliwag.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +121 121 121 +89 89 89 +233 233 233 +121 129 233 +25 41 57 +1 1 1 +65 89 153 +97 49 65 +177 177 209 +241 121 161 +177 65 105 +49 49 49 +233 233 249 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/poliwhirl.pal b/graphics/object_events/palettes/followers/poliwhirl.pal new file mode 100644 index 000000000..71d107bee --- /dev/null +++ b/graphics/object_events/palettes/followers/poliwhirl.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +57 73 113 +233 233 249 +49 49 49 +121 129 233 +33 41 57 +161 161 161 +73 97 185 +177 177 209 +89 89 89 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/poliwrath.pal b/graphics/object_events/palettes/followers/poliwrath.pal new file mode 100644 index 000000000..0937b8faa --- /dev/null +++ b/graphics/object_events/palettes/followers/poliwrath.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +201 201 201 +73 97 185 +49 49 49 +121 129 233 +33 41 57 +161 161 161 +233 233 249 +177 177 209 +89 89 89 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/ponyta.pal b/graphics/object_events/palettes/followers/ponyta.pal new file mode 100644 index 000000000..90cf88072 --- /dev/null +++ b/graphics/object_events/palettes/followers/ponyta.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 161 25 +81 57 33 +241 225 169 +81 97 129 +129 121 89 +225 73 33 +185 169 113 +161 49 9 +233 233 249 +153 57 81 +1 1 1 +73 57 41 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/porygon.pal b/graphics/object_events/palettes/followers/porygon.pal new file mode 100644 index 000000000..a9a1804e9 --- /dev/null +++ b/graphics/object_events/palettes/followers/porygon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +49 137 153 +41 97 97 +81 217 217 +1 1 1 +177 49 105 +41 65 73 +249 153 209 +233 105 161 +233 233 249 +41 185 193 +97 25 49 +161 185 201 +209 65 137 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/primeape.pal b/graphics/object_events/palettes/followers/primeape.pal new file mode 100644 index 000000000..38020a677 --- /dev/null +++ b/graphics/object_events/palettes/followers/primeape.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 129 49 +241 129 161 +65 57 49 +1 1 1 +105 105 105 +209 169 113 +233 233 249 +121 41 65 +177 177 209 +137 105 57 +233 217 137 +153 121 97 +177 105 129 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/psyduck.pal b/graphics/object_events/palettes/followers/psyduck.pal new file mode 100644 index 000000000..4990fa0d6 --- /dev/null +++ b/graphics/object_events/palettes/followers/psyduck.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 145 65 +241 233 185 +233 185 65 +201 185 137 +105 97 65 +1 1 1 +233 233 249 +249 217 105 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/raichu.pal b/graphics/object_events/palettes/followers/raichu.pal new file mode 100644 index 000000000..a131215ea --- /dev/null +++ b/graphics/object_events/palettes/followers/raichu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 121 33 +1 1 1 +113 73 41 +209 177 25 +249 233 209 +121 105 73 +249 225 9 +73 41 25 +249 145 1 +249 193 65 +233 233 249 +137 89 25 +193 177 129 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/rapidash.pal b/graphics/object_events/palettes/followers/rapidash.pal new file mode 100644 index 000000000..aa197a10a --- /dev/null +++ b/graphics/object_events/palettes/followers/rapidash.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +249 161 25 +73 57 41 +241 225 169 +81 97 129 +185 169 113 +249 81 33 +113 97 65 +185 201 121 +161 49 9 +233 233 249 +153 57 81 +1 1 1 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/raticate.pal b/graphics/object_events/palettes/followers/raticate.pal new file mode 100644 index 000000000..75f836e6c --- /dev/null +++ b/graphics/object_events/palettes/followers/raticate.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +225 145 57 +225 201 169 +89 65 25 +185 169 113 +233 233 249 +137 49 121 +201 201 201 +177 97 57 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/rattata.pal b/graphics/object_events/palettes/followers/rattata.pal new file mode 100644 index 000000000..79c244a7b --- /dev/null +++ b/graphics/object_events/palettes/followers/rattata.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 137 81 +169 129 217 +57 49 89 +233 217 177 +185 169 129 +217 217 217 +225 57 33 +105 89 153 +233 233 249 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/rhydon.pal b/graphics/object_events/palettes/followers/rhydon.pal new file mode 100644 index 000000000..d8b41c6ea --- /dev/null +++ b/graphics/object_events/palettes/followers/rhydon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 121 49 +185 185 185 +65 57 25 +137 137 137 +217 217 217 +121 105 57 +137 33 57 +217 177 89 +1 1 1 +65 65 65 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/rhyhorn.pal b/graphics/object_events/palettes/followers/rhyhorn.pal new file mode 100644 index 000000000..67ea3d889 --- /dev/null +++ b/graphics/object_events/palettes/followers/rhyhorn.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 145 145 +201 201 201 +65 65 65 +1 1 1 +137 33 57 +233 233 249 +113 113 113 +177 177 177 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sandshrew.pal b/graphics/object_events/palettes/followers/sandshrew.pal new file mode 100644 index 000000000..ac1703261 --- /dev/null +++ b/graphics/object_events/palettes/followers/sandshrew.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +129 177 169 +185 137 41 +161 161 161 +225 217 169 +97 65 33 +185 169 137 +1 1 1 +33 97 121 +217 169 57 +233 233 249 +121 105 89 +1 1 1 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/sandslash.pal b/graphics/object_events/palettes/followers/sandslash.pal new file mode 100644 index 000000000..d11a2ce3b --- /dev/null +++ b/graphics/object_events/palettes/followers/sandslash.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +137 131 3 +153 153 153 +97 65 33 +233 225 153 +89 89 89 +177 177 177 +201 137 49 +1 1 1 +233 233 249 +137 97 41 +49 33 17 +41 105 129 +225 169 65 +193 161 137 +161 105 33 diff --git a/graphics/object_events/palettes/followers/scyther.pal b/graphics/object_events/palettes/followers/scyther.pal new file mode 100644 index 000000000..b279ae4cd --- /dev/null +++ b/graphics/object_events/palettes/followers/scyther.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 161 65 +177 169 201 +1 1 1 +41 65 33 +129 129 129 +233 233 249 +153 209 105 +177 153 41 +241 217 73 +81 65 17 +177 177 201 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/seadra.pal b/graphics/object_events/palettes/followers/seadra.pal new file mode 100644 index 000000000..cd2bb36c4 --- /dev/null +++ b/graphics/object_events/palettes/followers/seadra.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 161 97 +89 145 217 +1 1 1 +233 233 249 +65 65 73 +169 185 209 +73 137 169 +249 209 161 +49 81 113 +121 185 241 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/seaking.pal b/graphics/object_events/palettes/followers/seaking.pal new file mode 100644 index 000000000..7cc446f83 --- /dev/null +++ b/graphics/object_events/palettes/followers/seaking.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 161 81 +169 57 49 +177 177 177 +249 233 161 +249 81 41 +49 49 49 +241 129 161 +113 25 17 +233 233 249 +1 1 1 +97 97 97 +193 65 105 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/seel.pal b/graphics/object_events/palettes/followers/seel.pal new file mode 100644 index 000000000..dad2284d8 --- /dev/null +++ b/graphics/object_events/palettes/followers/seel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 153 9 +225 129 145 +113 89 33 +249 241 185 +73 81 121 +49 49 81 +1 1 1 +225 225 241 +161 169 209 +193 65 89 +81 33 33 +233 201 97 +97 97 97 +233 233 249 +0 0 0 diff --git a/graphics/object_events/palettes/followers/shellder.pal b/graphics/object_events/palettes/followers/shellder.pal new file mode 100644 index 000000000..b48549223 --- /dev/null +++ b/graphics/object_events/palettes/followers/shellder.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 153 153 +73 73 161 +233 233 249 +129 129 201 +41 41 49 +233 153 217 +57 57 73 +1 1 1 +193 89 177 +161 161 241 +73 33 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/slowbro.pal b/graphics/object_events/palettes/followers/slowbro.pal new file mode 100644 index 000000000..f6c55d4cd --- /dev/null +++ b/graphics/object_events/palettes/followers/slowbro.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +217 193 89 +73 81 89 +241 169 177 +145 121 49 +241 241 169 +177 97 105 +153 153 153 +233 233 249 +113 49 57 +193 65 65 +193 201 209 +217 113 97 +1 1 1 +209 121 129 +0 0 0 diff --git a/graphics/object_events/palettes/followers/slowpoke.pal b/graphics/object_events/palettes/followers/slowpoke.pal new file mode 100644 index 000000000..324117fbd --- /dev/null +++ b/graphics/object_events/palettes/followers/slowpoke.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +209 121 129 +241 217 145 +209 169 97 +105 81 17 +233 233 249 +161 169 177 +193 193 193 +97 41 49 +153 89 97 +241 153 161 +1 1 1 +249 193 177 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/snorlax.pal b/graphics/object_events/palettes/followers/snorlax.pal new file mode 100644 index 000000000..204900db7 --- /dev/null +++ b/graphics/object_events/palettes/followers/snorlax.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 145 81 +161 161 185 +65 65 65 +1 1 1 +249 225 169 +137 105 73 +41 49 49 +81 129 145 +233 233 249 +65 105 121 +193 193 201 +217 193 121 +41 73 73 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/spearow.pal b/graphics/object_events/palettes/followers/spearow.pal new file mode 100644 index 000000000..2c7f13b8a --- /dev/null +++ b/graphics/object_events/palettes/followers/spearow.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 129 33 +81 57 17 +249 137 145 +233 121 89 +65 65 65 +201 57 25 +185 169 113 +145 41 17 +233 233 249 +161 81 105 +129 89 33 +137 121 65 +1 1 1 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/squirtle.pal b/graphics/object_events/palettes/followers/squirtle.pal new file mode 100644 index 000000000..8d090127d --- /dev/null +++ b/graphics/object_events/palettes/followers/squirtle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +201 121 25 +57 137 185 +217 169 49 +233 233 249 +33 73 97 +185 185 185 +1 1 1 +161 9 3 +89 185 241 +241 209 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/starmie.pal b/graphics/object_events/palettes/followers/starmie.pal new file mode 100644 index 000000000..1dba44dc5 --- /dev/null +++ b/graphics/object_events/palettes/followers/starmie.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 145 25 +65 65 113 +57 49 17 +105 25 25 +137 113 233 +1 1 1 +49 41 65 +233 177 33 +241 89 73 +89 89 193 +185 41 41 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/staryu.pal b/graphics/object_events/palettes/followers/staryu.pal new file mode 100644 index 000000000..47f9daf31 --- /dev/null +++ b/graphics/object_events/palettes/followers/staryu.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +169 121 33 +57 49 17 +177 145 25 +105 25 25 +121 81 9 +1 1 1 +225 97 73 +233 177 33 +185 41 41 +89 73 41 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/tangela.pal b/graphics/object_events/palettes/followers/tangela.pal new file mode 100644 index 000000000..eec939132 --- /dev/null +++ b/graphics/object_events/palettes/followers/tangela.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 137 145 +233 233 249 +65 65 65 +121 145 177 +161 49 41 +1 1 1 +25 33 33 +89 113 113 +169 185 209 +105 161 169 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/tauros.pal b/graphics/object_events/palettes/followers/tauros.pal new file mode 100644 index 000000000..9d198490e --- /dev/null +++ b/graphics/object_events/palettes/followers/tauros.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 73 +113 129 169 +73 65 65 +201 153 65 +193 193 209 +105 97 89 +1 1 1 +41 33 17 +145 145 145 +233 233 249 +81 81 105 +225 169 73 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/tentacool.pal b/graphics/object_events/palettes/followers/tentacool.pal new file mode 100644 index 000000000..ebde6755c --- /dev/null +++ b/graphics/object_events/palettes/followers/tentacool.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 137 3 +73 145 161 +65 65 65 +121 193 241 +145 25 89 +177 121 73 +249 161 161 +41 105 121 +233 233 249 +65 49 41 +209 169 97 +1 1 1 +209 209 209 +225 49 97 +57 73 97 diff --git a/graphics/object_events/palettes/followers/tentacruel.pal b/graphics/object_events/palettes/followers/tentacruel.pal new file mode 100644 index 000000000..5eb5f673e --- /dev/null +++ b/graphics/object_events/palettes/followers/tentacruel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +73 137 3 +1 1 1 +65 65 65 +233 233 249 +121 193 241 +169 169 169 +145 25 89 +153 121 89 +41 105 121 +185 161 121 +81 153 169 +225 49 97 +249 161 161 +57 73 97 +0 0 0 diff --git a/graphics/object_events/palettes/followers/vaporeon.pal b/graphics/object_events/palettes/followers/vaporeon.pal new file mode 100644 index 000000000..e28edebe1 --- /dev/null +++ b/graphics/object_events/palettes/followers/vaporeon.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +9 131 5 +33 145 137 +129 201 233 +81 73 57 +89 177 225 +1 1 1 +177 153 57 +209 209 209 +33 57 105 +17 113 121 +225 201 105 +233 233 249 +73 137 177 +161 161 161 +49 105 137 diff --git a/graphics/object_events/palettes/followers/venomoth.pal b/graphics/object_events/palettes/followers/venomoth.pal new file mode 100644 index 000000000..558651bc1 --- /dev/null +++ b/graphics/object_events/palettes/followers/venomoth.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +153 121 65 +209 153 249 +105 97 137 +233 233 249 +73 65 89 +1 1 1 +193 193 193 +161 105 241 +113 113 113 +233 185 249 +217 185 129 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/venonat.pal b/graphics/object_events/palettes/followers/venonat.pal new file mode 100644 index 000000000..b1281ab1c --- /dev/null +++ b/graphics/object_events/palettes/followers/venonat.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +177 145 81 +73 57 129 +201 201 201 +129 97 33 +1 1 1 +137 1 1 +137 137 137 +113 73 209 +169 49 81 +49 33 65 +233 233 249 +161 105 241 +233 129 153 +217 185 129 +249 201 201 diff --git a/graphics/object_events/palettes/followers/venusaur.pal b/graphics/object_events/palettes/followers/venusaur.pal new file mode 100644 index 000000000..46f21dc4a --- /dev/null +++ b/graphics/object_events/palettes/followers/venusaur.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +193 129 41 +241 121 161 +137 225 33 +145 65 33 +65 153 97 +105 217 193 +233 193 113 +201 73 129 +233 233 249 +105 33 41 +97 169 17 +161 161 161 +1 1 1 +65 97 49 +249 225 9 diff --git a/graphics/object_events/palettes/followers/victreebel.pal b/graphics/object_events/palettes/followers/victreebel.pal new file mode 100644 index 000000000..90de7ab6a --- /dev/null +++ b/graphics/object_events/palettes/followers/victreebel.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 153 57 +241 121 161 +81 65 49 +137 217 81 +1 1 1 +169 65 113 +121 9 5 +185 137 57 +193 193 193 +233 233 249 +33 33 33 +65 89 41 +241 225 73 +185 161 49 +129 97 41 diff --git a/graphics/object_events/palettes/followers/vileplume.pal b/graphics/object_events/palettes/followers/vileplume.pal new file mode 100644 index 000000000..503e1333c --- /dev/null +++ b/graphics/object_events/palettes/followers/vileplume.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 113 153 +169 81 17 +1 1 1 +33 57 105 +217 97 113 +169 49 73 +121 33 17 +217 185 145 +249 137 73 +49 81 113 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/voltorb.pal b/graphics/object_events/palettes/followers/voltorb.pal new file mode 100644 index 000000000..e5c53dd09 --- /dev/null +++ b/graphics/object_events/palettes/followers/voltorb.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +233 81 81 +113 17 17 +201 201 209 +49 49 49 +161 161 161 +241 113 113 +201 33 33 +233 233 249 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/vulpix.pal b/graphics/object_events/palettes/followers/vulpix.pal new file mode 100644 index 000000000..9c57ccda9 --- /dev/null +++ b/graphics/object_events/palettes/followers/vulpix.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +241 137 73 +169 81 25 +217 113 49 +233 233 249 +121 73 57 +89 57 49 +1 1 1 +185 89 57 +241 201 153 +89 65 73 +137 57 57 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/wartortle.pal b/graphics/object_events/palettes/followers/wartortle.pal new file mode 100644 index 000000000..d4d157193 --- /dev/null +++ b/graphics/object_events/palettes/followers/wartortle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 137 25 +161 161 161 +65 81 153 +57 57 73 +233 233 249 +1 1 1 +65 121 217 +161 89 25 +161 9 3 +241 209 113 +113 153 225 +65 65 65 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/weedle.pal b/graphics/object_events/palettes/followers/weedle.pal new file mode 100644 index 000000000..d78ce1a02 --- /dev/null +++ b/graphics/object_events/palettes/followers/weedle.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +161 121 49 +185 185 185 +97 73 41 +249 209 65 +129 129 129 +249 113 137 +193 41 65 +193 153 65 +233 233 249 +1 1 1 +65 65 65 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/weepinbell.pal b/graphics/object_events/palettes/followers/weepinbell.pal new file mode 100644 index 000000000..c6ea065e7 --- /dev/null +++ b/graphics/object_events/palettes/followers/weepinbell.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +97 153 57 +241 121 161 +81 65 49 +137 217 81 +89 89 89 +1 1 1 +185 137 57 +185 185 185 +233 233 249 +121 9 5 +169 65 113 +65 89 41 +241 225 73 +185 161 49 +129 97 41 diff --git a/graphics/object_events/palettes/followers/weezing.pal b/graphics/object_events/palettes/followers/weezing.pal new file mode 100644 index 000000000..84a071158 --- /dev/null +++ b/graphics/object_events/palettes/followers/weezing.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +145 129 41 +137 129 209 +89 81 121 +57 41 57 +161 161 129 +233 233 249 +129 73 81 +1 1 1 +121 105 193 +169 169 209 +105 57 65 +201 185 121 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/wigglytuff.pal b/graphics/object_events/palettes/followers/wigglytuff.pal new file mode 100644 index 000000000..4c86b3af9 --- /dev/null +++ b/graphics/object_events/palettes/followers/wigglytuff.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +1 1 1 +185 105 129 +233 233 249 +193 193 193 +137 57 81 +241 153 169 +57 97 201 +113 185 249 +81 81 81 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/zapdos.pal b/graphics/object_events/palettes/followers/zapdos.pal new file mode 100644 index 000000000..037f1b687 --- /dev/null +++ b/graphics/object_events/palettes/followers/zapdos.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +185 121 1 +1 1 1 +65 65 65 +249 209 1 +225 169 25 +177 177 209 +161 113 73 +57 41 25 +233 233 249 +225 145 73 +249 217 65 +89 81 65 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/palettes/followers/zubat.pal b/graphics/object_events/palettes/followers/zubat.pal new file mode 100644 index 000000000..548a44a6a --- /dev/null +++ b/graphics/object_events/palettes/followers/zubat.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +161 177 129 +65 113 121 +1 1 1 +97 65 129 +137 97 185 +81 185 177 +17 57 65 +161 129 177 +185 185 193 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/object_events/pics/pokemon/followers/abra.png b/graphics/object_events/pics/pokemon/followers/abra.png new file mode 100644 index 000000000..0526af89a Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/abra.png differ diff --git a/graphics/object_events/pics/pokemon/followers/aerodactyl.png b/graphics/object_events/pics/pokemon/followers/aerodactyl.png new file mode 100644 index 000000000..1ef02c177 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/aerodactyl.png differ diff --git a/graphics/object_events/pics/pokemon/followers/alakazam.png b/graphics/object_events/pics/pokemon/followers/alakazam.png new file mode 100644 index 000000000..065a7fe79 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/alakazam.png differ diff --git a/graphics/object_events/pics/pokemon/followers/arbok.png b/graphics/object_events/pics/pokemon/followers/arbok.png new file mode 100644 index 000000000..5df32b93a Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/arbok.png differ diff --git a/graphics/object_events/pics/pokemon/followers/arcanine.png b/graphics/object_events/pics/pokemon/followers/arcanine.png new file mode 100644 index 000000000..ace23f81b Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/arcanine.png differ diff --git a/graphics/object_events/pics/pokemon/followers/articuno.png b/graphics/object_events/pics/pokemon/followers/articuno.png new file mode 100644 index 000000000..da3cc960e Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/articuno.png differ diff --git a/graphics/object_events/pics/pokemon/followers/beedrill.png b/graphics/object_events/pics/pokemon/followers/beedrill.png new file mode 100644 index 000000000..ac46df2e1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/beedrill.png differ diff --git a/graphics/object_events/pics/pokemon/followers/bellsprout.png b/graphics/object_events/pics/pokemon/followers/bellsprout.png new file mode 100644 index 000000000..20838a022 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/bellsprout.png differ diff --git a/graphics/object_events/pics/pokemon/followers/blastoise.png b/graphics/object_events/pics/pokemon/followers/blastoise.png new file mode 100644 index 000000000..018f03869 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/blastoise.png differ diff --git a/graphics/object_events/pics/pokemon/followers/bulbasaur.png b/graphics/object_events/pics/pokemon/followers/bulbasaur.png new file mode 100644 index 000000000..637615bd8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/bulbasaur.png differ diff --git a/graphics/object_events/pics/pokemon/followers/butterfree.png b/graphics/object_events/pics/pokemon/followers/butterfree.png new file mode 100644 index 000000000..1d19c4f9f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/butterfree.png differ diff --git a/graphics/object_events/pics/pokemon/followers/caterpie.png b/graphics/object_events/pics/pokemon/followers/caterpie.png new file mode 100644 index 000000000..af99246e6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/caterpie.png differ diff --git a/graphics/object_events/pics/pokemon/followers/chansey.png b/graphics/object_events/pics/pokemon/followers/chansey.png new file mode 100644 index 000000000..006c1e1c9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/chansey.png differ diff --git a/graphics/object_events/pics/pokemon/followers/charizard.png b/graphics/object_events/pics/pokemon/followers/charizard.png new file mode 100644 index 000000000..d435a4f3f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/charizard.png differ diff --git a/graphics/object_events/pics/pokemon/followers/charmander.png b/graphics/object_events/pics/pokemon/followers/charmander.png new file mode 100644 index 000000000..7634ecdab Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/charmander.png differ diff --git a/graphics/object_events/pics/pokemon/followers/charmeleon.png b/graphics/object_events/pics/pokemon/followers/charmeleon.png new file mode 100644 index 000000000..c2b311e77 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/charmeleon.png differ diff --git a/graphics/object_events/pics/pokemon/followers/clefable.png b/graphics/object_events/pics/pokemon/followers/clefable.png new file mode 100644 index 000000000..7c7fa0cc2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/clefable.png differ diff --git a/graphics/object_events/pics/pokemon/followers/clefairy.png b/graphics/object_events/pics/pokemon/followers/clefairy.png new file mode 100644 index 000000000..219f37e4c Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/clefairy.png differ diff --git a/graphics/object_events/pics/pokemon/followers/cloyster.png b/graphics/object_events/pics/pokemon/followers/cloyster.png new file mode 100644 index 000000000..4515f8a21 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/cloyster.png differ diff --git a/graphics/object_events/pics/pokemon/followers/cubone.png b/graphics/object_events/pics/pokemon/followers/cubone.png new file mode 100644 index 000000000..00a47c888 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/cubone.png differ diff --git a/graphics/object_events/pics/pokemon/followers/dewgong.png b/graphics/object_events/pics/pokemon/followers/dewgong.png new file mode 100644 index 000000000..5ad0a155e Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/dewgong.png differ diff --git a/graphics/object_events/pics/pokemon/followers/diglett.png b/graphics/object_events/pics/pokemon/followers/diglett.png new file mode 100644 index 000000000..958ca3dac Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/diglett.png differ diff --git a/graphics/object_events/pics/pokemon/followers/ditto.png b/graphics/object_events/pics/pokemon/followers/ditto.png new file mode 100644 index 000000000..6bf5538f8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/ditto.png differ diff --git a/graphics/object_events/pics/pokemon/followers/dodrio.png b/graphics/object_events/pics/pokemon/followers/dodrio.png new file mode 100644 index 000000000..c25503d7d Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/dodrio.png differ diff --git a/graphics/object_events/pics/pokemon/followers/doduo.png b/graphics/object_events/pics/pokemon/followers/doduo.png new file mode 100644 index 000000000..ff0fff119 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/doduo.png differ diff --git a/graphics/object_events/pics/pokemon/followers/dragonair.png b/graphics/object_events/pics/pokemon/followers/dragonair.png new file mode 100644 index 000000000..01c13c028 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/dragonair.png differ diff --git a/graphics/object_events/pics/pokemon/followers/dragonite.png b/graphics/object_events/pics/pokemon/followers/dragonite.png new file mode 100644 index 000000000..aedbf448f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/dragonite.png differ diff --git a/graphics/object_events/pics/pokemon/followers/dratini.png b/graphics/object_events/pics/pokemon/followers/dratini.png new file mode 100644 index 000000000..1ab1aa034 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/dratini.png differ diff --git a/graphics/object_events/pics/pokemon/followers/drowzee.png b/graphics/object_events/pics/pokemon/followers/drowzee.png new file mode 100644 index 000000000..983693dcd Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/drowzee.png differ diff --git a/graphics/object_events/pics/pokemon/followers/dugtrio.png b/graphics/object_events/pics/pokemon/followers/dugtrio.png new file mode 100644 index 000000000..b60c3fb73 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/dugtrio.png differ diff --git a/graphics/object_events/pics/pokemon/followers/eevee.png b/graphics/object_events/pics/pokemon/followers/eevee.png new file mode 100644 index 000000000..6f69d899a Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/eevee.png differ diff --git a/graphics/object_events/pics/pokemon/followers/ekans.png b/graphics/object_events/pics/pokemon/followers/ekans.png new file mode 100644 index 000000000..dc315987a Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/ekans.png differ diff --git a/graphics/object_events/pics/pokemon/followers/electabuzz.png b/graphics/object_events/pics/pokemon/followers/electabuzz.png new file mode 100644 index 000000000..6a24e3dcb Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/electabuzz.png differ diff --git a/graphics/object_events/pics/pokemon/followers/electrode.png b/graphics/object_events/pics/pokemon/followers/electrode.png new file mode 100644 index 000000000..cb2eadb37 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/electrode.png differ diff --git a/graphics/object_events/pics/pokemon/followers/exeggcute.png b/graphics/object_events/pics/pokemon/followers/exeggcute.png new file mode 100644 index 000000000..b4a0b7b27 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/exeggcute.png differ diff --git a/graphics/object_events/pics/pokemon/followers/exeggutor.png b/graphics/object_events/pics/pokemon/followers/exeggutor.png new file mode 100644 index 000000000..22a94424b Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/exeggutor.png differ diff --git a/graphics/object_events/pics/pokemon/followers/farfetchd.png b/graphics/object_events/pics/pokemon/followers/farfetchd.png new file mode 100644 index 000000000..d4eb66b53 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/farfetchd.png differ diff --git a/graphics/object_events/pics/pokemon/followers/fearow.png b/graphics/object_events/pics/pokemon/followers/fearow.png new file mode 100644 index 000000000..99508e3be Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/fearow.png differ diff --git a/graphics/object_events/pics/pokemon/followers/flareon.png b/graphics/object_events/pics/pokemon/followers/flareon.png new file mode 100644 index 000000000..280b5f450 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/flareon.png differ diff --git a/graphics/object_events/pics/pokemon/followers/gastly.png b/graphics/object_events/pics/pokemon/followers/gastly.png new file mode 100644 index 000000000..157f271be Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/gastly.png differ diff --git a/graphics/object_events/pics/pokemon/followers/gengar.png b/graphics/object_events/pics/pokemon/followers/gengar.png new file mode 100644 index 000000000..d061034a8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/gengar.png differ diff --git a/graphics/object_events/pics/pokemon/followers/geodude.png b/graphics/object_events/pics/pokemon/followers/geodude.png new file mode 100644 index 000000000..49ced2be2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/geodude.png differ diff --git a/graphics/object_events/pics/pokemon/followers/gloom.png b/graphics/object_events/pics/pokemon/followers/gloom.png new file mode 100644 index 000000000..d79c52490 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/gloom.png differ diff --git a/graphics/object_events/pics/pokemon/followers/golbat.png b/graphics/object_events/pics/pokemon/followers/golbat.png new file mode 100644 index 000000000..34542dcc7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/golbat.png differ diff --git a/graphics/object_events/pics/pokemon/followers/goldeen.png b/graphics/object_events/pics/pokemon/followers/goldeen.png new file mode 100644 index 000000000..9400c02fe Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/goldeen.png differ diff --git a/graphics/object_events/pics/pokemon/followers/golduck.png b/graphics/object_events/pics/pokemon/followers/golduck.png new file mode 100644 index 000000000..a7ff8edaa Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/golduck.png differ diff --git a/graphics/object_events/pics/pokemon/followers/golem.png b/graphics/object_events/pics/pokemon/followers/golem.png new file mode 100644 index 000000000..20b619d6c Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/golem.png differ diff --git a/graphics/object_events/pics/pokemon/followers/graveler.png b/graphics/object_events/pics/pokemon/followers/graveler.png new file mode 100644 index 000000000..b77557ca4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/graveler.png differ diff --git a/graphics/object_events/pics/pokemon/followers/grimer.png b/graphics/object_events/pics/pokemon/followers/grimer.png new file mode 100644 index 000000000..b9c9c3e56 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/grimer.png differ diff --git a/graphics/object_events/pics/pokemon/followers/growlithe.png b/graphics/object_events/pics/pokemon/followers/growlithe.png new file mode 100644 index 000000000..e0cf29de2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/growlithe.png differ diff --git a/graphics/object_events/pics/pokemon/followers/gyarados.png b/graphics/object_events/pics/pokemon/followers/gyarados.png new file mode 100644 index 000000000..33cb2b888 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/gyarados.png differ diff --git a/graphics/object_events/pics/pokemon/followers/haunter.png b/graphics/object_events/pics/pokemon/followers/haunter.png new file mode 100644 index 000000000..84df6caf2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/haunter.png differ diff --git a/graphics/object_events/pics/pokemon/followers/hitmonchan.png b/graphics/object_events/pics/pokemon/followers/hitmonchan.png new file mode 100644 index 000000000..852fbad16 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/hitmonchan.png differ diff --git a/graphics/object_events/pics/pokemon/followers/hitmonlee.png b/graphics/object_events/pics/pokemon/followers/hitmonlee.png new file mode 100644 index 000000000..4d6ae60d1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/hitmonlee.png differ diff --git a/graphics/object_events/pics/pokemon/followers/horsea.png b/graphics/object_events/pics/pokemon/followers/horsea.png new file mode 100644 index 000000000..068020595 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/horsea.png differ diff --git a/graphics/object_events/pics/pokemon/followers/hypno.png b/graphics/object_events/pics/pokemon/followers/hypno.png new file mode 100644 index 000000000..4663f9ea1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/hypno.png differ diff --git a/graphics/object_events/pics/pokemon/followers/ivysaur.png b/graphics/object_events/pics/pokemon/followers/ivysaur.png new file mode 100644 index 000000000..fda631a53 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/ivysaur.png differ diff --git a/graphics/object_events/pics/pokemon/followers/jigglypuff.png b/graphics/object_events/pics/pokemon/followers/jigglypuff.png new file mode 100644 index 000000000..ea877a890 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/jigglypuff.png differ diff --git a/graphics/object_events/pics/pokemon/followers/jolteon.png b/graphics/object_events/pics/pokemon/followers/jolteon.png new file mode 100644 index 000000000..c75292549 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/jolteon.png differ diff --git a/graphics/object_events/pics/pokemon/followers/jynx.png b/graphics/object_events/pics/pokemon/followers/jynx.png new file mode 100644 index 000000000..e2c243069 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/jynx.png differ diff --git a/graphics/object_events/pics/pokemon/followers/kabuto.png b/graphics/object_events/pics/pokemon/followers/kabuto.png new file mode 100644 index 000000000..5eed0306d Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/kabuto.png differ diff --git a/graphics/object_events/pics/pokemon/followers/kabutops.png b/graphics/object_events/pics/pokemon/followers/kabutops.png new file mode 100644 index 000000000..bb5c7b0e3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/kabutops.png differ diff --git a/graphics/object_events/pics/pokemon/followers/kadabra.png b/graphics/object_events/pics/pokemon/followers/kadabra.png new file mode 100644 index 000000000..36d8df23d Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/kadabra.png differ diff --git a/graphics/object_events/pics/pokemon/followers/kakuna.png b/graphics/object_events/pics/pokemon/followers/kakuna.png new file mode 100644 index 000000000..4b5d24102 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/kakuna.png differ diff --git a/graphics/object_events/pics/pokemon/followers/kangaskhan.png b/graphics/object_events/pics/pokemon/followers/kangaskhan.png new file mode 100644 index 000000000..9faf8c2ad Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/kangaskhan.png differ diff --git a/graphics/object_events/pics/pokemon/followers/kingler.png b/graphics/object_events/pics/pokemon/followers/kingler.png new file mode 100644 index 000000000..e9844c273 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/kingler.png differ diff --git a/graphics/object_events/pics/pokemon/followers/koffing.png b/graphics/object_events/pics/pokemon/followers/koffing.png new file mode 100644 index 000000000..7d6b5f5a3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/koffing.png differ diff --git a/graphics/object_events/pics/pokemon/followers/krabby.png b/graphics/object_events/pics/pokemon/followers/krabby.png new file mode 100644 index 000000000..bee310360 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/krabby.png differ diff --git a/graphics/object_events/pics/pokemon/followers/lapras.png b/graphics/object_events/pics/pokemon/followers/lapras.png new file mode 100644 index 000000000..f55e3028d Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/lapras.png differ diff --git a/graphics/object_events/pics/pokemon/followers/lickitung.png b/graphics/object_events/pics/pokemon/followers/lickitung.png new file mode 100644 index 000000000..715f9a5b9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/lickitung.png differ diff --git a/graphics/object_events/pics/pokemon/followers/machamp.png b/graphics/object_events/pics/pokemon/followers/machamp.png new file mode 100644 index 000000000..13c746ddb Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/machamp.png differ diff --git a/graphics/object_events/pics/pokemon/followers/machoke.png b/graphics/object_events/pics/pokemon/followers/machoke.png new file mode 100644 index 000000000..634906d65 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/machoke.png differ diff --git a/graphics/object_events/pics/pokemon/followers/machop.png b/graphics/object_events/pics/pokemon/followers/machop.png new file mode 100644 index 000000000..37f625a5d Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/machop.png differ diff --git a/graphics/object_events/pics/pokemon/followers/magikarp.png b/graphics/object_events/pics/pokemon/followers/magikarp.png new file mode 100644 index 000000000..9af8fc807 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/magikarp.png differ diff --git a/graphics/object_events/pics/pokemon/followers/magmar.png b/graphics/object_events/pics/pokemon/followers/magmar.png new file mode 100644 index 000000000..3c41115da Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/magmar.png differ diff --git a/graphics/object_events/pics/pokemon/followers/magnemite.png b/graphics/object_events/pics/pokemon/followers/magnemite.png new file mode 100644 index 000000000..5d1d932c3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/magnemite.png differ diff --git a/graphics/object_events/pics/pokemon/followers/magneton.png b/graphics/object_events/pics/pokemon/followers/magneton.png new file mode 100644 index 000000000..75f67de25 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/magneton.png differ diff --git a/graphics/object_events/pics/pokemon/followers/mankey.png b/graphics/object_events/pics/pokemon/followers/mankey.png new file mode 100644 index 000000000..dd57bbd42 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/mankey.png differ diff --git a/graphics/object_events/pics/pokemon/followers/marowak.png b/graphics/object_events/pics/pokemon/followers/marowak.png new file mode 100644 index 000000000..d2ba55d34 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/marowak.png differ diff --git a/graphics/object_events/pics/pokemon/followers/meowth.png b/graphics/object_events/pics/pokemon/followers/meowth.png new file mode 100644 index 000000000..13cfac090 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/meowth.png differ diff --git a/graphics/object_events/pics/pokemon/followers/metapod.png b/graphics/object_events/pics/pokemon/followers/metapod.png new file mode 100644 index 000000000..2ed08761c Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/metapod.png differ diff --git a/graphics/object_events/pics/pokemon/followers/mew.png b/graphics/object_events/pics/pokemon/followers/mew.png new file mode 100644 index 000000000..3ae89a52f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/mew.png differ diff --git a/graphics/object_events/pics/pokemon/followers/mewtwo.png b/graphics/object_events/pics/pokemon/followers/mewtwo.png new file mode 100644 index 000000000..e871d9a26 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/mewtwo.png differ diff --git a/graphics/object_events/pics/pokemon/followers/moltres.png b/graphics/object_events/pics/pokemon/followers/moltres.png new file mode 100644 index 000000000..70d6298ea Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/moltres.png differ diff --git a/graphics/object_events/pics/pokemon/followers/mr_mime.png b/graphics/object_events/pics/pokemon/followers/mr_mime.png new file mode 100644 index 000000000..ce52c1f03 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/mr_mime.png differ diff --git a/graphics/object_events/pics/pokemon/followers/muk.png b/graphics/object_events/pics/pokemon/followers/muk.png new file mode 100644 index 000000000..6fc05c292 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/muk.png differ diff --git a/graphics/object_events/pics/pokemon/followers/nidoking.png b/graphics/object_events/pics/pokemon/followers/nidoking.png new file mode 100644 index 000000000..20045f13e Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/nidoking.png differ diff --git a/graphics/object_events/pics/pokemon/followers/nidoqueen.png b/graphics/object_events/pics/pokemon/followers/nidoqueen.png new file mode 100644 index 000000000..dd252d981 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/nidoqueen.png differ diff --git a/graphics/object_events/pics/pokemon/followers/nidoran_f.png b/graphics/object_events/pics/pokemon/followers/nidoran_f.png new file mode 100644 index 000000000..55a16243f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/nidoran_f.png differ diff --git a/graphics/object_events/pics/pokemon/followers/nidoran_m.png b/graphics/object_events/pics/pokemon/followers/nidoran_m.png new file mode 100644 index 000000000..939cdafa3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/nidoran_m.png differ diff --git a/graphics/object_events/pics/pokemon/followers/nidorina.png b/graphics/object_events/pics/pokemon/followers/nidorina.png new file mode 100644 index 000000000..cc84925f3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/nidorina.png differ diff --git a/graphics/object_events/pics/pokemon/followers/nidorino.png b/graphics/object_events/pics/pokemon/followers/nidorino.png new file mode 100644 index 000000000..ee6419705 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/nidorino.png differ diff --git a/graphics/object_events/pics/pokemon/followers/ninetales.png b/graphics/object_events/pics/pokemon/followers/ninetales.png new file mode 100644 index 000000000..88c1d95fe Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/ninetales.png differ diff --git a/graphics/object_events/pics/pokemon/followers/oddish.png b/graphics/object_events/pics/pokemon/followers/oddish.png new file mode 100644 index 000000000..bff7ee3f4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/oddish.png differ diff --git a/graphics/object_events/pics/pokemon/followers/omanyte.png b/graphics/object_events/pics/pokemon/followers/omanyte.png new file mode 100644 index 000000000..c20f2bf69 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/omanyte.png differ diff --git a/graphics/object_events/pics/pokemon/followers/omastar.png b/graphics/object_events/pics/pokemon/followers/omastar.png new file mode 100644 index 000000000..5f32df5ec Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/omastar.png differ diff --git a/graphics/object_events/pics/pokemon/followers/onix.png b/graphics/object_events/pics/pokemon/followers/onix.png new file mode 100644 index 000000000..dab6e099f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/onix.png differ diff --git a/graphics/object_events/pics/pokemon/followers/paras.png b/graphics/object_events/pics/pokemon/followers/paras.png new file mode 100644 index 000000000..b1a3a83ce Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/paras.png differ diff --git a/graphics/object_events/pics/pokemon/followers/parasect.png b/graphics/object_events/pics/pokemon/followers/parasect.png new file mode 100644 index 000000000..522748561 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/parasect.png differ diff --git a/graphics/object_events/pics/pokemon/followers/persian.png b/graphics/object_events/pics/pokemon/followers/persian.png new file mode 100644 index 000000000..4ec83aea5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/persian.png differ diff --git a/graphics/object_events/pics/pokemon/followers/pidgeot.png b/graphics/object_events/pics/pokemon/followers/pidgeot.png new file mode 100644 index 000000000..cdcdce3cd Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/pidgeot.png differ diff --git a/graphics/object_events/pics/pokemon/followers/pidgeotto.png b/graphics/object_events/pics/pokemon/followers/pidgeotto.png new file mode 100644 index 000000000..cdf9865eb Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/pidgeotto.png differ diff --git a/graphics/object_events/pics/pokemon/followers/pidgey.png b/graphics/object_events/pics/pokemon/followers/pidgey.png new file mode 100644 index 000000000..cd924a5dd Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/pidgey.png differ diff --git a/graphics/object_events/pics/pokemon/followers/pikachu.png b/graphics/object_events/pics/pokemon/followers/pikachu.png new file mode 100644 index 000000000..a6883c7d0 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/pikachu.png differ diff --git a/graphics/object_events/pics/pokemon/followers/pinsir.png b/graphics/object_events/pics/pokemon/followers/pinsir.png new file mode 100644 index 000000000..fe630135f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/pinsir.png differ diff --git a/graphics/object_events/pics/pokemon/followers/poliwag.png b/graphics/object_events/pics/pokemon/followers/poliwag.png new file mode 100644 index 000000000..0705bfe2f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/poliwag.png differ diff --git a/graphics/object_events/pics/pokemon/followers/poliwhirl.png b/graphics/object_events/pics/pokemon/followers/poliwhirl.png new file mode 100644 index 000000000..5b9a3f1fd Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/poliwhirl.png differ diff --git a/graphics/object_events/pics/pokemon/followers/poliwrath.png b/graphics/object_events/pics/pokemon/followers/poliwrath.png new file mode 100644 index 000000000..9db4cf86d Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/poliwrath.png differ diff --git a/graphics/object_events/pics/pokemon/followers/ponyta.png b/graphics/object_events/pics/pokemon/followers/ponyta.png new file mode 100644 index 000000000..47a337aa7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/ponyta.png differ diff --git a/graphics/object_events/pics/pokemon/followers/porygon.png b/graphics/object_events/pics/pokemon/followers/porygon.png new file mode 100644 index 000000000..04115d119 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/porygon.png differ diff --git a/graphics/object_events/pics/pokemon/followers/primeape.png b/graphics/object_events/pics/pokemon/followers/primeape.png new file mode 100644 index 000000000..1a4d7c813 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/primeape.png differ diff --git a/graphics/object_events/pics/pokemon/followers/psyduck.png b/graphics/object_events/pics/pokemon/followers/psyduck.png new file mode 100644 index 000000000..d8aa36c94 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/psyduck.png differ diff --git a/graphics/object_events/pics/pokemon/followers/raichu.png b/graphics/object_events/pics/pokemon/followers/raichu.png new file mode 100644 index 000000000..1887d9a74 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/raichu.png differ diff --git a/graphics/object_events/pics/pokemon/followers/rapidash.png b/graphics/object_events/pics/pokemon/followers/rapidash.png new file mode 100644 index 000000000..974d68199 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/rapidash.png differ diff --git a/graphics/object_events/pics/pokemon/followers/raticate.png b/graphics/object_events/pics/pokemon/followers/raticate.png new file mode 100644 index 000000000..691a58a66 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/raticate.png differ diff --git a/graphics/object_events/pics/pokemon/followers/rattata.png b/graphics/object_events/pics/pokemon/followers/rattata.png new file mode 100644 index 000000000..e3b389ef6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/rattata.png differ diff --git a/graphics/object_events/pics/pokemon/followers/rhydon.png b/graphics/object_events/pics/pokemon/followers/rhydon.png new file mode 100644 index 000000000..b606f11f8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/rhydon.png differ diff --git a/graphics/object_events/pics/pokemon/followers/rhyhorn.png b/graphics/object_events/pics/pokemon/followers/rhyhorn.png new file mode 100644 index 000000000..78faf7323 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/rhyhorn.png differ diff --git a/graphics/object_events/pics/pokemon/followers/sandshrew.png b/graphics/object_events/pics/pokemon/followers/sandshrew.png new file mode 100644 index 000000000..182bfe82a Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/sandshrew.png differ diff --git a/graphics/object_events/pics/pokemon/followers/sandslash.png b/graphics/object_events/pics/pokemon/followers/sandslash.png new file mode 100644 index 000000000..7977fb8fc Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/sandslash.png differ diff --git a/graphics/object_events/pics/pokemon/followers/scyther.png b/graphics/object_events/pics/pokemon/followers/scyther.png new file mode 100644 index 000000000..7ed877482 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/scyther.png differ diff --git a/graphics/object_events/pics/pokemon/followers/seadra.png b/graphics/object_events/pics/pokemon/followers/seadra.png new file mode 100644 index 000000000..64c61f85f Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/seadra.png differ diff --git a/graphics/object_events/pics/pokemon/followers/seaking.png b/graphics/object_events/pics/pokemon/followers/seaking.png new file mode 100644 index 000000000..6277a9291 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/seaking.png differ diff --git a/graphics/object_events/pics/pokemon/followers/seel.png b/graphics/object_events/pics/pokemon/followers/seel.png new file mode 100644 index 000000000..f5d2cca52 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/seel.png differ diff --git a/graphics/object_events/pics/pokemon/followers/shellder.png b/graphics/object_events/pics/pokemon/followers/shellder.png new file mode 100644 index 000000000..53e2f9db5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/shellder.png differ diff --git a/graphics/object_events/pics/pokemon/followers/slowbro.png b/graphics/object_events/pics/pokemon/followers/slowbro.png new file mode 100644 index 000000000..0c6d926c1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/slowbro.png differ diff --git a/graphics/object_events/pics/pokemon/followers/slowpoke.png b/graphics/object_events/pics/pokemon/followers/slowpoke.png new file mode 100644 index 000000000..c57aeaf7d Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/slowpoke.png differ diff --git a/graphics/object_events/pics/pokemon/followers/snorlax.png b/graphics/object_events/pics/pokemon/followers/snorlax.png new file mode 100644 index 000000000..c2c911a60 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/snorlax.png differ diff --git a/graphics/object_events/pics/pokemon/followers/spearow.png b/graphics/object_events/pics/pokemon/followers/spearow.png new file mode 100644 index 000000000..fc34bc4ee Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/spearow.png differ diff --git a/graphics/object_events/pics/pokemon/followers/squirtle.png b/graphics/object_events/pics/pokemon/followers/squirtle.png new file mode 100644 index 000000000..dbf56fd5a Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/squirtle.png differ diff --git a/graphics/object_events/pics/pokemon/followers/starmie.png b/graphics/object_events/pics/pokemon/followers/starmie.png new file mode 100644 index 000000000..55b68853e Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/starmie.png differ diff --git a/graphics/object_events/pics/pokemon/followers/staryu.png b/graphics/object_events/pics/pokemon/followers/staryu.png new file mode 100644 index 000000000..e29b0d9fe Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/staryu.png differ diff --git a/graphics/object_events/pics/pokemon/followers/tangela.png b/graphics/object_events/pics/pokemon/followers/tangela.png new file mode 100644 index 000000000..a20ce784c Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/tangela.png differ diff --git a/graphics/object_events/pics/pokemon/followers/tauros.png b/graphics/object_events/pics/pokemon/followers/tauros.png new file mode 100644 index 000000000..bb730a117 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/tauros.png differ diff --git a/graphics/object_events/pics/pokemon/followers/tentacool.png b/graphics/object_events/pics/pokemon/followers/tentacool.png new file mode 100644 index 000000000..0ac8ba162 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/tentacool.png differ diff --git a/graphics/object_events/pics/pokemon/followers/tentacruel.png b/graphics/object_events/pics/pokemon/followers/tentacruel.png new file mode 100644 index 000000000..9f203530e Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/tentacruel.png differ diff --git a/graphics/object_events/pics/pokemon/followers/vaporeon.png b/graphics/object_events/pics/pokemon/followers/vaporeon.png new file mode 100644 index 000000000..f7b769f26 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/vaporeon.png differ diff --git a/graphics/object_events/pics/pokemon/followers/venomoth.png b/graphics/object_events/pics/pokemon/followers/venomoth.png new file mode 100644 index 000000000..5d7f1ff73 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/venomoth.png differ diff --git a/graphics/object_events/pics/pokemon/followers/venonat.png b/graphics/object_events/pics/pokemon/followers/venonat.png new file mode 100644 index 000000000..ce5727068 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/venonat.png differ diff --git a/graphics/object_events/pics/pokemon/followers/venusaur.png b/graphics/object_events/pics/pokemon/followers/venusaur.png new file mode 100644 index 000000000..9b6e57ac8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/venusaur.png differ diff --git a/graphics/object_events/pics/pokemon/followers/victreebel.png b/graphics/object_events/pics/pokemon/followers/victreebel.png new file mode 100644 index 000000000..dcec3333b Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/victreebel.png differ diff --git a/graphics/object_events/pics/pokemon/followers/vileplume.png b/graphics/object_events/pics/pokemon/followers/vileplume.png new file mode 100644 index 000000000..a47decc2d Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/vileplume.png differ diff --git a/graphics/object_events/pics/pokemon/followers/voltorb.png b/graphics/object_events/pics/pokemon/followers/voltorb.png new file mode 100644 index 000000000..79d9ff553 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/voltorb.png differ diff --git a/graphics/object_events/pics/pokemon/followers/vulpix.png b/graphics/object_events/pics/pokemon/followers/vulpix.png new file mode 100644 index 000000000..a96fcc781 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/vulpix.png differ diff --git a/graphics/object_events/pics/pokemon/followers/wartortle.png b/graphics/object_events/pics/pokemon/followers/wartortle.png new file mode 100644 index 000000000..2d23e30b2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/wartortle.png differ diff --git a/graphics/object_events/pics/pokemon/followers/weedle.png b/graphics/object_events/pics/pokemon/followers/weedle.png new file mode 100644 index 000000000..d070e8189 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/weedle.png differ diff --git a/graphics/object_events/pics/pokemon/followers/weepinbell.png b/graphics/object_events/pics/pokemon/followers/weepinbell.png new file mode 100644 index 000000000..f21e1a243 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/weepinbell.png differ diff --git a/graphics/object_events/pics/pokemon/followers/weezing.png b/graphics/object_events/pics/pokemon/followers/weezing.png new file mode 100644 index 000000000..9d2891aa4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/weezing.png differ diff --git a/graphics/object_events/pics/pokemon/followers/wigglytuff.png b/graphics/object_events/pics/pokemon/followers/wigglytuff.png new file mode 100644 index 000000000..d4200e0d2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/wigglytuff.png differ diff --git a/graphics/object_events/pics/pokemon/followers/zapdos.png b/graphics/object_events/pics/pokemon/followers/zapdos.png new file mode 100644 index 000000000..281e5f3d6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/zapdos.png differ diff --git a/graphics/object_events/pics/pokemon/followers/zubat.png b/graphics/object_events/pics/pokemon/followers/zubat.png new file mode 100644 index 000000000..b744d060e Binary files /dev/null and b/graphics/object_events/pics/pokemon/followers/zubat.png differ diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 2c4273524..2031bc7c1 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -82,7 +82,8 @@ #define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP 0x4E #define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT 0x4F #define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT 0x50 -#define NUM_MOVEMENT_TYPES 0x51 +#define MOVEMENT_TYPE_FOLLOWING_POKEMON 0x51 +#define NUM_MOVEMENT_TYPES 0x52 #define MOVEMENT_ACTION_FACE_DOWN 0x0 #define MOVEMENT_ACTION_FACE_UP 0x1 @@ -242,6 +243,12 @@ #define MOVEMENT_ACTION_FIGURE_8 0x9B #define MOVEMENT_ACTION_FLY_UP 0x9C #define MOVEMENT_ACTION_FLY_DOWN 0x9D +#define MOVEMENT_ACTION_FOLLOWING_POKEMON 0x9E +#define MOVEMENT_ACTION_FOLLOWING_POKEMON_FACESOUTH 0x9F +#define MOVEMENT_ACTION_FOLLOWING_POKEMON_FACENORTH 0xA0 +#define MOVEMENT_ACTION_FOLLOWING_POKEMON_FACEWEST 0xA1 +#define MOVEMENT_ACTION_FOLLOWING_POKEMON_FACEEAST 0xA2 +#define MOVEMENT_ACTION_FOLLOWING_POKEMON_WALKSOUTH 0xA3 #define MOVEMENT_ACTION_STEP_END 0xFE #define MOVEMENT_ACTION_NONE 0xFF diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h index 6b99f19bd..8c488a708 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -240,8 +240,159 @@ #define OBJ_EVENT_GFX_LINK_RS_MAY 236 #define OBJ_EVENT_GFX_LUGIA 237 #define OBJ_EVENT_GFX_HOOH 238 +#define OBJ_EVENT_GFX_BULBASAUR 239 +#define OBJ_EVENT_GFX_IVYSAUR 240 +#define OBJ_EVENT_GFX_VENUSAUR 241 +#define OBJ_EVENT_GFX_CHARMANDER 242 +#define OBJ_EVENT_GFX_CHARMELEON 243 +#define OBJ_EVENT_GFX_CHARIZARD 244 +#define OBJ_EVENT_GFX_SQUIRTLE 245 +#define OBJ_EVENT_GFX_WARTORTLE 246 +#define OBJ_EVENT_GFX_BLASTOISE 247 +#define OBJ_EVENT_GFX_CATERPIE 248 +#define OBJ_EVENT_GFX_METAPOD 249 +#define OBJ_EVENT_GFX_BUTTERFREE 250 +#define OBJ_EVENT_GFX_WEEDLE 251 +#define OBJ_EVENT_GFX_KAKUNA 252 +#define OBJ_EVENT_GFX_BEEDRILL 253 +#define OBJ_EVENT_GFX_PIDGEY 254 +#define OBJ_EVENT_GFX_PIDGEOTTO 255 +#define OBJ_EVENT_GFX_PIDGEOT 256 +#define OBJ_EVENT_GFX_RATTATA 257 +#define OBJ_EVENT_GFX_RATICATE 258 +#define OBJ_EVENT_GFX_SPEAROW 259 +#define OBJ_EVENT_GFX_FEAROW 260 +#define OBJ_EVENT_GFX_EKANS 261 +#define OBJ_EVENT_GFX_ARBOK 262 +#define OBJ_EVENT_GFX_PIKACHU_FOLLOW 263 +#define OBJ_EVENT_GFX_RAICHU 264 +#define OBJ_EVENT_GFX_SANDSHREW 265 +#define OBJ_EVENT_GFX_SANDSLASH 266 +#define OBJ_EVENT_GFX_NIDORAN_F 267 +#define OBJ_EVENT_GFX_NIDORINA 268 +#define OBJ_EVENT_GFX_NIDOQUEEN 269 +#define OBJ_EVENT_GFX_NIDORAN_M 270 +#define OBJ_EVENT_GFX_NIDORINO 271 +#define OBJ_EVENT_GFX_NIDOKING 272 +#define OBJ_EVENT_GFX_CLEFAIRY 273 +#define OBJ_EVENT_GFX_CLEFABLE 274 +#define OBJ_EVENT_GFX_VULPIX 275 +#define OBJ_EVENT_GFX_NINETALES 276 +#define OBJ_EVENT_GFX_JIGGLYPUFF 277 +#define OBJ_EVENT_GFX_WIGGLYTUFF 278 +#define OBJ_EVENT_GFX_ZUBAT 279 +#define OBJ_EVENT_GFX_GOLBAT 280 +#define OBJ_EVENT_GFX_ODDISH 281 +#define OBJ_EVENT_GFX_GLOOM 282 +#define OBJ_EVENT_GFX_VILEPLUME 283 +#define OBJ_EVENT_GFX_PARAS 284 +#define OBJ_EVENT_GFX_PARASECT 285 +#define OBJ_EVENT_GFX_VENONAT 286 +#define OBJ_EVENT_GFX_VENOMOTH 287 +#define OBJ_EVENT_GFX_DIGLETT 288 +#define OBJ_EVENT_GFX_DUGTRIO 289 +#define OBJ_EVENT_GFX_MEOWTH 290 +#define OBJ_EVENT_GFX_PERSIAN 291 +#define OBJ_EVENT_GFX_PSYDUCK 292 +#define OBJ_EVENT_GFX_GOLDUCK 293 +#define OBJ_EVENT_GFX_MANKEY 294 +#define OBJ_EVENT_GFX_PRIMEAPE 295 +#define OBJ_EVENT_GFX_GROWLITHE 296 +#define OBJ_EVENT_GFX_ARCANINE 297 +#define OBJ_EVENT_GFX_POLIWAG 298 +#define OBJ_EVENT_GFX_POLIWHIRL 299 +#define OBJ_EVENT_GFX_POLIWRATH 300 +#define OBJ_EVENT_GFX_ABRA 301 +#define OBJ_EVENT_GFX_KADABRA 302 +#define OBJ_EVENT_GFX_ALAKAZAM 303 +#define OBJ_EVENT_GFX_MACHOP 304 +#define OBJ_EVENT_GFX_MACHOKE 305 +#define OBJ_EVENT_GFX_MACHAMP 306 +#define OBJ_EVENT_GFX_BELLSPROUT 307 +#define OBJ_EVENT_GFX_WEEPINBELL 308 +#define OBJ_EVENT_GFX_VICTREEBEL 309 +#define OBJ_EVENT_GFX_TENTACOOL 310 +#define OBJ_EVENT_GFX_TENTACRUEL 311 +#define OBJ_EVENT_GFX_GEODUDE 312 +#define OBJ_EVENT_GFX_GRAVELER 313 +#define OBJ_EVENT_GFX_GOLEM 314 +#define OBJ_EVENT_GFX_PONYTA 315 +#define OBJ_EVENT_GFX_RAPIDASH 316 +#define OBJ_EVENT_GFX_SLOWPOKE 317 +#define OBJ_EVENT_GFX_SLOWBRO 318 +#define OBJ_EVENT_GFX_MAGNEMITE 319 +#define OBJ_EVENT_GFX_MAGNETON 320 +#define OBJ_EVENT_GFX_FARFETCHD 321 +#define OBJ_EVENT_GFX_DODUO 322 +#define OBJ_EVENT_GFX_DODRIO 323 +#define OBJ_EVENT_GFX_SEEL 324 +#define OBJ_EVENT_GFX_DEWGONG 325 +#define OBJ_EVENT_GFX_GRIMER 326 +#define OBJ_EVENT_GFX_MUK 327 +#define OBJ_EVENT_GFX_SHELLDER 328 +#define OBJ_EVENT_GFX_CLOYSTER 329 +#define OBJ_EVENT_GFX_GASTLY 330 +#define OBJ_EVENT_GFX_HAUNTER 331 +#define OBJ_EVENT_GFX_GENGAR 332 +#define OBJ_EVENT_GFX_ONIX 333 +#define OBJ_EVENT_GFX_DROWZEE 334 +#define OBJ_EVENT_GFX_HYPNO 335 +#define OBJ_EVENT_GFX_KRABBY 336 +#define OBJ_EVENT_GFX_KINGLER 337 +#define OBJ_EVENT_GFX_VOLTORB 338 +#define OBJ_EVENT_GFX_ELECTRODE 339 +#define OBJ_EVENT_GFX_EXEGGCUTE 340 +#define OBJ_EVENT_GFX_EXEGGUTOR 341 +#define OBJ_EVENT_GFX_CUBONE 342 +#define OBJ_EVENT_GFX_MAROWAK 343 +#define OBJ_EVENT_GFX_HITMONLEE 344 +#define OBJ_EVENT_GFX_HITMONCHAN 345 +#define OBJ_EVENT_GFX_LICKITUNG 346 +#define OBJ_EVENT_GFX_KOFFING 347 +#define OBJ_EVENT_GFX_WEEZING 348 +#define OBJ_EVENT_GFX_RHYHORN 349 +#define OBJ_EVENT_GFX_RHYDON 350 +#define OBJ_EVENT_GFX_CHANSEY 351 +#define OBJ_EVENT_GFX_TANGELA 352 +#define OBJ_EVENT_GFX_KANGASKHAN 353 +#define OBJ_EVENT_GFX_HORSEA 354 +#define OBJ_EVENT_GFX_SEADRA 355 +#define OBJ_EVENT_GFX_GOLDEEN 356 +#define OBJ_EVENT_GFX_SEAKING 357 +#define OBJ_EVENT_GFX_STARYU 358 +#define OBJ_EVENT_GFX_STARMIE 359 +#define OBJ_EVENT_GFX_MR_MIME 360 +#define OBJ_EVENT_GFX_SCYTHER 361 +#define OBJ_EVENT_GFX_JYNX 362 +#define OBJ_EVENT_GFX_ELECTABUZZ 363 +#define OBJ_EVENT_GFX_MAGMAR 364 +#define OBJ_EVENT_GFX_PINSIR 365 +#define OBJ_EVENT_GFX_TAUROS 366 +#define OBJ_EVENT_GFX_MAGIKARP 367 +#define OBJ_EVENT_GFX_GYARADOS 368 +#define OBJ_EVENT_GFX_LAPRAS 369 +#define OBJ_EVENT_GFX_DITTO 370 +#define OBJ_EVENT_GFX_EEVEE 371 +#define OBJ_EVENT_GFX_VAPOREON 372 +#define OBJ_EVENT_GFX_JOLTEON 373 +#define OBJ_EVENT_GFX_FLAREON 374 +#define OBJ_EVENT_GFX_PORYGON 375 +#define OBJ_EVENT_GFX_OMANYTE 376 +#define OBJ_EVENT_GFX_OMASTAR 377 +#define OBJ_EVENT_GFX_KABUTO 378 +#define OBJ_EVENT_GFX_KABUTOPS 379 +#define OBJ_EVENT_GFX_AERODACTYL 380 +#define OBJ_EVENT_GFX_SNORLAX 381 +#define OBJ_EVENT_GFX_ARTICUNO 382 +#define OBJ_EVENT_GFX_ZAPDOS 383 +#define OBJ_EVENT_GFX_MOLTRES 384 +#define OBJ_EVENT_GFX_DRATINI 385 +#define OBJ_EVENT_GFX_DRAGONAIR 386 +#define OBJ_EVENT_GFX_DRAGONITE 387 +#define OBJ_EVENT_GFX_MEWTWO 388 +#define OBJ_EVENT_GFX_MEW_FOLLOWER 389 -#define NUM_OBJ_EVENT_GFX 239 +#define NUM_OBJ_EVENT_GFX 390 // These are dynamic object gfx ids. @@ -281,6 +432,7 @@ // Special object event local ids #define OBJ_EVENT_ID_PLAYER 0xFF +#define OBJ_EVENT_ID_FOLLOWER 0xFE #define OBJ_EVENT_ID_CAMERA 0x7F // Object event local ids referenced in C files diff --git a/include/constants/follow_me.h b/include/constants/follow_me.h new file mode 100644 index 000000000..cc6b044e2 --- /dev/null +++ b/include/constants/follow_me.h @@ -0,0 +1,19 @@ +#ifndef GUARD_CONSTANTS_FOLLOW_ME_H +#define GUARD_CONSTANTS_FOLLOW_ME_H + +#define FOLLOWER_FLAG_HAS_RUNNING_FRAMES 0x1 +#define FOLLOWER_FLAG_CAN_BIKE 0x2 +#define FOLLOWER_FLAG_CAN_LEAVE_ROUTE 0x4 // teleport, dig, fly, etc +#define FOLLOWER_FLAG_CAN_SURF 0x8 +#define FOLLOWER_FLAG_CAN_WATERFALL 0x10 +#define FOLLOWER_FLAG_CAN_DIVE 0x20 +#define FOLLOWER_FLAG_CAN_ROCK_CLIMB 0x40 // need rock climb implemented +#define FOLLOWER_FLAG_CLEAR_ON_WHITE_OUT 0x80 +#define FOLLOWER_FLAG_CUSTOM_FOLLOW_SCRIPT 0x100 // follower has custom script while following (use loadword prior to setfollower) + +#define FOLLOWER_FLAG_ALL_WATER FOLLOWER_FLAG_CAN_SURF | FOLLOWER_FLAG_CAN_WATERFALL | FOLLOWER_FLAG_CAN_DIVE +#define FOLLOWER_FLAG_ALL_LAND FOLLOWER_FLAG_HAS_RUNNING_FRAMES | FOLLOWER_FLAG_CAN_BIKE | FOLLOWER_FLAG_CAN_LEAVE_ROUTE +#define FOLLOWER_FLAG_ALL FOLLOWER_FLAG_ALL_WATER | FOLLOWER_FLAG_ALL_LAND | FOLLOWER_FLAG_CLEAR_ON_WHITE_OUT + + +#endif // GUARD_CONSTANTS_FOLLOW_ME_H diff --git a/include/constants/global.h b/include/constants/global.h index 48b03b5cc..23e3d88e2 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -138,4 +138,7 @@ #define DIR_NORTHWEST 7 #define DIR_NORTHEAST 8 +#define SIDEWAYS_STAIRS_IMPLEMENTED FALSE +#define POST_BATTLE_FOLLOWER_FIX FALSE + #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/include/event_data.h b/include/event_data.h index b1fa69460..86b7afea8 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -21,7 +21,7 @@ bool32 CanResetRTC(void); u16 *GetVarPointer(u16 id); u16 VarGet(u16 id); bool8 VarSet(u16 id, u16 value); -u8 VarGetObjectEventGraphicsId(u8 id); +u16 VarGetObjectEventGraphicsId(u8 id); u8 *GetFlagPointer(u16 id); u8 FlagSet(u16 id); u8 FlagClear(u16 id); diff --git a/include/event_object_movement.h b/include/event_object_movement.h index bd8232027..614ef9b83 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -83,6 +83,7 @@ bool8 TryGetObjectEventIdByLocalIdAndMap(u8, u8, u8, u8 *); u8 GetObjectEventIdByXY(s16, s16); void SetObjectEventDirection(struct ObjectEvent *, u8); u8 GetFirstInactiveObjectEventId(void); +void RemoveObjectEvent(struct ObjectEvent *objectEvent); void RemoveObjectEventByLocalIdAndMap(u8, u8, u8); void LoadPlayerObjectReflectionPalette(u16, u8); void LoadSpecialObjectReflectionPalette(u16, u8); @@ -98,14 +99,14 @@ void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *); void TrySpawnObjectEvents(s16, s16); u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); u8 TrySpawnObjectEvent(u8, u8, u8); -u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z); +u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z); u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *); void SetSpritePosToMapCoords(s16, s16, s16 *, s16 *); void CameraObjectReset1(void); -void ObjectEventSetGraphicsId(struct ObjectEvent *, u8 graphicsId); +void ObjectEventSetGraphicsId(struct ObjectEvent *, u16 graphicsId); void ObjectEventTurn(struct ObjectEvent *, u8); void ObjectEventTurnByLocalIdAndMap(u8, u8, u8, u8); -const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId); +const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId); void SetObjectInvisibility(u8, u8, u8, bool8); void FreeAndReserveObjectSpritePalettes(void); void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); @@ -195,6 +196,9 @@ void CameraObjectReset2(void); u8 GetObjectEventBerryTreeId(u8 objectEventId); void SetBerryTreeJustPicked(u8 mapId, u8 mapNumber, u8 mapGroup); bool8 IsBerryTreeSparkling(u8, u8, u8); +struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup); +u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY); +bool8 ObjectEventPokemonFacePlayer(struct ObjectEvent *, struct ObjectEvent *); void MovementType_None(struct Sprite *); void MovementType_LookAround(struct Sprite *); @@ -251,6 +255,7 @@ void MovementType_JogInPlace(struct Sprite *); void MovementType_RunInPlace(struct Sprite *); void MovementType_Invisible(struct Sprite *); void MovementType_WalkSlowlyInPlace(struct Sprite *); +void MovementType_FollowingPokemon(struct Sprite *); u8 GetSlideMovementAction(u32); u8 GetJumpInPlaceMovementAction(u32); u8 GetJumpMovementAction(u32); @@ -412,13 +417,22 @@ u8 MovementType_RunInPlace_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *); +u8 MovementType_FollowingPokemon_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementType_FollowingPokemon_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementType_FollowingPokemon_Step2(struct ObjectEvent *, struct Sprite *); +u8 MovementType_FollowingPokemon_Step3(struct ObjectEvent *, struct Sprite *); -u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 z, u8 direction); +u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 z, u8 direction); void TurnVirtualObject(u8 virtualObjId, u8 direction); -void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId); +void SetVirtualObjectGraphics(u8 virtualObjId, u16 graphicsId); void SetVirtualObjectInvisibility(u8 virtualObjId, bool32 invisible); bool32 IsVirtualObjectInvisible(u8 virtualObjId); void SetVirtualObjectSpriteAnim(u8 virtualObjId, u8 animNum); bool32 IsVirtualObjectAnimating(u8 virtualObjId); +// NEW +u16 GetMiniStepCount(u8 speed); +void RunMiniStep(struct Sprite *sprite, u8 speed, u8 currentFrame); +bool8 PlayerIsUnderWaterfall(struct ObjectEvent *objectEvent); + #endif //GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 823564f22..5ca7db858 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -3,8 +3,8 @@ void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys); void ClearPlayerAvatarInfo(void); -void SetPlayerAvatarExtraStateTransition(u8, u8); -u8 GetPlayerAvatarGenderByGraphicsId(u8); +void SetPlayerAvatarExtraStateTransition(u16, u8); +u8 GetPlayerAvatarGenderByGraphicsId(u16); bool8 TestPlayerAvatarFlags(u8); u8 GetPlayerAvatarSpriteId(void); void PlayerGetDestCoords(s16 *, s16 *); @@ -38,11 +38,11 @@ void PlayerFreeze(void); void StopPlayerAvatar(void); void SetSpinStartFacingDir(u8); void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr); -u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8); +u16 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8); void SetPlayerAvatarFieldMove(void); -u8 GetPlayerAvatarGraphicsIdByCurrentState(void); +u16 GetPlayerAvatarGraphicsIdByCurrentState(void); void SetPlayerAvatarStateMask(u8 a); -u8 GetPlayerAvatarGraphicsIdByStateId(u8 a); +u16 GetPlayerAvatarGraphicsIdByStateId(u8 a); u8 GetJumpSpecialMovementAction(u32); bool8 PartyHasMonWithSurf(void); bool8 IsPlayerFacingSurfableFishableWater(void); @@ -50,8 +50,8 @@ bool8 IsPlayerSurfingNorth(void); void SetPlayerAvatarWatering(u8 direction); u8 GetPlayerAvatarFlags(void); void UpdatePlayerAvatarTransitionState(void); -u8 GetFRLGAvatarGraphicsIdByGender(u8); -u8 GetRSAvatarGraphicsIdByGender(u8); +u16 GetFRLGAvatarGraphicsIdByGender(u8); +u16 GetRSAvatarGraphicsIdByGender(u8); void PlayerWheelieInPlace(u8 direction); void PlayerWheelieMove(u8 direction); void PlayerPopWheelieWhileMoving(u8 direction); diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index 6dc9b077d..da00481d3 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -41,5 +41,7 @@ void DoOrbEffect(void); void FadeOutOrbEffect(void); void WriteFlashScanlineEffectBuffer(u8 flashLevel); bool8 IsPlayerStandingStill(void); +void SetPlayerVisibility(bool8 visible); +void Task_WarpAndLoadMap(u8 taskId); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/field_specials.h b/include/field_specials.h index faf71e9c0..2eefed69e 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -5,6 +5,7 @@ extern bool8 gBikeCyclingChallenge; extern u8 gBikeCollisions; u8 GetLeadMonIndex(void); +u8 GetLeadMonNotFaintedIndex(void); u8 IsDestinationBoxFull(void); u16 GetPCBoxToSendMon(void); bool8 InMultiPartnerRoom(void); diff --git a/include/fldeff.h b/include/fldeff.h index 597ce6f47..b7a1dc25d 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -45,7 +45,7 @@ bool8 SetUpFieldMove_Dig(void); bool8 FldEff_UseDig(void); // rock smash -bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId); +bool8 CheckObjectGraphicsInFrontOfPlayer(u16 graphicsId); u8 CreateFieldMoveTask(void); bool8 SetUpFieldMove_RockSmash(void); bool8 FldEff_UseRockSmash(void); diff --git a/include/follow_me.h b/include/follow_me.h new file mode 100644 index 000000000..1affb31f0 --- /dev/null +++ b/include/follow_me.h @@ -0,0 +1,58 @@ +#ifndef GUARD_FOLLOW_ME_H +#define GUARD_FOLLOW_ME_H + +#include "constants/follow_me.h" + +#define DEFAULT_FOLLOWER_LOCAL_ID 0xFE + +#define MOVEMENT_INVALID 0xFE + +enum FollowerSpriteTypes +{ + FOLLOWER_SPRITE_INDEX_NORMAL, + FOLLOWER_SPRITE_INDEX_MACH_BIKE, + FOLLOWER_SPRITE_INDEX_ACRO_BIKE, + FOLLOWER_SPRITE_INDEX_SURF, + FOLLOWER_SPRITE_INDEX_UNDERWATER, +}; + +// Exported Functions +void SetUpFollowerSprite(u8 localId, u16 flags); +void DestroyFollower(void); +void PlayerFaceFollowerSprite(void); +void CheckPlayerHasFollower(void); +bool8 FollowerComingThroughDoor(void); + +u8 GetFollowerObjectId(void); +u8 GetFollowerLocalId(void); +const u8* GetFollowerScriptPointer(void); +void HideFollower(void); +void TryFreezeFollowerAnim(struct ObjectEvent* npc); +void IsFollowerStoppingRockClimb(void); +void FollowMe_SetIndicatorToComeOutDoor(void); +void FollowMe_SetIndicatorToRecreateSurfBlob(void); +void FollowMe_TryRemoveFollowerOnWhiteOut(void); +void FollowMe(struct ObjectEvent* npc, u8 state, bool8 ignoreScriptActive); +void FollowMe_Ledges(struct ObjectEvent* npc, struct Sprite* obj, u16* ledgeFramesTbl); +bool8 FollowMe_IsCollisionExempt(struct ObjectEvent* obstacle, struct ObjectEvent* collider); +void FollowMe_FollowerToWater(void); +void FollowMe_BindToSurbBlobOnReloadScreen(void); +void PrepareFollowerDismountSurf(void); +void StairsMoveFollower(void); +void FollowMe_HandleBike(void); +void FollowMe_HandleSprite(void); +void FollowMe_WarpSetEnd(void); +void CreateFollowerAvatar(void); +void EscalatorMoveFollower(u8 movementType); +void EscalatorMoveFollowerFinish(void); +bool8 FollowerCanBike(void); +bool8 CheckFollowerFlag(u16 flag); +void FollowerPositionFix(u8 offset); +void SetFollowerSprite(u8 spriteIndex); +bool8 PlayerHasFollower(void); + +// moved from field_screen_effect.c +void Task_DoDoorWarp(u8 taskId); +bool8 IsPlayerOnFoot(void); + +#endif //GUARD_FOLLOW_ME_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 33be942c8..a56480c96 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -61,8 +61,8 @@ struct BackupMapLayout struct ObjectEventTemplate { /*0x00*/ u8 localId; - /*0x01*/ u8 graphicsId; /*0x02*/ u8 inConnection; // Leftover from FRLG + u16 graphicsId; /*0x04*/ s16 x; /*0x06*/ s16 y; /*0x08*/ u8 elevation; @@ -187,8 +187,9 @@ struct ObjectEvent u32 disableJumpLandingGroundEffect:1; u32 fixedPriority:1; u32 hideReflection:1; + int :0; /*0x04*/ u8 spriteId; - /*0x05*/ u8 graphicsId; + /*0x05*/ u16 graphicsId; /*0x06*/ u8 movementType; /*0x07*/ u8 trainerType; /*0x08*/ u8 localId; diff --git a/include/global.h b/include/global.h index ca5f50916..b33749f79 100644 --- a/include/global.h +++ b/include/global.h @@ -454,6 +454,31 @@ struct RankingHall1P u8 language; }; +// follow me +struct FollowerMapData +{ + /*0x0*/ u8 id; + /*0x1*/ u8 number; + /*0x2*/ u8 group; +}; /* size = 0x4 */ +struct Follower +{ + /*0x00*/ u8 inProgress:1; + u8 warpEnd:1; + u8 createSurfBlob:3; + u8 comeOutDoorStairs:3; + /*0x01*/ u8 objId; + /*0x02*/ u8 currentSprite; + /*0x03*/ u8 delayedState; + /*0x04*/ struct FollowerMapData map; + /*0x08*/ struct Coords16 log; + /*0x0C*/ const u8* script; + /*0x10*/ u16 flag; + /*0x12*/ u16 graphicsId; + /*0x14*/ u16 flags; + /*0x15*/ u8 locked; +}; /* size = 0x18 */ + struct RankingHall2P { u8 id1[TRAINER_ID_LENGTH]; @@ -496,6 +521,7 @@ struct SaveBlock2 /*0x57C*/ struct RankingHall2P hallRecords2P[FRONTIER_LVL_MODE_COUNT][HALL_RECORDS_COUNT]; // From record mixing. /*0x624*/ u16 contestLinkResults[CONTEST_CATEGORIES_COUNT][CONTESTANT_COUNT]; /*0x64C*/ struct BattleFrontier frontier; + struct Follower follower; }; // sizeof=0xF2C extern struct SaveBlock2 *gSaveBlock2Ptr; diff --git a/include/overworld.h b/include/overworld.h index 04b61f7fd..38903693f 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -156,5 +156,6 @@ bool32 Overworld_RecvKeysFromLinkIsRunning(void); bool32 Overworld_SendKeysToLinkIsRunning(void); bool32 IsSendingKeysOverCable(void); void ClearLinkPlayerObjectEvents(void); +void UpdateFollowerPokemonGraphic(void); #endif // GUARD_OVERWORLD_H diff --git a/include/script.h b/include/script.h index 63f6f5aef..95b1af64c 100644 --- a/include/script.h +++ b/include/script.h @@ -62,4 +62,7 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize); // srccmd.h void SetMovingNpcId(u16 npcId); +// NEW +u8* ReadWord(u8 index); + #endif // GUARD_SCRIPT_H diff --git a/ld_script.txt b/ld_script.txt index 61f61ab86..6254b48f6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -335,6 +335,7 @@ SECTIONS { src/gym_leader_rematch.o(.text); src/battle_transition_frontier.o(.text); src/international_string_util.o(.text); + src/follow_me.o(.text); } =0 script_data : @@ -695,6 +696,7 @@ SECTIONS { data/mystery_gift.o(.rodata); src/m4a_tables.o(.rodata); data/sound_data.o(.rodata); + src/follow_me.o(.rodata); } =0 song_data : diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index ae7971960..a61e28e55 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -467,6 +467,459 @@ $(OBJEVENTGFXDIR)/pokemon/wingull.4bpp: %.4bpp: %.png $(OBJEVENTGFXDIR)/pokemon/zigzagoon.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 + +$(OBJEVENTGFXDIR)/pokemon/followers/bulbasaur.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/ivysaur.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/venusaur.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/charmander.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/charmeleon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/charizard.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/squirtle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/wartortle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/blastoise.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/caterpie.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/metapod.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/butterfree.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/weedle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/kakuna.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/beedrill.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/pidgey.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/pidgeotto.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/pidgeot.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/rattata.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/raticate.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/spearow.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/fearow.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/ekans.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/arbok.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/pikachu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/raichu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/sandshrew.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/sandslash.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/nidoran_f.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/nidorina.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/nidoqueen.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/nidoran_m.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/nidorino.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/nidoking.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/clefairy.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/clefable.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/vulpix.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/ninetales.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/jigglypuff.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/wigglytuff.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/zubat.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/golbat.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/oddish.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/gloom.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/vileplume.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/paras.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/parasect.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/venonat.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/venomoth.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/diglett.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/dugtrio.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/meowth.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/persian.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/psyduck.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/golduck.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/mankey.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/primeape.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/growlithe.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/arcanine.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/poliwag.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/poliwhirl.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/poliwrath.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/abra.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/kadabra.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/alakazam.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/machop.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/machoke.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/machamp.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/bellsprout.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/weepinbell.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/victreebel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/tentacool.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/tentacruel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/geodude.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/graveler.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/golem.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/ponyta.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/rapidash.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/slowpoke.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/slowbro.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/magnemite.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/magneton.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/farfetchd.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/doduo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/dodrio.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/seel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/dewgong.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/grimer.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/muk.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/shellder.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/cloyster.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/gastly.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/haunter.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/gengar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/onix.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/drowzee.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/hypno.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/krabby.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/kingler.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/voltorb.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/electrode.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/exeggcute.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/exeggutor.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/cubone.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/marowak.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/hitmonlee.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/hitmonchan.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/lickitung.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/koffing.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/weezing.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/rhyhorn.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/rhydon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/chansey.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/tangela.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/kangaskhan.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/horsea.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/seadra.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/goldeen.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/seaking.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/staryu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/starmie.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/mr_mime.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/scyther.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/jynx.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/electabuzz.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/magmar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/pinsir.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/tauros.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/magikarp.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/gyarados.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/lapras.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/ditto.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/eevee.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/vaporeon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/jolteon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/flareon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/porygon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/omanyte.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/omastar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/kabuto.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/kabutops.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/aerodactyl.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/snorlax.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/articuno.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/zapdos.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/moltres.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/dratini.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/dragonair.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/dragonite.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/mewtwo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/followers/mew.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 diff --git a/src/battle_main.c b/src/battle_main.c index 682849af7..9a0de4199 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -5209,6 +5209,12 @@ static void ReturnFromBattleToOverworld(void) m4aSongNumStop(SE_LOW_HEALTH); SetMainCallback2(gMain.savedCallback); + + // if you experience the follower de-syncing with the player after battle, set POST_BATTLE_FOLLOWER_FIX to TRUE in include/constants/global.h + #if POST_BATTLE_FOLLOWER_FIX + FollowMe_WarpSetEnd(); + gObjectEvents[GetFollowerObjectId()].invisible = TRUE; + #endif } void RunBattleScriptCommands_PopCallbacksStack(void) diff --git a/src/battle_pike.c b/src/battle_pike.c index 2b0cf6420..dcdabb5dc 100644 --- a/src/battle_pike.c +++ b/src/battle_pike.c @@ -573,7 +573,7 @@ static void SetupRoomObjectEvents(void) objGfx1 = OBJ_EVENT_GFX_LINK_RECEPTIONIST; break; case PIKE_ROOM_NPC: - objGfx1 = (u8)(GetNPCRoomGraphicsId()); + objGfx1 = (u16)(GetNPCRoomGraphicsId()); break; case PIKE_ROOM_STATUS: objGfx1 = OBJ_EVENT_GFX_GENTLEMAN; diff --git a/src/battle_setup.c b/src/battle_setup.c index f928cf3f9..ecb5ad9b9 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -611,6 +611,7 @@ static void CB2_EndWildBattle(void) { SetMainCallback2(CB2_ReturnToField); gFieldCallback = FieldCB_ReturnToFieldNoScriptCheckMusic; + UpdateFollowerPokemonGraphic(); } } @@ -629,6 +630,7 @@ static void CB2_EndScriptedWildBattle(void) else { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + UpdateFollowerPokemonGraphic(); } } @@ -1338,6 +1340,7 @@ static void CB2_EndTrainerBattle(void) else { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + UpdateFollowerPokemonGraphic(); if (!InBattlePyramid() && !InTrainerHillChallenge()) { RegisterTrainerInMatchCall(); @@ -1359,6 +1362,7 @@ static void CB2_EndRematchBattle(void) else { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + UpdateFollowerPokemonGraphic(); RegisterTrainerInMatchCall(); SetBattledTrainersFlags(); HandleRematchVarsOnBattleEnd(); diff --git a/src/bike.c b/src/bike.c index 20166392e..5e7225ae7 100644 --- a/src/bike.c +++ b/src/bike.c @@ -7,6 +7,8 @@ #include "metatile_behavior.h" #include "overworld.h" #include "sound.h" +#include "event_data.h" +#include "sprite.h" #include "constants/map_types.h" #include "constants/songs.h" @@ -971,16 +973,81 @@ bool8 IsPlayerNotUsingAcroBikeOnBumpySlope(void) void GetOnOffBike(u8 transitionFlags) { + struct ObjectEvent *player = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct ObjectEvent *follower = &gObjectEvents[gSaveBlock2Ptr->follower.objId]; + bool8 followerPlaced = FALSE; gUnusedBikeCameraAheadPanback = FALSE; if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)) { + if (gSaveBlock2Ptr->follower.inProgress) + { + if (!(player->currentCoords.x == follower->currentCoords.x && player->currentCoords.y == follower->currentCoords.y)) + { + follower->currentCoords = player->currentCoords; + gSprites[follower->spriteId].x = gSprites[gPlayerAvatar.spriteId].x; + gSprites[follower->spriteId].y = gSprites[gPlayerAvatar.spriteId].y; + } + ObjectEventClearHeldMovement(follower); + + // First, check to see if the follower can appear behind the player + if (player->facingDirection == DIR_NORTH) + { + if (!GetCollisionAtCoords(player, player->currentCoords.x, player->currentCoords.y + 1, DIR_SOUTH)) + { + ObjectEventSetHeldMovement(follower, 8); + followerPlaced = TRUE; + } + } + else if (player->facingDirection == DIR_SOUTH) + { + if (!GetCollisionAtCoords(player, player->currentCoords.x, player->currentCoords.y - 1, DIR_NORTH)) + { + ObjectEventSetHeldMovement(follower, 9); + followerPlaced = TRUE; + } + } + else if (player->facingDirection == DIR_EAST) + { + if (!GetCollisionAtCoords(player, player->currentCoords.x - 1, player->currentCoords.y, DIR_WEST)) + { + ObjectEventSetHeldMovement(follower, 10); + followerPlaced = TRUE; + } + } + // Don't need to check playerDirection due to else-if chain + else if (!GetCollisionAtCoords(player, player->currentCoords.x + 1, player->currentCoords.y, DIR_EAST)) + { + ObjectEventSetHeldMovement(follower, 11); + followerPlaced = TRUE; + } + + // If follower can't appear behind player, then check if they can appear south, north, west, or east of player. + if (!followerPlaced) + { + if (!GetCollisionAtCoords(player, player->currentCoords.x, player->currentCoords.y + 1, DIR_SOUTH)) + ObjectEventSetHeldMovement(follower, 8); + else if (!GetCollisionAtCoords(player, player->currentCoords.x, player->currentCoords.y - 1, DIR_NORTH)) + ObjectEventSetHeldMovement(follower, 9); + else if (!GetCollisionAtCoords(player, player->currentCoords.x - 1, player->currentCoords.y, DIR_WEST)) + ObjectEventSetHeldMovement(follower, 10); + else if (!GetCollisionAtCoords(player, player->currentCoords.x + 1, player->currentCoords.y, DIR_EAST)) + ObjectEventSetHeldMovement(follower, 11); + } + follower->invisible = FALSE; + } + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); Overworld_ClearSavedMusic(); Overworld_PlaySpecialMapMusic(); } else { + if (gSaveBlock2Ptr->follower.inProgress) + { + follower->invisible = TRUE; + } + SetPlayerAvatarTransitionFlags(transitionFlags); Overworld_SetSavedMusic(MUS_CYCLING); Overworld_ChangeMusicTo(MUS_CYCLING); diff --git a/src/cable_car.c b/src/cable_car.c index c81764728..00f62d08f 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -800,12 +800,12 @@ static void CreateCableCarSprites(void) u8 spriteId; u8 i; - u8 playerGraphicsIds[2] = { + u16 playerGraphicsIds[2] = { [MALE] = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL, [FEMALE] = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL }; u16 rval = Random(); - u8 hikerGraphicsIds[4] = { + u16 hikerGraphicsIds[4] = { OBJ_EVENT_GFX_HIKER, OBJ_EVENT_GFX_CAMPER, OBJ_EVENT_GFX_PICNICKER, diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index 8070e9877..6f06d86bc 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -261,6 +261,11 @@ u8 MovementAction_FlyUp_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_Fly_Finish(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyDown_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_FollowingPokemon_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_FollowingPokemon_FaceSouth_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_FollowingPokemon_FaceNorth_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_FollowingPokemon_FaceWest_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_FollowingPokemon_FaceEast_Step0(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FaceUp[])(struct ObjectEvent *, struct Sprite *); @@ -420,6 +425,12 @@ u8 (*const gMovementActionFuncs_StopLevitateAtTop[])(struct ObjectEvent *, struc u8 (*const gMovementActionFuncs_Figure8[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FlyUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_FollowingPokemon[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_FollowingPokemon_FaceSouth[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_FollowingPokemon_FaceNorth[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_FollowingPokemon_FaceWest[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_FollowingPokemon_FaceEast[])(struct ObjectEvent *, struct Sprite *); u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) = { [MOVEMENT_ACTION_FACE_DOWN] = gMovementActionFuncs_FaceDown, @@ -580,6 +591,11 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) [MOVEMENT_ACTION_FIGURE_8] = gMovementActionFuncs_Figure8, [MOVEMENT_ACTION_FLY_UP] = gMovementActionFuncs_FlyUp, [MOVEMENT_ACTION_FLY_DOWN] = gMovementActionFuncs_FlyDown, + [MOVEMENT_ACTION_FOLLOWING_POKEMON] = gMovementActionFuncs_FollowingPokemon, + [MOVEMENT_ACTION_FOLLOWING_POKEMON_FACESOUTH] = gMovementActionFuncs_FollowingPokemon_FaceSouth, + [MOVEMENT_ACTION_FOLLOWING_POKEMON_FACENORTH] = gMovementActionFuncs_FollowingPokemon_FaceNorth, + [MOVEMENT_ACTION_FOLLOWING_POKEMON_FACEWEST] = gMovementActionFuncs_FollowingPokemon_FaceWest, + [MOVEMENT_ACTION_FOLLOWING_POKEMON_FACEEAST] = gMovementActionFuncs_FollowingPokemon_FaceEast, }; u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = { diff --git a/src/data/object_events/movement_type_func_tables.h b/src/data/object_events/movement_type_func_tables.h index f5189d838..8d0956f48 100755 --- a/src/data/object_events/movement_type_func_tables.h +++ b/src/data/object_events/movement_type_func_tables.h @@ -24,6 +24,13 @@ u8 (*const gGetVectorDirectionFuncs[])(s16, s16, s16, s16) = { GetLimitedVectorDirection_SouthWestEast, }; +u8 (*const gMovementTypeFuncs_FollowingPokemon[])(struct ObjectEvent *, struct Sprite *) = { + MovementType_FollowingPokemon_Step0, + MovementType_FollowingPokemon_Step1, + MovementType_FollowingPokemon_Step2, + MovementType_FollowingPokemon_Step3, +}; + u8 (*const gMovementTypeFuncs_LookAround[])(struct ObjectEvent *, struct Sprite *) = { MovementType_LookAround_Step0, MovementType_LookAround_Step1, diff --git a/src/data/object_events/object_event_anims.h b/src/data/object_events/object_event_anims.h index a5fb41462..de974df3b 100755 --- a/src/data/object_events/object_event_anims.h +++ b/src/data/object_events/object_event_anims.h @@ -1143,6 +1143,324 @@ static const union AffineAnimCmd *const sAffineAnimTable_KyogreGroudon[] = { sAffineAnim_KyogreGroudon_DipEast, // Unused }; +const union AnimCmd gObjectEventImageAnim_FaceSouth_FollowingPokemon[] = +{ + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(1, 14), + ANIMCMD_FRAME(1, 14), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_FaceNorth_FollowingPokemon[] = +{ + ANIMCMD_FRAME(2, 14), + ANIMCMD_FRAME(2, 14), + ANIMCMD_FRAME(3, 14), + ANIMCMD_FRAME(3, 14), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_FaceNorth_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(0, 14, .hFlip = TRUE), + ANIMCMD_FRAME(0, 14, .hFlip = TRUE), + ANIMCMD_FRAME(1, 14, .hFlip = TRUE), + ANIMCMD_FRAME(1, 14, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_FaceWest_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 14), + ANIMCMD_FRAME(4, 14), + ANIMCMD_FRAME(5, 14), + ANIMCMD_FRAME(5, 14), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_FaceWest_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(2, 14), + ANIMCMD_FRAME(2, 14), + ANIMCMD_FRAME(3, 14), + ANIMCMD_FRAME(3, 14), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_FaceEast_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 14, .hFlip = TRUE), + ANIMCMD_FRAME(4, 14, .hFlip = TRUE), + ANIMCMD_FRAME(5, 14, .hFlip = TRUE), + ANIMCMD_FRAME(5, 14, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_FaceEast_Unique_FollowingPokemon[] = +{ + ANIMCMD_FRAME(6, 14), + ANIMCMD_FRAME(6, 14), + ANIMCMD_FRAME(7, 14), + ANIMCMD_FRAME(7, 14), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_FaceEast_Unique_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 14), + ANIMCMD_FRAME(4, 14), + ANIMCMD_FRAME(5, 14), + ANIMCMD_FRAME(5, 14), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkSouth_FollowingPokemon[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkNorth_FollowingPokemon[] = +{ + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkNorth_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(0, 8, .hFlip = TRUE), + ANIMCMD_FRAME(1, 8, .hFlip = TRUE), + ANIMCMD_FRAME(1, 8, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkWest_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(5, 8), + ANIMCMD_FRAME(5, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkWest_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(3, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkEast_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 8, .hFlip = TRUE), + ANIMCMD_FRAME(4, 8, .hFlip = TRUE), + ANIMCMD_FRAME(5, 8, .hFlip = TRUE), + ANIMCMD_FRAME(5, 8, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkEast_Unique_FollowingPokemon[] = +{ + ANIMCMD_FRAME(6, 8), + ANIMCMD_FRAME(6, 8), + ANIMCMD_FRAME(7, 8), + ANIMCMD_FRAME(7, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkEast_Unique_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(5, 8), + ANIMCMD_FRAME(5, 8), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkSouthFast_FollowingPokemon[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkNorthFast_FollowingPokemon[] = +{ + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkNorthFast_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(0, 6, .hFlip = TRUE), + ANIMCMD_FRAME(0, 6, .hFlip = TRUE), + ANIMCMD_FRAME(1, 6, .hFlip = TRUE), + ANIMCMD_FRAME(1, 6, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkWestFast_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_FRAME(5, 6), + ANIMCMD_FRAME(5, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkWestFast_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkEastFast_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 6, .hFlip = TRUE), + ANIMCMD_FRAME(4, 6, .hFlip = TRUE), + ANIMCMD_FRAME(5, 6, .hFlip = TRUE), + ANIMCMD_FRAME(5, 6, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkEastFast_Unique_FollowingPokemon[] = +{ + ANIMCMD_FRAME(6, 6), + ANIMCMD_FRAME(6, 6), + ANIMCMD_FRAME(7, 6), + ANIMCMD_FRAME(7, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gObjectEventImageAnim_WalkEastFast_Unique_Double_FollowingPokemon[] = +{ + ANIMCMD_FRAME(4, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_FRAME(5, 6), + ANIMCMD_FRAME(5, 6), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gObjectEventImageAnimTable_FollowingPokemon[] = { + // Needed for if the Pokemon is in overworld and for idle animation. + gObjectEventImageAnim_FaceSouth_FollowingPokemon, + gObjectEventImageAnim_FaceNorth_FollowingPokemon, + gObjectEventImageAnim_FaceWest_FollowingPokemon, + gObjectEventImageAnim_FaceEast_FollowingPokemon, + + // Needed for when the player walks + gObjectEventImageAnim_WalkSouth_FollowingPokemon, + gObjectEventImageAnim_WalkNorth_FollowingPokemon, + gObjectEventImageAnim_WalkWest_FollowingPokemon, + gObjectEventImageAnim_WalkEast_FollowingPokemon, + + // Filler + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_FollowingPokemon, + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_FollowingPokemon, + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_FollowingPokemon, + + // Needed for when the player runs + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_FollowingPokemon, +}; + +const union AnimCmd *const gObjectEventImageAnimTable_FollowingPokemon_UniqueEast[] = { + // Needed for if the Pokemon is in overworld. + gObjectEventImageAnim_FaceSouth_FollowingPokemon, + gObjectEventImageAnim_FaceNorth_FollowingPokemon, + gObjectEventImageAnim_FaceWest_FollowingPokemon, + gObjectEventImageAnim_FaceEast_Unique_FollowingPokemon, + + // Needed for when the player walks + gObjectEventImageAnim_WalkSouth_FollowingPokemon, + gObjectEventImageAnim_WalkNorth_FollowingPokemon, + gObjectEventImageAnim_WalkWest_FollowingPokemon, + gObjectEventImageAnim_WalkEast_Unique_FollowingPokemon, + + // Filler + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_Unique_FollowingPokemon, + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_Unique_FollowingPokemon, + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_Unique_FollowingPokemon, + + // Needed for when the player runs + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_Unique_FollowingPokemon, +}; + +const union AnimCmd *const gObjectEventImageAnimTable_FollowingPokemon_UniqueEast_DoubleNorth[] = { + // Needed for if the Pokemon is in overworld. + gObjectEventImageAnim_FaceSouth_FollowingPokemon, + gObjectEventImageAnim_FaceNorth_Double_FollowingPokemon, + gObjectEventImageAnim_FaceWest_Double_FollowingPokemon, + gObjectEventImageAnim_FaceEast_Unique_Double_FollowingPokemon, + + // Needed for when the player walks + gObjectEventImageAnim_WalkSouth_FollowingPokemon, + gObjectEventImageAnim_WalkNorth_Double_FollowingPokemon, + gObjectEventImageAnim_WalkWest_Double_FollowingPokemon, + gObjectEventImageAnim_WalkEast_Unique_Double_FollowingPokemon, + + // Filler + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_Double_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_Double_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_Unique_Double_FollowingPokemon, + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_Double_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_Double_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_Unique_Double_FollowingPokemon, + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_Double_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_Double_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_Unique_Double_FollowingPokemon, + + // Needed for when the player runs + gObjectEventImageAnim_WalkSouthFast_FollowingPokemon, + gObjectEventImageAnim_WalkNorthFast_Double_FollowingPokemon, + gObjectEventImageAnim_WalkWestFast_Double_FollowingPokemon, + gObjectEventImageAnim_WalkEastFast_Unique_Double_FollowingPokemon, +}; + // For animations with alternating steps static const struct StepAnimTable sStepAnimTables[] = { { diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 81d83a856..0042e162f 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -360,3 +360,306 @@ const u32 gObjectEventPic_Lugia[] = INCBIN_U32("graphics/object_events/pics/poke const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal"); const u32 gObjectEventPic_HoOh[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh.4bpp"); const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal"); + +const u32 gObjectEventPic_Bulbasaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/bulbasaur.4bpp"); +const u16 gObjectEventPal_Bulbasaur[] = INCBIN_U16("graphics/object_events/palettes/followers/bulbasaur1.gbapal"); +const u32 gObjectEventPic_Ivysaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/ivysaur.4bpp"); +const u16 gObjectEventPal_Ivysaur[] = INCBIN_U16("graphics/object_events/palettes/followers/ivysaur.gbapal"); +const u32 gObjectEventPic_Venusaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/venusaur.4bpp"); +const u16 gObjectEventPal_Venusaur[] = INCBIN_U16("graphics/object_events/palettes/followers/venusaur.gbapal"); +const u32 gObjectEventPic_Charmander[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/charmander.4bpp"); +const u16 gObjectEventPal_Charmander[] = INCBIN_U16("graphics/object_events/palettes/followers/charmander.gbapal"); +const u32 gObjectEventPic_Charmeleon[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/charmeleon.4bpp"); +const u16 gObjectEventPal_Charmeleon[] = INCBIN_U16("graphics/object_events/palettes/followers/charmeleon.gbapal"); +const u32 gObjectEventPic_Charizard[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/charizard.4bpp"); +const u16 gObjectEventPal_Charizard[] = INCBIN_U16("graphics/object_events/palettes/followers/charizard.gbapal"); +const u32 gObjectEventPic_Squirtle[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/squirtle.4bpp"); +const u16 gObjectEventPal_Squirtle[] = INCBIN_U16("graphics/object_events/palettes/followers/squirtle.gbapal"); +const u32 gObjectEventPic_Wartortle[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/wartortle.4bpp"); +const u16 gObjectEventPal_Wartortle[] = INCBIN_U16("graphics/object_events/palettes/followers/wartortle.gbapal"); +const u32 gObjectEventPic_Blastoise[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/blastoise.4bpp"); +const u16 gObjectEventPal_Blastoise[] = INCBIN_U16("graphics/object_events/palettes/followers/blastoise.gbapal"); +const u32 gObjectEventPic_Caterpie[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/caterpie.4bpp"); +const u16 gObjectEventPal_Caterpie[] = INCBIN_U16("graphics/object_events/palettes/followers/caterpie.gbapal"); +const u32 gObjectEventPic_Metapod[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/metapod.4bpp"); +const u16 gObjectEventPal_Metapod[] = INCBIN_U16("graphics/object_events/palettes/followers/metapod.gbapal"); +const u32 gObjectEventPic_Butterfree[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/butterfree.4bpp"); +const u16 gObjectEventPal_Butterfree[] = INCBIN_U16("graphics/object_events/palettes/followers/butterfree.gbapal"); +const u32 gObjectEventPic_Weedle[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/weedle.4bpp"); +const u16 gObjectEventPal_Weedle[] = INCBIN_U16("graphics/object_events/palettes/followers/weedle.gbapal"); +const u32 gObjectEventPic_Kakuna[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/kakuna.4bpp"); +const u16 gObjectEventPal_Kakuna[] = INCBIN_U16("graphics/object_events/palettes/followers/kakuna.gbapal"); +const u32 gObjectEventPic_Beedrill[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/beedrill.4bpp"); +const u16 gObjectEventPal_Beedrill[] = INCBIN_U16("graphics/object_events/palettes/followers/beedrill.gbapal"); +const u32 gObjectEventPic_Pidgey[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/pidgey.4bpp"); +const u16 gObjectEventPal_Pidgey[] = INCBIN_U16("graphics/object_events/palettes/followers/pidgey.gbapal"); +const u32 gObjectEventPic_Pidgeotto[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/pidgeotto.4bpp"); +const u16 gObjectEventPal_Pidgeotto[] = INCBIN_U16("graphics/object_events/palettes/followers/pidgeotto.gbapal"); +const u32 gObjectEventPic_Pidgeot[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/pidgeot.4bpp"); +const u16 gObjectEventPal_Pidgeot[] = INCBIN_U16("graphics/object_events/palettes/followers/pidgeot.gbapal"); +const u32 gObjectEventPic_Rattata[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/rattata.4bpp"); +const u16 gObjectEventPal_Rattata[] = INCBIN_U16("graphics/object_events/palettes/followers/rattata.gbapal"); +const u32 gObjectEventPic_Raticate[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/raticate.4bpp"); +const u16 gObjectEventPal_Raticate[] = INCBIN_U16("graphics/object_events/palettes/followers/raticate.gbapal"); +const u32 gObjectEventPic_Spearow[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/spearow.4bpp"); +const u16 gObjectEventPal_Spearow[] = INCBIN_U16("graphics/object_events/palettes/followers/spearow.gbapal"); +const u32 gObjectEventPic_Fearow[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/fearow.4bpp"); +const u16 gObjectEventPal_Fearow[] = INCBIN_U16("graphics/object_events/palettes/followers/fearow.gbapal"); +const u32 gObjectEventPic_Ekans[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/ekans.4bpp"); +const u16 gObjectEventPal_Ekans[] = INCBIN_U16("graphics/object_events/palettes/followers/ekans.gbapal"); +const u32 gObjectEventPic_Arbok[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/arbok.4bpp"); +const u16 gObjectEventPal_Arbok[] = INCBIN_U16("graphics/object_events/palettes/followers/arbok.gbapal"); +const u32 gObjectEventPic_Pikachu_Follow[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/pikachu.4bpp"); +const u16 gObjectEventPal_Pikachu[] = INCBIN_U16("graphics/object_events/palettes/followers/pikachu.gbapal"); +const u32 gObjectEventPic_Raichu[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/raichu.4bpp"); +const u16 gObjectEventPal_Raichu[] = INCBIN_U16("graphics/object_events/palettes/followers/raichu.gbapal"); +const u32 gObjectEventPic_Sandshrew[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/sandshrew.4bpp"); +const u16 gObjectEventPal_Sandshrew[] = INCBIN_U16("graphics/object_events/palettes/followers/sandshrew.gbapal"); +const u32 gObjectEventPic_Sandslash[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/sandslash.4bpp"); +const u16 gObjectEventPal_Sandslash[] = INCBIN_U16("graphics/object_events/palettes/followers/sandslash.gbapal"); +const u32 gObjectEventPic_Nidoran_F[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/nidoran_f.4bpp"); +const u16 gObjectEventPal_Nidoran_F[] = INCBIN_U16("graphics/object_events/palettes/followers/nidoran_f.gbapal"); +const u32 gObjectEventPic_Nidorina[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/nidorina.4bpp"); +const u16 gObjectEventPal_Nidorina[] = INCBIN_U16("graphics/object_events/palettes/followers/nidorina.gbapal"); +const u32 gObjectEventPic_Nidoqueen[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/nidoqueen.4bpp"); +const u16 gObjectEventPal_Nidoqueen[] = INCBIN_U16("graphics/object_events/palettes/followers/nidoqueen.gbapal"); +const u32 gObjectEventPic_Nidoran_M[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/nidoran_m.4bpp"); +const u16 gObjectEventPal_Nidoran_M[] = INCBIN_U16("graphics/object_events/palettes/followers/nidoran_m.gbapal"); +const u32 gObjectEventPic_Nidorino[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/nidorino.4bpp"); +const u16 gObjectEventPal_Nidorino[] = INCBIN_U16("graphics/object_events/palettes/followers/nidorino.gbapal"); +const u32 gObjectEventPic_Nidoking[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/nidoking.4bpp"); +const u16 gObjectEventPal_Nidoking[] = INCBIN_U16("graphics/object_events/palettes/followers/nidoking.gbapal"); +const u32 gObjectEventPic_Clefairy[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/clefairy.4bpp"); +const u16 gObjectEventPal_Clefairy[] = INCBIN_U16("graphics/object_events/palettes/followers/clefairy.gbapal"); +const u32 gObjectEventPic_Clefable[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/clefable.4bpp"); +const u16 gObjectEventPal_Clefable[] = INCBIN_U16("graphics/object_events/palettes/followers/clefable.gbapal"); +const u32 gObjectEventPic_Vulpix[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/vulpix.4bpp"); +const u16 gObjectEventPal_Vulpix[] = INCBIN_U16("graphics/object_events/palettes/followers/vulpix.gbapal"); +const u32 gObjectEventPic_Ninetales[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/ninetales.4bpp"); +const u16 gObjectEventPal_Ninetales[] = INCBIN_U16("graphics/object_events/palettes/followers/ninetales.gbapal"); +const u32 gObjectEventPic_Jigglypuff[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/jigglypuff.4bpp"); +const u16 gObjectEventPal_Jigglypuff[] = INCBIN_U16("graphics/object_events/palettes/followers/jigglypuff.gbapal"); +const u32 gObjectEventPic_Wigglytuff[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/wigglytuff.4bpp"); +const u16 gObjectEventPal_Wigglytuff[] = INCBIN_U16("graphics/object_events/palettes/followers/wigglytuff.gbapal"); +const u32 gObjectEventPic_Zubat[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/zubat.4bpp"); +const u16 gObjectEventPal_Zubat[] = INCBIN_U16("graphics/object_events/palettes/followers/zubat.gbapal"); +const u32 gObjectEventPic_Golbat[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/golbat.4bpp"); +const u16 gObjectEventPal_Golbat[] = INCBIN_U16("graphics/object_events/palettes/followers/golbat.gbapal"); +const u32 gObjectEventPic_Oddish[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/oddish.4bpp"); +const u16 gObjectEventPal_Oddish[] = INCBIN_U16("graphics/object_events/palettes/followers/oddish.gbapal"); +const u32 gObjectEventPic_Gloom[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/gloom.4bpp"); +const u16 gObjectEventPal_Gloom[] = INCBIN_U16("graphics/object_events/palettes/followers/gloom.gbapal"); +const u32 gObjectEventPic_Vileplume[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/vileplume.4bpp"); +const u16 gObjectEventPal_Vileplume[] = INCBIN_U16("graphics/object_events/palettes/followers/vileplume.gbapal"); +const u32 gObjectEventPic_Paras[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/paras.4bpp"); +const u16 gObjectEventPal_Paras[] = INCBIN_U16("graphics/object_events/palettes/followers/paras.gbapal"); +const u32 gObjectEventPic_Parasect[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/parasect.4bpp"); +const u16 gObjectEventPal_Parasect[] = INCBIN_U16("graphics/object_events/palettes/followers/parasect.gbapal"); +const u32 gObjectEventPic_Venonat[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/venonat.4bpp"); +const u16 gObjectEventPal_Venonat[] = INCBIN_U16("graphics/object_events/palettes/followers/venonat.gbapal"); +const u32 gObjectEventPic_Venomoth[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/venomoth.4bpp"); +const u16 gObjectEventPal_Venomoth[] = INCBIN_U16("graphics/object_events/palettes/followers/venomoth.gbapal"); +const u32 gObjectEventPic_Diglett[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/diglett.4bpp"); +const u16 gObjectEventPal_Diglett[] = INCBIN_U16("graphics/object_events/palettes/followers/diglett.gbapal"); +const u32 gObjectEventPic_Dugtrio[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/dugtrio.4bpp"); +const u16 gObjectEventPal_Dugtrio[] = INCBIN_U16("graphics/object_events/palettes/followers/dugtrio.gbapal"); +const u32 gObjectEventPic_Meowth[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/meowth.4bpp"); +const u16 gObjectEventPal_Meowth[] = INCBIN_U16("graphics/object_events/palettes/followers/meowth.gbapal"); +const u32 gObjectEventPic_Persian[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/persian.4bpp"); +const u16 gObjectEventPal_Persian[] = INCBIN_U16("graphics/object_events/palettes/followers/persian.gbapal"); +const u32 gObjectEventPic_Psyduck[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/psyduck.4bpp"); +const u16 gObjectEventPal_Psyduck[] = INCBIN_U16("graphics/object_events/palettes/followers/psyduck.gbapal"); +const u32 gObjectEventPic_Golduck[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/golduck.4bpp"); +const u16 gObjectEventPal_Golduck[] = INCBIN_U16("graphics/object_events/palettes/followers/golduck.gbapal"); +const u32 gObjectEventPic_Mankey[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/mankey.4bpp"); +const u16 gObjectEventPal_Mankey[] = INCBIN_U16("graphics/object_events/palettes/followers/mankey.gbapal"); +const u32 gObjectEventPic_Primeape[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/primeape.4bpp"); +const u16 gObjectEventPal_Primeape[] = INCBIN_U16("graphics/object_events/palettes/followers/primeape.gbapal"); +const u32 gObjectEventPic_Growlithe[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/growlithe.4bpp"); +const u16 gObjectEventPal_Growlithe[] = INCBIN_U16("graphics/object_events/palettes/followers/growlithe.gbapal"); +const u32 gObjectEventPic_Arcanine[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/arcanine.4bpp"); +const u16 gObjectEventPal_Arcanine[] = INCBIN_U16("graphics/object_events/palettes/followers/arcanine.gbapal"); +const u32 gObjectEventPic_Poliwag[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/poliwag.4bpp"); +const u16 gObjectEventPal_Poliwag[] = INCBIN_U16("graphics/object_events/palettes/followers/poliwag.gbapal"); +const u32 gObjectEventPic_Poliwhirl[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/poliwhirl.4bpp"); +const u16 gObjectEventPal_Poliwhirl[] = INCBIN_U16("graphics/object_events/palettes/followers/poliwhirl.gbapal"); +const u32 gObjectEventPic_Poliwrath[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/poliwrath.4bpp"); +const u16 gObjectEventPal_Poliwrath[] = INCBIN_U16("graphics/object_events/palettes/followers/poliwrath.gbapal"); +const u32 gObjectEventPic_Abra[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/abra.4bpp"); +const u16 gObjectEventPal_Abra[] = INCBIN_U16("graphics/object_events/palettes/followers/abra.gbapal"); +const u32 gObjectEventPic_Kadabra[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/kadabra.4bpp"); +const u16 gObjectEventPal_Kadabra[] = INCBIN_U16("graphics/object_events/palettes/followers/kadabra.gbapal"); +const u32 gObjectEventPic_Alakazam[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/alakazam.4bpp"); +const u16 gObjectEventPal_Alakazam[] = INCBIN_U16("graphics/object_events/palettes/followers/alakazam.gbapal"); +const u32 gObjectEventPic_Machop[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/machop.4bpp"); +const u16 gObjectEventPal_Machop[] = INCBIN_U16("graphics/object_events/palettes/followers/machop.gbapal"); +const u32 gObjectEventPic_Machoke[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/machoke.4bpp"); +const u16 gObjectEventPal_Machoke[] = INCBIN_U16("graphics/object_events/palettes/followers/machoke.gbapal"); +const u32 gObjectEventPic_Machamp[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/machamp.4bpp"); +const u16 gObjectEventPal_Machamp[] = INCBIN_U16("graphics/object_events/palettes/followers/machamp.gbapal"); +const u32 gObjectEventPic_Bellsprout[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/bellsprout.4bpp"); +const u16 gObjectEventPal_Bellsprout[] = INCBIN_U16("graphics/object_events/palettes/followers/bellsprout.gbapal"); +const u32 gObjectEventPic_Weepinbell[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/weepinbell.4bpp"); +const u16 gObjectEventPal_Weepinbell[] = INCBIN_U16("graphics/object_events/palettes/followers/weepinbell.gbapal"); +const u32 gObjectEventPic_Victreebel[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/victreebel.4bpp"); +const u16 gObjectEventPal_Victreebel[] = INCBIN_U16("graphics/object_events/palettes/followers/victreebel.gbapal"); +const u32 gObjectEventPic_Tentacool[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/tentacool.4bpp"); +const u16 gObjectEventPal_Tentacool[] = INCBIN_U16("graphics/object_events/palettes/followers/tentacool.gbapal"); +const u32 gObjectEventPic_Tentacruel[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/tentacruel.4bpp"); +const u16 gObjectEventPal_Tentacruel[] = INCBIN_U16("graphics/object_events/palettes/followers/tentacruel.gbapal"); +const u32 gObjectEventPic_Geodude[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/geodude.4bpp"); +const u16 gObjectEventPal_Geodude[] = INCBIN_U16("graphics/object_events/palettes/followers/geodude.gbapal"); +const u32 gObjectEventPic_Graveler[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/graveler.4bpp"); +const u16 gObjectEventPal_Graveler[] = INCBIN_U16("graphics/object_events/palettes/followers/graveler.gbapal"); +const u32 gObjectEventPic_Golem[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/golem.4bpp"); +const u16 gObjectEventPal_Golem[] = INCBIN_U16("graphics/object_events/palettes/followers/golem.gbapal"); +const u32 gObjectEventPic_Ponyta[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/ponyta.4bpp"); +const u16 gObjectEventPal_Ponyta[] = INCBIN_U16("graphics/object_events/palettes/followers/ponyta.gbapal"); +const u32 gObjectEventPic_Rapidash[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/rapidash.4bpp"); +const u16 gObjectEventPal_Rapidash[] = INCBIN_U16("graphics/object_events/palettes/followers/rapidash.gbapal"); +const u32 gObjectEventPic_Slowpoke[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/slowpoke.4bpp"); +const u16 gObjectEventPal_Slowpoke[] = INCBIN_U16("graphics/object_events/palettes/followers/slowpoke.gbapal"); +const u32 gObjectEventPic_Slowbro[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/slowbro.4bpp"); +const u16 gObjectEventPal_Slowbro[] = INCBIN_U16("graphics/object_events/palettes/followers/slowbro.gbapal"); +const u32 gObjectEventPic_Magnemite[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/magnemite.4bpp"); +const u16 gObjectEventPal_Magnemite[] = INCBIN_U16("graphics/object_events/palettes/followers/magnemite.gbapal"); +const u32 gObjectEventPic_Magneton[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/magneton.4bpp"); +const u16 gObjectEventPal_Magneton[] = INCBIN_U16("graphics/object_events/palettes/followers/magneton.gbapal"); +const u32 gObjectEventPic_Farfetchd[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/farfetchd.4bpp"); +const u16 gObjectEventPal_Farfetchd[] = INCBIN_U16("graphics/object_events/palettes/followers/farfetchd.gbapal"); +const u32 gObjectEventPic_Doduo[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/doduo.4bpp"); +const u16 gObjectEventPal_Doduo[] = INCBIN_U16("graphics/object_events/palettes/followers/doduo.gbapal"); +const u32 gObjectEventPic_Dodrio[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/dodrio.4bpp"); +const u16 gObjectEventPal_Dodrio[] = INCBIN_U16("graphics/object_events/palettes/followers/dodrio.gbapal"); +const u32 gObjectEventPic_Seel[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/seel.4bpp"); +const u16 gObjectEventPal_Seel[] = INCBIN_U16("graphics/object_events/palettes/followers/seel.gbapal"); +const u32 gObjectEventPic_Dewgong[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/dewgong.4bpp"); +const u16 gObjectEventPal_Dewgong[] = INCBIN_U16("graphics/object_events/palettes/followers/dewgong.gbapal"); +const u32 gObjectEventPic_Grimer[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/grimer.4bpp"); +const u16 gObjectEventPal_Grimer[] = INCBIN_U16("graphics/object_events/palettes/followers/grimer.gbapal"); +const u32 gObjectEventPic_Muk[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/muk.4bpp"); +const u16 gObjectEventPal_Muk[] = INCBIN_U16("graphics/object_events/palettes/followers/muk.gbapal"); +const u32 gObjectEventPic_Shellder[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/shellder.4bpp"); +const u16 gObjectEventPal_Shellder[] = INCBIN_U16("graphics/object_events/palettes/followers/shellder.gbapal"); +const u32 gObjectEventPic_Cloyster[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/cloyster.4bpp"); +const u16 gObjectEventPal_Cloyster[] = INCBIN_U16("graphics/object_events/palettes/followers/cloyster.gbapal"); +const u32 gObjectEventPic_Gastly[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/gastly.4bpp"); +const u16 gObjectEventPal_Gastly[] = INCBIN_U16("graphics/object_events/palettes/followers/gastly.gbapal"); +const u32 gObjectEventPic_Haunter[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/haunter.4bpp"); +const u16 gObjectEventPal_Haunter[] = INCBIN_U16("graphics/object_events/palettes/followers/haunter.gbapal"); +const u32 gObjectEventPic_Gengar[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/gengar.4bpp"); +const u16 gObjectEventPal_Gengar[] = INCBIN_U16("graphics/object_events/palettes/followers/gengar.gbapal"); +const u32 gObjectEventPic_Onix[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/onix.4bpp"); +const u16 gObjectEventPal_Onix[] = INCBIN_U16("graphics/object_events/palettes/followers/onix.gbapal"); +const u32 gObjectEventPic_Drowzee[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/drowzee.4bpp"); +const u16 gObjectEventPal_Drowzee[] = INCBIN_U16("graphics/object_events/palettes/followers/drowzee.gbapal"); +const u32 gObjectEventPic_Hypno[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/hypno.4bpp"); +const u16 gObjectEventPal_Hypno[] = INCBIN_U16("graphics/object_events/palettes/followers/hypno.gbapal"); +const u32 gObjectEventPic_Krabby[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/krabby.4bpp"); +const u16 gObjectEventPal_Krabby[] = INCBIN_U16("graphics/object_events/palettes/followers/krabby.gbapal"); +const u32 gObjectEventPic_Kingler[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/kingler.4bpp"); +const u16 gObjectEventPal_Kingler[] = INCBIN_U16("graphics/object_events/palettes/followers/kingler.gbapal"); +const u32 gObjectEventPic_Voltorb[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/voltorb.4bpp"); +const u16 gObjectEventPal_Voltorb[] = INCBIN_U16("graphics/object_events/palettes/followers/voltorb.gbapal"); +const u32 gObjectEventPic_Electrode[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/electrode.4bpp"); +const u16 gObjectEventPal_Electrode[] = INCBIN_U16("graphics/object_events/palettes/followers/electrode.gbapal"); +const u32 gObjectEventPic_Exeggcute[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/exeggcute.4bpp"); +const u16 gObjectEventPal_Exeggcute[] = INCBIN_U16("graphics/object_events/palettes/followers/exeggcute.gbapal"); +const u32 gObjectEventPic_Exeggutor[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/exeggutor.4bpp"); +const u16 gObjectEventPal_Exeggutor[] = INCBIN_U16("graphics/object_events/palettes/followers/exeggutor.gbapal"); +const u32 gObjectEventPic_Cubone[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/cubone.4bpp"); +const u16 gObjectEventPal_Cubone[] = INCBIN_U16("graphics/object_events/palettes/followers/cubone.gbapal"); +const u32 gObjectEventPic_Marowak[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/marowak.4bpp"); +const u16 gObjectEventPal_Marowak[] = INCBIN_U16("graphics/object_events/palettes/followers/marowak.gbapal"); +const u32 gObjectEventPic_Hitmonlee[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/hitmonlee.4bpp"); +const u16 gObjectEventPal_Hitmonlee[] = INCBIN_U16("graphics/object_events/palettes/followers/hitmonlee.gbapal"); +const u32 gObjectEventPic_Hitmonchan[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/hitmonchan.4bpp"); +const u16 gObjectEventPal_Hitmonchan[] = INCBIN_U16("graphics/object_events/palettes/followers/hitmonchan.gbapal"); +const u32 gObjectEventPic_Lickitung[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/lickitung.4bpp"); +const u16 gObjectEventPal_Lickitung[] = INCBIN_U16("graphics/object_events/palettes/followers/lickitung.gbapal"); +const u32 gObjectEventPic_Koffing[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/koffing.4bpp"); +const u16 gObjectEventPal_Koffing[] = INCBIN_U16("graphics/object_events/palettes/followers/koffing.gbapal"); +const u32 gObjectEventPic_Weezing[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/weezing.4bpp"); +const u16 gObjectEventPal_Weezing[] = INCBIN_U16("graphics/object_events/palettes/followers/weezing.gbapal"); +const u32 gObjectEventPic_Rhyhorn[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/rhyhorn.4bpp"); +const u16 gObjectEventPal_Rhyhorn[] = INCBIN_U16("graphics/object_events/palettes/followers/rhyhorn.gbapal"); +const u32 gObjectEventPic_Rhydon[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/rhydon.4bpp"); +const u16 gObjectEventPal_Rhydon[] = INCBIN_U16("graphics/object_events/palettes/followers/rhydon.gbapal"); +const u32 gObjectEventPic_Chansey[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/chansey.4bpp"); +const u16 gObjectEventPal_Chansey[] = INCBIN_U16("graphics/object_events/palettes/followers/chansey.gbapal"); +const u32 gObjectEventPic_Tangela[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/tangela.4bpp"); +const u16 gObjectEventPal_Tangela[] = INCBIN_U16("graphics/object_events/palettes/followers/tangela.gbapal"); +const u32 gObjectEventPic_Kangaskhan[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/kangaskhan.4bpp"); +const u16 gObjectEventPal_Kangaskhan[] = INCBIN_U16("graphics/object_events/palettes/followers/kangaskhan.gbapal"); +const u32 gObjectEventPic_Horsea[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/horsea.4bpp"); +const u16 gObjectEventPal_Horsea[] = INCBIN_U16("graphics/object_events/palettes/followers/horsea.gbapal"); +const u32 gObjectEventPic_Seadra[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/seadra.4bpp"); +const u16 gObjectEventPal_Seadra[] = INCBIN_U16("graphics/object_events/palettes/followers/seadra.gbapal"); +const u32 gObjectEventPic_Goldeen[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/goldeen.4bpp"); +const u16 gObjectEventPal_Goldeen[] = INCBIN_U16("graphics/object_events/palettes/followers/goldeen.gbapal"); +const u32 gObjectEventPic_Seaking[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/seaking.4bpp"); +const u16 gObjectEventPal_Seaking[] = INCBIN_U16("graphics/object_events/palettes/followers/seaking.gbapal"); +const u32 gObjectEventPic_Staryu[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/staryu.4bpp"); +const u16 gObjectEventPal_Staryu[] = INCBIN_U16("graphics/object_events/palettes/followers/staryu.gbapal"); +const u32 gObjectEventPic_Starmie[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/starmie.4bpp"); +const u16 gObjectEventPal_Starmie[] = INCBIN_U16("graphics/object_events/palettes/followers/starmie.gbapal"); +const u32 gObjectEventPic_Mr_Mime[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/mr_mime.4bpp"); +const u16 gObjectEventPal_Mr_Mime[] = INCBIN_U16("graphics/object_events/palettes/followers/mr_mime.gbapal"); +const u32 gObjectEventPic_Scyther[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/scyther.4bpp"); +const u16 gObjectEventPal_Scyther[] = INCBIN_U16("graphics/object_events/palettes/followers/scyther.gbapal"); +const u32 gObjectEventPic_Jynx[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/jynx.4bpp"); +const u16 gObjectEventPal_Jynx[] = INCBIN_U16("graphics/object_events/palettes/followers/jynx.gbapal"); +const u32 gObjectEventPic_Electabuzz[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/electabuzz.4bpp"); +const u16 gObjectEventPal_Electabuzz[] = INCBIN_U16("graphics/object_events/palettes/followers/electabuzz.gbapal"); +const u32 gObjectEventPic_Magmar[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/magmar.4bpp"); +const u16 gObjectEventPal_Magmar[] = INCBIN_U16("graphics/object_events/palettes/followers/magmar.gbapal"); +const u32 gObjectEventPic_Pinsir[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/pinsir.4bpp"); +const u16 gObjectEventPal_Pinsir[] = INCBIN_U16("graphics/object_events/palettes/followers/pinsir.gbapal"); +const u32 gObjectEventPic_Tauros[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/tauros.4bpp"); +const u16 gObjectEventPal_Tauros[] = INCBIN_U16("graphics/object_events/palettes/followers/tauros.gbapal"); +const u32 gObjectEventPic_Magikarp[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/magikarp.4bpp"); +const u16 gObjectEventPal_Magikarp[] = INCBIN_U16("graphics/object_events/palettes/followers/magikarp.gbapal"); +const u32 gObjectEventPic_Gyarados[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/gyarados.4bpp"); +const u16 gObjectEventPal_Gyarados[] = INCBIN_U16("graphics/object_events/palettes/followers/gyarados.gbapal"); +const u32 gObjectEventPic_Lapras[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/lapras.4bpp"); +const u16 gObjectEventPal_Lapras[] = INCBIN_U16("graphics/object_events/palettes/followers/lapras.gbapal"); +const u32 gObjectEventPic_Ditto[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/ditto.4bpp"); +const u16 gObjectEventPal_Ditto[] = INCBIN_U16("graphics/object_events/palettes/followers/ditto.gbapal"); +const u32 gObjectEventPic_Eevee[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/eevee.4bpp"); +const u16 gObjectEventPal_Eevee[] = INCBIN_U16("graphics/object_events/palettes/followers/eevee.gbapal"); +const u32 gObjectEventPic_Vaporeon[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/vaporeon.4bpp"); +const u16 gObjectEventPal_Vaporeon[] = INCBIN_U16("graphics/object_events/palettes/followers/vaporeon.gbapal"); +const u32 gObjectEventPic_Jolteon[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/jolteon.4bpp"); +const u16 gObjectEventPal_Jolteon[] = INCBIN_U16("graphics/object_events/palettes/followers/jolteon.gbapal"); +const u32 gObjectEventPic_Flareon[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/flareon.4bpp"); +const u16 gObjectEventPal_Flareon[] = INCBIN_U16("graphics/object_events/palettes/followers/flareon.gbapal"); +const u32 gObjectEventPic_Porygon[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/porygon.4bpp"); +const u16 gObjectEventPal_Porygon[] = INCBIN_U16("graphics/object_events/palettes/followers/porygon.gbapal"); +const u32 gObjectEventPic_Omanyte[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/omanyte.4bpp"); +const u16 gObjectEventPal_Omanyte[] = INCBIN_U16("graphics/object_events/palettes/followers/omanyte.gbapal"); +const u32 gObjectEventPic_Omastar[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/omastar.4bpp"); +const u16 gObjectEventPal_Omastar[] = INCBIN_U16("graphics/object_events/palettes/followers/omastar.gbapal"); +const u32 gObjectEventPic_Kabuto[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/kabuto.4bpp"); +const u16 gObjectEventPal_Kabuto[] = INCBIN_U16("graphics/object_events/palettes/followers/kabuto.gbapal"); +const u32 gObjectEventPic_Kabutops[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/kabutops.4bpp"); +const u16 gObjectEventPal_Kabutops[] = INCBIN_U16("graphics/object_events/palettes/followers/kabutops.gbapal"); +const u32 gObjectEventPic_Aerodactyl[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/aerodactyl.4bpp"); +const u16 gObjectEventPal_Aerodactyl[] = INCBIN_U16("graphics/object_events/palettes/followers/aerodactyl.gbapal"); +const u32 gObjectEventPic_Snorlax[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/snorlax.4bpp"); +const u16 gObjectEventPal_Snorlax[] = INCBIN_U16("graphics/object_events/palettes/followers/snorlax.gbapal"); +const u32 gObjectEventPic_Articuno[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/articuno.4bpp"); +const u16 gObjectEventPal_Articuno[] = INCBIN_U16("graphics/object_events/palettes/followers/articuno.gbapal"); +const u32 gObjectEventPic_Zapdos[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/zapdos.4bpp"); +const u16 gObjectEventPal_Zapdos[] = INCBIN_U16("graphics/object_events/palettes/followers/zapdos.gbapal"); +const u32 gObjectEventPic_Moltres[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/moltres.4bpp"); +const u16 gObjectEventPal_Moltres[] = INCBIN_U16("graphics/object_events/palettes/followers/moltres.gbapal"); +const u32 gObjectEventPic_Dratini[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/dratini.4bpp"); +const u16 gObjectEventPal_Dratini[] = INCBIN_U16("graphics/object_events/palettes/followers/dratini.gbapal"); +const u32 gObjectEventPic_Dragonair[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/dragonair.4bpp"); +const u16 gObjectEventPal_Dragonair[] = INCBIN_U16("graphics/object_events/palettes/followers/dragonair.gbapal"); +const u32 gObjectEventPic_Dragonite[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/dragonite.4bpp"); +const u16 gObjectEventPal_Dragonite[] = INCBIN_U16("graphics/object_events/palettes/followers/dragonite.gbapal"); +const u32 gObjectEventPic_Mewtwo[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/mewtwo.4bpp"); +const u16 gObjectEventPal_Mewtwo[] = INCBIN_U16("graphics/object_events/palettes/followers/mewtwo.gbapal"); +const u32 gObjectEventPic_Mew_Follower[] = INCBIN_U32("graphics/object_events/pics/pokemon/followers/mew.4bpp"); +const u16 gObjectEventPal_Mew[] = INCBIN_U16("graphics/object_events/palettes/followers/mew.gbapal"); diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index ea424090a..5e0d06bc9 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -243,3 +243,155 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrenda const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay = {TAG_NONE, OBJ_EVENT_PAL_TAG_RS_MAY, OBJ_EVENT_PAL_TAG_NONE, 256, 16, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_16x32, sOamTables_16x32, sAnimTable_Standard, sPicTable_RubySapphireMay, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {TAG_NONE, OBJ_EVENT_PAL_TAG_LUGIA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Standard, sPicTable_Lugia, gDummySpriteAffineAnimTable}; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {TAG_NONE, OBJ_EVENT_PAL_TAG_HO_OH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_HoOh, sPicTable_HoOh, gDummySpriteAffineAnimTable}; + +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bulbasaur = {0xFFFF, OBJ_EVENT_PAL_TAG_BULBASAUR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Bulbasaur, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ivysaur = {0xFFFF, OBJ_EVENT_PAL_TAG_IVYSAUR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Ivysaur, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Venusaur = {0xFFFF, OBJ_EVENT_PAL_TAG_VENUSAUR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Venusaur, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Charmander = {0xFFFF, OBJ_EVENT_PAL_TAG_CHARMANDER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Charmander, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Charmeleon = {0xFFFF, OBJ_EVENT_PAL_TAG_CHARMELEON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Charmeleon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Charizard = {0xFFFF, OBJ_EVENT_PAL_TAG_CHARIZARD, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Charizard, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Squirtle = {0xFFFF, OBJ_EVENT_PAL_TAG_SQUIRTLE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Squirtle, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wartortle = {0xFFFF, OBJ_EVENT_PAL_TAG_WARTORTLE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Wartortle, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Blastoise = {0xFFFF, OBJ_EVENT_PAL_TAG_BLASTOISE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Blastoise, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Caterpie = {0xFFFF, OBJ_EVENT_PAL_TAG_CATERPIE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Caterpie, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Metapod = {0xFFFF, OBJ_EVENT_PAL_TAG_METAPOD, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Metapod, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Butterfree = {0xFFFF, OBJ_EVENT_PAL_TAG_BUTTERFREE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Butterfree, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Weedle = {0xFFFF, OBJ_EVENT_PAL_TAG_WEEDLE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Weedle, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kakuna = {0xFFFF, OBJ_EVENT_PAL_TAG_KAKUNA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Kakuna, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beedrill = {0xFFFF, OBJ_EVENT_PAL_TAG_BEEDRILL, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Beedrill, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pidgey = {0xFFFF, OBJ_EVENT_PAL_TAG_PIDGEY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Pidgey, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pidgeotto = {0xFFFF, OBJ_EVENT_PAL_TAG_PIDGEOTTO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Pidgeotto, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pidgeot = {0xFFFF, OBJ_EVENT_PAL_TAG_PIDGEOT, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Pidgeot, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rattata = {0xFFFF, OBJ_EVENT_PAL_TAG_RATTATA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Rattata, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Raticate = {0xFFFF, OBJ_EVENT_PAL_TAG_RATICATE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Raticate, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spearow = {0xFFFF, OBJ_EVENT_PAL_TAG_SPEAROW, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Spearow, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fearow = {0xFFFF, OBJ_EVENT_PAL_TAG_FEAROW, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Fearow, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ekans = {0xFFFF, OBJ_EVENT_PAL_TAG_EKANS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Ekans, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Arbok = {0xFFFF, OBJ_EVENT_PAL_TAG_ARBOK, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Arbok, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu_Follow = {0xFFFF, OBJ_EVENT_PAL_TAG_PIKACHU, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Pikachu_Follow, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Raichu = {0xFFFF, OBJ_EVENT_PAL_TAG_RAICHU, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Raichu, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sandshrew = {0xFFFF, OBJ_EVENT_PAL_TAG_SANDSHREW, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Sandshrew, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sandslash = {0xFFFF, OBJ_EVENT_PAL_TAG_SANDSLASH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Sandslash, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidoran_F = {0xFFFF, OBJ_EVENT_PAL_TAG_NIDORAN_F, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Nidoran_F, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidorina = {0xFFFF, OBJ_EVENT_PAL_TAG_NIDORINA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Nidorina, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidoqueen = {0xFFFF, OBJ_EVENT_PAL_TAG_NIDOQUEEN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Nidoqueen, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidoran_M = {0xFFFF, OBJ_EVENT_PAL_TAG_NIDORAN_M, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Nidoran_M, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidorino = {0xFFFF, OBJ_EVENT_PAL_TAG_NIDORINO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Nidorino, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidoking = {0xFFFF, OBJ_EVENT_PAL_TAG_NIDOKING, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Nidoking, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Clefairy = {0xFFFF, OBJ_EVENT_PAL_TAG_CLEFAIRY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Clefairy, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Clefable = {0xFFFF, OBJ_EVENT_PAL_TAG_CLEFABLE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Clefable, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Vulpix = {0xFFFF, OBJ_EVENT_PAL_TAG_VULPIX, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Vulpix, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ninetales = {0xFFFF, OBJ_EVENT_PAL_TAG_NINETALES, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Ninetales, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Jigglypuff = {0xFFFF, OBJ_EVENT_PAL_TAG_JIGGLYPUFF, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Jigglypuff, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wigglytuff = {0xFFFF, OBJ_EVENT_PAL_TAG_WIGGLYTUFF, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Wigglytuff, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zubat = {0xFFFF, OBJ_EVENT_PAL_TAG_ZUBAT, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Zubat, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Golbat = {0xFFFF, OBJ_EVENT_PAL_TAG_GOLBAT, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Golbat, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Oddish = {0xFFFF, OBJ_EVENT_PAL_TAG_ODDISH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Oddish, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gloom = {0xFFFF, OBJ_EVENT_PAL_TAG_GLOOM, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Gloom, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Vileplume = {0xFFFF, OBJ_EVENT_PAL_TAG_VILEPLUME, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Vileplume, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Paras = {0xFFFF, OBJ_EVENT_PAL_TAG_PARAS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Paras, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Parasect = {0xFFFF, OBJ_EVENT_PAL_TAG_PARASECT, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Parasect, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Venonat = {0xFFFF, OBJ_EVENT_PAL_TAG_VENONAT, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Venonat, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Venomoth = {0xFFFF, OBJ_EVENT_PAL_TAG_VENOMOTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Venomoth, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Diglett = {0xFFFF, OBJ_EVENT_PAL_TAG_DIGLETT, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Diglett, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dugtrio = {0xFFFF, OBJ_EVENT_PAL_TAG_DUGTRIO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Dugtrio, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Meowth = {0xFFFF, OBJ_EVENT_PAL_TAG_MEOWTH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Meowth, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Persian = {0xFFFF, OBJ_EVENT_PAL_TAG_PERSIAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Persian, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Psyduck = {0xFFFF, OBJ_EVENT_PAL_TAG_PSYDUCK, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Psyduck, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Golduck = {0xFFFF, OBJ_EVENT_PAL_TAG_GOLDUCK, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Golduck, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mankey = {0xFFFF, OBJ_EVENT_PAL_TAG_MANKEY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Mankey, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Primeape = {0xFFFF, OBJ_EVENT_PAL_TAG_PRIMEAPE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Primeape, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Growlithe = {0xFFFF, OBJ_EVENT_PAL_TAG_GROWLITHE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Growlithe, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Arcanine = {0xFFFF, OBJ_EVENT_PAL_TAG_ARCANINE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Arcanine, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poliwag = {0xFFFF, OBJ_EVENT_PAL_TAG_POLIWAG, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Poliwag, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poliwhirl = {0xFFFF, OBJ_EVENT_PAL_TAG_POLIWHIRL, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Poliwhirl, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poliwrath = {0xFFFF, OBJ_EVENT_PAL_TAG_POLIWRATH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Poliwrath, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Abra = {0xFFFF, OBJ_EVENT_PAL_TAG_ABRA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Abra, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kadabra = {0xFFFF, OBJ_EVENT_PAL_TAG_KADABRA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Kadabra, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Alakazam = {0xFFFF, OBJ_EVENT_PAL_TAG_ALAKAZAM, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Alakazam, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Machop = {0xFFFF, OBJ_EVENT_PAL_TAG_MACHOP, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Machop, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Machoke = {0xFFFF, OBJ_EVENT_PAL_TAG_MACHOKE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Machoke, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Machamp = {0xFFFF, OBJ_EVENT_PAL_TAG_MACHAMP, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Machamp, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bellsprout = {0xFFFF, OBJ_EVENT_PAL_TAG_BELLSPROUT, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Bellsprout, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Weepinbell = {0xFFFF, OBJ_EVENT_PAL_TAG_WEEPINBELL, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Weepinbell, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Victreebel = {0xFFFF, OBJ_EVENT_PAL_TAG_VICTREEBEL, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Victreebel, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tentacool = {0xFFFF, OBJ_EVENT_PAL_TAG_TENTACOOL, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Tentacool, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tentacruel = {0xFFFF, OBJ_EVENT_PAL_TAG_TENTACRUEL, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Tentacruel, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Geodude = {0xFFFF, OBJ_EVENT_PAL_TAG_GEODUDE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Geodude, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Graveler = {0xFFFF, OBJ_EVENT_PAL_TAG_GRAVELER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Graveler, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Golem = {0xFFFF, OBJ_EVENT_PAL_TAG_GOLEM, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Golem, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ponyta = {0xFFFF, OBJ_EVENT_PAL_TAG_PONYTA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Ponyta, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rapidash = {0xFFFF, OBJ_EVENT_PAL_TAG_RAPIDASH, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Rapidash, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Slowpoke = {0xFFFF, OBJ_EVENT_PAL_TAG_SLOWPOKE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Slowpoke, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Slowbro = {0xFFFF, OBJ_EVENT_PAL_TAG_SLOWBRO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Slowbro, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Magnemite = {0xFFFF, OBJ_EVENT_PAL_TAG_MAGNEMITE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Magnemite, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Magneton = {0xFFFF, OBJ_EVENT_PAL_TAG_MAGNETON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Magneton, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Farfetchd = {0xFFFF, OBJ_EVENT_PAL_TAG_FARFETCHD, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon_UniqueEast, gObjectEventPicTable_Farfetchd, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Doduo = {0xFFFF, OBJ_EVENT_PAL_TAG_DODUO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Doduo, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dodrio = {0xFFFF, OBJ_EVENT_PAL_TAG_DODRIO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Dodrio, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Seel = {0xFFFF, OBJ_EVENT_PAL_TAG_SEEL, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Seel, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dewgong = {0xFFFF, OBJ_EVENT_PAL_TAG_DEWGONG, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Dewgong, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Grimer = {0xFFFF, OBJ_EVENT_PAL_TAG_GRIMER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Grimer, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Muk = {0xFFFF, OBJ_EVENT_PAL_TAG_MUK, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Muk, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Shellder = {0xFFFF, OBJ_EVENT_PAL_TAG_SHELLDER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Shellder, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cloyster = {0xFFFF, OBJ_EVENT_PAL_TAG_CLOYSTER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Cloyster, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gastly = {0xFFFF, OBJ_EVENT_PAL_TAG_GASTLY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Gastly, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Haunter = {0xFFFF, OBJ_EVENT_PAL_TAG_HAUNTER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Haunter, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gengar = {0xFFFF, OBJ_EVENT_PAL_TAG_GENGAR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Gengar, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Onix = {0xFFFF, OBJ_EVENT_PAL_TAG_ONIX, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Onix, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drowzee = {0xFFFF, OBJ_EVENT_PAL_TAG_DROWZEE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Drowzee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hypno = {0xFFFF, OBJ_EVENT_PAL_TAG_HYPNO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Hypno, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Krabby = {0xFFFF, OBJ_EVENT_PAL_TAG_KRABBY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon_UniqueEast_DoubleNorth, gObjectEventPicTable_Krabby, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kingler = {0xFFFF, OBJ_EVENT_PAL_TAG_KINGLER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon_UniqueEast, gObjectEventPicTable_Kingler, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Voltorb = {0xFFFF, OBJ_EVENT_PAL_TAG_VOLTORB, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Voltorb, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Electrode = {0xFFFF, OBJ_EVENT_PAL_TAG_ELECTRODE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Electrode, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Exeggcute = {0xFFFF, OBJ_EVENT_PAL_TAG_EXEGGCUTE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Exeggcute, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Exeggutor = {0xFFFF, OBJ_EVENT_PAL_TAG_EXEGGUTOR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Exeggutor, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cubone = {0xFFFF, OBJ_EVENT_PAL_TAG_CUBONE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon_UniqueEast, gObjectEventPicTable_Cubone, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Marowak = {0xFFFF, OBJ_EVENT_PAL_TAG_MAROWAK, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon_UniqueEast, gObjectEventPicTable_Marowak, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hitmonlee = {0xFFFF, OBJ_EVENT_PAL_TAG_HITMONLEE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Hitmonlee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hitmonchan = {0xFFFF, OBJ_EVENT_PAL_TAG_HITMONCHAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Hitmonchan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lickitung = {0xFFFF, OBJ_EVENT_PAL_TAG_LICKITUNG, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Lickitung, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Koffing = {0xFFFF, OBJ_EVENT_PAL_TAG_KOFFING, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Koffing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Weezing = {0xFFFF, OBJ_EVENT_PAL_TAG_WEEZING, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon_UniqueEast, gObjectEventPicTable_Weezing, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rhyhorn = {0xFFFF, OBJ_EVENT_PAL_TAG_RHYHORN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Rhyhorn, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rhydon = {0xFFFF, OBJ_EVENT_PAL_TAG_RHYDON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Rhydon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Chansey = {0xFFFF, OBJ_EVENT_PAL_TAG_CHANSEY, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Chansey, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tangela = {0xFFFF, OBJ_EVENT_PAL_TAG_TANGELA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Tangela, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kangaskhan = {0xFFFF, OBJ_EVENT_PAL_TAG_KANGASKHAN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Kangaskhan, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Horsea = {0xFFFF, OBJ_EVENT_PAL_TAG_HORSEA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Horsea, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Seadra = {0xFFFF, OBJ_EVENT_PAL_TAG_SEADRA, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Seadra, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Goldeen = {0xFFFF, OBJ_EVENT_PAL_TAG_GOLDEEN, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Goldeen, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Seaking = {0xFFFF, OBJ_EVENT_PAL_TAG_SEAKING, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Seaking, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Staryu = {0xFFFF, OBJ_EVENT_PAL_TAG_STARYU, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Staryu, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Starmie = {0xFFFF, OBJ_EVENT_PAL_TAG_STARMIE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Starmie, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mr_Mime = {0xFFFF, OBJ_EVENT_PAL_TAG_MR_MIME, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Mr_Mime, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scyther = {0xFFFF, OBJ_EVENT_PAL_TAG_SCYTHER, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Scyther, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Jynx = {0xFFFF, OBJ_EVENT_PAL_TAG_JYNX, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Jynx, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Electabuzz = {0xFFFF, OBJ_EVENT_PAL_TAG_ELECTABUZZ, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Electabuzz, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Magmar = {0xFFFF, OBJ_EVENT_PAL_TAG_MAGMAR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Magmar, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pinsir = {0xFFFF, OBJ_EVENT_PAL_TAG_PINSIR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Pinsir, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tauros = {0xFFFF, OBJ_EVENT_PAL_TAG_TAUROS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Tauros, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Magikarp = {0xFFFF, OBJ_EVENT_PAL_TAG_MAGIKARP, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Magikarp, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gyarados = {0xFFFF, OBJ_EVENT_PAL_TAG_GYARADOS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Gyarados, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lapras = {0xFFFF, OBJ_EVENT_PAL_TAG_LAPRAS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Lapras, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ditto = {0xFFFF, OBJ_EVENT_PAL_TAG_DITTO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Ditto, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Eevee = {0xFFFF, OBJ_EVENT_PAL_TAG_EEVEE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Eevee, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Vaporeon = {0xFFFF, OBJ_EVENT_PAL_TAG_VAPOREON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Vaporeon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Jolteon = {0xFFFF, OBJ_EVENT_PAL_TAG_JOLTEON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Jolteon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flareon = {0xFFFF, OBJ_EVENT_PAL_TAG_FLAREON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Flareon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Porygon = {0xFFFF, OBJ_EVENT_PAL_TAG_PORYGON, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Porygon, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Omanyte = {0xFFFF, OBJ_EVENT_PAL_TAG_OMANYTE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Omanyte, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Omastar = {0xFFFF, OBJ_EVENT_PAL_TAG_OMASTAR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Omastar, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kabuto = {0xFFFF, OBJ_EVENT_PAL_TAG_KABUTO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Kabuto, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kabutops = {0xFFFF, OBJ_EVENT_PAL_TAG_KABUTOPS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Kabutops, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Aerodactyl = {0xFFFF, OBJ_EVENT_PAL_TAG_AERODACTYL, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Aerodactyl, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Snorlax = {0xFFFF, OBJ_EVENT_PAL_TAG_SNORLAX, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Snorlax, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Articuno = {0xFFFF, OBJ_EVENT_PAL_TAG_ARTICUNO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Articuno, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zapdos = {0xFFFF, OBJ_EVENT_PAL_TAG_ZAPDOS, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Zapdos, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Moltres = {0xFFFF, OBJ_EVENT_PAL_TAG_MOLTRES, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Moltres, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dratini = {0xFFFF, OBJ_EVENT_PAL_TAG_DRATINI, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Dratini, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dragonair = {0xFFFF, OBJ_EVENT_PAL_TAG_DRAGONAIR, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Dragonair, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dragonite = {0xFFFF, OBJ_EVENT_PAL_TAG_DRAGONITE, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Dragonite, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mewtwo = {0xFFFF, OBJ_EVENT_PAL_TAG_MEWTWO, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Mewtwo, gDummySpriteAffineAnimTable}; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew_Follower = {0xFFFF, OBJ_EVENT_PAL_TAG_MEW, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 10, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, gObjectEventImageAnimTable_FollowingPokemon, gObjectEventPicTable_Mew_Follower, gDummySpriteAffineAnimTable}; diff --git a/src/data/object_events/object_event_graphics_info_pointers.h b/src/data/object_events/object_event_graphics_info_pointers.h index 1c94919a7..8e052f870 100755 --- a/src/data/object_events/object_event_graphics_info_pointers.h +++ b/src/data/object_events/object_event_graphics_info_pointers.h @@ -244,6 +244,157 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Storyteller; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1; const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bulbasaur; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ivysaur; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Venusaur; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Charmander; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Charmeleon; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Charizard; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Squirtle; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wartortle; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Blastoise; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Caterpie; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Metapod; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Butterfree; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Weedle; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kakuna; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beedrill; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pidgey; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pidgeotto; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pidgeot; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rattata; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Raticate; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spearow; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fearow; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ekans; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Arbok; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu_Follow; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Raichu; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sandshrew; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sandslash; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidoran_F; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidorina; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidoqueen; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidoran_M; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidorino; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nidoking; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Clefairy; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Clefable; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Vulpix; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ninetales; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Jigglypuff; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wigglytuff; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zubat; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Golbat; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Oddish; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gloom; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Vileplume; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Paras; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Parasect; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Venonat; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Venomoth; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Diglett; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dugtrio; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Meowth; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Persian; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Psyduck; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Golduck; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mankey; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Primeape; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Growlithe; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Arcanine; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poliwag; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poliwhirl; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poliwrath; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Abra; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kadabra; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Alakazam; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Machop; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Machoke; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Machamp; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bellsprout; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Weepinbell; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Victreebel; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tentacool; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tentacruel; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Geodude; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Graveler; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Golem; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ponyta; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rapidash; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Slowpoke; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Slowbro; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Magnemite; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Magneton; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Farfetchd; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Doduo; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dodrio; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Seel; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dewgong; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Grimer; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Muk; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Shellder; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cloyster; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gastly; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Haunter; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gengar; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Onix; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drowzee; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hypno; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Krabby; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kingler; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Voltorb; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Electrode; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Exeggcute; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Exeggutor; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cubone; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Marowak; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hitmonlee; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hitmonchan; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lickitung; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Koffing; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Weezing; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rhyhorn; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rhydon; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Chansey; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tangela; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kangaskhan; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Horsea; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Seadra; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Goldeen; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Seaking; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Staryu; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Starmie; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mr_Mime; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scyther; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Jynx; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Electabuzz; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Magmar; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pinsir; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tauros; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Magikarp; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gyarados; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lapras; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Ditto; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Eevee; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Vaporeon; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Jolteon; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flareon; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Porygon; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Omanyte; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Omastar; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kabuto; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kabutops; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Aerodactyl; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Snorlax; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Articuno; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zapdos; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Moltres; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dratini; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dragonair; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dragonite; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mewtwo; +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew_Follower; const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM_OBJ_EVENT_GFX] = { @@ -486,6 +637,157 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM [OBJ_EVENT_GFX_LINK_RS_MAY] = &gObjectEventGraphicsInfo_RubySapphireMay, [OBJ_EVENT_GFX_LUGIA] = &gObjectEventGraphicsInfo_Lugia, [OBJ_EVENT_GFX_HOOH] = &gObjectEventGraphicsInfo_HoOh, + [OBJ_EVENT_GFX_BULBASAUR] = &gObjectEventGraphicsInfo_Bulbasaur, + [OBJ_EVENT_GFX_IVYSAUR] = &gObjectEventGraphicsInfo_Ivysaur, + [OBJ_EVENT_GFX_VENUSAUR] = &gObjectEventGraphicsInfo_Venusaur, + [OBJ_EVENT_GFX_CHARMANDER] = &gObjectEventGraphicsInfo_Charmander, + [OBJ_EVENT_GFX_CHARMELEON] = &gObjectEventGraphicsInfo_Charmeleon, + [OBJ_EVENT_GFX_CHARIZARD] = &gObjectEventGraphicsInfo_Charizard, + [OBJ_EVENT_GFX_SQUIRTLE] = &gObjectEventGraphicsInfo_Squirtle, + [OBJ_EVENT_GFX_WARTORTLE] = &gObjectEventGraphicsInfo_Wartortle, + [OBJ_EVENT_GFX_BLASTOISE] = &gObjectEventGraphicsInfo_Blastoise, + [OBJ_EVENT_GFX_CATERPIE] = &gObjectEventGraphicsInfo_Caterpie, + [OBJ_EVENT_GFX_METAPOD] = &gObjectEventGraphicsInfo_Metapod, + [OBJ_EVENT_GFX_BUTTERFREE] = &gObjectEventGraphicsInfo_Butterfree, + [OBJ_EVENT_GFX_WEEDLE] = &gObjectEventGraphicsInfo_Weedle, + [OBJ_EVENT_GFX_KAKUNA] = &gObjectEventGraphicsInfo_Kakuna, + [OBJ_EVENT_GFX_BEEDRILL] = &gObjectEventGraphicsInfo_Beedrill, + [OBJ_EVENT_GFX_PIDGEY] = &gObjectEventGraphicsInfo_Pidgey, + [OBJ_EVENT_GFX_PIDGEOTTO] = &gObjectEventGraphicsInfo_Pidgeotto, + [OBJ_EVENT_GFX_PIDGEOT] = &gObjectEventGraphicsInfo_Pidgeot, + [OBJ_EVENT_GFX_RATTATA] = &gObjectEventGraphicsInfo_Rattata, + [OBJ_EVENT_GFX_RATICATE] = &gObjectEventGraphicsInfo_Raticate, + [OBJ_EVENT_GFX_SPEAROW] = &gObjectEventGraphicsInfo_Spearow, + [OBJ_EVENT_GFX_FEAROW] = &gObjectEventGraphicsInfo_Fearow, + [OBJ_EVENT_GFX_EKANS] = &gObjectEventGraphicsInfo_Ekans, + [OBJ_EVENT_GFX_ARBOK] = &gObjectEventGraphicsInfo_Arbok, + [OBJ_EVENT_GFX_PIKACHU_FOLLOW] = &gObjectEventGraphicsInfo_Pikachu_Follow, + [OBJ_EVENT_GFX_RAICHU] = &gObjectEventGraphicsInfo_Raichu, + [OBJ_EVENT_GFX_SANDSHREW] = &gObjectEventGraphicsInfo_Sandshrew, + [OBJ_EVENT_GFX_SANDSLASH] = &gObjectEventGraphicsInfo_Sandslash, + [OBJ_EVENT_GFX_NIDORAN_F] = &gObjectEventGraphicsInfo_Nidoran_F, + [OBJ_EVENT_GFX_NIDORINA] = &gObjectEventGraphicsInfo_Nidorina, + [OBJ_EVENT_GFX_NIDOQUEEN] = &gObjectEventGraphicsInfo_Nidoqueen, + [OBJ_EVENT_GFX_NIDORAN_M] = &gObjectEventGraphicsInfo_Nidoran_M, + [OBJ_EVENT_GFX_NIDORINO] = &gObjectEventGraphicsInfo_Nidorino, + [OBJ_EVENT_GFX_NIDOKING] = &gObjectEventGraphicsInfo_Nidoking, + [OBJ_EVENT_GFX_CLEFAIRY] = &gObjectEventGraphicsInfo_Clefairy, + [OBJ_EVENT_GFX_CLEFABLE] = &gObjectEventGraphicsInfo_Clefable, + [OBJ_EVENT_GFX_VULPIX] = &gObjectEventGraphicsInfo_Vulpix, + [OBJ_EVENT_GFX_NINETALES] = &gObjectEventGraphicsInfo_Ninetales, + [OBJ_EVENT_GFX_JIGGLYPUFF] = &gObjectEventGraphicsInfo_Jigglypuff, + [OBJ_EVENT_GFX_WIGGLYTUFF] = &gObjectEventGraphicsInfo_Wigglytuff, + [OBJ_EVENT_GFX_ZUBAT] = &gObjectEventGraphicsInfo_Zubat, + [OBJ_EVENT_GFX_GOLBAT] = &gObjectEventGraphicsInfo_Golbat, + [OBJ_EVENT_GFX_ODDISH] = &gObjectEventGraphicsInfo_Oddish, + [OBJ_EVENT_GFX_GLOOM] = &gObjectEventGraphicsInfo_Gloom, + [OBJ_EVENT_GFX_VILEPLUME] = &gObjectEventGraphicsInfo_Vileplume, + [OBJ_EVENT_GFX_PARAS] = &gObjectEventGraphicsInfo_Paras, + [OBJ_EVENT_GFX_PARASECT] = &gObjectEventGraphicsInfo_Parasect, + [OBJ_EVENT_GFX_VENONAT] = &gObjectEventGraphicsInfo_Venonat, + [OBJ_EVENT_GFX_VENOMOTH] = &gObjectEventGraphicsInfo_Venomoth, + [OBJ_EVENT_GFX_DIGLETT] = &gObjectEventGraphicsInfo_Diglett, + [OBJ_EVENT_GFX_DUGTRIO] = &gObjectEventGraphicsInfo_Dugtrio, + [OBJ_EVENT_GFX_MEOWTH] = &gObjectEventGraphicsInfo_Meowth, + [OBJ_EVENT_GFX_PERSIAN] = &gObjectEventGraphicsInfo_Persian, + [OBJ_EVENT_GFX_PSYDUCK] = &gObjectEventGraphicsInfo_Psyduck, + [OBJ_EVENT_GFX_GOLDUCK] = &gObjectEventGraphicsInfo_Golduck, + [OBJ_EVENT_GFX_MANKEY] = &gObjectEventGraphicsInfo_Mankey, + [OBJ_EVENT_GFX_PRIMEAPE] = &gObjectEventGraphicsInfo_Primeape, + [OBJ_EVENT_GFX_GROWLITHE] = &gObjectEventGraphicsInfo_Growlithe, + [OBJ_EVENT_GFX_ARCANINE] = &gObjectEventGraphicsInfo_Arcanine, + [OBJ_EVENT_GFX_POLIWAG] = &gObjectEventGraphicsInfo_Poliwag, + [OBJ_EVENT_GFX_POLIWHIRL] = &gObjectEventGraphicsInfo_Poliwhirl, + [OBJ_EVENT_GFX_POLIWRATH] = &gObjectEventGraphicsInfo_Poliwrath, + [OBJ_EVENT_GFX_ABRA] = &gObjectEventGraphicsInfo_Abra, + [OBJ_EVENT_GFX_KADABRA] = &gObjectEventGraphicsInfo_Kadabra, + [OBJ_EVENT_GFX_ALAKAZAM] = &gObjectEventGraphicsInfo_Alakazam, + [OBJ_EVENT_GFX_MACHOP] = &gObjectEventGraphicsInfo_Machop, + [OBJ_EVENT_GFX_MACHOKE] = &gObjectEventGraphicsInfo_Machoke, + [OBJ_EVENT_GFX_MACHAMP] = &gObjectEventGraphicsInfo_Machamp, + [OBJ_EVENT_GFX_BELLSPROUT] = &gObjectEventGraphicsInfo_Bellsprout, + [OBJ_EVENT_GFX_WEEPINBELL] = &gObjectEventGraphicsInfo_Weepinbell, + [OBJ_EVENT_GFX_VICTREEBEL] = &gObjectEventGraphicsInfo_Victreebel, + [OBJ_EVENT_GFX_TENTACOOL] = &gObjectEventGraphicsInfo_Tentacool, + [OBJ_EVENT_GFX_TENTACRUEL] = &gObjectEventGraphicsInfo_Tentacruel, + [OBJ_EVENT_GFX_GEODUDE] = &gObjectEventGraphicsInfo_Geodude, + [OBJ_EVENT_GFX_GRAVELER] = &gObjectEventGraphicsInfo_Graveler, + [OBJ_EVENT_GFX_GOLEM] = &gObjectEventGraphicsInfo_Golem, + [OBJ_EVENT_GFX_PONYTA] = &gObjectEventGraphicsInfo_Ponyta, + [OBJ_EVENT_GFX_RAPIDASH] = &gObjectEventGraphicsInfo_Rapidash, + [OBJ_EVENT_GFX_SLOWPOKE] = &gObjectEventGraphicsInfo_Slowpoke, + [OBJ_EVENT_GFX_SLOWBRO] = &gObjectEventGraphicsInfo_Slowbro, + [OBJ_EVENT_GFX_MAGNEMITE] = &gObjectEventGraphicsInfo_Magnemite, + [OBJ_EVENT_GFX_MAGNETON] = &gObjectEventGraphicsInfo_Magneton, + [OBJ_EVENT_GFX_FARFETCHD] = &gObjectEventGraphicsInfo_Farfetchd, + [OBJ_EVENT_GFX_DODUO] = &gObjectEventGraphicsInfo_Doduo, + [OBJ_EVENT_GFX_DODRIO] = &gObjectEventGraphicsInfo_Dodrio, + [OBJ_EVENT_GFX_SEEL] = &gObjectEventGraphicsInfo_Seel, + [OBJ_EVENT_GFX_DEWGONG] = &gObjectEventGraphicsInfo_Dewgong, + [OBJ_EVENT_GFX_GRIMER] = &gObjectEventGraphicsInfo_Grimer, + [OBJ_EVENT_GFX_MUK] = &gObjectEventGraphicsInfo_Muk, + [OBJ_EVENT_GFX_SHELLDER] = &gObjectEventGraphicsInfo_Shellder, + [OBJ_EVENT_GFX_CLOYSTER] = &gObjectEventGraphicsInfo_Cloyster, + [OBJ_EVENT_GFX_GASTLY] = &gObjectEventGraphicsInfo_Gastly, + [OBJ_EVENT_GFX_HAUNTER] = &gObjectEventGraphicsInfo_Haunter, + [OBJ_EVENT_GFX_GENGAR] = &gObjectEventGraphicsInfo_Gengar, + [OBJ_EVENT_GFX_ONIX] = &gObjectEventGraphicsInfo_Onix, + [OBJ_EVENT_GFX_DROWZEE] = &gObjectEventGraphicsInfo_Drowzee, + [OBJ_EVENT_GFX_HYPNO] = &gObjectEventGraphicsInfo_Hypno, + [OBJ_EVENT_GFX_KRABBY] = &gObjectEventGraphicsInfo_Krabby, + [OBJ_EVENT_GFX_KINGLER] = &gObjectEventGraphicsInfo_Kingler, + [OBJ_EVENT_GFX_VOLTORB] = &gObjectEventGraphicsInfo_Voltorb, + [OBJ_EVENT_GFX_ELECTRODE] = &gObjectEventGraphicsInfo_Electrode, + [OBJ_EVENT_GFX_EXEGGCUTE] = &gObjectEventGraphicsInfo_Exeggcute, + [OBJ_EVENT_GFX_EXEGGUTOR] = &gObjectEventGraphicsInfo_Exeggutor, + [OBJ_EVENT_GFX_CUBONE] = &gObjectEventGraphicsInfo_Cubone, + [OBJ_EVENT_GFX_MAROWAK] = &gObjectEventGraphicsInfo_Marowak, + [OBJ_EVENT_GFX_HITMONLEE] = &gObjectEventGraphicsInfo_Hitmonlee, + [OBJ_EVENT_GFX_HITMONCHAN] = &gObjectEventGraphicsInfo_Hitmonchan, + [OBJ_EVENT_GFX_LICKITUNG] = &gObjectEventGraphicsInfo_Lickitung, + [OBJ_EVENT_GFX_KOFFING] = &gObjectEventGraphicsInfo_Koffing, + [OBJ_EVENT_GFX_WEEZING] = &gObjectEventGraphicsInfo_Weezing, + [OBJ_EVENT_GFX_RHYHORN] = &gObjectEventGraphicsInfo_Rhyhorn, + [OBJ_EVENT_GFX_RHYDON] = &gObjectEventGraphicsInfo_Rhydon, + [OBJ_EVENT_GFX_CHANSEY] = &gObjectEventGraphicsInfo_Chansey, + [OBJ_EVENT_GFX_TANGELA] = &gObjectEventGraphicsInfo_Tangela, + [OBJ_EVENT_GFX_KANGASKHAN] = &gObjectEventGraphicsInfo_Kangaskhan, + [OBJ_EVENT_GFX_HORSEA] = &gObjectEventGraphicsInfo_Horsea, + [OBJ_EVENT_GFX_SEADRA] = &gObjectEventGraphicsInfo_Seadra, + [OBJ_EVENT_GFX_GOLDEEN] = &gObjectEventGraphicsInfo_Goldeen, + [OBJ_EVENT_GFX_SEAKING] = &gObjectEventGraphicsInfo_Seaking, + [OBJ_EVENT_GFX_STARYU] = &gObjectEventGraphicsInfo_Staryu, + [OBJ_EVENT_GFX_STARMIE] = &gObjectEventGraphicsInfo_Starmie, + [OBJ_EVENT_GFX_MR_MIME] = &gObjectEventGraphicsInfo_Mr_Mime, + [OBJ_EVENT_GFX_SCYTHER] = &gObjectEventGraphicsInfo_Scyther, + [OBJ_EVENT_GFX_JYNX] = &gObjectEventGraphicsInfo_Jynx, + [OBJ_EVENT_GFX_ELECTABUZZ] = &gObjectEventGraphicsInfo_Electabuzz, + [OBJ_EVENT_GFX_MAGMAR] = &gObjectEventGraphicsInfo_Magmar, + [OBJ_EVENT_GFX_PINSIR] = &gObjectEventGraphicsInfo_Pinsir, + [OBJ_EVENT_GFX_TAUROS] = &gObjectEventGraphicsInfo_Tauros, + [OBJ_EVENT_GFX_MAGIKARP] = &gObjectEventGraphicsInfo_Magikarp, + [OBJ_EVENT_GFX_GYARADOS] = &gObjectEventGraphicsInfo_Gyarados, + [OBJ_EVENT_GFX_LAPRAS] = &gObjectEventGraphicsInfo_Lapras, + [OBJ_EVENT_GFX_DITTO] = &gObjectEventGraphicsInfo_Ditto, + [OBJ_EVENT_GFX_EEVEE] = &gObjectEventGraphicsInfo_Eevee, + [OBJ_EVENT_GFX_VAPOREON] = &gObjectEventGraphicsInfo_Vaporeon, + [OBJ_EVENT_GFX_JOLTEON] = &gObjectEventGraphicsInfo_Jolteon, + [OBJ_EVENT_GFX_FLAREON] = &gObjectEventGraphicsInfo_Flareon, + [OBJ_EVENT_GFX_PORYGON] = &gObjectEventGraphicsInfo_Porygon, + [OBJ_EVENT_GFX_OMANYTE] = &gObjectEventGraphicsInfo_Omanyte, + [OBJ_EVENT_GFX_OMASTAR] = &gObjectEventGraphicsInfo_Omastar, + [OBJ_EVENT_GFX_KABUTO] = &gObjectEventGraphicsInfo_Kabuto, + [OBJ_EVENT_GFX_KABUTOPS] = &gObjectEventGraphicsInfo_Kabutops, + [OBJ_EVENT_GFX_AERODACTYL] = &gObjectEventGraphicsInfo_Aerodactyl, + [OBJ_EVENT_GFX_SNORLAX] = &gObjectEventGraphicsInfo_Snorlax, + [OBJ_EVENT_GFX_ARTICUNO] = &gObjectEventGraphicsInfo_Articuno, + [OBJ_EVENT_GFX_ZAPDOS] = &gObjectEventGraphicsInfo_Zapdos, + [OBJ_EVENT_GFX_MOLTRES] = &gObjectEventGraphicsInfo_Moltres, + [OBJ_EVENT_GFX_DRATINI] = &gObjectEventGraphicsInfo_Dratini, + [OBJ_EVENT_GFX_DRAGONAIR] = &gObjectEventGraphicsInfo_Dragonair, + [OBJ_EVENT_GFX_DRAGONITE] = &gObjectEventGraphicsInfo_Dragonite, + [OBJ_EVENT_GFX_MEWTWO] = &gObjectEventGraphicsInfo_Mewtwo, + [OBJ_EVENT_GFX_MEW_FOLLOWER] = &gObjectEventGraphicsInfo_Mew_Follower, }; const struct ObjectEventGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[] = { diff --git a/src/data/object_events/object_event_pic_tables.h b/src/data/object_events/object_event_pic_tables.h index 1b8c9c727..1e9e539a3 100755 --- a/src/data/object_events/object_event_pic_tables.h +++ b/src/data/object_events/object_event_pic_tables.h @@ -2172,3 +2172,1372 @@ static const struct SpriteFrameImage sPicTable_RubySapphireMay[] = { overworld_frame(gObjectEventPic_RubySapphireMayNormal, 2, 4, 7), overworld_frame(gObjectEventPic_RubySapphireMayNormal, 2, 4, 8), }; + +const struct SpriteFrameImage gObjectEventPicTable_Bulbasaur[] = { + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 0), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 1), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 2), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 3), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 4), + overworld_frame(gObjectEventPic_Bulbasaur, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ivysaur[] = { + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 0), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 1), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 2), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 3), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 4), + overworld_frame(gObjectEventPic_Ivysaur, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Venusaur[] = { + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 0), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 1), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 2), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 3), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 4), + overworld_frame(gObjectEventPic_Venusaur, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Charmander[] = { + overworld_frame(gObjectEventPic_Charmander, 4, 4, 0), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 1), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 2), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 3), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 4), + overworld_frame(gObjectEventPic_Charmander, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Charmeleon[] = { + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 0), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 1), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 2), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 3), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 4), + overworld_frame(gObjectEventPic_Charmeleon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Charizard[] = { + overworld_frame(gObjectEventPic_Charizard, 4, 4, 0), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 1), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 2), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 3), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 4), + overworld_frame(gObjectEventPic_Charizard, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Squirtle[] = { + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 0), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 1), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 2), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 3), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 4), + overworld_frame(gObjectEventPic_Squirtle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wartortle[] = { + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 0), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 1), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 2), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 3), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 4), + overworld_frame(gObjectEventPic_Wartortle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Blastoise[] = { + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 0), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 1), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 2), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 3), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 4), + overworld_frame(gObjectEventPic_Blastoise, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Caterpie[] = { + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 0), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 1), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 2), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 3), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 4), + overworld_frame(gObjectEventPic_Caterpie, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Metapod[] = { + overworld_frame(gObjectEventPic_Metapod, 4, 4, 0), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 1), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 2), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 3), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 4), + overworld_frame(gObjectEventPic_Metapod, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Butterfree[] = { + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 0), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 1), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 2), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 3), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 4), + overworld_frame(gObjectEventPic_Butterfree, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Weedle[] = { + overworld_frame(gObjectEventPic_Weedle, 4, 4, 0), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 1), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 2), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 3), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 4), + overworld_frame(gObjectEventPic_Weedle, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kakuna[] = { + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 0), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 1), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 2), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 3), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 4), + overworld_frame(gObjectEventPic_Kakuna, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Beedrill[] = { + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 0), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 1), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 2), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 3), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 4), + overworld_frame(gObjectEventPic_Beedrill, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pidgey[] = { + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 0), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 1), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 2), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 3), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 4), + overworld_frame(gObjectEventPic_Pidgey, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pidgeotto[] = { + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 0), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 1), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 2), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 3), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 4), + overworld_frame(gObjectEventPic_Pidgeotto, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pidgeot[] = { + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 0), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 1), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 2), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 3), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 4), + overworld_frame(gObjectEventPic_Pidgeot, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rattata[] = { + overworld_frame(gObjectEventPic_Rattata, 4, 4, 0), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 1), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 2), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 3), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 4), + overworld_frame(gObjectEventPic_Rattata, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Raticate[] = { + overworld_frame(gObjectEventPic_Raticate, 4, 4, 0), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 1), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 2), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 3), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 4), + overworld_frame(gObjectEventPic_Raticate, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Spearow[] = { + overworld_frame(gObjectEventPic_Spearow, 4, 4, 0), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 1), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 2), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 3), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 4), + overworld_frame(gObjectEventPic_Spearow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Fearow[] = { + overworld_frame(gObjectEventPic_Fearow, 4, 4, 0), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 1), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 2), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 3), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 4), + overworld_frame(gObjectEventPic_Fearow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ekans[] = { + overworld_frame(gObjectEventPic_Ekans, 4, 4, 0), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 1), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 2), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 3), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 4), + overworld_frame(gObjectEventPic_Ekans, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Arbok[] = { + overworld_frame(gObjectEventPic_Arbok, 4, 4, 0), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 1), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 2), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 3), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 4), + overworld_frame(gObjectEventPic_Arbok, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pikachu_Follow[] = { + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 0), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 1), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 2), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 3), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 4), + overworld_frame(gObjectEventPic_Pikachu_Follow, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Raichu[] = { + overworld_frame(gObjectEventPic_Raichu, 4, 4, 0), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 1), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 2), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 3), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 4), + overworld_frame(gObjectEventPic_Raichu, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sandshrew[] = { + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 0), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 1), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 2), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 3), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 4), + overworld_frame(gObjectEventPic_Sandshrew, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Sandslash[] = { + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 0), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 1), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 2), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 3), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 4), + overworld_frame(gObjectEventPic_Sandslash, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidoran_F[] = { + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidoran_F, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidorina[] = { + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidorina, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidoqueen[] = { + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidoqueen, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidoran_M[] = { + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidoran_M, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidorino[] = { + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidorino, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Nidoking[] = { + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 0), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 1), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 2), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 3), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 4), + overworld_frame(gObjectEventPic_Nidoking, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Clefairy[] = { + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 0), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 1), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 2), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 3), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 4), + overworld_frame(gObjectEventPic_Clefairy, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Clefable[] = { + overworld_frame(gObjectEventPic_Clefable, 4, 4, 0), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 1), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 2), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 3), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 4), + overworld_frame(gObjectEventPic_Clefable, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Vulpix[] = { + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 0), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 1), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 2), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 3), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 4), + overworld_frame(gObjectEventPic_Vulpix, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ninetales[] = { + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 0), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 1), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 2), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 3), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 4), + overworld_frame(gObjectEventPic_Ninetales, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Jigglypuff[] = { + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 0), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 1), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 2), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 3), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 4), + overworld_frame(gObjectEventPic_Jigglypuff, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Wigglytuff[] = { + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 0), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 1), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 2), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 3), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 4), + overworld_frame(gObjectEventPic_Wigglytuff, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Zubat[] = { + overworld_frame(gObjectEventPic_Zubat, 4, 4, 0), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 1), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 2), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 3), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 4), + overworld_frame(gObjectEventPic_Zubat, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Golbat[] = { + overworld_frame(gObjectEventPic_Golbat, 4, 4, 0), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 1), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 2), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 3), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 4), + overworld_frame(gObjectEventPic_Golbat, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Oddish[] = { + overworld_frame(gObjectEventPic_Oddish, 4, 4, 0), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 1), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 2), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 3), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 4), + overworld_frame(gObjectEventPic_Oddish, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gloom[] = { + overworld_frame(gObjectEventPic_Gloom, 4, 4, 0), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 1), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 2), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 3), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 4), + overworld_frame(gObjectEventPic_Gloom, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Vileplume[] = { + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 0), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 1), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 2), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 3), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 4), + overworld_frame(gObjectEventPic_Vileplume, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Paras[] = { + overworld_frame(gObjectEventPic_Paras, 4, 4, 0), + overworld_frame(gObjectEventPic_Paras, 4, 4, 1), + overworld_frame(gObjectEventPic_Paras, 4, 4, 2), + overworld_frame(gObjectEventPic_Paras, 4, 4, 3), + overworld_frame(gObjectEventPic_Paras, 4, 4, 4), + overworld_frame(gObjectEventPic_Paras, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Parasect[] = { + overworld_frame(gObjectEventPic_Parasect, 4, 4, 0), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 1), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 2), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 3), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 4), + overworld_frame(gObjectEventPic_Parasect, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Venonat[] = { + overworld_frame(gObjectEventPic_Venonat, 4, 4, 0), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 1), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 2), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 3), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 4), + overworld_frame(gObjectEventPic_Venonat, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Venomoth[] = { + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 0), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 1), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 2), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 3), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 4), + overworld_frame(gObjectEventPic_Venomoth, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Diglett[] = { + overworld_frame(gObjectEventPic_Diglett, 4, 4, 0), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 1), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 2), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 3), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 4), + overworld_frame(gObjectEventPic_Diglett, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dugtrio[] = { + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 0), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 1), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 2), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 3), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 4), + overworld_frame(gObjectEventPic_Dugtrio, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Meowth[] = { + overworld_frame(gObjectEventPic_Meowth, 4, 4, 0), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 1), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 2), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 3), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 4), + overworld_frame(gObjectEventPic_Meowth, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Persian[] = { + overworld_frame(gObjectEventPic_Persian, 4, 4, 0), + overworld_frame(gObjectEventPic_Persian, 4, 4, 1), + overworld_frame(gObjectEventPic_Persian, 4, 4, 2), + overworld_frame(gObjectEventPic_Persian, 4, 4, 3), + overworld_frame(gObjectEventPic_Persian, 4, 4, 4), + overworld_frame(gObjectEventPic_Persian, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Psyduck[] = { + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 0), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 1), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 2), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 3), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 4), + overworld_frame(gObjectEventPic_Psyduck, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Golduck[] = { + overworld_frame(gObjectEventPic_Golduck, 4, 4, 0), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 1), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 2), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 3), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 4), + overworld_frame(gObjectEventPic_Golduck, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mankey[] = { + overworld_frame(gObjectEventPic_Mankey, 4, 4, 0), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 1), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 2), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 3), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 4), + overworld_frame(gObjectEventPic_Mankey, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Primeape[] = { + overworld_frame(gObjectEventPic_Primeape, 4, 4, 0), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 1), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 2), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 3), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 4), + overworld_frame(gObjectEventPic_Primeape, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Growlithe[] = { + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 0), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 1), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 2), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 3), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 4), + overworld_frame(gObjectEventPic_Growlithe, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Arcanine[] = { + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 0), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 1), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 2), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 3), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 4), + overworld_frame(gObjectEventPic_Arcanine, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Poliwag[] = { + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 0), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 1), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 2), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 3), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 4), + overworld_frame(gObjectEventPic_Poliwag, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Poliwhirl[] = { + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 0), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 1), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 2), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 3), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 4), + overworld_frame(gObjectEventPic_Poliwhirl, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Poliwrath[] = { + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 0), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 1), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 2), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 3), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 4), + overworld_frame(gObjectEventPic_Poliwrath, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Abra[] = { + overworld_frame(gObjectEventPic_Abra, 4, 4, 0), + overworld_frame(gObjectEventPic_Abra, 4, 4, 1), + overworld_frame(gObjectEventPic_Abra, 4, 4, 2), + overworld_frame(gObjectEventPic_Abra, 4, 4, 3), + overworld_frame(gObjectEventPic_Abra, 4, 4, 4), + overworld_frame(gObjectEventPic_Abra, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kadabra[] = { + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 0), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 1), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 2), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 3), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 4), + overworld_frame(gObjectEventPic_Kadabra, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Alakazam[] = { + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 0), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 1), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 2), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 3), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 4), + overworld_frame(gObjectEventPic_Alakazam, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Machop[] = { + overworld_frame(gObjectEventPic_Machop, 4, 4, 0), + overworld_frame(gObjectEventPic_Machop, 4, 4, 1), + overworld_frame(gObjectEventPic_Machop, 4, 4, 2), + overworld_frame(gObjectEventPic_Machop, 4, 4, 3), + overworld_frame(gObjectEventPic_Machop, 4, 4, 4), + overworld_frame(gObjectEventPic_Machop, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Machoke[] = { + overworld_frame(gObjectEventPic_Machoke, 4, 4, 0), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 1), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 2), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 3), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 4), + overworld_frame(gObjectEventPic_Machoke, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Machamp[] = { + overworld_frame(gObjectEventPic_Machamp, 4, 4, 0), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 1), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 2), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 3), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 4), + overworld_frame(gObjectEventPic_Machamp, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Bellsprout[] = { + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 0), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 1), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 2), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 3), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 4), + overworld_frame(gObjectEventPic_Bellsprout, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Weepinbell[] = { + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 0), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 1), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 2), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 3), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 4), + overworld_frame(gObjectEventPic_Weepinbell, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Victreebel[] = { + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 0), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 1), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 2), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 3), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 4), + overworld_frame(gObjectEventPic_Victreebel, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tentacool[] = { + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 0), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 1), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 2), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 3), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 4), + overworld_frame(gObjectEventPic_Tentacool, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tentacruel[] = { + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 0), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 1), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 2), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 3), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 4), + overworld_frame(gObjectEventPic_Tentacruel, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Geodude[] = { + overworld_frame(gObjectEventPic_Geodude, 4, 4, 0), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 1), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 2), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 3), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 4), + overworld_frame(gObjectEventPic_Geodude, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Graveler[] = { + overworld_frame(gObjectEventPic_Graveler, 4, 4, 0), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 1), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 2), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 3), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 4), + overworld_frame(gObjectEventPic_Graveler, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Golem[] = { + overworld_frame(gObjectEventPic_Golem, 4, 4, 0), + overworld_frame(gObjectEventPic_Golem, 4, 4, 1), + overworld_frame(gObjectEventPic_Golem, 4, 4, 2), + overworld_frame(gObjectEventPic_Golem, 4, 4, 3), + overworld_frame(gObjectEventPic_Golem, 4, 4, 4), + overworld_frame(gObjectEventPic_Golem, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ponyta[] = { + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 0), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 1), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 2), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 3), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 4), + overworld_frame(gObjectEventPic_Ponyta, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rapidash[] = { + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 0), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 1), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 2), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 3), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 4), + overworld_frame(gObjectEventPic_Rapidash, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Slowpoke[] = { + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 0), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 1), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 2), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 3), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 4), + overworld_frame(gObjectEventPic_Slowpoke, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Slowbro[] = { + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 0), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 1), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 2), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 3), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 4), + overworld_frame(gObjectEventPic_Slowbro, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magnemite[] = { + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 0), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 1), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 2), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 3), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 4), + overworld_frame(gObjectEventPic_Magnemite, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magneton[] = { + overworld_frame(gObjectEventPic_Magneton, 4, 4, 0), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 1), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 2), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 3), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 4), + overworld_frame(gObjectEventPic_Magneton, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Farfetchd[] = { + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 0), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 1), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 2), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 3), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 4), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 5), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 6), + overworld_frame(gObjectEventPic_Farfetchd, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Doduo[] = { + overworld_frame(gObjectEventPic_Doduo, 4, 4, 0), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 1), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 2), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 3), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 4), + overworld_frame(gObjectEventPic_Doduo, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dodrio[] = { + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 0), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 1), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 2), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 3), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 4), + overworld_frame(gObjectEventPic_Dodrio, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Seel[] = { + overworld_frame(gObjectEventPic_Seel, 4, 4, 0), + overworld_frame(gObjectEventPic_Seel, 4, 4, 1), + overworld_frame(gObjectEventPic_Seel, 4, 4, 2), + overworld_frame(gObjectEventPic_Seel, 4, 4, 3), + overworld_frame(gObjectEventPic_Seel, 4, 4, 4), + overworld_frame(gObjectEventPic_Seel, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dewgong[] = { + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 0), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 1), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 2), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 3), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 4), + overworld_frame(gObjectEventPic_Dewgong, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Grimer[] = { + overworld_frame(gObjectEventPic_Grimer, 4, 4, 0), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 1), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 2), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 3), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 4), + overworld_frame(gObjectEventPic_Grimer, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Muk[] = { + overworld_frame(gObjectEventPic_Muk, 4, 4, 0), + overworld_frame(gObjectEventPic_Muk, 4, 4, 1), + overworld_frame(gObjectEventPic_Muk, 4, 4, 2), + overworld_frame(gObjectEventPic_Muk, 4, 4, 3), + overworld_frame(gObjectEventPic_Muk, 4, 4, 4), + overworld_frame(gObjectEventPic_Muk, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Shellder[] = { + overworld_frame(gObjectEventPic_Shellder, 4, 4, 0), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 1), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 2), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 3), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 4), + overworld_frame(gObjectEventPic_Shellder, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cloyster[] = { + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 0), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 1), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 2), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 3), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 4), + overworld_frame(gObjectEventPic_Cloyster, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gastly[] = { + overworld_frame(gObjectEventPic_Gastly, 4, 4, 0), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 1), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 2), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 3), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 4), + overworld_frame(gObjectEventPic_Gastly, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Haunter[] = { + overworld_frame(gObjectEventPic_Haunter, 4, 4, 0), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 1), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 2), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 3), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 4), + overworld_frame(gObjectEventPic_Haunter, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gengar[] = { + overworld_frame(gObjectEventPic_Gengar, 4, 4, 0), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 1), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 2), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 3), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 4), + overworld_frame(gObjectEventPic_Gengar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Onix[] = { + overworld_frame(gObjectEventPic_Onix, 4, 4, 0), + overworld_frame(gObjectEventPic_Onix, 4, 4, 1), + overworld_frame(gObjectEventPic_Onix, 4, 4, 2), + overworld_frame(gObjectEventPic_Onix, 4, 4, 3), + overworld_frame(gObjectEventPic_Onix, 4, 4, 4), + overworld_frame(gObjectEventPic_Onix, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Drowzee[] = { + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 0), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 1), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 2), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 3), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 4), + overworld_frame(gObjectEventPic_Drowzee, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hypno[] = { + overworld_frame(gObjectEventPic_Hypno, 4, 4, 0), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 1), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 2), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 3), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 4), + overworld_frame(gObjectEventPic_Hypno, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Krabby[] = { + overworld_frame(gObjectEventPic_Krabby, 4, 4, 0), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 1), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 2), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 3), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 4), + overworld_frame(gObjectEventPic_Krabby, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kingler[] = { + overworld_frame(gObjectEventPic_Kingler, 4, 4, 0), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 1), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 2), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 3), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 4), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 5), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 6), + overworld_frame(gObjectEventPic_Kingler, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Voltorb[] = { + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 0), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 1), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 2), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 3), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 4), + overworld_frame(gObjectEventPic_Voltorb, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Electrode[] = { + overworld_frame(gObjectEventPic_Electrode, 4, 4, 0), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 1), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 2), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 3), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 4), + overworld_frame(gObjectEventPic_Electrode, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Exeggcute[] = { + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 0), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 1), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 2), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 3), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 4), + overworld_frame(gObjectEventPic_Exeggcute, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Exeggutor[] = { + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 0), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 1), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 2), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 3), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 4), + overworld_frame(gObjectEventPic_Exeggutor, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Cubone[] = { + overworld_frame(gObjectEventPic_Cubone, 4, 4, 0), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 1), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 2), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 3), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 4), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 5), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 6), + overworld_frame(gObjectEventPic_Cubone, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Marowak[] = { + overworld_frame(gObjectEventPic_Marowak, 4, 4, 0), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 1), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 2), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 3), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 4), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 5), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 6), + overworld_frame(gObjectEventPic_Marowak, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hitmonlee[] = { + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 0), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 1), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 2), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 3), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 4), + overworld_frame(gObjectEventPic_Hitmonlee, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Hitmonchan[] = { + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 0), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 1), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 2), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 3), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 4), + overworld_frame(gObjectEventPic_Hitmonchan, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lickitung[] = { + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 0), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 1), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 2), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 3), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 4), + overworld_frame(gObjectEventPic_Lickitung, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Koffing[] = { + overworld_frame(gObjectEventPic_Koffing, 4, 4, 0), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 1), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 2), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 3), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 4), + overworld_frame(gObjectEventPic_Koffing, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Weezing[] = { + overworld_frame(gObjectEventPic_Weezing, 4, 4, 0), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 1), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 2), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 3), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 4), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 5), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 6), + overworld_frame(gObjectEventPic_Weezing, 4, 4, 7), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rhyhorn[] = { + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 0), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 1), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 2), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 3), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 4), + overworld_frame(gObjectEventPic_Rhyhorn, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Rhydon[] = { + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 0), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 1), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 2), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 3), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 4), + overworld_frame(gObjectEventPic_Rhydon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Chansey[] = { + overworld_frame(gObjectEventPic_Chansey, 4, 4, 0), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 1), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 2), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 3), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 4), + overworld_frame(gObjectEventPic_Chansey, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tangela[] = { + overworld_frame(gObjectEventPic_Tangela, 4, 4, 0), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 1), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 2), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 3), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 4), + overworld_frame(gObjectEventPic_Tangela, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kangaskhan[] = { + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 0), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 1), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 2), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 3), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 4), + overworld_frame(gObjectEventPic_Kangaskhan, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Horsea[] = { + overworld_frame(gObjectEventPic_Horsea, 4, 4, 0), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 1), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 2), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 3), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 4), + overworld_frame(gObjectEventPic_Horsea, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Seadra[] = { + overworld_frame(gObjectEventPic_Seadra, 4, 4, 0), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 1), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 2), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 3), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 4), + overworld_frame(gObjectEventPic_Seadra, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Goldeen[] = { + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 0), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 1), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 2), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 3), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 4), + overworld_frame(gObjectEventPic_Goldeen, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Seaking[] = { + overworld_frame(gObjectEventPic_Seaking, 4, 4, 0), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 1), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 2), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 3), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 4), + overworld_frame(gObjectEventPic_Seaking, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Staryu[] = { + overworld_frame(gObjectEventPic_Staryu, 4, 4, 0), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 1), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 2), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 3), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 4), + overworld_frame(gObjectEventPic_Staryu, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Starmie[] = { + overworld_frame(gObjectEventPic_Starmie, 4, 4, 0), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 1), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 2), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 3), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 4), + overworld_frame(gObjectEventPic_Starmie, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mr_Mime[] = { + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 0), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 1), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 2), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 3), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 4), + overworld_frame(gObjectEventPic_Mr_Mime, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Scyther[] = { + overworld_frame(gObjectEventPic_Scyther, 4, 4, 0), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 1), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 2), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 3), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 4), + overworld_frame(gObjectEventPic_Scyther, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Jynx[] = { + overworld_frame(gObjectEventPic_Jynx, 4, 4, 0), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 1), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 2), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 3), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 4), + overworld_frame(gObjectEventPic_Jynx, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Electabuzz[] = { + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 0), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 1), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 2), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 3), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 4), + overworld_frame(gObjectEventPic_Electabuzz, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magmar[] = { + overworld_frame(gObjectEventPic_Magmar, 4, 4, 0), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 1), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 2), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 3), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 4), + overworld_frame(gObjectEventPic_Magmar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Pinsir[] = { + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 0), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 1), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 2), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 3), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 4), + overworld_frame(gObjectEventPic_Pinsir, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Tauros[] = { + overworld_frame(gObjectEventPic_Tauros, 4, 4, 0), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 1), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 2), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 3), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 4), + overworld_frame(gObjectEventPic_Tauros, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Magikarp[] = { + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 0), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 1), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 2), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 3), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 4), + overworld_frame(gObjectEventPic_Magikarp, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Gyarados[] = { + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 0), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 1), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 2), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 3), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 4), + overworld_frame(gObjectEventPic_Gyarados, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Lapras[] = { + overworld_frame(gObjectEventPic_Lapras, 4, 4, 0), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 1), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 2), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 3), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 4), + overworld_frame(gObjectEventPic_Lapras, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Ditto[] = { + overworld_frame(gObjectEventPic_Ditto, 4, 4, 0), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 1), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 2), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 3), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 4), + overworld_frame(gObjectEventPic_Ditto, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Eevee[] = { + overworld_frame(gObjectEventPic_Eevee, 4, 4, 0), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 1), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 2), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 3), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 4), + overworld_frame(gObjectEventPic_Eevee, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Vaporeon[] = { + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 0), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 1), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 2), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 3), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 4), + overworld_frame(gObjectEventPic_Vaporeon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Jolteon[] = { + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 0), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 1), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 2), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 3), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 4), + overworld_frame(gObjectEventPic_Jolteon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Flareon[] = { + overworld_frame(gObjectEventPic_Flareon, 4, 4, 0), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 1), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 2), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 3), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 4), + overworld_frame(gObjectEventPic_Flareon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Porygon[] = { + overworld_frame(gObjectEventPic_Porygon, 4, 4, 0), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 1), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 2), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 3), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 4), + overworld_frame(gObjectEventPic_Porygon, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Omanyte[] = { + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 0), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 1), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 2), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 3), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 4), + overworld_frame(gObjectEventPic_Omanyte, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Omastar[] = { + overworld_frame(gObjectEventPic_Omastar, 4, 4, 0), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 1), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 2), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 3), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 4), + overworld_frame(gObjectEventPic_Omastar, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kabuto[] = { + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 0), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 1), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 2), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 3), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 4), + overworld_frame(gObjectEventPic_Kabuto, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Kabutops[] = { + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 0), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 1), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 2), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 3), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 4), + overworld_frame(gObjectEventPic_Kabutops, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Aerodactyl[] = { + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 0), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 1), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 2), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 3), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 4), + overworld_frame(gObjectEventPic_Aerodactyl, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Snorlax[] = { + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 0), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 1), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 2), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 3), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 4), + overworld_frame(gObjectEventPic_Snorlax, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Articuno[] = { + overworld_frame(gObjectEventPic_Articuno, 4, 4, 0), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 1), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 2), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 3), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 4), + overworld_frame(gObjectEventPic_Articuno, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Zapdos[] = { + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 0), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 1), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 2), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 3), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 4), + overworld_frame(gObjectEventPic_Zapdos, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Moltres[] = { + overworld_frame(gObjectEventPic_Moltres, 4, 4, 0), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 1), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 2), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 3), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 4), + overworld_frame(gObjectEventPic_Moltres, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dratini[] = { + overworld_frame(gObjectEventPic_Dratini, 4, 4, 0), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 1), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 2), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 3), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 4), + overworld_frame(gObjectEventPic_Dratini, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dragonair[] = { + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 0), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 1), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 2), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 3), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 4), + overworld_frame(gObjectEventPic_Dragonair, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Dragonite[] = { + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 0), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 1), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 2), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 3), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 4), + overworld_frame(gObjectEventPic_Dragonite, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mewtwo[] = { + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 0), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 1), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 2), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 3), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 4), + overworld_frame(gObjectEventPic_Mewtwo, 4, 4, 5), +}; + +const struct SpriteFrameImage gObjectEventPicTable_Mew_Follower[] = { + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 0), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 1), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 2), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 3), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 4), + overworld_frame(gObjectEventPic_Mew_Follower, 4, 4, 5), +}; diff --git a/src/event_data.c b/src/event_data.c index e2af6c3d0..1defd2ccb 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -193,7 +193,7 @@ bool8 VarSet(u16 id, u16 value) return TRUE; } -u8 VarGetObjectEventGraphicsId(u8 id) +u16 VarGetObjectEventGraphicsId(u8 id) { return VarGet(VAR_OBJ_GFX_ID_0 + id); } diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 2c7ceedf4..236149bb6 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -22,6 +22,7 @@ #include "trainer_see.h" #include "trainer_hill.h" #include "util.h" +#include "follow_me.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" #include "constants/field_effects.h" @@ -29,6 +30,7 @@ #include "constants/mauville_old_man.h" #include "constants/trainer_types.h" #include "constants/union_room.h" +#include "constants/metatile_behaviors.h" // this file was known as evobjmv.c in Game Freak's original source @@ -133,7 +135,6 @@ static u16 GetObjectEventFlagIdByObjectEventId(u8); static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *); static void MakeSpriteTemplateFromObjectEventTemplate(struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetObjectEventMovingCameraOffset(s16 *, s16 *); -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); static void LoadObjectEventPalette(u16); static void RemoveObjectEventIfOutsideView(struct ObjectEvent *); static void SpawnObjectEventOnReturnToField(u8, s16, s16); @@ -270,6 +271,7 @@ static void (*const sMovementTypeCallbacks[])(struct Sprite *) = [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP] = MovementType_WalkSlowlyInPlace, [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT] = MovementType_WalkSlowlyInPlace, [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = MovementType_WalkSlowlyInPlace, + [MOVEMENT_TYPE_FOLLOWING_POKEMON] = MovementType_FollowingPokemon, }; static const bool8 sMovementTypeHasRange[NUM_MOVEMENT_TYPES] = { @@ -314,6 +316,7 @@ static const bool8 sMovementTypeHasRange[NUM_MOVEMENT_TYPES] = { [MOVEMENT_TYPE_COPY_PLAYER_OPPOSITE_IN_GRASS] = TRUE, [MOVEMENT_TYPE_COPY_PLAYER_COUNTERCLOCKWISE_IN_GRASS] = TRUE, [MOVEMENT_TYPE_COPY_PLAYER_CLOCKWISE_IN_GRASS] = TRUE, + [MOVEMENT_TYPE_FOLLOWING_POKEMON] = FALSE, }; const u8 gInitialMovementTypeFacingDirections[] = { @@ -398,6 +401,7 @@ const u8 gInitialMovementTypeFacingDirections[] = { [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP] = DIR_NORTH, [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT] = DIR_WEST, [MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = DIR_EAST, + [MOVEMENT_TYPE_FOLLOWING_POKEMON] = DIR_SOUTH, }; #define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100 @@ -436,6 +440,157 @@ const u8 gInitialMovementTypeFacingDirections[] = { #define OBJ_EVENT_PAL_TAG_LUGIA 0x1121 #define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122 #define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123 +#define OBJ_EVENT_PAL_TAG_BULBASAUR 0x1124 +#define OBJ_EVENT_PAL_TAG_IVYSAUR 0x1125 +#define OBJ_EVENT_PAL_TAG_VENUSAUR 0x1126 +#define OBJ_EVENT_PAL_TAG_CHARMANDER 0x1127 +#define OBJ_EVENT_PAL_TAG_CHARMELEON 0x1128 +#define OBJ_EVENT_PAL_TAG_CHARIZARD 0x1129 +#define OBJ_EVENT_PAL_TAG_SQUIRTLE 0x112A +#define OBJ_EVENT_PAL_TAG_WARTORTLE 0x112B +#define OBJ_EVENT_PAL_TAG_BLASTOISE 0x112C +#define OBJ_EVENT_PAL_TAG_CATERPIE 0x112D +#define OBJ_EVENT_PAL_TAG_METAPOD 0x112E +#define OBJ_EVENT_PAL_TAG_BUTTERFREE 0x112F +#define OBJ_EVENT_PAL_TAG_WEEDLE 0x1130 +#define OBJ_EVENT_PAL_TAG_KAKUNA 0x1131 +#define OBJ_EVENT_PAL_TAG_BEEDRILL 0x1132 +#define OBJ_EVENT_PAL_TAG_PIDGEY 0x1133 +#define OBJ_EVENT_PAL_TAG_PIDGEOTTO 0x1134 +#define OBJ_EVENT_PAL_TAG_PIDGEOT 0x1135 +#define OBJ_EVENT_PAL_TAG_RATTATA 0x1136 +#define OBJ_EVENT_PAL_TAG_RATICATE 0x1137 +#define OBJ_EVENT_PAL_TAG_SPEAROW 0x1138 +#define OBJ_EVENT_PAL_TAG_FEAROW 0x1139 +#define OBJ_EVENT_PAL_TAG_EKANS 0x113A +#define OBJ_EVENT_PAL_TAG_ARBOK 0x113B +#define OBJ_EVENT_PAL_TAG_PIKACHU 0x113C +#define OBJ_EVENT_PAL_TAG_RAICHU 0x113D +#define OBJ_EVENT_PAL_TAG_SANDSHREW 0x113E +#define OBJ_EVENT_PAL_TAG_SANDSLASH 0x113F +#define OBJ_EVENT_PAL_TAG_NIDORAN_F 0x1140 +#define OBJ_EVENT_PAL_TAG_NIDORINA 0x1141 +#define OBJ_EVENT_PAL_TAG_NIDOQUEEN 0x1142 +#define OBJ_EVENT_PAL_TAG_NIDORAN_M 0x1143 +#define OBJ_EVENT_PAL_TAG_NIDORINO 0x1144 +#define OBJ_EVENT_PAL_TAG_NIDOKING 0x1145 +#define OBJ_EVENT_PAL_TAG_CLEFAIRY 0x1146 +#define OBJ_EVENT_PAL_TAG_CLEFABLE 0x1147 +#define OBJ_EVENT_PAL_TAG_VULPIX 0x1148 +#define OBJ_EVENT_PAL_TAG_NINETALES 0x1149 +#define OBJ_EVENT_PAL_TAG_JIGGLYPUFF 0x114A +#define OBJ_EVENT_PAL_TAG_WIGGLYTUFF 0x114B +#define OBJ_EVENT_PAL_TAG_ZUBAT 0x114C +#define OBJ_EVENT_PAL_TAG_GOLBAT 0x114D +#define OBJ_EVENT_PAL_TAG_ODDISH 0x114E +#define OBJ_EVENT_PAL_TAG_GLOOM 0x114F +#define OBJ_EVENT_PAL_TAG_VILEPLUME 0x1150 +#define OBJ_EVENT_PAL_TAG_PARAS 0x1151 +#define OBJ_EVENT_PAL_TAG_PARASECT 0x1152 +#define OBJ_EVENT_PAL_TAG_VENONAT 0x1153 +#define OBJ_EVENT_PAL_TAG_VENOMOTH 0x1154 +#define OBJ_EVENT_PAL_TAG_DIGLETT 0x1155 +#define OBJ_EVENT_PAL_TAG_DUGTRIO 0x1156 +#define OBJ_EVENT_PAL_TAG_MEOWTH 0x1157 +#define OBJ_EVENT_PAL_TAG_PERSIAN 0x1158 +#define OBJ_EVENT_PAL_TAG_PSYDUCK 0x1159 +#define OBJ_EVENT_PAL_TAG_GOLDUCK 0x115A +#define OBJ_EVENT_PAL_TAG_MANKEY 0x115B +#define OBJ_EVENT_PAL_TAG_PRIMEAPE 0x115C +#define OBJ_EVENT_PAL_TAG_GROWLITHE 0x115D +#define OBJ_EVENT_PAL_TAG_ARCANINE 0x115E +#define OBJ_EVENT_PAL_TAG_POLIWAG 0x115F +#define OBJ_EVENT_PAL_TAG_POLIWHIRL 0x1160 +#define OBJ_EVENT_PAL_TAG_POLIWRATH 0x1161 +#define OBJ_EVENT_PAL_TAG_ABRA 0x1162 +#define OBJ_EVENT_PAL_TAG_KADABRA 0x1163 +#define OBJ_EVENT_PAL_TAG_ALAKAZAM 0x1164 +#define OBJ_EVENT_PAL_TAG_MACHOP 0x1165 +#define OBJ_EVENT_PAL_TAG_MACHOKE 0x1166 +#define OBJ_EVENT_PAL_TAG_MACHAMP 0x1167 +#define OBJ_EVENT_PAL_TAG_BELLSPROUT 0x1168 +#define OBJ_EVENT_PAL_TAG_WEEPINBELL 0x1169 +#define OBJ_EVENT_PAL_TAG_VICTREEBEL 0x116A +#define OBJ_EVENT_PAL_TAG_TENTACOOL 0x116B +#define OBJ_EVENT_PAL_TAG_TENTACRUEL 0x116C +#define OBJ_EVENT_PAL_TAG_GEODUDE 0x116D +#define OBJ_EVENT_PAL_TAG_GRAVELER 0x116E +#define OBJ_EVENT_PAL_TAG_GOLEM 0x116F +#define OBJ_EVENT_PAL_TAG_PONYTA 0x1170 +#define OBJ_EVENT_PAL_TAG_RAPIDASH 0x1171 +#define OBJ_EVENT_PAL_TAG_SLOWPOKE 0x1172 +#define OBJ_EVENT_PAL_TAG_SLOWBRO 0x1173 +#define OBJ_EVENT_PAL_TAG_MAGNEMITE 0x1174 +#define OBJ_EVENT_PAL_TAG_MAGNETON 0x1175 +#define OBJ_EVENT_PAL_TAG_FARFETCHD 0x1176 +#define OBJ_EVENT_PAL_TAG_DODUO 0x1177 +#define OBJ_EVENT_PAL_TAG_DODRIO 0x1178 +#define OBJ_EVENT_PAL_TAG_SEEL 0x1179 +#define OBJ_EVENT_PAL_TAG_DEWGONG 0x117A +#define OBJ_EVENT_PAL_TAG_GRIMER 0x117B +#define OBJ_EVENT_PAL_TAG_MUK 0x117C +#define OBJ_EVENT_PAL_TAG_SHELLDER 0x117D +#define OBJ_EVENT_PAL_TAG_CLOYSTER 0x117E +#define OBJ_EVENT_PAL_TAG_GASTLY 0x117F +#define OBJ_EVENT_PAL_TAG_HAUNTER 0x1180 +#define OBJ_EVENT_PAL_TAG_GENGAR 0x1181 +#define OBJ_EVENT_PAL_TAG_ONIX 0x1182 +#define OBJ_EVENT_PAL_TAG_DROWZEE 0x1183 +#define OBJ_EVENT_PAL_TAG_HYPNO 0x1184 +#define OBJ_EVENT_PAL_TAG_KRABBY 0x1185 +#define OBJ_EVENT_PAL_TAG_KINGLER 0x1186 +#define OBJ_EVENT_PAL_TAG_VOLTORB 0x1187 +#define OBJ_EVENT_PAL_TAG_ELECTRODE 0x1188 +#define OBJ_EVENT_PAL_TAG_EXEGGCUTE 0x1189 +#define OBJ_EVENT_PAL_TAG_EXEGGUTOR 0x118A +#define OBJ_EVENT_PAL_TAG_CUBONE 0x118B +#define OBJ_EVENT_PAL_TAG_MAROWAK 0x118C +#define OBJ_EVENT_PAL_TAG_HITMONLEE 0x118D +#define OBJ_EVENT_PAL_TAG_HITMONCHAN 0x118E +#define OBJ_EVENT_PAL_TAG_LICKITUNG 0x118F +#define OBJ_EVENT_PAL_TAG_KOFFING 0x1190 +#define OBJ_EVENT_PAL_TAG_WEEZING 0x1191 +#define OBJ_EVENT_PAL_TAG_RHYHORN 0x1192 +#define OBJ_EVENT_PAL_TAG_RHYDON 0x1193 +#define OBJ_EVENT_PAL_TAG_CHANSEY 0x1194 +#define OBJ_EVENT_PAL_TAG_TANGELA 0x1195 +#define OBJ_EVENT_PAL_TAG_KANGASKHAN 0x1196 +#define OBJ_EVENT_PAL_TAG_HORSEA 0x1197 +#define OBJ_EVENT_PAL_TAG_SEADRA 0x1198 +#define OBJ_EVENT_PAL_TAG_GOLDEEN 0x1199 +#define OBJ_EVENT_PAL_TAG_SEAKING 0x119A +#define OBJ_EVENT_PAL_TAG_STARYU 0x119B +#define OBJ_EVENT_PAL_TAG_STARMIE 0x119C +#define OBJ_EVENT_PAL_TAG_MR_MIME 0x119D +#define OBJ_EVENT_PAL_TAG_SCYTHER 0x119E +#define OBJ_EVENT_PAL_TAG_JYNX 0x119F +#define OBJ_EVENT_PAL_TAG_ELECTABUZZ 0x11A0 +#define OBJ_EVENT_PAL_TAG_MAGMAR 0x11A1 +#define OBJ_EVENT_PAL_TAG_PINSIR 0x11A2 +#define OBJ_EVENT_PAL_TAG_TAUROS 0x11A3 +#define OBJ_EVENT_PAL_TAG_MAGIKARP 0x11A4 +#define OBJ_EVENT_PAL_TAG_GYARADOS 0x11A5 +#define OBJ_EVENT_PAL_TAG_LAPRAS 0x11A6 +#define OBJ_EVENT_PAL_TAG_DITTO 0x11A7 +#define OBJ_EVENT_PAL_TAG_EEVEE 0x11A8 +#define OBJ_EVENT_PAL_TAG_VAPOREON 0x11A9 +#define OBJ_EVENT_PAL_TAG_JOLTEON 0x11AA +#define OBJ_EVENT_PAL_TAG_FLAREON 0x11AB +#define OBJ_EVENT_PAL_TAG_PORYGON 0x11AC +#define OBJ_EVENT_PAL_TAG_OMANYTE 0x11AD +#define OBJ_EVENT_PAL_TAG_OMASTAR 0x11AE +#define OBJ_EVENT_PAL_TAG_KABUTO 0x11AF +#define OBJ_EVENT_PAL_TAG_KABUTOPS 0x11B0 +#define OBJ_EVENT_PAL_TAG_AERODACTYL 0x11B1 +#define OBJ_EVENT_PAL_TAG_SNORLAX 0x11B2 +#define OBJ_EVENT_PAL_TAG_ARTICUNO 0x11B3 +#define OBJ_EVENT_PAL_TAG_ZAPDOS 0x11B4 +#define OBJ_EVENT_PAL_TAG_MOLTRES 0x11B5 +#define OBJ_EVENT_PAL_TAG_DRATINI 0x11B6 +#define OBJ_EVENT_PAL_TAG_DRAGONAIR 0x11B7 +#define OBJ_EVENT_PAL_TAG_DRAGONITE 0x11B8 +#define OBJ_EVENT_PAL_TAG_MEWTWO 0x11B9 +#define OBJ_EVENT_PAL_TAG_MEW 0x11BA #define OBJ_EVENT_PAL_TAG_NONE 0x11FF #include "data/object_events/object_event_graphics_info_pointers.h" @@ -482,6 +637,157 @@ static const struct SpritePalette sObjectEventSpritePalettes[] = { {gObjectEventPal_Lugia, OBJ_EVENT_PAL_TAG_LUGIA}, {gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN}, {gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY}, + {gObjectEventPal_Bulbasaur, OBJ_EVENT_PAL_TAG_BULBASAUR}, + {gObjectEventPal_Ivysaur, OBJ_EVENT_PAL_TAG_IVYSAUR}, + {gObjectEventPal_Venusaur, OBJ_EVENT_PAL_TAG_VENUSAUR}, + {gObjectEventPal_Charmander, OBJ_EVENT_PAL_TAG_CHARMANDER}, + {gObjectEventPal_Charmeleon, OBJ_EVENT_PAL_TAG_CHARMELEON}, + {gObjectEventPal_Charizard, OBJ_EVENT_PAL_TAG_CHARIZARD}, + {gObjectEventPal_Squirtle, OBJ_EVENT_PAL_TAG_SQUIRTLE}, + {gObjectEventPal_Wartortle, OBJ_EVENT_PAL_TAG_WARTORTLE}, + {gObjectEventPal_Blastoise, OBJ_EVENT_PAL_TAG_BLASTOISE}, + {gObjectEventPal_Caterpie, OBJ_EVENT_PAL_TAG_CATERPIE}, + {gObjectEventPal_Metapod, OBJ_EVENT_PAL_TAG_METAPOD}, + {gObjectEventPal_Butterfree, OBJ_EVENT_PAL_TAG_BUTTERFREE}, + {gObjectEventPal_Weedle, OBJ_EVENT_PAL_TAG_WEEDLE}, + {gObjectEventPal_Kakuna, OBJ_EVENT_PAL_TAG_KAKUNA}, + {gObjectEventPal_Beedrill, OBJ_EVENT_PAL_TAG_BEEDRILL}, + {gObjectEventPal_Pidgey, OBJ_EVENT_PAL_TAG_PIDGEY}, + {gObjectEventPal_Pidgeotto, OBJ_EVENT_PAL_TAG_PIDGEOTTO}, + {gObjectEventPal_Pidgeot, OBJ_EVENT_PAL_TAG_PIDGEOT}, + {gObjectEventPal_Rattata, OBJ_EVENT_PAL_TAG_RATTATA}, + {gObjectEventPal_Raticate, OBJ_EVENT_PAL_TAG_RATICATE}, + {gObjectEventPal_Spearow, OBJ_EVENT_PAL_TAG_SPEAROW}, + {gObjectEventPal_Fearow, OBJ_EVENT_PAL_TAG_FEAROW}, + {gObjectEventPal_Ekans, OBJ_EVENT_PAL_TAG_EKANS}, + {gObjectEventPal_Arbok, OBJ_EVENT_PAL_TAG_ARBOK}, + {gObjectEventPal_Pikachu, OBJ_EVENT_PAL_TAG_PIKACHU}, + {gObjectEventPal_Raichu, OBJ_EVENT_PAL_TAG_RAICHU}, + {gObjectEventPal_Sandshrew, OBJ_EVENT_PAL_TAG_SANDSHREW}, + {gObjectEventPal_Sandslash, OBJ_EVENT_PAL_TAG_SANDSLASH}, + {gObjectEventPal_Nidoran_F, OBJ_EVENT_PAL_TAG_NIDORAN_F}, + {gObjectEventPal_Nidorina, OBJ_EVENT_PAL_TAG_NIDORINA}, + {gObjectEventPal_Nidoqueen, OBJ_EVENT_PAL_TAG_NIDOQUEEN}, + {gObjectEventPal_Nidoran_M, OBJ_EVENT_PAL_TAG_NIDORAN_M}, + {gObjectEventPal_Nidorino, OBJ_EVENT_PAL_TAG_NIDORINO}, + {gObjectEventPal_Nidoking, OBJ_EVENT_PAL_TAG_NIDOKING}, + {gObjectEventPal_Clefairy, OBJ_EVENT_PAL_TAG_CLEFAIRY}, + {gObjectEventPal_Clefable, OBJ_EVENT_PAL_TAG_CLEFABLE}, + {gObjectEventPal_Vulpix, OBJ_EVENT_PAL_TAG_VULPIX}, + {gObjectEventPal_Ninetales, OBJ_EVENT_PAL_TAG_NINETALES}, + {gObjectEventPal_Jigglypuff, OBJ_EVENT_PAL_TAG_JIGGLYPUFF}, + {gObjectEventPal_Wigglytuff, OBJ_EVENT_PAL_TAG_WIGGLYTUFF}, + {gObjectEventPal_Zubat, OBJ_EVENT_PAL_TAG_ZUBAT}, + {gObjectEventPal_Golbat, OBJ_EVENT_PAL_TAG_GOLBAT}, + {gObjectEventPal_Oddish, OBJ_EVENT_PAL_TAG_ODDISH}, + {gObjectEventPal_Gloom, OBJ_EVENT_PAL_TAG_GLOOM}, + {gObjectEventPal_Vileplume, OBJ_EVENT_PAL_TAG_VILEPLUME}, + {gObjectEventPal_Paras, OBJ_EVENT_PAL_TAG_PARAS}, + {gObjectEventPal_Parasect, OBJ_EVENT_PAL_TAG_PARASECT}, + {gObjectEventPal_Venonat, OBJ_EVENT_PAL_TAG_VENONAT}, + {gObjectEventPal_Venomoth, OBJ_EVENT_PAL_TAG_VENOMOTH}, + {gObjectEventPal_Diglett, OBJ_EVENT_PAL_TAG_DIGLETT}, + {gObjectEventPal_Dugtrio, OBJ_EVENT_PAL_TAG_DUGTRIO}, + {gObjectEventPal_Meowth, OBJ_EVENT_PAL_TAG_MEOWTH}, + {gObjectEventPal_Persian, OBJ_EVENT_PAL_TAG_PERSIAN}, + {gObjectEventPal_Psyduck, OBJ_EVENT_PAL_TAG_PSYDUCK}, + {gObjectEventPal_Golduck, OBJ_EVENT_PAL_TAG_GOLDUCK}, + {gObjectEventPal_Mankey, OBJ_EVENT_PAL_TAG_MANKEY}, + {gObjectEventPal_Primeape, OBJ_EVENT_PAL_TAG_PRIMEAPE}, + {gObjectEventPal_Growlithe, OBJ_EVENT_PAL_TAG_GROWLITHE}, + {gObjectEventPal_Arcanine, OBJ_EVENT_PAL_TAG_ARCANINE}, + {gObjectEventPal_Poliwag, OBJ_EVENT_PAL_TAG_POLIWAG}, + {gObjectEventPal_Poliwhirl, OBJ_EVENT_PAL_TAG_POLIWHIRL}, + {gObjectEventPal_Poliwrath, OBJ_EVENT_PAL_TAG_POLIWRATH}, + {gObjectEventPal_Abra, OBJ_EVENT_PAL_TAG_ABRA}, + {gObjectEventPal_Kadabra, OBJ_EVENT_PAL_TAG_KADABRA}, + {gObjectEventPal_Alakazam, OBJ_EVENT_PAL_TAG_ALAKAZAM}, + {gObjectEventPal_Machop, OBJ_EVENT_PAL_TAG_MACHOP}, + {gObjectEventPal_Machoke, OBJ_EVENT_PAL_TAG_MACHOKE}, + {gObjectEventPal_Machamp, OBJ_EVENT_PAL_TAG_MACHAMP}, + {gObjectEventPal_Bellsprout, OBJ_EVENT_PAL_TAG_BELLSPROUT}, + {gObjectEventPal_Weepinbell, OBJ_EVENT_PAL_TAG_WEEPINBELL}, + {gObjectEventPal_Victreebel, OBJ_EVENT_PAL_TAG_VICTREEBEL}, + {gObjectEventPal_Tentacool, OBJ_EVENT_PAL_TAG_TENTACOOL}, + {gObjectEventPal_Tentacruel, OBJ_EVENT_PAL_TAG_TENTACRUEL}, + {gObjectEventPal_Geodude, OBJ_EVENT_PAL_TAG_GEODUDE}, + {gObjectEventPal_Graveler, OBJ_EVENT_PAL_TAG_GRAVELER}, + {gObjectEventPal_Golem, OBJ_EVENT_PAL_TAG_GOLEM}, + {gObjectEventPal_Ponyta, OBJ_EVENT_PAL_TAG_PONYTA}, + {gObjectEventPal_Rapidash, OBJ_EVENT_PAL_TAG_RAPIDASH}, + {gObjectEventPal_Slowpoke, OBJ_EVENT_PAL_TAG_SLOWPOKE}, + {gObjectEventPal_Slowbro, OBJ_EVENT_PAL_TAG_SLOWBRO}, + {gObjectEventPal_Magnemite, OBJ_EVENT_PAL_TAG_MAGNEMITE}, + {gObjectEventPal_Magneton, OBJ_EVENT_PAL_TAG_MAGNETON}, + {gObjectEventPal_Farfetchd, OBJ_EVENT_PAL_TAG_FARFETCHD}, + {gObjectEventPal_Doduo, OBJ_EVENT_PAL_TAG_DODUO}, + {gObjectEventPal_Dodrio, OBJ_EVENT_PAL_TAG_DODRIO}, + {gObjectEventPal_Seel, OBJ_EVENT_PAL_TAG_SEEL}, + {gObjectEventPal_Dewgong, OBJ_EVENT_PAL_TAG_DEWGONG}, + {gObjectEventPal_Grimer, OBJ_EVENT_PAL_TAG_GRIMER}, + {gObjectEventPal_Muk, OBJ_EVENT_PAL_TAG_MUK}, + {gObjectEventPal_Shellder, OBJ_EVENT_PAL_TAG_SHELLDER}, + {gObjectEventPal_Cloyster, OBJ_EVENT_PAL_TAG_CLOYSTER}, + {gObjectEventPal_Gastly, OBJ_EVENT_PAL_TAG_GASTLY}, + {gObjectEventPal_Haunter, OBJ_EVENT_PAL_TAG_HAUNTER}, + {gObjectEventPal_Gengar, OBJ_EVENT_PAL_TAG_GENGAR}, + {gObjectEventPal_Onix, OBJ_EVENT_PAL_TAG_ONIX}, + {gObjectEventPal_Drowzee, OBJ_EVENT_PAL_TAG_DROWZEE}, + {gObjectEventPal_Hypno, OBJ_EVENT_PAL_TAG_HYPNO}, + {gObjectEventPal_Krabby, OBJ_EVENT_PAL_TAG_KRABBY}, + {gObjectEventPal_Kingler, OBJ_EVENT_PAL_TAG_KINGLER}, + {gObjectEventPal_Voltorb, OBJ_EVENT_PAL_TAG_VOLTORB}, + {gObjectEventPal_Electrode, OBJ_EVENT_PAL_TAG_ELECTRODE}, + {gObjectEventPal_Exeggcute, OBJ_EVENT_PAL_TAG_EXEGGCUTE}, + {gObjectEventPal_Exeggutor, OBJ_EVENT_PAL_TAG_EXEGGUTOR}, + {gObjectEventPal_Cubone, OBJ_EVENT_PAL_TAG_CUBONE}, + {gObjectEventPal_Marowak, OBJ_EVENT_PAL_TAG_MAROWAK}, + {gObjectEventPal_Hitmonlee, OBJ_EVENT_PAL_TAG_HITMONLEE}, + {gObjectEventPal_Hitmonchan, OBJ_EVENT_PAL_TAG_HITMONCHAN}, + {gObjectEventPal_Lickitung, OBJ_EVENT_PAL_TAG_LICKITUNG}, + {gObjectEventPal_Koffing, OBJ_EVENT_PAL_TAG_KOFFING}, + {gObjectEventPal_Weezing, OBJ_EVENT_PAL_TAG_WEEZING}, + {gObjectEventPal_Rhyhorn, OBJ_EVENT_PAL_TAG_RHYHORN}, + {gObjectEventPal_Rhydon, OBJ_EVENT_PAL_TAG_RHYDON}, + {gObjectEventPal_Chansey, OBJ_EVENT_PAL_TAG_CHANSEY}, + {gObjectEventPal_Tangela, OBJ_EVENT_PAL_TAG_TANGELA}, + {gObjectEventPal_Kangaskhan, OBJ_EVENT_PAL_TAG_KANGASKHAN}, + {gObjectEventPal_Horsea, OBJ_EVENT_PAL_TAG_HORSEA}, + {gObjectEventPal_Seadra, OBJ_EVENT_PAL_TAG_SEADRA}, + {gObjectEventPal_Goldeen, OBJ_EVENT_PAL_TAG_GOLDEEN}, + {gObjectEventPal_Seaking, OBJ_EVENT_PAL_TAG_SEAKING}, + {gObjectEventPal_Staryu, OBJ_EVENT_PAL_TAG_STARYU}, + {gObjectEventPal_Starmie, OBJ_EVENT_PAL_TAG_STARMIE}, + {gObjectEventPal_Mr_Mime, OBJ_EVENT_PAL_TAG_MR_MIME}, + {gObjectEventPal_Scyther, OBJ_EVENT_PAL_TAG_SCYTHER}, + {gObjectEventPal_Jynx, OBJ_EVENT_PAL_TAG_JYNX}, + {gObjectEventPal_Electabuzz, OBJ_EVENT_PAL_TAG_ELECTABUZZ}, + {gObjectEventPal_Magmar, OBJ_EVENT_PAL_TAG_MAGMAR}, + {gObjectEventPal_Pinsir, OBJ_EVENT_PAL_TAG_PINSIR}, + {gObjectEventPal_Tauros, OBJ_EVENT_PAL_TAG_TAUROS}, + {gObjectEventPal_Magikarp, OBJ_EVENT_PAL_TAG_MAGIKARP}, + {gObjectEventPal_Gyarados, OBJ_EVENT_PAL_TAG_GYARADOS}, + {gObjectEventPal_Lapras, OBJ_EVENT_PAL_TAG_LAPRAS}, + {gObjectEventPal_Ditto, OBJ_EVENT_PAL_TAG_DITTO}, + {gObjectEventPal_Eevee, OBJ_EVENT_PAL_TAG_EEVEE}, + {gObjectEventPal_Vaporeon, OBJ_EVENT_PAL_TAG_VAPOREON}, + {gObjectEventPal_Jolteon, OBJ_EVENT_PAL_TAG_JOLTEON}, + {gObjectEventPal_Flareon, OBJ_EVENT_PAL_TAG_FLAREON}, + {gObjectEventPal_Porygon, OBJ_EVENT_PAL_TAG_PORYGON}, + {gObjectEventPal_Omanyte, OBJ_EVENT_PAL_TAG_OMANYTE}, + {gObjectEventPal_Omastar, OBJ_EVENT_PAL_TAG_OMASTAR}, + {gObjectEventPal_Kabuto, OBJ_EVENT_PAL_TAG_KABUTO}, + {gObjectEventPal_Kabutops, OBJ_EVENT_PAL_TAG_KABUTOPS}, + {gObjectEventPal_Aerodactyl, OBJ_EVENT_PAL_TAG_AERODACTYL}, + {gObjectEventPal_Snorlax, OBJ_EVENT_PAL_TAG_SNORLAX}, + {gObjectEventPal_Articuno, OBJ_EVENT_PAL_TAG_ARTICUNO}, + {gObjectEventPal_Zapdos, OBJ_EVENT_PAL_TAG_ZAPDOS}, + {gObjectEventPal_Moltres, OBJ_EVENT_PAL_TAG_MOLTRES}, + {gObjectEventPal_Dratini, OBJ_EVENT_PAL_TAG_DRATINI}, + {gObjectEventPal_Dragonair, OBJ_EVENT_PAL_TAG_DRAGONAIR}, + {gObjectEventPal_Dragonite, OBJ_EVENT_PAL_TAG_DRAGONITE}, + {gObjectEventPal_Mewtwo, OBJ_EVENT_PAL_TAG_MEWTWO}, + {gObjectEventPal_Mew, OBJ_EVENT_PAL_TAG_MEW}, {}, }; @@ -1196,7 +1502,9 @@ u8 GetFirstInactiveObjectEventId(void) u8 GetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId) { - if (localId < OBJ_EVENT_ID_PLAYER) + if (localId == OBJ_EVENT_ID_FOLLOWER) + return GetFollowerObjectId(); + else if (localId < OBJ_EVENT_ID_PLAYER) return GetObjectEventIdByLocalIdAndMapInternal(localId, mapNum, mapGroupId); return GetObjectEventIdByLocalId(localId); @@ -1343,7 +1651,7 @@ static bool8 GetAvailableObjectEventId(u16 localId, u8 mapNum, u8 mapGroup, u8 * return FALSE; } -static void RemoveObjectEvent(struct ObjectEvent *objectEvent) +void RemoveObjectEvent(struct ObjectEvent *objectEvent) { objectEvent->active = FALSE; RemoveObjectEventInternal(objectEvent); @@ -1361,10 +1669,13 @@ void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) static void RemoveObjectEventInternal(struct ObjectEvent *objectEvent) { + u8 paletteNum; struct SpriteFrameImage image; image.size = GetObjectEventGraphicsInfo(objectEvent->graphicsId)->size; gSprites[objectEvent->spriteId].images = ℑ + paletteNum = gSprites[objectEvent->spriteId].oam.paletteNum; DestroySprite(&gSprites[objectEvent->spriteId]); + FieldEffectFreePaletteIfUnused(paletteNum); } void RemoveAllObjectEventsExceptPlayer(void) @@ -1393,25 +1704,14 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl objectEvent = &gObjectEvents[objectEventId]; graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - paletteSlot = graphicsInfo->paletteSlot; - if (paletteSlot == 0) + if (spriteTemplate->paletteTag != 0xffff) { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, 0); - } - else if (paletteSlot == 10) - { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, 10); - } - else if (paletteSlot >= 16) - { - paletteSlot -= 16; - _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot); + LoadObjectEventPalette(spriteTemplate->paletteTag); } if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE) objectEvent->invisible = TRUE; - *(u16 *)&spriteTemplate->paletteTag = TAG_NONE; spriteId = CreateSprite(spriteTemplate, 0, 0, 0); if (spriteId == MAX_SPRITES) { @@ -1425,7 +1725,6 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); sprite->x += 8; sprite->y += 16 + sprite->centerToCornerVecY; - sprite->oam.paletteNum = paletteSlot; sprite->coordOffsetEnabled = TRUE; sprite->sObjEventId = objectEventId; objectEvent->spriteId = spriteId; @@ -1438,7 +1737,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl return objectEventId; } -static u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) +u8 TrySpawnObjectEventTemplate(struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 objectEventId; struct SpriteTemplate spriteTemplate; @@ -1470,7 +1769,7 @@ u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *objectEventTemplate) return TrySpawnObjectEventTemplate(objectEventTemplate, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY); } -u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z) +u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 z) { struct ObjectEventTemplate objectEventTemplate; @@ -1560,7 +1859,7 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), // A unique id is given as an argument and stored in the sprite data to allow referring back to the same virtual object. // They can be turned (and, in the case of the Union Room, animated teleporting in and out) but do not have movement types // or any of the other data normally associated with object events. -u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 z, u8 direction) +u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 z, u8 direction) { u8 spriteId; struct Sprite *sprite; @@ -1653,7 +1952,7 @@ void RemoveObjectEventsOutsideView(void) { struct ObjectEvent *objectEvent = &gObjectEvents[i]; - if (objectEvent->active && !objectEvent->isPlayer) + if (objectEvent->active && !objectEvent->isPlayer && i != GetFollowerObjectId()) RemoveObjectEventIfOutsideView(objectEvent); } } @@ -1691,7 +1990,6 @@ void SpawnObjectEventsOnReturnToField(s16 x, s16 y) static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) { u8 i; - u8 paletteSlot; struct Sprite *sprite; struct ObjectEvent *objectEvent; struct SpriteTemplate spriteTemplate; @@ -1712,22 +2010,10 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables); spriteTemplate.images = &spriteFrameImage; - *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; - paletteSlot = graphicsInfo->paletteSlot; - if (paletteSlot == 0) + if (spriteTemplate.paletteTag != 0xffff) { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); + LoadObjectEventPalette(spriteTemplate.paletteTag); } - else if (paletteSlot == 10) - { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); - } - else if (paletteSlot >= 16) - { - paletteSlot -= 16; - _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot); - } - *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; i = CreateSprite(&spriteTemplate, 0, 0, 0); if (i != MAX_SPRITES) @@ -1747,7 +2033,6 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) if (subspriteTables != NULL) SetSubspriteTables(sprite, subspriteTables); - sprite->oam.paletteNum = paletteSlot; sprite->coordOffsetEnabled = TRUE; sprite->sObjEventId = objectEventId; objectEvent->spriteId = i; @@ -1780,7 +2065,7 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_CONTROLLABLE); } -void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) +void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u16 graphicsId) { const struct ObjectEventGraphicsInfo *graphicsInfo; struct Sprite *sprite; @@ -1819,7 +2104,7 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) CameraObjectReset1(); } -void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId) +void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u16 graphicsId) { u8 objectEventId; @@ -1874,7 +2159,7 @@ static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite } } -const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId) +const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId) { u8 bard; @@ -2393,7 +2678,7 @@ u8 GetObjectEventBerryTreeId(u8 objectEventId) return gObjectEvents[objectEventId].trainerRange_berryTreeId; } -static struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) +struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { struct ObjectEventTemplate *templates; const struct MapHeader *mapHeader; @@ -2807,6 +3092,38 @@ u8 TryGetTrainerEncounterDirection(struct ObjectEvent *objectEvent, u8 movementT return gGetVectorDirectionFuncs[movementType](dx, dy, absdx, absdy); } +movement_type_def(MovementType_FollowingPokemon, gMovementTypeFuncs_FollowingPokemon) + +bool8 MovementType_FollowingPokemon_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + ClearObjectEventMovement(objectEvent, sprite); + sprite->data[1] = 1; + return TRUE; +} + +bool8 MovementType_FollowingPokemon_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_FOLLOWING_POKEMON); + sprite->data[1] = 2; + return TRUE; +} + +bool8 MovementType_FollowingPokemon_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) + { + objectEvent->singleMovementActive = FALSE; + sprite->data[1] = 3; + } + return FALSE; +} + +bool8 MovementType_FollowingPokemon_Step3(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + sprite->data[1] = 1; + return TRUE; +} + movement_type_def(MovementType_LookAround, gMovementTypeFuncs_LookAround) bool8 MovementType_LookAround_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) @@ -4695,8 +5012,9 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16 for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { curObject = &gObjectEvents[i]; - if (curObject->active && curObject != objectEvent) + if (curObject->active && curObject != objectEvent && !FollowMe_IsCollisionExempt(curObject, objectEvent)) { + // check for collision if curObject is active, not the object in question, and not exempt from collisions if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y)) { if (AreZCoordsCompatible(objectEvent->currentElevation, curObject->currentElevation)) @@ -4844,6 +5162,7 @@ bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementAct objectEvent->heldMovementActive = TRUE; objectEvent->heldMovementFinished = FALSE; gSprites[objectEvent->spriteId].sActionFuncId = 0; + FollowMe(objectEvent, movementActionId, FALSE); return FALSE; } @@ -4944,6 +5263,41 @@ bool8 ObjectEventFaceOppositeDirection(struct ObjectEvent *objectEvent, u8 direc return ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(GetOppositeDirection(direction))); } +bool8 ObjectEventPokemonFacePlayer(struct ObjectEvent *follower, struct ObjectEvent *player) +{ + if(follower->currentCoords.x == player->currentCoords.x) + { + // Follower is south of player + if(follower->currentCoords.y > player->currentCoords.y) + { + gSprites[follower->spriteId].animNum = 5; + follower->facingDirection = DIR_NORTH; + } + // Follower is north of player + else + { + gSprites[follower->spriteId].animNum = 4; + follower->facingDirection = DIR_SOUTH; + } + } + else + { + // Follower is east of player + if(follower->currentCoords.x > player->currentCoords.x) + { + gSprites[follower->spriteId].animNum = 6; + follower->facingDirection = DIR_WEST; + } + // Follower is west of player + else + { + gSprites[follower->spriteId].animNum = 7; + follower->facingDirection = DIR_EAST; + } + } + return ObjectEventSetHeldMovement(follower, MOVEMENT_ACTION_FOLLOWING_POKEMON); +} + dirn_to_anim(GetAcroWheelieFaceDirectionMovementAction, gAcroWheelieFaceDirectionMovementActions); dirn_to_anim(GetAcroPopWheelieFaceDirectionMovementAction, gAcroPopWheelieFaceDirectionMovementActions); dirn_to_anim(GetAcroEndWheelieFaceDirectionMovementAction, gAcroEndWheelieFaceDirectionMovementActions); @@ -5086,7 +5440,8 @@ static bool8 UpdateMovementNormal(struct ObjectEvent *objectEvent, struct Sprite { ShiftStillObjectEventCoords(objectEvent); objectEvent->triggerGroundEffectsOnStop = TRUE; - sprite->animPaused = TRUE; + if (!(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId])) + sprite->animPaused = TRUE; return TRUE; } return FALSE; @@ -5320,7 +5675,19 @@ bool8 MovementAction_WalkNormalDiagonalDownRight_Step1(struct ObjectEvent *objec bool8 MovementAction_WalkNormalDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_NORMAL); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 2) + { + sprite->data[7] = 2; + sprite->animNum = 4; + sprite->x2 = 0; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_SOUTH, 0); + } + else + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalDown_Step1(objectEvent, sprite); } @@ -5336,7 +5703,19 @@ bool8 MovementAction_WalkNormalDown_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkNormalUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_NORMAL); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 3) + { + sprite->data[7] = 3; + sprite->animNum = 5; + sprite->x2 = 0; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_NORTH, 0); + } + else + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalUp_Step1(objectEvent, sprite); } @@ -5352,7 +5731,19 @@ bool8 MovementAction_WalkNormalUp_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkNormalLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_NORMAL); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 4) + { + sprite->data[7] = 4; + sprite->animNum = 6; + sprite->x2 = 8; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_WEST, 0); + } + else + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalLeft_Step1(objectEvent, sprite); } @@ -5368,7 +5759,19 @@ bool8 MovementAction_WalkNormalLeft_Step1(struct ObjectEvent *objectEvent, struc bool8 MovementAction_WalkNormalRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_NORMAL); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 5) + { + sprite->data[7] = 5; + sprite->animNum = 7; + sprite->x2 = -8; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_EAST, 0); + } + else + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_NORMAL); return MovementAction_WalkNormalRight_Step1(objectEvent, sprite); } @@ -5442,7 +5845,8 @@ static u8 UpdateJumpAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, ShiftStillObjectEventCoords(objectEvent); objectEvent->triggerGroundEffectsOnStop = TRUE; objectEvent->landingJump = TRUE; - sprite->animPaused = TRUE; + if (!(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId])) + sprite->animPaused = TRUE; } return result; } @@ -5491,6 +5895,11 @@ static bool8 DoJumpInPlaceAnim(struct ObjectEvent *objectEvent, struct Sprite *s bool8 MovementAction_Jump2Down_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + sprite->x2 = 0; + sprite->data[7] = 10; + } InitJumpRegular(objectEvent, sprite, DIR_SOUTH, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Down_Step1(objectEvent, sprite); } @@ -5508,6 +5917,11 @@ bool8 MovementAction_Jump2Down_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_Jump2Up_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + sprite->x2 = 0; + sprite->data[7] = 10; + } InitJumpRegular(objectEvent, sprite, DIR_NORTH, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Up_Step1(objectEvent, sprite); } @@ -5525,6 +5939,11 @@ bool8 MovementAction_Jump2Up_Step1(struct ObjectEvent *objectEvent, struct Sprit bool8 MovementAction_Jump2Left_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + sprite->x2 = 8; + sprite->data[7] = 10; + } InitJumpRegular(objectEvent, sprite, DIR_WEST, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Left_Step1(objectEvent, sprite); } @@ -5542,6 +5961,11 @@ bool8 MovementAction_Jump2Left_Step1(struct ObjectEvent *objectEvent, struct Spr bool8 MovementAction_Jump2Right_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + sprite->x2 = -8; + sprite->data[7] = 10; + } InitJumpRegular(objectEvent, sprite, DIR_EAST, JUMP_DISTANCE_FAR, JUMP_TYPE_HIGH); return MovementAction_Jump2Right_Step1(objectEvent, sprite); } @@ -5605,7 +6029,19 @@ bool8 MovementAction_Delay16_Step0(struct ObjectEvent *objectEvent, struct Sprit bool8 MovementAction_WalkFastDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 6) + { + sprite->data[7] = 6; + sprite->animNum = 20; + sprite->x2 = 0; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_SOUTH, 1); + } + else + InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1); return MovementAction_WalkFastDown_Step1(objectEvent, sprite); } @@ -5621,7 +6057,19 @@ bool8 MovementAction_WalkFastDown_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkFastUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 7) + { + sprite->data[7] = 7; + sprite->animNum = 21; + sprite->x2 = 0; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_NORTH, 1); + } + else + InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1); return MovementAction_WalkFastUp_Step1(objectEvent, sprite); } @@ -5637,7 +6085,19 @@ bool8 MovementAction_WalkFastUp_Step1(struct ObjectEvent *objectEvent, struct Sp bool8 MovementAction_WalkFastLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 8) + { + sprite->data[7] = 8; + sprite->animNum = 22; + sprite->x2 = 8; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_WEST, 1); + } + else + InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1); return MovementAction_WalkFastLeft_Step1(objectEvent, sprite); } @@ -5653,7 +6113,19 @@ bool8 MovementAction_WalkFastLeft_Step1(struct ObjectEvent *objectEvent, struct bool8 MovementAction_WalkFastRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1); + if(gSaveBlock2Ptr->follower.inProgress && objectEvent == &gObjectEvents[gSaveBlock2Ptr->follower.objId]) + { + if(sprite->data[7] != 9) + { + sprite->data[7] = 9; + sprite->animNum = 23; + sprite->x2 = -8; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + InitNpcForMovement(objectEvent, sprite, DIR_EAST, 1); + } + else + InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1); return MovementAction_WalkFastRight_Step1(objectEvent, sprite); } @@ -8586,7 +9058,7 @@ void TurnVirtualObject(u8 virtualObjId, u8 direction) StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction)); } -void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId) +void SetVirtualObjectGraphics(u8 virtualObjId, u16 graphicsId) { int spriteId = GetVirtualObjectSpriteId(virtualObjId); @@ -8764,6 +9236,30 @@ u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite * MovementAction_Fly_Finish, }; +u8 (*const gMovementActionFuncs_FollowingPokemon[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_FollowingPokemon_Step0, +}; + +u8 (*const gMovementActionFuncs_FollowingPokemon_FaceSouth[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_FollowingPokemon_FaceSouth_Step0, + MovementAction_Finish, +}; + +u8 (*const gMovementActionFuncs_FollowingPokemon_FaceNorth[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_FollowingPokemon_FaceNorth_Step0, + MovementAction_Finish, +}; + +u8 (*const gMovementActionFuncs_FollowingPokemon_FaceWest[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_FollowingPokemon_FaceWest_Step0, + MovementAction_Finish, +}; + +u8 (*const gMovementActionFuncs_FollowingPokemon_FaceEast[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_FollowingPokemon_FaceEast_Step0, + MovementAction_Finish, +}; + u8 MovementAction_StoreAndLockAnim_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { bool32 ableToStore = FALSE; @@ -8932,8 +9428,115 @@ u8 MovementAction_FlyDown_Step1(struct ObjectEvent *objectEvent, struct Sprite * return FALSE; } +u8 MovementAction_FollowingPokemon_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + switch(sprite->animNum % 4) + { + case 0: + case 1: + sprite->x2 = 0; + break; + case 2: + sprite->x2 = 8; + break; + case 3: + sprite->x2 = -8; + break; + } + if(sprite->data[7] != 1) + { + sprite->data[7] = 1; + sprite->animPaused = FALSE; + if(sprite->animNum > 3) + sprite->animNum = sprite->animNum % 4; + SeekSpriteAnim(sprite, ++sprite->animCmdIndex); + } + return FALSE; +} + +void RecreateObjectEvent(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + u8 newSpriteId; + struct ObjectEventTemplate clone; + struct ObjectEvent backupFollower = *objectEvent; + backupFollower.graphicsId = objectEvent->graphicsId; + DestroySprite(sprite); + RemoveObjectEvent(objectEvent); + + clone = *GetObjectEventTemplateByLocalIdAndMap(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup); + clone.graphicsId = objectEvent->graphicsId; + + objectEvent = &gObjectEvents[TrySpawnObjectEventTemplate(&clone, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, clone.x, clone.y)]; + newSpriteId = objectEvent->spriteId; + *objectEvent = backupFollower; + objectEvent->spriteId = newSpriteId; +} + +u8 MovementAction_FollowingPokemon_FaceSouth_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + RecreateObjectEvent(objectEvent, sprite); + sprite->animNum = 0; + MoveObjectEventToMapCoords(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); + sprite->data[2]++; + return FALSE; +} + +u8 MovementAction_FollowingPokemon_FaceNorth_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + RecreateObjectEvent(objectEvent, sprite); + sprite->animNum = 1; + MoveObjectEventToMapCoords(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); + sprite->data[2]++; + return FALSE; +} + +u8 MovementAction_FollowingPokemon_FaceWest_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + RecreateObjectEvent(objectEvent, sprite); + sprite->animNum = 2; + sprite->x2 = 8; + MoveObjectEventToMapCoords(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); + sprite->data[2]++; + return FALSE; +} + +u8 MovementAction_FollowingPokemon_FaceEast_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + RecreateObjectEvent(objectEvent, sprite); + sprite->animNum = 3; + sprite->x2 = -8; + MoveObjectEventToMapCoords(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); + sprite->data[2]++; + return FALSE; +} + // though this function returns TRUE without doing anything, this header is required due to being in an array of functions which needs it. u8 MovementAction_Fly_Finish(struct ObjectEvent *objectEvent, struct Sprite *sprite) { return TRUE; } + +// NEW +u16 GetMiniStepCount(u8 speed) +{ + return (u16)sStepTimes[speed]; +} + +void RunMiniStep(struct Sprite *sprite, u8 speed, u8 currentFrame) +{ + sNpcStepFuncTables[speed][currentFrame](sprite, sprite->data[3]); +} + +bool8 PlayerIsUnderWaterfall(struct ObjectEvent *objectEvent) +{ + s16 x; + s16 y; + + x = objectEvent->currentCoords.x; + y = objectEvent->currentCoords.y; + MoveCoordsInDirection(DIR_NORTH, &x, &y, 0, 1); + if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y))) + return TRUE; + + return FALSE; +} diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 8d6b564d2..ce2e9e000 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -28,6 +28,7 @@ #include "trainer_see.h" #include "trainer_hill.h" #include "wild_encounter.h" +#include "follow_me.h" #include "constants/event_bg.h" #include "constants/event_objects.h" #include "constants/field_poison.h" @@ -156,9 +157,41 @@ int ProcessPlayerFieldInput(struct FieldInput *input) { IncrementGameStat(GAME_STAT_STEPS); IncrementBirthIslandRockStepCount(); + + if (gSaveBlock2Ptr->follower.inProgress && gObjectEvents[gSaveBlock2Ptr->follower.objId].invisible == TRUE && gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ON_FOOT + && gSaveBlock2Ptr->follower.comeOutDoorStairs == 0) + { + switch(playerDirection) + { + case 1: // South + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x = gSprites[gPlayerAvatar.spriteId].x; + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].y = gSprites[gPlayerAvatar.spriteId].y - 16; + break; + case 2: // North + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x = gSprites[gPlayerAvatar.spriteId].x; + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].y = gSprites[gPlayerAvatar.spriteId].y + 16; + break; + case 3: // West + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x = gSprites[gPlayerAvatar.spriteId].x + 16; + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].y = gSprites[gPlayerAvatar.spriteId].y; + break; + case 4: // East + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x = gSprites[gPlayerAvatar.spriteId].x - 16; + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].y = gSprites[gPlayerAvatar.spriteId].y; + break; + } + gObjectEvents[gSaveBlock2Ptr->follower.objId].invisible = FALSE; + } + if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE) return TRUE; } + else if(gSaveBlock2Ptr->follower.inProgress) + { + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 0x9E); + } + if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileBehavior) == TRUE) return TRUE; if (input->heldDirection && input->dpadDirection == playerDirection) @@ -306,6 +339,13 @@ static const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 if (InTrainerHill() == TRUE) script = GetTrainerHillTrainerScript(); + else if (objectEventId == GetFollowerObjectId())//(gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_FOLLOWER) + { + if(gObjectEvents[objectEventId].invisible == FALSE) + script = GetFollowerScriptPointer(); + else + return NULL; + } else script = GetObjectEventScriptPointerByObjectEventId(objectEventId); diff --git a/src/field_effect.c b/src/field_effect.c index 3f0ba2455..951bc88f8 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -26,6 +26,7 @@ #include "trainer_pokemon_sprites.h" #include "trig.h" #include "util.h" +#include "follow_me.h" #include "constants/field_effects.h" #include "constants/event_object_movement.h" #include "constants/metatile_behaviors.h" @@ -38,6 +39,7 @@ EWRAM_DATA s32 gFieldEffectArguments[8] = {0}; // Static type declarations +extern void FollowMe_WarpSetEnd(void); static void Task_PokecenterHeal(u8 taskId); static void PokecenterHealEffect_Init(struct Task *); static void PokecenterHealEffect_WaitForBallPlacement(struct Task *); @@ -1355,8 +1357,45 @@ static void Task_UseFly(u8 taskId) gFieldEffectArguments[0] = 0; FieldEffectStart(FLDEFF_USE_FLY); + + if (gSaveBlock2Ptr->follower.inProgress) + { + ObjectEventClearHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + + if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x == gObjectEvents[gSaveBlock2Ptr->follower.objId].currentCoords.x) + { + if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y > gObjectEvents[gSaveBlock2Ptr->follower.objId].currentCoords.y) + { + // Move South + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 8); + } + else + { + // Move North + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 9); + } + } + else + { + if (gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x > gObjectEvents[gSaveBlock2Ptr->follower.objId].currentCoords.x) + { + // Move East + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 11); + } + else + { + // Move West + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 10); + } + } + } + task->data[0]++; } + + if (gSaveBlock2Ptr->follower.inProgress && ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gSaveBlock2Ptr->follower.objId])) + gObjectEvents[gSaveBlock2Ptr->follower.objId].invisible = TRUE; + if (!FieldEffectActiveListContains(FLDEFF_USE_FLY)) { Overworld_ResetStateAfterFly(); @@ -1535,6 +1574,7 @@ static bool8 FallWarpEffect_End(struct Task *task) UnfreezeObjectEvents(); InstallCameraPanAheadCallback(); DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect)); + FollowMe_WarpSetEnd(); return FALSE; } @@ -1586,6 +1626,7 @@ static bool8 EscalatorWarpOut_WaitForPlayer(struct Task *task) task->tState++; task->data[2] = 0; task->data[3] = 0; + EscalatorMoveFollower(task->data[1]); if ((u8)task->tGoingUp == FALSE) { task->tState = 4; // jump to EscalatorWarpOut_Down_Ride @@ -1883,6 +1924,7 @@ static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *task, struct Ob gPlayerAvatar.preventStep = FALSE; DestroyTask(FindTaskIdByFunc(Task_UseWaterfall)); FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL); + FollowMe_WarpSetEnd(); return FALSE; } @@ -2269,6 +2311,31 @@ static void EscapeRopeWarpOutEffect_Spin(struct Task *task) else if (task->tSpinDelay == 0 || (--task->tSpinDelay) == 0) { ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(spinDirections[objectEvent->facingDirection])); + + if (gSaveBlock2Ptr->follower.inProgress) + { + ObjectEventClearHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + switch(objectEvent->facingDirection) + { + case DIR_SOUTH: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = 0; + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 25); + break; + case DIR_NORTH: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = 0; + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 26); + break; + case DIR_WEST: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = 8; + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 27); + break; + case DIR_EAST: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = -8; + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 28); + break; + } + } + if (task->tNumTurns < 12) task->tNumTurns++; task->tSpinDelay = 8 >> (task->tNumTurns >> 2); @@ -3010,6 +3077,38 @@ static void SurfFieldEffect_FieldMovePose(struct Task *task) SetPlayerAvatarFieldMove(); ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); task->tState++; + + if(gSaveBlock2Ptr->follower.inProgress) + { + ObjectEventClearHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + + if(objectEvent->currentCoords.x == gObjectEvents[gSaveBlock2Ptr->follower.objId].currentCoords.x) + { + if(objectEvent->currentCoords.y > gObjectEvents[gSaveBlock2Ptr->follower.objId].currentCoords.y) + { + // Move South + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 8); + } + else + { + // Move North + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 9); + } + } + else + { + if(objectEvent->currentCoords.x > gObjectEvents[gSaveBlock2Ptr->follower.objId].currentCoords.x) + { + // Move East + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 11); + } + else + { + // Move West + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], 10); + } + } + } } } @@ -3022,6 +3121,9 @@ static void SurfFieldEffect_ShowMon(struct Task *task) gFieldEffectArguments[0] = task->tMonId | SHOW_MON_CRY_NO_DUCKING; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); task->tState++; + + if (gSaveBlock2Ptr->follower.inProgress) + gObjectEvents[gSaveBlock2Ptr->follower.objId].invisible = TRUE; } } diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 3c0276a27..e2cf0bea1 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -20,6 +20,7 @@ #include "strings.h" #include "task.h" #include "tv.h" +#include "follow_me.h" #include "wild_encounter.h" #include "constants/abilities.h" #include "constants/event_objects.h" @@ -636,7 +637,7 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys) } if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_UNDERWATER) && (heldKeys & B_BUTTON) && FlagGet(FLAG_SYS_B_DASH) - && IsRunningDisallowed(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) == 0) + && IsRunningDisallowed(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) == 0 && !FollowerComingThroughDoor()) { PlayerRun(direction); gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_DASH; @@ -1213,32 +1214,32 @@ void StopPlayerAvatar(void) } } -u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) +u16 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) { return sRivalAvatarGfxIds[state][gender]; } -u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) +u16 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender) { return sPlayerAvatarGfxIds[state][gender]; } -u8 GetFRLGAvatarGraphicsIdByGender(u8 gender) +u16 GetFRLGAvatarGraphicsIdByGender(u8 gender) { return sFRLGAvatarGfxIds[gender]; } -u8 GetRSAvatarGraphicsIdByGender(u8 gender) +u16 GetRSAvatarGraphicsIdByGender(u8 gender) { return sRSAvatarGfxIds[gender]; } -u8 GetPlayerAvatarGraphicsIdByStateId(u8 state) +u16 GetPlayerAvatarGraphicsIdByStateId(u8 state) { return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gPlayerAvatar.gender); } -u8 unref_GetRivalAvatarGenderByGraphicsId(u8 gfxId) +u8 unref_GetRivalAvatarGenderByGraphicsId(u16 gfxId) { switch (gfxId) { @@ -1256,7 +1257,7 @@ u8 unref_GetRivalAvatarGenderByGraphicsId(u8 gfxId) } } -u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId) +u8 GetPlayerAvatarGenderByGraphicsId(u16 gfxId) { switch (gfxId) { @@ -1325,7 +1326,7 @@ void SetPlayerAvatarStateMask(u8 flags) gPlayerAvatar.flags |= flags; } -static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender) +static u8 GetPlayerAvatarStateTransitionByGraphicsId(u16 graphicsId, u8 gender) { u8 i; @@ -1337,7 +1338,7 @@ static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender) return PLAYER_AVATAR_FLAG_ON_FOOT; } -u8 GetPlayerAvatarGraphicsIdByCurrentState(void) +u16 GetPlayerAvatarGraphicsIdByCurrentState(void) { u8 i; u8 flags = gPlayerAvatar.flags; @@ -1350,7 +1351,7 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void) return 0; } -void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 transitionFlag) +void SetPlayerAvatarExtraStateTransition(u16 graphicsId, u8 transitionFlag) { u8 stateFlag = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); @@ -1388,6 +1389,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) gPlayerAvatar.spriteId = objectEvent->spriteId; gPlayerAvatar.gender = gender; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_CONTROLLABLE | PLAYER_AVATAR_FLAG_ON_FOOT); + CreateFollowerAvatar(); } void SetPlayerInvisibility(bool8 invisible) @@ -1661,6 +1663,12 @@ static void Task_WaitStopSurfing(u8 taskId) ScriptContext2_Disable(); DestroySprite(&gSprites[playerObjEvent->fieldEffectSpriteId]); DestroyTask(taskId); + + if (gSaveBlock2Ptr->follower.inProgress) + { + ObjectEventClearHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + ObjectEventSetHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId], playerObjEvent->facingDirection + 7); + } } } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index eda146725..9f562131d 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -27,6 +27,7 @@ #include "sound.h" #include "start_menu.h" #include "task.h" +#include "follow_me.h" #include "text.h" #include "constants/event_object_movement.h" #include "constants/event_objects.h" @@ -42,8 +43,6 @@ static void FillPalBufferWhite(void); static void Task_ExitDoor(u8); static bool32 WaitForWeatherFadeIn(void); static void Task_SpinEnterWarp(u8 taskId); -static void Task_WarpAndLoadMap(u8 taskId); -static void Task_DoDoorWarp(u8 taskId); static void Task_EnableScriptAfterMusicFade(u8 taskId); // data[0] is used universally by tasks in this file as a state for switches @@ -111,7 +110,7 @@ void WarpFadeOutScreen(void) } } -static void SetPlayerVisibility(bool8 visible) +void SetPlayerVisibility(bool8 visible) { SetPlayerInvisibility(!visible); } @@ -275,6 +274,7 @@ void FieldCB_DefaultWarpExit(void) Overworld_PlaySpecialMapMusic(); WarpFadeInScreen(); SetUpWarpExitTask(); + FollowMe_WarpSetEnd(); ScriptContext2_Enable(); } @@ -323,6 +323,7 @@ static void Task_ExitDoor(u8 taskId) switch (task->tState) { case 0: + HideFollower(); SetPlayerVisibility(FALSE); FreezeObjectEvents(); PlayerGetDestCoords(x, y); @@ -352,6 +353,8 @@ static void Task_ExitDoor(u8 taskId) case 3: if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { + FollowMe_SetIndicatorToComeOutDoor(); + FollowMe_WarpSetEnd(); UnfreezeObjectEvents(); task->tState = 4; } @@ -372,6 +375,7 @@ static void Task_ExitNonAnimDoor(u8 taskId) switch (task->tState) { case 0: + HideFollower(); SetPlayerVisibility(FALSE); FreezeObjectEvents(); PlayerGetDestCoords(x, y); @@ -390,6 +394,8 @@ static void Task_ExitNonAnimDoor(u8 taskId) case 2: if (IsPlayerStandingStill()) { + FollowMe_SetIndicatorToComeOutDoor(); + FollowMe_WarpSetEnd(); UnfreezeObjectEvents(); task->tState = 3; } @@ -643,7 +649,7 @@ void ReturnFromLinkRoom(void) CreateTask(Task_ReturnToWorldFromLinkRoom, 10); } -static void Task_WarpAndLoadMap(u8 taskId) +void Task_WarpAndLoadMap(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -674,59 +680,6 @@ static void Task_WarpAndLoadMap(u8 taskId) } } -static void Task_DoDoorWarp(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - s16 *x = &task->data[2]; - s16 *y = &task->data[3]; - - switch (task->tState) - { - case 0: - FreezeObjectEvents(); - PlayerGetDestCoords(x, y); - PlaySE(GetDoorSoundEffect(*x, *y - 1)); - task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); - task->tState = 1; - break; - case 1: - if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) - { - u8 objEventId; - objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); - ObjectEventClearHeldMovementIfActive(&gObjectEvents[objEventId]); - objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); - ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_WALK_NORMAL_UP); - task->tState = 2; - } - break; - case 2: - if (IsPlayerStandingStill()) - { - u8 objEventId; - task->data[1] = FieldAnimateDoorClose(*x, *y - 1); - objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); - ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]); - SetPlayerVisibility(FALSE); - task->tState = 3; - } - break; - case 3: - if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) - { - task->tState = 4; - } - break; - case 4: - TryFadeOutOldMapMusic(); - WarpFadeOutScreen(); - PlayRainStoppingSoundEffect(); - task->tState = 0; - task->func = Task_WarpAndLoadMap; - break; - } -} - static void Task_DoContestHallWarp(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -1010,6 +963,7 @@ static void Task_SpinEnterWarp(u8 taskId) case 1: if (WaitForWeatherFadeIn() && IsPlayerSpinEntranceActive() != TRUE) { + FollowMe_WarpSetEnd(); UnfreezeObjectEvents(); ScriptContext2_Disable(); DestroyTask(taskId); diff --git a/src/field_specials.c b/src/field_specials.c index d97a17a7d..aca6a59b9 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -90,7 +90,7 @@ void SetPlayerGotFirstFans(void); u16 GetNumFansOfPlayerInTrainerFanClub(void); static void RecordCyclingRoadResults(u32, u8); -static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEventId, u8 paletteNum); +static void LoadLinkPartnerObjectEventSpritePalette(u16 graphicsId, u8 localEventId, u8 paletteNum); static void Task_PetalburgGymSlideOpenRoomDoors(u8 taskId); static void PetalburgGymSetDoorMetatiles(u8 roomNumber, u16 metatileId); static void Task_PCTurnOnEffect(u8); @@ -502,7 +502,7 @@ void SpawnLinkPartnerObjectEvent(void) }; u8 myLinkPlayerNumber; u8 playerFacingDirection; - u8 linkSpriteId; + u16 linkSpriteId; u8 i; myLinkPlayerNumber = GetMultiplayerId(); @@ -563,7 +563,7 @@ void SpawnLinkPartnerObjectEvent(void) } } -static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEventId, u8 paletteNum) +static void LoadLinkPartnerObjectEventSpritePalette(u16 graphicsId, u8 localEventId, u8 paletteNum) { u8 adjustedPaletteNum; // Note: This temp var is necessary; paletteNum += 6 doesn't match. @@ -1498,6 +1498,21 @@ u8 GetLeadMonIndex(void) return 0; } +u8 GetLeadMonNotFaintedIndex(void) +{ + u8 i; + u8 partyCount = CalculatePlayerPartyCount(); + for(i = 0; i < partyCount; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != 0 + && GetMonData(&gPlayerParty[i], MON_DATA_HP, NULL) != 0) + { + return i; + } + } + return 0; +} + u16 ScriptGetPartyMonSpecies(void) { return GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_SPECIES2, NULL); diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 6f4ce8002..1cadf051a 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -29,7 +29,7 @@ static void FieldCallback_RockSmash(void); static void FieldMove_RockSmash(void); // text -bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) +bool8 CheckObjectGraphicsInFrontOfPlayer(u16 graphicsId) { u8 objEventId; diff --git a/src/follow_me.c b/src/follow_me.c new file mode 100644 index 000000000..157af8152 --- /dev/null +++ b/src/follow_me.c @@ -0,0 +1,1472 @@ +#include "global.h" +#include "follow_me.h" +#include "event_object_movement.h" +#include "field_door.h" +#include "field_effect.h" +#include "field_effect_helpers.h" +#include "field_player_avatar.h" +#include "field_control_avatar.h" +#include "field_screen_effect.h" +#include "field_weather.h" +#include "fieldmap.h" +#include "fldeff_misc.h" +#include "item.h" +#include "task.h" +#include "metatile_behavior.h" +#include "overworld.h" +#include "script.h" +#include "event_data.h" +#include "sound.h" +#include "trig.h" +#include "metatile_behavior.h" +#include "constants/event_object_movement.h" +#include "constants/event_objects.h" +#include "constants/songs.h" +#include "constants/map_types.h" +#include "constants/field_effects.h" +#include "constants/metatile_behaviors.h" +/* + -FollowMe_StairsMoveHook ? + -FollowMe_WarpStairsEndHook ? +*/ + +/* +Known Issues: + -follower gets messed up if you go into a map with a maximum number of event objects + -inherits incorrect palette, may get directionally confused +*/ + +// Defines +#define PLAYER_AVATAR_FLAG_BIKE PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE + +struct FollowerSpriteGraphics +{ + u16 normalId; + u16 machBikeId; + u16 acroBikeId; + u16 surfId; + u16 underwaterId; +}; + +// EWRAM +//EWRAM_DATA struct Follower gSaveBlock2Ptr->follower = {0}; + +// Function Declarations +static u8 GetFollowerMapObjId(void); +static u16 GetFollowerSprite(void); +static void TryUpdateFollowerSpriteUnderwater(void); +static void Task_ReallowPlayerMovement(u8 taskId); +static u8 DetermineFollowerDirection(struct ObjectEvent* player, struct ObjectEvent* follower); +static void PlayerLogCoordinates(struct ObjectEvent* player); +static u8 DetermineFollowerState(struct ObjectEvent* follower, u8 state, u8 direction); +static bool8 IsStateMovement(u8 state); +static u8 ReturnFollowerDelayedState(u8 direction); +static void SetSurfJump(void); +static void Task_BindSurfBlobToFollower(u8 taskId); +static void SetUpSurfBlobFieldEffect(struct ObjectEvent* npc); +static void SetSurfDismount(void); +static void Task_FinishSurfDismount(u8 taskId); +static void Task_FollowerOutOfDoor(u8 taskId); +static void Task_FollowerHandleIndoorStairs(u8 taskId); +static void Task_FollowerHandleEscalator(u8 taskId); +static void Task_FollowerHandleEscalatorFinish(u8 taskId); +static void CalculateFollowerEscalatorTrajectoryUp(struct Task *task); +static void CalculateFollowerEscalatorTrajectoryDown(struct Task *task); +static void TurnNPCIntoFollower(u8 localId, u16 followerFlags); + +// Const Data +static const struct FollowerSpriteGraphics gFollowerAlternateSprites[] = +{ + //FORMAT: + //{WALKING/RUNNING SPRITE ID, MACH BIKE SPRITE ID, ACRO BIKE SPRITE ID, SURFING SPRITE ID}, + [0] = + { + .normalId = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL, + .machBikeId = OBJ_EVENT_GFX_RIVAL_MAY_MACH_BIKE, + .acroBikeId = OBJ_EVENT_GFX_RIVAL_MAY_ACRO_BIKE, + .surfId = OBJ_EVENT_GFX_RIVAL_MAY_SURFING, + .underwaterId = OBJ_EVENT_GFX_MAY_UNDERWATER, + }, + +}; + +// Functions +u8 GetFollowerObjectId(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return OBJECT_EVENTS_COUNT; + + return gSaveBlock2Ptr->follower.objId; +} + +u8 GetFollowerLocalId(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return 0; + + return gObjectEvents[gSaveBlock2Ptr->follower.objId].localId; +} + +const u8* GetFollowerScriptPointer(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return NULL; + + return gSaveBlock2Ptr->follower.script; +} + +void HideFollower(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + if (gSaveBlock2Ptr->follower.createSurfBlob == 2 || gSaveBlock2Ptr->follower.createSurfBlob == 3) + { + SetSurfBlob_BobState(gObjectEvents[GetFollowerMapObjId()].fieldEffectSpriteId, 2); + DestroySprite(&gSprites[gObjectEvents[GetFollowerMapObjId()].fieldEffectSpriteId]); + gObjectEvents[GetFollowerMapObjId()].fieldEffectSpriteId = 0; //Unbind + } + + gObjectEvents[GetFollowerMapObjId()].invisible = TRUE; +} + +/* +void IsFollowerStoppingRockClimb(void) +{ + gSpecialVar_Result = FALSE; + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + gSpecialVar_Result = (gSaveBlock2Ptr->follower.flags & FOLLOWER_FLAG_CAN_ROCK_CLIMB) == 0; +} +*/ + +void FollowMe_SetIndicatorToComeOutDoor(void) +{ + if (gSaveBlock2Ptr->follower.inProgress) + gSaveBlock2Ptr->follower.comeOutDoorStairs = 1; +} + +void FollowMe_SetIndicatorToRecreateSurfBlob(void) +{ + if (gSaveBlock2Ptr->follower.inProgress) + gSaveBlock2Ptr->follower.createSurfBlob = 2; +} + +void FollowMe_TryRemoveFollowerOnWhiteOut(void) +{ + if (gSaveBlock2Ptr->follower.inProgress) + { + if (gSaveBlock2Ptr->follower.flags & FOLLOWER_FLAG_CLEAR_ON_WHITE_OUT) + gSaveBlock2Ptr->follower.inProgress = FALSE; + else + FollowMe_WarpSetEnd(); + } +} + +static u8 GetFollowerMapObjId(void) +{ + return gSaveBlock2Ptr->follower.objId; +} + +static u16 GetFollowerSprite(void) +{ + u32 i; + + switch (gSaveBlock2Ptr->follower.currentSprite) + { + case FOLLOWER_SPRITE_INDEX_MACH_BIKE: + for (i = 0; i < NELEMS(gFollowerAlternateSprites); i++) + { + if (gFollowerAlternateSprites[i].normalId == gSaveBlock2Ptr->follower.graphicsId) + return gFollowerAlternateSprites[i].machBikeId; + } + break; + case FOLLOWER_SPRITE_INDEX_ACRO_BIKE: + for (i = 0; i < NELEMS(gFollowerAlternateSprites); i++) + { + if (gFollowerAlternateSprites[i].normalId == gSaveBlock2Ptr->follower.graphicsId) + return gFollowerAlternateSprites[i].acroBikeId; + } + break; + case FOLLOWER_SPRITE_INDEX_SURF: + for (i = 0; i < NELEMS(gFollowerAlternateSprites); i++) + { + if (gFollowerAlternateSprites[i].normalId == gSaveBlock2Ptr->follower.graphicsId) + return gFollowerAlternateSprites[i].surfId; + } + break; + case FOLLOWER_SPRITE_INDEX_UNDERWATER: + for (i = 0; i < NELEMS(gFollowerAlternateSprites); i++) + { + if (gFollowerAlternateSprites[i].normalId == gSaveBlock2Ptr->follower.graphicsId) + return gFollowerAlternateSprites[i].underwaterId; + } + break; + } + + return gSaveBlock2Ptr->follower.graphicsId; +} + +static void TryUpdateFollowerSpriteUnderwater(void) +{ + if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) + { + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_UNDERWATER); + + follower = &gObjectEvents[GetFollowerMapObjId()]; //Can change on reload sprite + follower->fieldEffectSpriteId = StartUnderwaterSurfBlobBobbing(follower->spriteId); + } +} + +//Actual Follow Me +void FollowMe(struct ObjectEvent* npc, u8 state, bool8 ignoreScriptActive) +{ + struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + u8 dir; + u8 newState; + u8 taskId; + + if (player != npc) //Only when the player moves + return; + else if (!gSaveBlock2Ptr->follower.inProgress) + return; + else if (ScriptContext2_IsEnabled() && !ignoreScriptActive) + return; //Don't follow during a script + + + // fix post-surf jump + if ((gSaveBlock2Ptr->follower.currentSprite == FOLLOWER_SPRITE_INDEX_SURF) && !(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) && follower->fieldEffectSpriteId == 0) + { + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_NORMAL); + gSaveBlock2Ptr->follower.createSurfBlob = 0; + } + + //Check if state would cause hidden follower to reappear + if (IsStateMovement(state) && gSaveBlock2Ptr->follower.warpEnd) + { + gSaveBlock2Ptr->follower.warpEnd = 0; + + if (gSaveBlock2Ptr->follower.comeOutDoorStairs == 1) + { + gPlayerAvatar.preventStep = TRUE; + taskId = CreateTask(Task_FollowerOutOfDoor, 1); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[2] = follower->currentCoords.x; + gTasks[taskId].data[3] = follower->currentCoords.y; + goto RESET; + } + else if (gSaveBlock2Ptr->follower.comeOutDoorStairs == 2) + { + gSaveBlock2Ptr->follower.comeOutDoorStairs = 0; + } + + // This makes sure the follower is still invisible after diving or surfacing + if(!(TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_UNDERWATER) || TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))) + follower->invisible = FALSE; + MoveObjectEventToMapCoords(follower, player->currentCoords.x, player->currentCoords.y); + ObjectEventTurn(follower, player->facingDirection); //The follower should be facing the same direction as the player when it comes out of hiding + + /*if (gSaveBlock2Ptr->follower.createSurfBlob == 2) //Recreate surf blob + { + SetUpSurfBlobFieldEffect(follower); + follower->fieldEffectSpriteId = FieldEffectStart(FLDEFF_SURF_BLOB); + SetSurfBlob_BobState(follower->fieldEffectSpriteId, 1); + } + else + { + TryUpdateFollowerSpriteUnderwater(); + }*/ + } + + dir = DetermineFollowerDirection(player, follower); + + if (dir == DIR_NONE) + goto RESET; + + newState = DetermineFollowerState(follower, state, dir); + if (newState == MOVEMENT_INVALID) + goto RESET; + + /*if (gSaveBlock2Ptr->follower.createSurfBlob == 1) //Get on Surf Blob + { + gSaveBlock2Ptr->follower.createSurfBlob = 2; + gPlayerAvatar.preventStep = TRUE; //Wait for finish + SetSurfJump(); + goto RESET; + } + else if (gSaveBlock2Ptr->follower.createSurfBlob == 3) //Get off Surf Blob + { + gSaveBlock2Ptr->follower.createSurfBlob = 0; + gPlayerAvatar.preventStep = TRUE; //Wait for finish + SetSurfDismount(); + goto RESET; + }*/ + + ObjectEventClearHeldMovementIfActive(follower); + ObjectEventSetHeldMovement(follower, newState); + PlayerLogCoordinates(player); + + switch (newState) + { + case MOVEMENT_ACTION_JUMP_2_DOWN ... MOVEMENT_ACTION_JUMP_2_RIGHT: + if(follower->invisible == FALSE) + { + CreateTask(Task_ReallowPlayerMovement, 1); //Synchronize movements on stairs and ledges + gPlayerAvatar.preventStep = TRUE; //allow follower to catch up + } + } + +RESET: + ObjectEventClearHeldMovementIfFinished(follower); +} + +static void Task_ReallowPlayerMovement(u8 taskId) +{ + bool8 animStatus = ObjectEventClearHeldMovementIfFinished(&gObjectEvents[GetFollowerMapObjId()]); + if (animStatus == 0) + { + /*if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) + && ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId])) + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); //Temporarily stop running*/ + return; + } + + gPlayerAvatar.preventStep = FALSE; + DestroyTask(taskId); +} + +static u8 DetermineFollowerDirection(struct ObjectEvent* player, struct ObjectEvent* follower) +{ + //Move the follower towards the player + s8 delta_x = follower->currentCoords.x - player->currentCoords.x; + s8 delta_y = follower->currentCoords.y - player->currentCoords.y; + + if (delta_x < 0) + return DIR_EAST; + else if (delta_x > 0) + return DIR_WEST; + + if (delta_y < 0) + return DIR_SOUTH; + else if (delta_y > 0) + return DIR_NORTH; + + return DIR_NONE; +} + +static void PlayerLogCoordinates(struct ObjectEvent* player) +{ + gSaveBlock2Ptr->follower.log.x = player->currentCoords.x; + gSaveBlock2Ptr->follower.log.y = player->currentCoords.y; +} + +#define RETURN_STATE(state, dir) return newState == MOVEMENT_INVALID ? state + (dir - 1) : ReturnFollowerDelayedState(dir - 1); +static u8 DetermineFollowerState(struct ObjectEvent* follower, u8 state, u8 direction) +{ + u8 newState = MOVEMENT_INVALID; + #if SIDEWAYS_STAIRS_IMPLEMENTED == TRUE + u8 collision = COLLISION_NONE; + s16 followerX = follower->currentCoords.x; + s16 followerY = follower->currentCoords.y; + u8 currentBehavior = MapGridGetMetatileBehaviorAt(followerX, followerY); + u8 nextBehavior; + + MoveCoords(direction, &followerX, &followerY); + nextBehavior = MapGridGetMetatileBehaviorAt(followerX, followerY); + #endif + + if (IsStateMovement(state) && gSaveBlock2Ptr->follower.delayedState) + newState = gSaveBlock2Ptr->follower.delayedState + direction; + + //Clear ice tile stuff + follower->disableAnim = FALSE; //follower->field1 &= 0xFB; + + #if SIDEWAYS_STAIRS_IMPLEMENTED == TRUE + // clear overwrite movement + follower->directionOverwrite = DIR_NONE; + + //sideways stairs checks + collision = GetSidewaysStairsCollision(follower, direction, currentBehavior, nextBehavior, collision); + switch (collision) + { + case COLLISION_SIDEWAYS_STAIRS_TO_LEFT: + follower->directionOverwrite = GetLeftSideStairsDirection(direction); + break; + case COLLISION_SIDEWAYS_STAIRS_TO_RIGHT: + follower->directionOverwrite = GetRightSideStairsDirection(direction); + break; + } + #endif + + switch (state) + { + case MOVEMENT_ACTION_WALK_SLOW_DOWN ... MOVEMENT_ACTION_WALK_SLOW_RIGHT: + // Slow walk + RETURN_STATE(MOVEMENT_ACTION_WALK_SLOW_DOWN, direction); + + case MOVEMENT_ACTION_WALK_NORMAL_DOWN ... MOVEMENT_ACTION_WALK_NORMAL_RIGHT: + // normal walk + RETURN_STATE(MOVEMENT_ACTION_WALK_NORMAL_DOWN, direction); + + case MOVEMENT_ACTION_JUMP_2_DOWN ... MOVEMENT_ACTION_JUMP_2_RIGHT: + // If the follower is invisible due to bike riding, just walk + if(follower->invisible == FALSE) + { + // Ledge jump + if (((newState - direction) >= MOVEMENT_ACTION_JUMP_2_DOWN && (newState - direction) <= MOVEMENT_ACTION_JUMP_2_RIGHT) + || ((newState - direction) >= 0x84 && (newState - direction) <= 0x87)) //Previously jumped + { + newState = MOVEMENT_INVALID; + RETURN_STATE(MOVEMENT_ACTION_JUMP_2_DOWN, direction); //Jump right away + } + + gSaveBlock2Ptr->follower.delayedState = MOVEMENT_ACTION_JUMP_2_DOWN; + RETURN_STATE(MOVEMENT_ACTION_WALK_NORMAL_DOWN, direction); + } + else + RETURN_STATE(MOVEMENT_ACTION_WALK_NORMAL_DOWN, direction); + + case MOVEMENT_ACTION_WALK_FAST_DOWN ... MOVEMENT_ACTION_WALK_FAST_RIGHT: + // Handle player on waterfall + if (PlayerIsUnderWaterfall(&gObjectEvents[gPlayerAvatar.objectEventId]) && (state == MOVEMENT_ACTION_WALK_FAST_UP)) + return MOVEMENT_INVALID; + + //Handle ice tile (some walking animation) - Set a bit to freeze the follower's animation + if (MetatileBehavior_IsIce(follower->currentMetatileBehavior) || MetatileBehavior_IsTrickHouseSlipperyFloor(follower->currentMetatileBehavior)) + follower->disableAnim = TRUE; + + RETURN_STATE(MOVEMENT_ACTION_WALK_FAST_DOWN, direction); + + case MOVEMENT_ACTION_WALK_FASTER_DOWN ... MOVEMENT_ACTION_WALK_FASTER_RIGHT: + // mach bike + if (MetatileBehavior_IsIce(follower->currentMetatileBehavior) || MetatileBehavior_IsTrickHouseSlipperyFloor(follower->currentMetatileBehavior)) + follower->disableAnim = TRUE; + + RETURN_STATE(MOVEMENT_ACTION_WALK_FASTER_DOWN, direction); + + // acro bike + case MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN ... MOVEMENT_ACTION_RIDE_WATER_CURRENT_RIGHT: + // Handle player on waterfall + if (PlayerIsUnderWaterfall(&gObjectEvents[gPlayerAvatar.objectEventId]) && IsPlayerSurfingNorth()) + //if (PlayerIsUnderWaterfall(&gObjectEvents[gPlayerAvatar.objectEventId]) && (state == MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN)) + return MOVEMENT_INVALID; + + RETURN_STATE(MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN, direction); //regular movement + + + case MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN ... MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT: + if(follower->invisible == FALSE) + { + switch(state) + { + case MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN ... MOVEMENT_ACTION_ACRO_WHEELIE_FACE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_WHEELIE_FACE_DOWN, direction); + case MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN ... MOVEMENT_ACTION_ACRO_POP_WHEELIE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_POP_WHEELIE_DOWN, direction); + case MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN ... MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_END_WHEELIE_FACE_DOWN, direction); + case MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN ... MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_WHEELIE_HOP_FACE_DOWN, direction); + case MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN ... MOVEMENT_ACTION_ACRO_WHEELIE_HOP_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_WHEELIE_HOP_DOWN, direction); + case MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN ... MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_WHEELIE_JUMP_DOWN, direction); + case MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN ... MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_WHEELIE_IN_PLACE_DOWN, direction); + case MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN ... MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_POP_WHEELIE_MOVE_DOWN, direction); + case MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN ... MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_WHEELIE_MOVE_DOWN, direction); + case MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN ... MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_ACRO_END_WHEELIE_MOVE_DOWN, direction); + } + } + else + RETURN_STATE(MOVEMENT_ACTION_WALK_NORMAL_DOWN, direction); + + // Sliding + case MOVEMENT_ACTION_SLIDE_DOWN ... MOVEMENT_ACTION_SLIDE_RIGHT: + RETURN_STATE(MOVEMENT_ACTION_SLIDE_DOWN, direction); + case MOVEMENT_ACTION_PLAYER_RUN_DOWN ... MOVEMENT_ACTION_PLAYER_RUN_RIGHT: + //Running frames + if (gSaveBlock2Ptr->follower.flags & FOLLOWER_FLAG_HAS_RUNNING_FRAMES) + RETURN_STATE(MOVEMENT_ACTION_PLAYER_RUN_DOWN, direction); + + RETURN_STATE(MOVEMENT_ACTION_WALK_FAST_DOWN, direction); + case MOVEMENT_ACTION_JUMP_SPECIAL_DOWN ... MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT: + gSaveBlock2Ptr->follower.delayedState = MOVEMENT_ACTION_JUMP_SPECIAL_DOWN; + RETURN_STATE(MOVEMENT_ACTION_WALK_NORMAL_DOWN, direction); + case MOVEMENT_ACTION_JUMP_DOWN ... MOVEMENT_ACTION_JUMP_RIGHT: + if(gObjectEvents[gSaveBlock2Ptr->follower.objId].invisible == FALSE) + gSaveBlock2Ptr->follower.delayedState = MOVEMENT_ACTION_JUMP_DOWN; + RETURN_STATE(MOVEMENT_ACTION_WALK_NORMAL_DOWN, direction); + + // run slow + #ifdef MOVEMENT_ACTION_RUN_DOWN_SLOW + case MOVEMENT_ACTION_RUN_DOWN_SLOW ... MOVEMENT_ACTION_RUN_RIGHT_SLOW: + if (gSaveBlock2Ptr->follower.flags & FOLLOWER_FLAG_HAS_RUNNING_FRAMES) + RETURN_STATE(MOVEMENT_ACTION_RUN_DOWN_SLOW, direction); + + RETURN_STATE(MOVEMENT_ACTION_WALK_NORMAL_DOWN, direction); + #endif + + default: + return MOVEMENT_INVALID; + } + + return newState; +} + +static bool8 IsStateMovement(u8 state) +{ + switch (state) + { + case MOVEMENT_ACTION_FACE_DOWN: + case MOVEMENT_ACTION_FACE_UP: + case MOVEMENT_ACTION_FACE_LEFT: + case MOVEMENT_ACTION_FACE_RIGHT: + //case MOVEMENT_ACTION_FACE_DOWN_FAST: + //case MOVEMENT_ACTION_FACE_UP_FAST: + //case MOVEMENT_ACTION_FACE_LEFT_FAST: + //case MOVEMENT_ACTION_FACE_RIGHT_FAST: + case MOVEMENT_ACTION_DELAY_1: + case MOVEMENT_ACTION_DELAY_2: + case MOVEMENT_ACTION_DELAY_4: + case MOVEMENT_ACTION_DELAY_8: + case MOVEMENT_ACTION_DELAY_16: + case MOVEMENT_ACTION_FACE_PLAYER: + case MOVEMENT_ACTION_FACE_AWAY_PLAYER: + case MOVEMENT_ACTION_LOCK_FACING_DIRECTION: + case MOVEMENT_ACTION_UNLOCK_FACING_DIRECTION: + case MOVEMENT_ACTION_SET_INVISIBLE: + case MOVEMENT_ACTION_SET_VISIBLE: + case MOVEMENT_ACTION_EMOTE_EXCLAMATION_MARK: + case MOVEMENT_ACTION_EMOTE_QUESTION_MARK: + case MOVEMENT_ACTION_EMOTE_HEART: + //case MOVEMENT_ACTION_EMOTE_CROSS: + //case MOVEMENT_ACTION_EMOTE_DOUBLE_EXCLAMATION_MARK: + //case MOVEMENT_ACTION_EMOTE_HAPPY: + case MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_DOWN: + case MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_UP: + case MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_LEFT: + case MOVEMENT_ACTION_WALK_IN_PLACE_NORMAL_RIGHT: + case MOVEMENT_ACTION_WALK_IN_PLACE_FAST_DOWN: + case MOVEMENT_ACTION_WALK_IN_PLACE_FAST_UP: + case MOVEMENT_ACTION_WALK_IN_PLACE_FAST_LEFT: + case MOVEMENT_ACTION_WALK_IN_PLACE_FAST_RIGHT: + case MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_DOWN: + case MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_UP: + case MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_LEFT: + case MOVEMENT_ACTION_WALK_IN_PLACE_FASTER_RIGHT: + case MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN: + case MOVEMENT_ACTION_JUMP_IN_PLACE_UP: + case MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT: + case MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT: + case MOVEMENT_ACTION_JUMP_IN_PLACE_DOWN_UP: + case MOVEMENT_ACTION_JUMP_IN_PLACE_UP_DOWN: + case MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT_RIGHT: + case MOVEMENT_ACTION_JUMP_IN_PLACE_RIGHT_LEFT: + return FALSE; + } + + return TRUE; +} + +static u8 ReturnFollowerDelayedState(u8 direction) +{ + u8 newState = gSaveBlock2Ptr->follower.delayedState; + gSaveBlock2Ptr->follower.delayedState = 0; + + /* + #ifdef MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT + switch (newState) + { + case MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT ... MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT: + case MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_UP_LEFT_RUNNING ... MOVEMENT_ACTION_WALK_STAIRS_DIAGONAL_DOWN_RIGHT_RUNNING: + case MOVEMENT_ACTION_RIDE_WATER_CURRENT_UP_LEFT ... MOVEMENT_ACTION_RIDE_WATER_CURRENT_DOWN_RIGHT: + return newState; //Each its own movement, so don't modify direction + } + #endif + */ + + return newState + direction; +} + +#define LEDGE_FRAMES_MULTIPLIER 2 + +//extern void (**stepspeeds[5])(struct Sprite*, u8); +//extern const u16 stepspeed_seq_length[5]; +void FollowMe_Ledges(struct ObjectEvent* npc, struct Sprite* sprite, u16* ledgeFramesTbl) +{ + u8 speed; + u16 frameCount; + u8 currentFrame; + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + if (follower == npc) + speed = gPlayerAvatar.runningState ? 3 : 1; + else + speed = 0; + + //Calculate the frames for the jump + frameCount = GetMiniStepCount(speed) * LEDGE_FRAMES_MULTIPLIER; //in event_object_movement.c + ledgeFramesTbl[sprite->data[4]] = frameCount; + + //Call the step shifter + currentFrame = sprite->data[6] / LEDGE_FRAMES_MULTIPLIER; + //stepspeeds[speed][currentFrame](sprite, sprite->data[3]); + RunMiniStep(sprite, speed, currentFrame); //in event_object_movement.c +} + +bool8 FollowMe_IsCollisionExempt(struct ObjectEvent* obstacle, struct ObjectEvent* collider) +{ + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.objectEventId]; + + if (!gSaveBlock2Ptr->follower.inProgress) + return FALSE; + + if (obstacle == follower && collider == player) + return TRUE; + + return FALSE; +} + +/*void FollowMe_FollowerToWater(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + //Prepare for making the follower do the jump and spawn the surf head + //right in front of the follower's location. + FollowMe(&gObjectEvents[gPlayerAvatar.objectEventId], MOVEMENT_ACTION_JUMP_DOWN, TRUE); + gSaveBlock2Ptr->follower.createSurfBlob = 1; +}*/ + +/*void FollowMe_BindToSurbBlobOnReloadScreen(void) +{ + struct ObjectEvent* follower; + + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + follower = &gObjectEvents[GetFollowerMapObjId()]; + TryUpdateFollowerSpriteUnderwater(); + + if (gSaveBlock2Ptr->follower.createSurfBlob != 2 && gSaveBlock2Ptr->follower.createSurfBlob != 3) + return; + + //Spawn surfhead under follower + SetUpSurfBlobFieldEffect(follower); + follower->fieldEffectSpriteId = FieldEffectStart(FLDEFF_SURF_BLOB); + SetSurfBlob_BobState(follower->fieldEffectSpriteId, 1); +}*/ + +/*static void SetSurfJump(void) +{ + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + u8 direction; + u8 jumpState; + + //Reset NPC movement bits + ObjectEventClearHeldMovement(follower); + + //Jump animation according to direction + direction = DetermineFollowerDirection(&gObjectEvents[gPlayerAvatar.objectEventId], follower); + jumpState = GetJumpMovementAction(direction); + SetUpSurfBlobFieldEffect(follower); + + //Adjust surf head spawn location infront of follower + switch (direction) + { + case DIR_SOUTH: + gFieldEffectArguments[1]++; //effect_y + break; + case DIR_NORTH: + gFieldEffectArguments[1]--; + break; + case DIR_WEST: + gFieldEffectArguments[0]--; //effect_x + break; + default: //DIR_EAST + gFieldEffectArguments[0]++; + }; + + //Execute, store sprite ID in fieldEffectSpriteId and bind surf blob + follower->fieldEffectSpriteId = FieldEffectStart(FLDEFF_SURF_BLOB); + CreateTask(Task_BindSurfBlobToFollower, 0x1); + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_SURF); + + follower = &gObjectEvents[GetFollowerMapObjId()]; + ObjectEventSetHeldMovement(follower, jumpState); +}*/ + +/*static void Task_BindSurfBlobToFollower(u8 taskId) +{ + struct ObjectEvent* npc = &gObjectEvents[GetFollowerMapObjId()]; + bool8 animStatus = ObjectEventClearHeldMovementIfFinished(npc); //Wait jump animation + if (animStatus == 0) + return; + + //Bind objs + SetSurfBlob_BobState(npc->fieldEffectSpriteId, 0x1); + UnfreezeObjectEvents(); + DestroyTask(taskId); + gPlayerAvatar.preventStep = FALSE; //Player can move again + return; +}*/ + +/*static void SetUpSurfBlobFieldEffect(struct ObjectEvent* npc) +{ + //Set up gFieldEffectArguments for execution + gFieldEffectArguments[0] = npc->currentCoords.x; //effect_x + gFieldEffectArguments[1] = npc->currentCoords.y; //effect_y + gFieldEffectArguments[2] = gSaveBlock2Ptr->follower.objId; //objId +}*/ + +/*void PrepareFollowerDismountSurf(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + FollowMe(&gObjectEvents[gPlayerAvatar.objectEventId], MOVEMENT_ACTION_WALK_NORMAL_DOWN, TRUE); + gSaveBlock2Ptr->follower.createSurfBlob = 3; +}*/ + +/*static void SetSurfDismount(void) +{ + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + u8 direction; + u8 jumpState; + u8 task; + + ObjectEventClearHeldMovement(follower); + + //Jump animation according to direction + direction = DetermineFollowerDirection(&gObjectEvents[gPlayerAvatar.objectEventId], follower); + jumpState = GetJumpMovementAction(direction); + + //Unbind and destroy Surf Blob + task = CreateTask(Task_FinishSurfDismount, 1); + gTasks[task].data[0] = follower->fieldEffectSpriteId; + SetSurfBlob_BobState(follower->fieldEffectSpriteId, 2); + follower->fieldEffectSpriteId = 0; //Unbind + FollowMe_HandleSprite(); + + follower = &gObjectEvents[GetFollowerMapObjId()]; //Can change after sprite reload + ObjectEventSetHeldMovement(follower, jumpState); +}*/ + +/*static void Task_FinishSurfDismount(u8 taskId) +{ + struct ObjectEvent* npc = &gObjectEvents[GetFollowerMapObjId()]; + bool8 animStatus = ObjectEventClearHeldMovementIfFinished(npc); //Wait animation + + if (animStatus == 0) + { + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) && ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId])) + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); //Temporarily stop running + + return; + } + + DestroySprite(&gSprites[gTasks[taskId].data[0]]); + UnfreezeObjectEvents(); + DestroyTask(taskId); + gPlayerAvatar.preventStep = FALSE; +}*/ + +void Task_DoDoorWarp(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + s16 *x = &task->data[2]; + s16 *y = &task->data[3]; + u8 playerObjId = gPlayerAvatar.objectEventId; + u8 followerObjId = GetFollowerObjectId(); + + switch (task->data[0]) + { + case 0: + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); //Stop running + + gSaveBlock2Ptr->follower.comeOutDoorStairs = 0; //Just in case came out and when right back in + FreezeObjectEvents(); + PlayerGetDestCoords(x, y); + PlaySE(GetDoorSoundEffect(*x, *y - 1)); + task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); + task->data[0] = 1; + break; + case 1: + if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) + { + ObjectEventClearHeldMovementIfActive(&gObjectEvents[playerObjId]); + ObjectEventSetHeldMovement(&gObjectEvents[playerObjId], MOVEMENT_ACTION_WALK_NORMAL_UP); + + if (gSaveBlock2Ptr->follower.inProgress && !gObjectEvents[followerObjId].invisible) + { + u8 newState = DetermineFollowerState(&gObjectEvents[followerObjId], MOVEMENT_ACTION_WALK_NORMAL_UP, + DetermineFollowerDirection(&gObjectEvents[playerObjId], &gObjectEvents[followerObjId])); + ObjectEventClearHeldMovementIfActive(&gObjectEvents[followerObjId]); + ObjectEventSetHeldMovement(&gObjectEvents[followerObjId], newState); + } + + task->data[0] = 2; + } + break; + case 2: + if (IsPlayerStandingStill()) + { + if (!gSaveBlock2Ptr->follower.inProgress || gObjectEvents[followerObjId].invisible) //Don't close door on follower + task->data[1] = FieldAnimateDoorClose(*x, *y - 1); + ObjectEventClearHeldMovementIfFinished(&gObjectEvents[playerObjId]); + SetPlayerVisibility(0); + task->data[0] = 3; + } + break; + case 3: + if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) + { + task->data[0] = 4; + } + break; + case 4: + if (gSaveBlock2Ptr->follower.inProgress) + { + ObjectEventClearHeldMovementIfActive(&gObjectEvents[followerObjId]); + ObjectEventSetHeldMovement(&gObjectEvents[followerObjId], MOVEMENT_ACTION_WALK_NORMAL_UP); + } + + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); + PlayRainStoppingSoundEffect(); + task->data[0] = 0; + task->func = Task_WarpAndLoadMap; + break; + case 5: + TryFadeOutOldMapMusic(); + PlayRainStoppingSoundEffect(); + task->data[0] = 0; + task->func = Task_WarpAndLoadMap; + break; + } +} + +static u8 GetPlayerFaceToDoorDirection(struct ObjectEvent* player, struct ObjectEvent* follower) +{ + s16 delta_x = player->currentCoords.x - follower->currentCoords.x; + + if (delta_x < 0) + return DIR_EAST; + else if (delta_x > 0) + return DIR_WEST; + + return DIR_NORTH; +} + +static void Task_FollowerOutOfDoor(u8 taskId) +{ + struct ObjectEvent *follower = &gObjectEvents[GetFollowerMapObjId()]; + struct ObjectEvent *player = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Task *task = &gTasks[taskId]; + s16 *x = &task->data[2]; + s16 *y = &task->data[3]; + + //if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) && ObjectEventClearHeldMovementIfFinished(player)) + //SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); //Temporarily stop running + + if (ObjectEventClearHeldMovementIfFinished(player)) + ObjectEventTurn(player, GetPlayerFaceToDoorDirection(player, follower)); //The player should face towards the follow as the exit the door + + switch (task->data[0]) + { + case 0: + FreezeObjectEvents(); + task->data[1] = FieldAnimateDoorOpen(follower->currentCoords.x, follower->currentCoords.y); + if (task->data[1] != -1) + PlaySE(GetDoorSoundEffect(*x, *y)); //only play SE for animating doors + + task->data[0] = 1; + break; + case 1: + if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) //if Door isn't still opening + { + follower->invisible = FALSE; + ObjectEventTurn(follower, DIR_SOUTH); //The follower should be facing down when it comes out the door + follower->singleMovementActive = FALSE; + follower->heldMovementActive = FALSE; + ObjectEventSetHeldMovement(follower, MOVEMENT_ACTION_WALK_NORMAL_DOWN); //follower step down + task->data[0] = 2; + } + break; + case 2: + if (/*ObjectEventClearHeldMovementIfFinished(follower)*/follower->movementActionId == 0x9E) + { + task->data[1] = FieldAnimateDoorClose(*x, *y); + task->data[0] = 3; + } + break; + case 3: + if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) //Door is closed + { + UnfreezeObjectEvents(); + task->data[0] = 4; + } + break; + case 4: + FollowMe_HandleSprite(); + gSaveBlock2Ptr->follower.comeOutDoorStairs = 0; + gPlayerAvatar.preventStep = FALSE; //Player can move again + DestroyTask(taskId); + break; + } +} + +void StairsMoveFollower(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + if (!FuncIsActiveTask(Task_FollowerHandleIndoorStairs) && gSaveBlock2Ptr->follower.comeOutDoorStairs != 2) + CreateTask(Task_FollowerHandleIndoorStairs, 1); +} + +static void Task_FollowerHandleIndoorStairs(u8 taskId) +{ + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + gSaveBlock2Ptr->follower.comeOutDoorStairs = 2; //So the task doesn't get created more than once + ObjectEventClearHeldMovementIfActive(follower); + ObjectEventSetHeldMovement(follower, DetermineFollowerState(follower, MOVEMENT_ACTION_WALK_NORMAL_DOWN, DetermineFollowerDirection(player, follower))); + task->data[0]++; + break; + case 1: + if (ObjectEventClearHeldMovementIfFinished(follower)) + { + ObjectEventSetHeldMovement(follower, DetermineFollowerState(follower, MOVEMENT_ACTION_WALK_NORMAL_DOWN, player->movementDirection)); + DestroyTask(taskId); + } + break; + } +} + +void EscalatorMoveFollower(u8 movementType) +{ + u8 taskId; + + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + taskId = CreateTask(Task_FollowerHandleEscalator, 1); + gTasks[taskId].data[1] = movementType; +} + +static void Task_FollowerHandleEscalator(u8 taskId) +{ + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.objectEventId]; + + ObjectEventClearHeldMovementIfActive(follower); + ObjectEventSetHeldMovement(follower, DetermineFollowerState(follower, MOVEMENT_ACTION_WALK_NORMAL_DOWN, DetermineFollowerDirection(player, follower))); + DestroyTask(taskId); +} + +void EscalatorMoveFollowerFinish(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + CreateTask(Task_FollowerHandleEscalatorFinish, 1); +} + +static void Task_FollowerHandleEscalatorFinish(u8 taskId) +{ + s16 x, y; + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct Sprite* sprite = &gSprites[follower->spriteId]; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + MoveObjectEventToMapCoords(follower, player->currentCoords.x, player->currentCoords.y); + PlayerGetDestCoords(&x, &y); + task->data[2] = MapGridGetMetatileBehaviorAt(x, y); + task->data[7] = 0; + task->data[0]++; + break; + case 1: + if (task->data[7]++ < 0x20) //Wait half a second before revealing the follower + break; + + task->data[0]++; + task->data[1] = 16; + CalculateFollowerEscalatorTrajectoryUp(task); + gSaveBlock2Ptr->follower.warpEnd = 0; + gPlayerAvatar.preventStep = TRUE; + ObjectEventSetHeldMovement(follower, GetFaceDirectionMovementAction(DIR_EAST)); + if (task->data[2] == 0x6b) + task->data[0] = 4; + break; + case 2: + follower->invisible = FALSE; + CalculateFollowerEscalatorTrajectoryDown(task); + task->data[0]++; + break; + case 3: + CalculateFollowerEscalatorTrajectoryDown(task); + task->data[2]++; + if (task->data[2] & 1) + { + task->data[1]--; + } + + if (task->data[1] == 0) + { + sprite->x2 = 0; + sprite->y2 = 0; + task->data[0] = 6; + } + break; + case 4: + follower->invisible = FALSE; + CalculateFollowerEscalatorTrajectoryUp(task); + task->data[0]++; + break; + case 5: + CalculateFollowerEscalatorTrajectoryUp(task); + task->data[2]++; + if (task->data[2] & 1) + { + task->data[1]--; + } + + if (task->data[1] == 0) + { + sprite->x2 = 0; + sprite->y2 = 0; + task->data[0]++; + } + break; + case 6: + if (ObjectEventClearHeldMovementIfFinished(follower)) + { + gPlayerAvatar.preventStep = FALSE; + DestroyTask(taskId); + } + } +} + +static void CalculateFollowerEscalatorTrajectoryDown(struct Task *task) +{ + struct Sprite* sprite = &gSprites[gObjectEvents[GetFollowerMapObjId()].spriteId]; + + sprite->x2 = Cos(0x84, task->data[1]); + sprite->y2 = Sin(0x94, task->data[1]); +} + +static void CalculateFollowerEscalatorTrajectoryUp(struct Task *task) +{ + struct Sprite* sprite = &gSprites[gObjectEvents[GetFollowerMapObjId()].spriteId]; + + sprite->x2 = Cos(0x7c, task->data[1]); + sprite->y2 = Sin(0x76, task->data[1]); +} + +bool8 FollowerCanBike(void) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return TRUE; + else if (gSaveBlock2Ptr->follower.flags & FOLLOWER_FLAG_CAN_BIKE) + return TRUE; + else + return FALSE; +} + +void FollowMe_HandleBike(void) +{ + if (gSaveBlock2Ptr->follower.currentSprite == FOLLOWER_SPRITE_INDEX_SURF) //Follower is surfing + return; //Sprite will automatically be adjusted when they finish surfing + + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE && FollowerCanBike() && gSaveBlock2Ptr->follower.comeOutDoorStairs != 1) //Coming out door + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_MACH_BIKE); //Mach Bike on + else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE && FollowerCanBike() && gSaveBlock2Ptr->follower.comeOutDoorStairs != 1) //Coming out door + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_ACRO_BIKE); //Acro Bike on + else + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_NORMAL); +} + +void FollowMe_HandleSprite(void) +{ + if (gSaveBlock2Ptr->follower.flags & FOLLOWER_FLAG_CAN_BIKE) + { + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_MACH_BIKE) + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_MACH_BIKE); + else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ACRO_BIKE) + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_ACRO_BIKE); + } + else if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) + { + TryUpdateFollowerSpriteUnderwater(); + } + else + { + SetFollowerSprite(FOLLOWER_SPRITE_INDEX_NORMAL); + } +} + +void SetFollowerSprite(u8 spriteIndex) +{ + u8 oldSpriteId; + u8 newSpriteId; + u16 newGraphicsId; + struct ObjectEventTemplate clone; + struct ObjectEvent backupFollower; + struct ObjectEvent *follower; + + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + if (gSaveBlock2Ptr->follower.currentSprite == spriteIndex && gObjectEvents[GetFollowerMapObjId()].invisible == FALSE) + return; + + //Save sprite + follower = &gObjectEvents[GetFollowerMapObjId()]; + gSaveBlock2Ptr->follower.currentSprite = spriteIndex; + oldSpriteId = follower->spriteId; + newGraphicsId = GetFollowerSprite(); + + //Reload the entire event object. + //It would usually be enough just to change the sprite Id, but if the original + //sprite and the new sprite have different palettes, the palette would need to + //be reloaded. + backupFollower = *follower; + backupFollower.graphicsId = newGraphicsId; + //backupFollower.graphicsIdUpperByte = newGraphicsId >> 8; + DestroySprite(&gSprites[oldSpriteId]); + RemoveObjectEvent(&gObjectEvents[GetFollowerMapObjId()]); + + clone = *GetObjectEventTemplateByLocalIdAndMap(gSaveBlock2Ptr->follower.map.id, gSaveBlock2Ptr->follower.map.number, gSaveBlock2Ptr->follower.map.group); + clone.graphicsId = newGraphicsId; + //clone.graphicsIdUpperByte = newGraphicsId >> 8; + gSaveBlock2Ptr->follower.objId = TrySpawnObjectEventTemplate(&clone, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, clone.x, clone.y); + + follower = &gObjectEvents[GetFollowerMapObjId()]; + newSpriteId = follower->spriteId; + *follower = backupFollower; + follower->spriteId = newSpriteId; + MoveObjectEventToMapCoords(follower, follower->currentCoords.x, follower->currentCoords.y); + ObjectEventTurn(follower, follower->facingDirection); +} + +void FollowMe_WarpSetEnd(void) +{ + struct ObjectEvent *player; + struct ObjectEvent *follower; + u8 toY; + + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + player = &gObjectEvents[gPlayerAvatar.objectEventId]; + follower = &gObjectEvents[GetFollowerMapObjId()]; + + gSaveBlock2Ptr->follower.warpEnd = 1; + PlayerLogCoordinates(player); + + toY = gSaveBlock2Ptr->follower.comeOutDoorStairs == 1 ? (player->currentCoords.y - 1) : player->currentCoords.y; + MoveObjectEventToMapCoords(follower, player->currentCoords.x, toY); + + follower->facingDirection = player->facingDirection; + follower->movementDirection = player->movementDirection; +} + +void CreateFollowerAvatar(void) +{ + struct ObjectEvent* player; + struct ObjectEventTemplate clone; + + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + player = &gObjectEvents[gPlayerAvatar.objectEventId]; + clone = *GetObjectEventTemplateByLocalIdAndMap(gSaveBlock2Ptr->follower.map.id, gSaveBlock2Ptr->follower.map.number, gSaveBlock2Ptr->follower.map.group); + + clone.graphicsId = GetFollowerSprite(); + //clone.graphicsIdUpperByte = GetFollowerSprite() >> 8; + clone.x = player->currentCoords.x - 7; + clone.y = player->currentCoords.y - 7; + clone.movementType = 0; //Doesn't get to move on its own + + switch (GetPlayerFacingDirection()) + { + case DIR_NORTH: + clone.movementType = MOVEMENT_TYPE_FACE_UP; + break; + case DIR_WEST: + clone.movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + case DIR_EAST: + clone.movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + } + + // Create NPC and store ID + gSaveBlock2Ptr->follower.objId = TrySpawnObjectEventTemplate(&clone, gSaveBlock2Ptr->follower.map.number, gSaveBlock2Ptr->follower.map.group, clone.x, clone.y); + if (gSaveBlock2Ptr->follower.objId == OBJECT_EVENTS_COUNT) + gSaveBlock2Ptr->follower.inProgress = FALSE; //Cancel the following because couldn't load sprite + + if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) + gSaveBlock2Ptr->follower.createSurfBlob = 0; + + gObjectEvents[gSaveBlock2Ptr->follower.objId].invisible = TRUE; +} + +static void TurnNPCIntoFollower(u8 localId, u16 followerFlags) +{ + struct ObjectEvent* follower; + u8 eventObjId; + const u8 *script; + u16 flag; + + if (gSaveBlock2Ptr->follower.inProgress) + return; //Only 1 NPC following at a time + + for (eventObjId = 0; eventObjId < OBJECT_EVENTS_COUNT; eventObjId++) //For each NPC on the map + { + if (!gObjectEvents[eventObjId].active || gObjectEvents[eventObjId].isPlayer) + continue; + + if (gObjectEvents[eventObjId].localId == localId) + { + follower = &gObjectEvents[eventObjId]; + follower->movementType = MOVEMENT_TYPE_NONE; //Doesn't get to move on its own anymore + gSprites[follower->spriteId].callback = MovementType_None; //MovementType_None + SetObjEventTemplateMovementType(localId, 0); + if (CheckFollowerFlag(FOLLOWER_FLAG_CUSTOM_FOLLOW_SCRIPT)) + script = (const u8 *)ReadWord(0); + else + script = GetObjectEventScriptPointerByObjectEventId(eventObjId); + + flag = GetObjectEventTemplateByLocalIdAndMap(follower->localId, follower->mapNum, follower->mapGroup)->flagId; + gSaveBlock2Ptr->follower.inProgress = TRUE; + gSaveBlock2Ptr->follower.objId = eventObjId; + gSaveBlock2Ptr->follower.graphicsId = follower->graphicsId; + gSaveBlock2Ptr->follower.map.id = gObjectEvents[eventObjId].localId; + gSaveBlock2Ptr->follower.map.number = gSaveBlock1Ptr->location.mapNum; + gSaveBlock2Ptr->follower.map.group = gSaveBlock1Ptr->location.mapGroup; + gSaveBlock2Ptr->follower.script = script; + gSaveBlock2Ptr->follower.flag = flag; + gSaveBlock2Ptr->follower.flags = followerFlags; + gSaveBlock2Ptr->follower.createSurfBlob = 0; + gSaveBlock2Ptr->follower.comeOutDoorStairs = 0; + + if (!(gSaveBlock2Ptr->follower.flags & FOLLOWER_FLAG_CAN_BIKE) //Follower can't bike + && TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_BIKE)) //Player on bike + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); //Dismmount Bike + } + } +} + +bool8 CheckFollowerFlag(u16 flag) +{ + if (!gSaveBlock2Ptr->follower.inProgress) + return TRUE; + + if (gSaveBlock2Ptr->follower.flags & flag) + return TRUE; + + return FALSE; +} + +static u8 GetPlayerMapObjId(void) +{ + return gPlayerAvatar.objectEventId; +} + +enum +{ + GoDown, + GoUp, + GoLeft, + GoRight +}; +void FollowerPositionFix(u8 offset) +{ + u8 playerObjId = GetPlayerMapObjId(); + u8 followerObjid = gSaveBlock2Ptr->follower.objId; + u16 playerX = gObjectEvents[playerObjId].currentCoords.x; + u16 playerY = gObjectEvents[playerObjId].currentCoords.y; + u16 npcX = gObjectEvents[followerObjid].currentCoords.x; + u16 npcY = gObjectEvents[followerObjid].currentCoords.y; + + gSpecialVar_Result = 0xFFFF; + + if (!gSaveBlock2Ptr->follower.inProgress) + return; + + if (playerX == npcX) + { + if (playerY > npcY) + { + if (playerY != npcY + offset) //Player and follower are not 1 tile apart + { + if (gSpecialVar_0x8000 == 0) + gSpecialVar_Result = GoDown; + else + gObjectEvents[followerObjid].currentCoords.y = playerY - offset; + } + } + else // Player Y <= npcY + { + if (playerY != npcY - offset) //Player and follower are not 1 tile apart + { + if (gSpecialVar_0x8000 == 0) + gSpecialVar_Result = GoUp; + else + gObjectEvents[followerObjid].currentCoords.y = playerY + offset; + } + } + } + else //playerY == npcY + { + if (playerX > npcX) + { + if (playerX != npcX + offset) //Player and follower are not 1 tile apart + { + if (gSpecialVar_0x8000 == 0) + gSpecialVar_Result = GoRight; + else + gObjectEvents[followerObjid].currentCoords.x = playerX - offset; + } + } + else // Player X <= npcX + { + if (playerX != npcX - offset) //Player and follower are not 1 tile apart + { + if (gSpecialVar_0x8000 == 0) + gSpecialVar_Result = GoLeft; + else + gObjectEvents[followerObjid].currentCoords.x = playerX + offset; + } + } + } +} + +void FollowerTrainerSightingPositionFix(void) +{ + FollowerPositionFix(1); +} + +void FollowerIntoPlayer(void) +{ + FollowerPositionFix(0); +} + +bool8 PlayerHasFollower(void) +{ + return gSaveBlock2Ptr->follower.inProgress; +} + +bool8 IsPlayerOnFoot(void) +{ + if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_ON_FOOT) + return TRUE; + else + return FALSE; +} + +bool8 FollowerComingThroughDoor(void) +{ + if (!PlayerHasFollower()) + return FALSE; + + if (gSaveBlock2Ptr->follower.comeOutDoorStairs) + return TRUE; + + return FALSE; +} + +//////////////////SCRIPTING//////////////////// +//@Details: Sets up the follow me feature. +//@Input: local id - NPC to start following player. +// flags - Follower flags. +void SetUpFollowerSprite(u8 localId, u16 flags) +{ + TurnNPCIntoFollower(localId, flags); +} + +//@Details: Ends the follow me feature. +void DestroyFollower(void) +{ + if (gSaveBlock2Ptr->follower.inProgress) + { + RemoveObjectEvent(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + FlagSet(gSaveBlock2Ptr->follower.flag); + gSaveBlock2Ptr->follower.inProgress = FALSE; + } +} + +//@Details: Faces the player and the follower sprite towards each other. +void PlayerFaceFollowerSprite(void) +{ + if (gSaveBlock2Ptr->follower.inProgress) + { + u8 playerDirection, followerDirection; + struct ObjectEvent* player, *follower; + + player = &gObjectEvents[gPlayerAvatar.objectEventId]; + follower = &gObjectEvents[gSaveBlock2Ptr->follower.objId]; + playerDirection = DetermineFollowerDirection(player, follower); + followerDirection = playerDirection; + + //Flip direction + switch (playerDirection) + { + case DIR_NORTH: + playerDirection = DIR_SOUTH; + followerDirection = DIR_NORTH; + break; + case DIR_SOUTH: + playerDirection = DIR_NORTH; + followerDirection = DIR_SOUTH; + break; + case DIR_WEST: + playerDirection = DIR_EAST; + followerDirection = DIR_WEST; + break; + case DIR_EAST: + playerDirection = DIR_WEST; + followerDirection = DIR_EAST; + break; + } + + ObjectEventTurn(player, playerDirection); + ObjectEventTurn(follower, followerDirection); + } +} + +//@Details: Checks if the player is being followed. +//@Returns: LastResult: 0 if the Player isn't being followed. 1 otherwise. +void CheckPlayerHasFollower(void) +{ + gSpecialVar_Result = gSaveBlock2Ptr->follower.inProgress; +} + +void ShowFollower(void) +{ + gObjectEvents[gSaveBlock2Ptr->follower.objId].invisible = FALSE; +} + diff --git a/src/new_game.c b/src/new_game.c index 077b86775..f22ca7940 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -203,6 +203,7 @@ void NewGameInitData(void) WipeTrainerNameRecords(); ResetTrainerHillResults(); ResetContestLinkResults(); + memset(&gSaveBlock2Ptr->follower, 0, sizeof(gSaveBlock2Ptr->follower)); } static void ResetMiniGamesRecords(void) diff --git a/src/overworld.c b/src/overworld.c index 4aa579fdd..476642381 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -59,6 +59,7 @@ #include "scanline_effect.h" #include "wild_encounter.h" #include "frontier_util.h" +#include "follow_me.h" #include "constants/abilities.h" #include "constants/layouts.h" #include "constants/map_types.h" @@ -66,6 +67,7 @@ #include "constants/songs.h" #include "constants/trainer_hill.h" #include "constants/weather.h" +#include "constants/event_object_movement.h" struct CableClubPlayer { @@ -365,6 +367,7 @@ void DoWhiteOut(void) HealPlayerParty(); Overworld_ResetStateAfterWhiteOut(); SetWarpDestinationToLastHealLocation(); + UpdateFollowerPokemonGraphic(); WarpIntoMap(); } @@ -414,6 +417,8 @@ static void Overworld_ResetStateAfterWhiteOut(void) VarSet(VAR_SHOULD_END_ABNORMAL_WEATHER, 0); VarSet(VAR_ABNORMAL_WEATHER_LOCATION, ABNORMAL_WEATHER_NONE); } + + FollowMe_TryRemoveFollowerOnWhiteOut(); } static void UpdateMiscOverworldStates(void) @@ -1447,6 +1452,10 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys) PlayerStep(inputStruct.dpadDirection, newKeys, heldKeys); } } + + // if stop running but keep holding B -> fix follower frame + if (PlayerHasFollower() && IsPlayerOnFoot() && IsPlayerStandingStill()) + ObjectEventSetHeldMovement(&gObjectEvents[GetFollowerObjectId()], GetFaceDirectionAnimNum(gObjectEvents[GetFollowerObjectId()].facingDirection)); } void CB1_Overworld(void) @@ -1482,6 +1491,20 @@ void CB2_Overworld(void) OverworldBasic(); if (fading) SetFieldVBlankCallback(); + + // Make sure follower's sprite is properly positioned when map reloads. + if (gSaveBlock2Ptr->follower.inProgress) + { + switch(gObjectEvents[gSaveBlock2Ptr->follower.objId].facingDirection) + { + case DIR_EAST: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = -8; + break; + case DIR_WEST: + gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId].x2 = 8; + break; + } + } } void SetMainCallback1(MainCallback cb) @@ -1664,6 +1687,7 @@ void CB2_ReturnToFieldWithOpenMenu(void) { FieldClearVBlankHBlankCallbacks(); gFieldCallback2 = FieldCB_ReturnToFieldOpenStartMenu; + UpdateFollowerPokemonGraphic(); CB2_ReturnToField(); } @@ -2130,10 +2154,7 @@ static void ResumeMap(bool32 a1) ResetAllPicSprites(); ResetCameraUpdateInfo(); InstallCameraPanAheadCallback(); - if (!a1) - InitObjectEventPalettes(0); - else - InitObjectEventPalettes(1); + FreeAllSpritePalettes(); FieldEffectActiveListClear(); StartWeather(); @@ -2168,6 +2189,7 @@ static void InitObjectEventsLocal(void) ResetInitialPlayerAvatarState(); TrySpawnObjectEvents(0, 0); TryRunOnWarpIntoMapScript(); + FollowMe_HandleSprite(); } static void InitObjectEventsReturnToField(void) @@ -3219,3 +3241,47 @@ static void SpriteCB_LinkPlayer(struct Sprite *sprite) sprite->data[7]++; } } + +void UpdateFollowerPokemonGraphic(void) +{ + // Loaded in case the player changed the species of the Pokemon in the lead of the party. + // If so, the following Pokemon needs to change. + u16 leadMonGraphicId = GetMonData(&gPlayerParty[GetLeadMonNotFaintedIndex()], MON_DATA_SPECIES, NULL) + 238; + struct ObjectEvent *follower = &gObjectEvents[gSaveBlock2Ptr->follower.objId]; + if(gSaveBlock2Ptr->follower.inProgress && leadMonGraphicId != gSaveBlock2Ptr->follower.graphicsId) + { + // Sets the follower's graphic data to the proper following Pokemon graphic data + gSaveBlock2Ptr->follower.graphicsId = leadMonGraphicId; + + // Sets the current follower object's graphic data to the proper data. + // Necessary because, without it, the follower's sprite won't change until entering a loading zone. + follower->graphicsId = leadMonGraphicId; + + // Specifically for Pokemon Center, if lead Pokemon is revived, deletes old follower and creates new one + if(gSpecialVar_Unused_0x8014 == 1) + { + // Loop allows for creation of variables not at top of function + do + { + u8 newSpriteId; + struct ObjectEventTemplate clone; + struct ObjectEvent backupFollower = *follower; + backupFollower.graphicsId = gSaveBlock2Ptr->follower.graphicsId; + DestroySprite(&gSprites[gObjectEvents[gSaveBlock2Ptr->follower.objId].spriteId]); + RemoveObjectEvent(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + + clone = *GetObjectEventTemplateByLocalIdAndMap(gSaveBlock2Ptr->follower.map.id, gSaveBlock2Ptr->follower.map.number, gSaveBlock2Ptr->follower.map.group); + clone.graphicsId = gSaveBlock2Ptr->follower.graphicsId;; + gSaveBlock2Ptr->follower.objId = TrySpawnObjectEventTemplate(&clone, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, clone.x, clone.y); + + follower = &gObjectEvents[gSaveBlock2Ptr->follower.objId]; + newSpriteId = follower->spriteId; + *follower = backupFollower; + follower->spriteId = newSpriteId; + MoveObjectEventToMapCoords(follower, follower->currentCoords.x, follower->currentCoords.y); + ObjectEventTurn(follower, follower->facingDirection); + gSpecialVar_Unused_0x8014 = 0; + } while(FALSE); + } + } +} diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 755cc7de0..c5918338e 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -647,6 +647,7 @@ static void SetMovingMonPriority(u8); static void SpriteCB_HeldMon(struct Sprite *); static struct Sprite *CreateMonIconSprite(u16, u32, s16, s16, u8, u8); static void DestroyBoxMonIcon(struct Sprite *); +extern void UpdateFollowerPokemonGraphic(void); // Pokémon data static void MoveMon(void); @@ -1706,6 +1707,7 @@ static void CB2_ExitPokeStorage(void) { sPreviousBoxOption = GetCurrentBoxOption(); gFieldCallback = FieldTask_ReturnToPcMenu; + UpdateFollowerPokemonGraphic(); SetMainCallback2(CB2_ReturnToField); } diff --git a/src/scrcmd.c b/src/scrcmd.c index 2c18cb565..0e70b4537 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1179,7 +1179,7 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx) bool8 ScrCmd_createvobject(struct ScriptContext *ctx) { - u8 graphicsId = ScriptReadByte(ctx); + u16 graphicsId = ScriptReadByte(ctx); u8 virtualObjId = ScriptReadByte(ctx); u16 x = VarGet(ScriptReadHalfword(ctx)); u32 y = VarGet(ScriptReadHalfword(ctx)); @@ -2308,3 +2308,79 @@ bool8 ScrCmd_warpwhitefade(struct ScriptContext *ctx) ResetInitialPlayerAvatarState(); return TRUE; } + +bool8 ScrCmd_pokemonfaceplayer(struct ScriptContext *ctx) +{ + // The script will affect the following Pokemon if no argument is passed to it. + if(gSpecialVar_Unused_0x8014 == OBJ_EVENT_ID_FOLLOWER) + { + ObjectEventClearHeldMovement(&gObjectEvents[gSaveBlock2Ptr->follower.objId]); + ObjectEventPokemonFacePlayer(&gObjectEvents[gSaveBlock2Ptr->follower.objId], &gObjectEvents[gPlayerAvatar.objectEventId]); + } + // The script will affect an event object based on the local id passed to the script. + else + { + gSpecialVar_Unused_0x8014 = GetObjectEventIdByLocalIdAndMap(gSpecialVar_Unused_0x8014, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + ObjectEventClearHeldMovement(&gObjectEvents[gSpecialVar_Unused_0x8014]); + + #define POW2(num) (num * num) + + // Checks to see whether the object is furthest away from the player along the x or y axis. + if(POW2((gObjectEvents[gSpecialVar_Unused_0x8014].currentCoords.x - gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x)) < POW2((gObjectEvents[gSpecialVar_Unused_0x8014].currentCoords.y - gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y))) + { + // Player is South of object + if(gObjectEvents[gSpecialVar_Unused_0x8014].currentCoords.y < gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y) + { + ObjectEventSetHeldMovement(&gObjectEvents[gSpecialVar_Unused_0x8014], 159); + } + // Player is North of object + else + { + ObjectEventSetHeldMovement(&gObjectEvents[gSpecialVar_Unused_0x8014], 160); + } + } + else + { + // Player is East of object + if(gObjectEvents[gSpecialVar_Unused_0x8014].currentCoords.x < gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x) + { + ObjectEventSetHeldMovement(&gObjectEvents[gSpecialVar_Unused_0x8014], 162); + } + // Player is West of object + else + { + ObjectEventSetHeldMovement(&gObjectEvents[gSpecialVar_Unused_0x8014], 161); + } + } + } + return TRUE; +} + +// follow me script commands +#include "follow_me.h" +bool8 ScrCmd_setfollower(struct ScriptContext *ctx) +{ + u8 localId = ScriptReadByte(ctx); + u8 flags = ScriptReadByte(ctx); + + SetUpFollowerSprite(localId, flags); + return FALSE; +} + +bool8 ScrCmd_destroyfollower(struct ScriptContext *ctx) +{ + DestroyFollower(); + return FALSE; +} + +bool8 ScrCmd_facefollower(struct ScriptContext *ctx) +{ + PlayerFaceFollowerSprite(); + return FALSE; +} + +bool8 ScrCmd_checkfollower(struct ScriptContext *ctx) +{ + CheckPlayerHasFollower(); + return FALSE; +} \ No newline at end of file diff --git a/src/script.c b/src/script.c index 4728e739c..20d8d2ef3 100644 --- a/src/script.c +++ b/src/script.c @@ -447,3 +447,10 @@ void InitRamScript_NoObjectEvent(u8 *script, u16 scriptSize) scriptSize = sizeof(gSaveBlock1Ptr->ramScript.data.script); InitRamScript(script, scriptSize, MAP_GROUP(UNDEFINED), MAP_NUM(UNDEFINED), NO_OBJECT); } + +u8* ReadWord(u8 index) +{ + struct ScriptContext *ctx = &sScriptContext1; + + return (T1_READ_PTR(&ctx->data[index])); +}