diff --git a/Makefile b/Makefile index 05f5d1aa4d..5cf811a32c 100644 --- a/Makefile +++ b/Makefile @@ -347,6 +347,11 @@ ifeq ($(DINFO),1) override CFLAGS += -g endif +ifeq ($(DDEBUG),1) +override ASFLAGS += --defsym DEBUG=1 +override CPPFLAGS += -D DEBUG=1 +endif + # The dep rules have to be explicit or else missing files won't be reported. # As a side effect, they're evaluated immediately instead of when the rule is invoked. # It doesn't look like $(shell) can be deferred so there might not be a better way. @@ -474,7 +479,7 @@ $(ELF): $(OBJ_DIR)/ld_script.ld $(OBJS) libagbsyscall $(ROM): $(ELF) $(OBJCOPY) -O binary $< $@ - $(FIX) $@ -p --silent + $(FIX) $@ --silent modern: all diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 78d3037aeb..390bf3de56 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1735,6 +1735,11 @@ .2byte \quantity .endm + @ Like callnative, but function expects a ctx + .macro callfunc func:req + .byte 0xe3 + .4byte \func + .endm @ Supplementary diff --git a/asm/macros/map.inc b/asm/macros/map.inc index 21445138de..be3b09b49d 100644 --- a/asm/macros/map.inc +++ b/asm/macros/map.inc @@ -22,9 +22,8 @@ @ Defines an object event template for map data, to be used by a normal object. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h .macro object_event index:req, gfx: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 - .byte \gfx + .2byte \gfx .byte OBJ_KIND_NORMAL - .space 1 @ Padding .2byte \x, \y .byte \elevation .byte \movement_type diff --git a/asm/macros/movement.inc b/asm/macros/movement.inc index a43dc07ac5..a82ca7c786 100644 --- a/asm/macros/movement.inc +++ b/asm/macros/movement.inc @@ -163,4 +163,6 @@ create_movement_action fly_up, MOVEMENT_ACTION_FLY_UP create_movement_action fly_down, MOVEMENT_ACTION_FLY_DOWN + create_movement_action exit_pokeball, MOVEMENT_ACTION_EXIT_POKEBALL + create_movement_action enter_pokeball, MOVEMENT_ACTION_ENTER_POKEBALL create_movement_action step_end, MOVEMENT_ACTION_STEP_END diff --git a/data/event_scripts.s b/data/event_scripts.s index 35d0cae2f9..17334bfb49 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -723,6 +723,7 @@ Common_EventScript_OutOfCenterPartyHeal:: playfanfare MUS_HEAL waitfanfare special HealPlayerParty + callnative UpdateFollowingPokemon fadescreen FADE_FROM_BLACK return @@ -1056,6 +1057,7 @@ Common_EventScript_LegendaryFlewAway:: .include "data/scripts/move_tutors.inc" .include "data/scripts/trainer_hill.inc" .include "data/scripts/test_signpost.inc" + .include "data/scripts/follower.inc" .include "data/text/frontier_brain.inc" .include "data/text/save.inc" .include "data/text/birch_speech.inc" diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 49fcf798b6..c1890358d5 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -72,6 +72,9 @@ gFieldEffectScriptPointers:: .4byte gFieldEffectScript_RayquazaSpotlight @ FLDEFF_RAYQUAZA_SPOTLIGHT .4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK .4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK + .4byte gFieldEffectScript_TracksSlither @ FLDEFF_TRACKS_SLITHER + .4byte gFieldEffectScript_TracksBug @ FLDEFF_TRACKS_BUG + .4byte gFieldEffectScript_TracksSpot @ FLDEFF_TRACKS_SPOT gFieldEffectScript_ExclamationMarkIcon1:: field_eff_callnative FldEff_ExclamationMarkIcon @@ -129,6 +132,14 @@ gFieldEffectScript_SandFootprints:: field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_SandFootprints field_eff_end +gFieldEffectScript_TracksBug:: + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksBug + field_eff_end + +gFieldEffectScript_TracksSpot:: + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksSpot + field_eff_end + gFieldEffectScript_JumpBigSplash:: field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_JumpBigSplash field_eff_end @@ -218,6 +229,10 @@ gFieldEffectScript_BikeTireTracks:: field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_BikeTireTracks field_eff_end +gFieldEffectScript_TracksSlither:: + field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksSlither + field_eff_end + gFieldEffectScript_SandDisguisePlaceholder:: field_eff_callnative ShowSandDisguiseFieldEffect field_eff_end diff --git a/data/layouts/BattleFrontier_BattleDomeBattleRoom/map.bin b/data/layouts/BattleFrontier_BattleDomeBattleRoom/map.bin index ffb450f3c3..e0f2dc82f0 100644 --- a/data/layouts/BattleFrontier_BattleDomeBattleRoom/map.bin +++ b/data/layouts/BattleFrontier_BattleDomeBattleRoom/map.bin @@ -1,2 +1,2 @@ -               !"#$%&      ()*+,-.      0123456        -   89:;<=>>    \ No newline at end of file +22222222222222222RRRRRRRRRRRRRRRRR22222222222222222 3 322222223333333 3 3 3 3 3 32BBBCCC3 3 3 3 3 3 32BBBBBB C!C"C#C$C%C&3 3 3 3 3 3 32BBB(C)C*C+,-.3 3 3 3 3 3 3333301233435363 3 3 3 3 3 3 3 +3 3 3 3338393:3;3<3=3>3>3 3 3 3 \ No newline at end of file diff --git a/data/map_events.s b/data/map_events.s index cfa5799d37..729f9725df 100644 --- a/data/map_events.s +++ b/data/map_events.s @@ -12,10 +12,10 @@ #include "constants/trainer_hill.h" #include "constants/trainer_types.h" #include "constants/berry.h" +#include "constants/species.h" .include "asm/macros.inc" .include "constants/constants.inc" .section .rodata .include "data/maps/events.inc" - diff --git a/data/maps/AncientTomb/map.json b/data/maps/AncientTomb/map.json index 0f4c375562..261f438f6d 100644 --- a/data/maps/AncientTomb/map.json +++ b/data/maps/AncientTomb/map.json @@ -15,7 +15,7 @@ "connections": null, "object_events": [ { - "graphics_id": "OBJ_EVENT_GFX_REGISTEEL", + "graphics_id": "OBJ_EVENT_GFX_MON_BASE + SPECIES_REGISTEEL", "x": 8, "y": 7, "elevation": 3, diff --git a/data/maps/AncientTomb/scripts.inc b/data/maps/AncientTomb/scripts.inc index dd22359558..590ec2bb8b 100644 --- a/data/maps/AncientTomb/scripts.inc +++ b/data/maps/AncientTomb/scripts.inc @@ -55,6 +55,7 @@ AncientTomb_EventScript_CaveEntranceSide:: end AncientTomb_EventScript_Registeel:: + bufferspeciesname 0, SPECIES_REGISTEEL lock faceplayer waitse @@ -83,4 +84,3 @@ AncientTomb_EventScript_RanFromRegisteel:: setvar VAR_0x8004, SPECIES_REGISTEEL goto Common_EventScript_LegendaryFlewAway end - diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc index 9467f34197..9f2b4c5011 100644 --- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc @@ -75,6 +75,7 @@ BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge:: frontier_checkairshow special LoadPlayerParty special HealPlayerParty + callnative UpdateFollowingPokemon arena_save 0 playse SE_SAVE waitse @@ -133,6 +134,7 @@ BattleFrontier_BattleArenaLobby_EventScript_TryEnterChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleArenaLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_PARTY_SIZE @@ -194,6 +196,7 @@ BattleFrontier_BattleArenaLobby_EventScript_CancelChallengeSaveFailed:: BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge:: special LoadPlayerParty + callnative UpdateFollowingPokemon BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge:: msgbox BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge, MSGBOX_DEFAULT BattleFrontier_BattleArenaLobby_EventScript_EndCancelChallenge:: diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc index def903b1df..6279cacf27 100644 --- a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc @@ -17,6 +17,7 @@ BattleFrontier_BattleDomeBattleRoom_MapScripts:: .byte 0 BattleFrontier_BattleDomeBattleRoom_OnTransition: + setflag FLAG_TEMP_HIDE_FOLLOWER dome_setopponentgfx frontier_get FRONTIER_DATA_BATTLE_NUM copyvar VAR_TEMP_F, VAR_RESULT diff --git a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc index b972a0814c..9f81473e27 100644 --- a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc @@ -68,6 +68,7 @@ BattleFrontier_BattleDomeLobby_EventScript_GiveBattlePoints:: dome_set DOME_DATA_WIN_STREAK_ACTIVE, TRUE special LoadPlayerParty special HealPlayerParty + callnative UpdateFollowingPokemon goto BattleFrontier_BattleDomeLobby_EventScript_AskRecordBattle BattleFrontier_BattleDomeLobby_EventScript_LostChallenge:: @@ -82,6 +83,7 @@ BattleFrontier_BattleDomeLobby_EventScript_LostChallenge:: dome_set DOME_DATA_ATTEMPTED_CHALLENGE, TRUE special LoadPlayerParty special HealPlayerParty + callnative UpdateFollowingPokemon BattleFrontier_BattleDomeLobby_EventScript_AskRecordBattle:: dome_save 0 playse SE_SAVE @@ -160,6 +162,7 @@ BattleFrontier_BattleDomeLobby_EventScript_TryEnterChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleDomeLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_PARTY_SIZE @@ -222,6 +225,7 @@ BattleFrontier_BattleDomeLobby_EventScript_CancelChallengeSaveFailed:: BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge:: special LoadPlayerParty + callnative UpdateFollowingPokemon BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge:: msgbox BattleFrontier_BattleDomeLobby_Text_HopeToSeeYouAgain, MSGBOX_DEFAULT BattleFrontier_BattleDomeLobby_EventScript_EndCancelChallenge:: diff --git a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc index 682b2c91d1..765759208e 100644 --- a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc @@ -59,6 +59,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_GiveBattlePoints:: waitmessage frontier_checkairshow special LoadPlayerParty + callnative UpdateFollowingPokemon factory_save 0 playse SE_SAVE waitse @@ -71,6 +72,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_LostChallenge:: waitmessage frontier_checkairshow special LoadPlayerParty + callnative UpdateFollowingPokemon factory_set FACTORY_DATA_WIN_STREAK_ACTIVE, FALSE factory_save 0 playse SE_SAVE @@ -196,6 +198,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_CancelChallengeSaveFailed:: BattleFrontier_BattleFactoryLobby_EventScript_LoadPartyAndCancelChallenge:: special LoadPlayerParty + callnative UpdateFollowingPokemon BattleFrontier_BattleFactoryLobby_EventScript_CancelChallenge:: msgbox BattleFrontier_BattleFactoryLobby_Text_LookForwardToNextVisit, MSGBOX_DEFAULT release diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc index 2a8903fe6f..6bca3678a8 100644 --- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc @@ -76,6 +76,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge:: frontier_checkairshow special LoadPlayerParty special HealPlayerParty + callnative UpdateFollowingPokemon palace_save 0 playse SE_SAVE waitse @@ -151,6 +152,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_TryEnterChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattlePalaceLobby_Text_NowSelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_PARTY_SIZE @@ -215,6 +217,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_CancelChallengeSaveFailed:: BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge:: special LoadPlayerParty + callnative LoadPlayerParty BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge:: msgbox BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified, MSGBOX_DEFAULT BattleFrontier_BattlePalaceLobby_EventScript_EndCancelChallenge:: @@ -647,4 +650,3 @@ BattleFrontier_BattlePalaceLobby_Text_ExplainRulesWhenInDanger: .string "nature when it is in trouble.\p" .string "If a POKéMON begins behaving oddly\n" .string "in a pinch, watch it carefully.$" - diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc index 3e729e2121..0a7c52aa33 100644 --- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc @@ -59,6 +59,7 @@ BattleFrontier_BattlePikeLobby_EventScript_GiveBattlePoints:: pike_set PIKE_DATA_TOTAL_STREAKS, VAR_RESULT special LoadPlayerParty special HealPlayerParty + callnative UpdateFollowingPokemon pike_resethelditems message BattleFrontier_BattlePikeLobby_Text_ShallRecordResults waitmessage @@ -80,6 +81,7 @@ BattleFrontier_BattlePikeLobby_EventScript_LostChallenge:: pike_set PIKE_DATA_WIN_STREAK_ACTIVE, FALSE special LoadPlayerParty special HealPlayerParty + callnative UpdateFollowingPokemon pike_resethelditems pike_save 0 playse SE_SAVE @@ -119,6 +121,7 @@ BattleFrontier_BattlePikeLobby_EventScript_TryEnterChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattlePikeLobby_Text_PleaseChooseThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_PARTY_SIZE @@ -183,6 +186,7 @@ BattleFrontier_BattlePikeLobby_EventScript_CancelChallengeSaveFailed:: BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge:: special LoadPlayerParty + callnative UpdateFollowingPokemon BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge:: msgbox BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou, MSGBOX_DEFAULT BattleFrontier_BattlePikeLobby_EventScript_EndCancelChallenge:: @@ -430,4 +434,3 @@ BattleFrontier_BattlePikeLobby_Text_ExplainMonOrderRules: .string "changed.\p" .string "The sequence must be set before\n" .string "starting your challenge.$" - diff --git a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc index 550644511b..8987a5539f 100644 --- a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc @@ -59,6 +59,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_GiveBattlePoints:: special LoadPlayerParty pyramid_clearhelditems special HealPlayerParty + callnative UpdateFollowingPokemon message BattleFrontier_BattlePyramidLobby_Text_UsedBattleBagWillBeKept waitmessage playse SE_EXP_MAX @@ -83,6 +84,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge:: special LoadPlayerParty pyramid_clearhelditems special HealPlayerParty + callnative UpdateFollowingPokemon lockall message BattleFrontier_BattlePyramidLobby_Text_DisappointingHereIsBag waitmessage @@ -132,6 +134,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_TryEnterChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattlePyramidLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_PARTY_SIZE @@ -196,6 +199,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_CancelChallengeSaveFailed:: BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge:: special LoadPlayerParty + callnative UpdateFollowingPokemon BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge:: msgbox BattleFrontier_BattlePyramidLobby_Text_AwaitFutureChallenge, MSGBOX_DEFAULT BattleFrontier_BattlePyramidLobby_EventScript_EndCancelChallenge:: @@ -900,4 +904,3 @@ BattleFrontier_BattlePyramidLobby_Text_ExplainBagRules: .string "of ten kinds of items.\p" .string "The contents of the BATTLE BAG are\n" .string "lost if you fail in your quest.$" - diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc index e99c7f88e8..4233e5179a 100644 --- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc +++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc @@ -95,6 +95,7 @@ BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge:: msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT closemessage setvar VAR_TEMP_0, 255 + callnative UpdateFollowingPokemon release end @@ -114,6 +115,7 @@ BattleFrontier_BattleTowerLobby_EventScript_LostThanksForPlaying:: msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT closemessage setvar VAR_TEMP_0, 255 + callnative UpdateFollowingPokemon release end @@ -200,6 +202,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterSinglesChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleTowerLobby_Text_SelectThreeMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_PARTY_SIZE @@ -263,6 +266,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterDoublesChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectFourMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_DOUBLES_PARTY_SIZE @@ -327,6 +331,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterMultisChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectTwoMons, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_MULTI_PARTY_SIZE @@ -390,6 +395,7 @@ BattleFrontier_BattleTowerLobby_EventScript_TryEnterLinkMultisChallenge:: frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectTwoMons2, MSGBOX_DEFAULT fadescreen FADE_TO_BLACK + callnative RemoveFollowingPokemon call BattleFrontier_EventScript_GetLvlMode copyvar VAR_0x8004, VAR_RESULT setvar VAR_0x8005, FRONTIER_MULTI_PARTY_SIZE @@ -577,6 +583,7 @@ BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed:: BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge:: special LoadPlayerParty + callnative UpdateFollowingPokemon BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge:: special CloseLink msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT diff --git a/data/maps/DesertRuins/map.json b/data/maps/DesertRuins/map.json index abbe0db10d..ee7b587bb3 100644 --- a/data/maps/DesertRuins/map.json +++ b/data/maps/DesertRuins/map.json @@ -15,7 +15,7 @@ "connections": null, "object_events": [ { - "graphics_id": "OBJ_EVENT_GFX_REGIROCK", + "graphics_id": "OBJ_EVENT_GFX_MON_BASE + SPECIES_REGIROCK", "x": 8, "y": 7, "elevation": 3, diff --git a/data/maps/DesertRuins/scripts.inc b/data/maps/DesertRuins/scripts.inc index 21473e87a3..7d5ff62326 100644 --- a/data/maps/DesertRuins/scripts.inc +++ b/data/maps/DesertRuins/scripts.inc @@ -55,6 +55,7 @@ DesertRuins_EventScript_CaveEntranceSide:: end DesertRuins_EventScript_Regirock:: + bufferspeciesname 0, SPECIES_REGIROCK lock faceplayer waitse @@ -83,4 +84,3 @@ DesertRuins_EventScript_RanFromRegirock:: setvar VAR_0x8004, SPECIES_REGIROCK goto Common_EventScript_LegendaryFlewAway end - diff --git a/data/maps/FortreeCity_Gym/scripts.inc b/data/maps/FortreeCity_Gym/scripts.inc index 1c729bc44e..4aa9aa698c 100644 --- a/data/maps/FortreeCity_Gym/scripts.inc +++ b/data/maps/FortreeCity_Gym/scripts.inc @@ -5,6 +5,7 @@ FortreeCity_Gym_MapScripts:: FortreeCity_Gym_OnTransition: special RotatingGate_InitPuzzle + setflag FLAG_TEMP_HIDE_FOLLOWER @ Hide follower bc of rotating gates end FortreeCity_Gym_OnWarp: diff --git a/data/maps/IslandCave/map.json b/data/maps/IslandCave/map.json index b8518ac946..503e87454b 100644 --- a/data/maps/IslandCave/map.json +++ b/data/maps/IslandCave/map.json @@ -15,7 +15,7 @@ "connections": null, "object_events": [ { - "graphics_id": "OBJ_EVENT_GFX_REGICE", + "graphics_id": "OBJ_EVENT_GFX_MON_BASE + SPECIES_REGICE", "x": 8, "y": 7, "elevation": 3, diff --git a/data/maps/IslandCave/scripts.inc b/data/maps/IslandCave/scripts.inc index d15802aaa8..90ec2e5b01 100644 --- a/data/maps/IslandCave/scripts.inc +++ b/data/maps/IslandCave/scripts.inc @@ -88,6 +88,7 @@ IslandCave_EventScript_ClearSteps:: return IslandCave_EventScript_Regice:: + bufferspeciesname 0, SPECIES_REGICE lock faceplayer waitse diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index 8892097dee..70bc10f5a1 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -1,9 +1,14 @@ MossdeepCity_Gym_MapScripts:: + map_script MAP_SCRIPT_ON_TRANSITION, MossdeepCity_Gym_OnTransition map_script MAP_SCRIPT_ON_LOAD, MossdeepCity_Gym_OnLoad .byte 0 @ NOTE: Mossdeep Gym was redesigned between R/S and E. Leftover (and now functionally unused) scripts are commented below +MossdeepCity_Gym_OnTransition: + setflag FLAG_TEMP_HIDE_FOLLOWER @ Hide follower since it can collide with moving statues + end + @ All the below checks are leftover from RS. FLAG_MOSSDEEP_GYM_SWITCH_X is never set MossdeepCity_Gym_OnLoad: goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_SetSwitch1Metatiles diff --git a/data/maps/Route117/map.json b/data/maps/Route117/map.json index 80304ddf4b..62a440095b 100644 --- a/data/maps/Route117/map.json +++ b/data/maps/Route117/map.json @@ -105,8 +105,8 @@ }, { "graphics_id": "OBJ_EVENT_GFX_PIKACHU", - "x": 49, - "y": 2, + "x": 51, + "y": 1, "elevation": 3, "movement_type": "MOVEMENT_TYPE_LOOK_AROUND", "movement_range_x": 0, @@ -336,6 +336,32 @@ "trainer_sight_or_berry_tree_id": "4", "script": "Route117_EventScript_Melina", "flag": "0" + }, + { + "graphics_id": "OBJ_EVENT_GFX_VAR_0", + "x": 47, + "y": 2, + "elevation": 3, + "movement_type": "MOVEMENT_TYPE_LOOK_AROUND", + "movement_range_x": 0, + "movement_range_y": 0, + "trainer_type": "TRAINER_TYPE_NONE", + "trainer_sight_or_berry_tree_id": "VAR_TEMP_0", + "script": "NULL", + "flag": "FLAG_TEMP_1" + }, + { + "graphics_id": "OBJ_EVENT_GFX_VAR_1", + "x": 49, + "y": 2, + "elevation": 3, + "movement_type": "MOVEMENT_TYPE_LOOK_AROUND", + "movement_range_x": 0, + "movement_range_y": 0, + "trainer_type": "TRAINER_TYPE_NONE", + "trainer_sight_or_berry_tree_id": "VAR_TEMP_1", + "script": "NULL", + "flag": "FLAG_TEMP_2" } ], "warp_events": [ diff --git a/data/maps/Route117/scripts.inc b/data/maps/Route117/scripts.inc index 37d589ce31..71660b34df 100644 --- a/data/maps/Route117/scripts.inc +++ b/data/maps/Route117/scripts.inc @@ -1,13 +1,61 @@ .set LOCALID_DAYCARE_MAN, 3 +.set LOCALID_DAYCARE_MON_0, 25 +.set LOCALID_DAYCARE_MON_1, 26 Route117_MapScripts:: map_script MAP_SCRIPT_ON_TRANSITION, Route117_OnTransition .byte 0 +.macro getdaycaregfx var0:req var1:req var2:req var3:req +callfunc ScrFunc_getdaycaregfx +.2byte \var0 +.2byte \var1 +.2byte \var2 +.2byte \var3 +.endm + Route117_OnTransition: call Route117_EventScript_TryMoveDayCareMan + @ set flags for OW daycare mons + setflag FLAG_TEMP_1 + setflag FLAG_TEMP_2 + getdaycaregfx VAR_OBJ_GFX_ID_0, VAR_OBJ_GFX_ID_1, VAR_TEMP_0, VAR_TEMP_1 + switch VAR_RESULT + case 2, Route117_EventScript_ShowDaycareMon1 + case 1, Route117_EventScript_ShowDaycareMon0 end +Route117_EventScript_ShowDaycareMon1: + @ set pokemon movement type based on compatibility + special SetDaycareCompatibilityString + @ 0: + call_if_eq VAR_RESULT, PARENTS_INCOMPATIBLE, Route117_EventScript_DaycareMonIncompatible + @ 20: do nothing if low compatibility + @ call_if_eq VAR_RESULT, PARENTS_LOW_COMPATIBILITY, Route117_EventScript_DaycareMonLowCompatibility + @ 50: + call_if_eq VAR_RESULT, PARENTS_MED_COMPATIBILITY, Route117_EventScript_DaycareMonMedCompatibility + @ 70: + call_if_eq VAR_RESULT, PARENTS_MAX_COMPATIBILITY, Route117_EventScript_DaycareMonMaxCompatibility + clearflag FLAG_TEMP_2 +Route117_EventScript_ShowDaycareMon0: + clearflag FLAG_TEMP_1 + end + +Route117_EventScript_DaycareMonIncompatible: @ mons never face each other + setobjectmovementtype LOCALID_DAYCARE_MON_0, MOVEMENT_TYPE_FACE_DOWN_UP_AND_LEFT + setobjectmovementtype LOCALID_DAYCARE_MON_1, MOVEMENT_TYPE_FACE_DOWN_UP_AND_RIGHT + return + +Route117_EventScript_DaycareMonMedCompatibility: @ down and towards each other + setobjectmovementtype LOCALID_DAYCARE_MON_0, MOVEMENT_TYPE_FACE_DOWN_AND_RIGHT + setobjectmovementtype LOCALID_DAYCARE_MON_1, MOVEMENT_TYPE_FACE_DOWN_AND_LEFT + return + +Route117_EventScript_DaycareMonMaxCompatibility: @ facing; walk in place + setobjectmovementtype LOCALID_DAYCARE_MON_0, MOVEMENT_TYPE_WALK_IN_PLACE_RIGHT + setobjectmovementtype LOCALID_DAYCARE_MON_1, MOVEMENT_TYPE_WALK_IN_PLACE_LEFT + return + Route117_EventScript_TryMoveDayCareMan:: goto_if_unset FLAG_PENDING_DAYCARE_EGG, Route117_EventScript_StopMoveDayCareMan setobjectxyperm LOCALID_DAYCARE_MAN, 47, 6 @@ -205,4 +253,3 @@ Route117_Text_RouteSignMauville: Route117_Text_DayCareSign: .string "POKéMON DAY CARE\n" .string "“Let us raise your POKéMON.”$" - diff --git a/data/maps/Route123/map.json b/data/maps/Route123/map.json index 11798b95d4..ca0d757e3a 100644 --- a/data/maps/Route123/map.json +++ b/data/maps/Route123/map.json @@ -559,7 +559,7 @@ "flag": "0" }, { - "graphics_id": "OBJ_EVENT_GFX_YOUNGSTER", + "graphics_id": "OBJ_EVENT_GFX_BUG_CATCHER", "x": 14, "y": 12, "elevation": 3, diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc index 54e9574bd5..91137b91e8 100644 --- a/data/maps/RusturfTunnel/scripts.inc +++ b/data/maps/RusturfTunnel/scripts.inc @@ -274,6 +274,7 @@ RusturfTunnel_EventScript_TunnelBlockagePos3:: RusturfTunnel_EventScript_AquaGruntBackUp:: lockall + setflag FLAG_SAFE_FOLLOWER_MOVEMENT msgbox RusturfTunnel_Text_ComeAndGetSome, MSGBOX_DEFAULT closemessage applymovement LOCALID_GRUNT, RusturfTunnel_Movement_GruntAndPeekoBackUp @@ -529,4 +530,3 @@ RusturfTunnel_Text_MikePostBattle: .string "They halted development here to\n" .string "protect POKéMON, right?\l" .string "There's a feel-good story!$" - diff --git a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc index ae7141f39e..e13f56f749 100644 --- a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc +++ b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc @@ -79,6 +79,7 @@ SlateportCity_OceanicMuseum_2F_EventScript_CaptStern:: playfanfare MUS_HEAL waitfanfare special HealPlayerParty + callnative UpdateFollowingPokemon removeobject LOCALID_CAPT_STERN setflag FLAG_HIDE_ROUTE_110_TEAM_AQUA call_if_eq VAR_REGISTER_BIRCH_STATE, 0, SlateportCity_OceanicMuseum_2F_EventScript_ReadyRegisterBirch @@ -437,4 +438,3 @@ SlateportCity_OceanicMuseum_2F_Text_SSAnneReplica: .string "“S.S. ANNE\p" .string "“A replica of the luxury liner that\n" .string "circles the globe.”$" - diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc index 69f74880ec..af6f68555c 100644 --- a/data/maps/SootopolisCity/scripts.inc +++ b/data/maps/SootopolisCity/scripts.inc @@ -495,6 +495,7 @@ SootopolisCity_EventScript_RayquazaSceneFromPokeCenter:: removeobject LOCALID_GROUDON removeobject LOCALID_KYOGRE addobject LOCALID_RAYQUAZA + hideobjectat LOCALID_RAYQUAZA, MAP_SOOTOPOLIS_CITY setvar VAR_0x8004, TRUE special Script_DoRayquazaScene waitstate diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc index f407ac839b..efc63d6561 100644 --- a/data/maps/TrainerHill_Entrance/scripts.inc +++ b/data/maps/TrainerHill_Entrance/scripts.inc @@ -96,6 +96,7 @@ TrainerHill_Entrance_EventScript_PlayerExitChallenge:: waitmovement 0 setvar VAR_TRAINER_HILL_IS_ACTIVE, 0 special HealPlayerParty + callnative UpdateFollowingPokemon releaseall TrainerHill_Entrance_EventScript_EndExitChallenge:: end @@ -161,6 +162,7 @@ TrainerHill_Entrance_EventScript_ChooseChallenge:: setvar VAR_TRAINER_HILL_IS_ACTIVE, 1 setvar VAR_TEMP_5, 0 special HealPlayerParty + callnative UpdateFollowingPokemon msgbox TrainerHill_Entrance_Text_TimeProgessGetSetGo, MSGBOX_DEFAULT trainerhill_start releaseall diff --git a/data/maps/map_groups.json b/data/maps/map_groups.json index ebef431b30..d0a6a8b55c 100644 --- a/data/maps/map_groups.json +++ b/data/maps/map_groups.json @@ -1,4 +1,5 @@ { + "layouts_table_label": "gMapLayouts", "group_order": [ "gMapGroup_TownsAndRoutes", "gMapGroup_IndoorLittleroot", diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index f50ce5322b..98cf0ffffd 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -227,6 +227,7 @@ gScriptCmdTable:: .4byte ScrCmd_warpwhitefade @ 0xe0 .4byte ScrCmd_buffercontestname @ 0xe1 .4byte ScrCmd_bufferitemnameplural @ 0xe2 + .4byte ScrCmd_callfunc @ 0xe3 gScriptCmdTableEnd:: .4byte ScrCmd_nop diff --git a/data/scripts/battle_pike.inc b/data/scripts/battle_pike.inc index 8ca7f5b1af..e0a8c3feb1 100644 --- a/data/scripts/battle_pike.inc +++ b/data/scripts/battle_pike.inc @@ -133,6 +133,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_NoTurningBack:: lockall msgbox BattleFrontier_BattlePike_Text_PathBlockedNoTurningBack, MSGBOX_DEFAULT closemessage + releaseall end BattleFrontier_BattlePikeRoomNormal_EventScript_SetEnteredRoom:: @@ -146,6 +147,7 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_NoTurningBack:: lockall msgbox BattleFrontier_BattlePike_Text_PathBlockedNoTurningBack, MSGBOX_DEFAULT closemessage + releaseall end BattleFrontier_BattlePikeRoomNormal_EventScript_Exit:: @@ -214,6 +216,7 @@ BattleFrontier_BattlePikeRoomWildMons_EventScript_NoTurningBack:: lockall msgbox BattleFrontier_BattlePike_Text_PathBlockedNoTurningBack, MSGBOX_DEFAULT closemessage + releaseall end BattleFrontier_BattlePike_EventScript_Retire:: diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc index cb053f2c40..ce5c02a935 100644 --- a/data/scripts/day_care.inc +++ b/data/scripts/day_care.inc @@ -103,6 +103,7 @@ Route117_PokemonDayCare_EventScript_GiveMonToRaise:: msgbox Route117_PokemonDayCare_Text_WellRaiseYourMon, MSGBOX_DEFAULT waitmoncry special StoreSelectedPokemonInDaycare + callnative UpdateFollowingPokemon incrementgamestat GAME_STAT_USED_DAYCARE specialvar VAR_RESULT, GetDaycareState goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, Route117_PokemonDayCare_EventScript_CanRaiseOneMore diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index 3e99fc08e2..ead669c6b2 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -11,26 +11,26 @@ EventScript_CutTree:: goto_if_eq VAR_RESULT, NO, EventScript_CancelCut msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT closemessage +EventScript_CutTreeCommon: + callfunc ScrFunc_IsFollowerFieldMoveUser + .2byte VAR_0x8004 + setfieldeffectargument 3, VAR_0x8004 @ skip pose if so dofieldeffect FLDEFF_USE_CUT_ON_TREE waitstate - goto EventScript_CutTreeDown - end - -@ Use cut from party menu -EventScript_UseCut:: - lockall - dofieldeffect FLDEFF_USE_CUT_ON_TREE - waitstate - goto EventScript_CutTreeDown - end - -EventScript_CutTreeDown:: +EventScript_CutTreeDown:: @ fallthrough + setflag FLAG_SAFE_FOLLOWER_MOVEMENT + call_if_eq VAR_0x8004, TRUE, EventScript_FollowerFieldMove applymovement VAR_LAST_TALKED, Movement_CutTreeDown waitmovement 0 removeobject VAR_LAST_TALKED releaseall end +@ Use cut from party menu +EventScript_UseCut:: + lockall + goto EventScript_CutTreeCommon + Movement_CutTreeDown: cut_tree step_end @@ -57,6 +57,11 @@ Text_CantCut: .string "This tree looks like it can be\n" .string "CUT down!$" +@ Use rock smash from party menu +EventScript_UseRockSmash:: + lockall + goto EventScript_RockSmashCommon + @ Interact with smashable rock EventScript_RockSmash:: lockall @@ -70,20 +75,16 @@ EventScript_RockSmash:: goto_if_eq VAR_RESULT, NO, EventScript_CancelSmash msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT closemessage +EventScript_RockSmashCommon: + @ check if follower should use the field move + callfunc ScrFunc_IsFollowerFieldMoveUser + .2byte VAR_0x8004 + setfieldeffectargument 3, VAR_0x8004 @ skip pose if so dofieldeffect FLDEFF_USE_ROCK_SMASH waitstate - goto EventScript_SmashRock - end - -@ Use rock smash from party menu -EventScript_UseRockSmash:: - lockall - dofieldeffect FLDEFF_USE_ROCK_SMASH - waitstate - goto EventScript_SmashRock - end - -EventScript_SmashRock:: +EventScript_SmashRock:: @ fallthrough + setflag FLAG_SAFE_FOLLOWER_MOVEMENT + call_if_eq VAR_0x8004, TRUE, EventScript_FollowerFieldMove applymovement VAR_LAST_TALKED, Movement_SmashRock waitmovement 0 removeobject VAR_LAST_TALKED @@ -95,10 +96,120 @@ EventScript_SmashRock:: releaseall end +EventScript_FollowerFieldMove: + callfunc ScrFunc_GetDirectionToFace + .2byte VAR_0x8005 + .byte OBJ_EVENT_ID_FOLLOWER + .byte OBJ_EVENT_ID_PLAYER + specialvar VAR_0x8006, GetPlayerFacingDirection + goto_if_eq VAR_0x8005, DIR_NONE, EventScript_FollowerFieldMoveEnd + @ Swap follower and player + call EventScript_FollowerSwap + @ Face follower in direction and jump + switch VAR_0x8006 + case DIR_NORTH, EventScript_FollowerJumpNorth + case DIR_EAST, EventScript_FollowerJumpEast + case DIR_SOUTH, EventScript_FollowerJumpSouth + case DIR_WEST, EventScript_FollowerJumpWest +EventScript_FollowerFieldMoveEnd: + return + +EventScript_FollowerSwap: + switch VAR_0x8005 + case DIR_NORTH, EventScript_FollowerMoveNorth + case DIR_EAST, EventScript_FollowerMoveEast + case DIR_SOUTH, EventScript_FollowerMoveSouth + case DIR_WEST, EventScript_FollowerMoveWest + return + +EventScript_FollowerMoveNorth: + applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkUp + applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkDown + waitmovement 0 + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceUp + waitmovement 0 + return + +EventScript_FollowerMoveEast: + applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkRight + applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkLeft + waitmovement 0 + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceRight + waitmovement 0 + return + +EventScript_FollowerMoveSouth: + applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkDown + applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkUp + waitmovement 0 + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceDown + waitmovement 0 + return + +EventScript_FollowerMoveWest: + applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkLeft + applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkRight + waitmovement 0 + applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceLeft + waitmovement 0 + return + +EventScript_FollowerJumpNorth: + applymovement OBJ_EVENT_ID_FOLLOWER, Movement_JumpUp + waitmovement 0 + return + +EventScript_FollowerJumpEast: + applymovement OBJ_EVENT_ID_FOLLOWER, Movement_JumpRight + waitmovement 0 + return + +EventScript_FollowerJumpSouth: + applymovement OBJ_EVENT_ID_FOLLOWER, Movement_JumpDown + waitmovement 0 + return + +EventScript_FollowerJumpWest: + applymovement OBJ_EVENT_ID_FOLLOWER, Movement_JumpLeft + waitmovement 0 + return + EventScript_EndSmash:: releaseall end +Movement_WalkUp: + walk_up + step_end + +Movement_JumpUp: + jump_in_place_up + step_end + +Movement_WalkRight: + walk_right + step_end + +Movement_JumpRight: + jump_in_place_right + step_end + +Movement_WalkDown: + walk_down + step_end + +Movement_JumpDown: + jump_in_place_down + step_end + +Movement_WalkLeft: + walk_left + step_end + +Movement_JumpLeft: + jump_in_place_left + step_end + Movement_SmashRock: rock_smash_break step_end diff --git a/data/scripts/flash.inc b/data/scripts/flash.inc index dbfec2314d..7444dcd5ea 100644 --- a/data/scripts/flash.inc +++ b/data/scripts/flash.inc @@ -1,4 +1,5 @@ EventScript_UseFlash:: animateflash 1 setflashlevel 1 + releaseall end diff --git a/data/scripts/follower.inc b/data/scripts/follower.inc new file mode 100644 index 0000000000..3a81e6fabf --- /dev/null +++ b/data/scripts/follower.inc @@ -0,0 +1,674 @@ +gText_FollowerLovesYou:: + .string "123456789012345678901234567890123\n$" + +gText_FollowerLostInThought:: + .string "{STR_VAR_1} seems lost in thought.$" + +gText_FollowerDefault:: + .string "ERROR 404: Script not found.$" + +gText_WantsToFly:: + .string "{STR_VAR_1} looks up at the\nsky restlessly.\pWould you like to use FLY?$" + +.macro playfirstmoncry +callfunc ScrFunc_playfirstmoncry +.endm + +.macro bufferlivemonnickname out:req +callfunc ScrFunc_bufferlivemonnickname +.byte \out +.endm + +.macro emote obj:req id:req +callfunc ScrFunc_emote +.byte \obj +.byte \id +.endm + +EventScript_Follower:: + lock + bufferlivemonnickname 0 + playfirstmoncry + callfunc ScrFunc_getfolloweraction + checkpartymove MOVE_FLY + compare VAR_RESULT 6 + goto_if_eq EventScript_FollowerEnd + bufferlivemonnickname 0 + msgbox gText_WantsToFly, MSGBOX_YESNO + switch VAR_RESULT + case NO, EventScript_FollowerEnd + case YES, EventScript_FollowerFly + case MULTI_B_PRESSED, EventScript_FollowerEnd +EventScript_FollowerFly:: + callfunc ScrFunc_followerfly +EventScript_FollowerEnd:: + waitfieldeffect FLDEFF_EMOTE + release + end + +EventScript_FollowerLovesYou:: + applymovement 0xFE ContestHall_Movement_Heart + waitmovement 0xFE + waitmoncry + msgbox gText_FollowerLovesYou, MSGBOX_DEFAULT + return + +@ Message address must be loaded into bank 0 +EventScript_FollowerGeneric:: @ similar to Std_MsgboxDefault + faceplayer +EventScript_FollowerGenericSkipFace: + waitfieldeffect FLDEFF_EMOTE + message 0x0 + waitmessage + waitbuttonpress + return + +EventScript_FollowerJump:: + faceplayer + applymovement 0xFE FollowerSplashMovement + waitmovement 0xFE + waitfieldeffect FLDEFF_EMOTE + message 0x0 + waitmessage + waitbuttonpress + return + +EnterPokeballMovement:: + enter_pokeball + step_end + +@ Movement scripts below, movements are defined in movement.inc + +FollowerSplashMovement:: + jump_in_place_down + delay_4 + jump_in_place_down + face_player + step_end + +FollowerShiverVerticalMovement: + lock_facing_direction + slide_left + slide_right + slide_right + slide_left + unlock_facing_direction + step_end + +FollowerShiverHorizontalMovement: + lock_facing_direction + slide_up + slide_down + slide_down + slide_up + unlock_facing_direction + step_end + +FollowerNostalgiaMovement: + face_away_player + lock_facing_direction + jump_in_place_down + jump_in_place_down + jump_in_place_down + unlock_facing_direction + face_player + lock_facing_direction + jump_in_place_down + unlock_facing_direction + step_end + +FollowerSkippingMovement: + lock_facing_direction + jump_in_place_down + delay_4 + jump_in_place_down + unlock_facing_direction + step_end + +FollowerJumpOnPlayerNorth: + jump_up + delay_4 + lock_facing_direction + walk_fast_down + unlock_facing_direction + step_end + +FollowerJumpOnPlayerSouth: + jump_down + delay_4 + lock_facing_direction + walk_fast_up + unlock_facing_direction + step_end + +FollowerJumpOnPlayerEast: + jump_right + delay_4 + lock_facing_direction + walk_fast_left + unlock_facing_direction + step_end + +FollowerJumpOnPlayerWest: + jump_left + delay_4 + lock_facing_direction + walk_fast_right + unlock_facing_direction + step_end + +FollowerCuddlingNorth: + face_left + lock_facing_direction + walk_up + walk_in_place_left + walk_in_place_left + unlock_facing_direction + walk_down + face_player + step_end + +FollowerCuddlingSouth: + face_right + lock_facing_direction + walk_down + walk_in_place_right + walk_in_place_right + unlock_facing_direction + walk_up + face_player + step_end + +FollowerCuddlingEast: + face_down + lock_facing_direction + walk_right + walk_in_place_down + walk_in_place_down + unlock_facing_direction + walk_left + face_player + step_end + +FollowerCuddlingWest: + face_down + lock_facing_direction + walk_left + walk_in_place_down + walk_in_place_down + unlock_facing_direction + walk_right + face_player + step_end + +FollowerGetCloserNorth: + walk_up + delay_16 + lock_facing_direction + walk_down + unlock_facing_direction + step_end + +FollowerGetCloserSouth: + walk_down + delay_16 + lock_facing_direction + walk_up + unlock_facing_direction + step_end + +FollowerGetCloserEast: + walk_right + delay_16 + lock_facing_direction + walk_left + unlock_facing_direction + step_end + +FollowerGetCloserWest: + walk_left + delay_16 + lock_facing_direction + walk_right + unlock_facing_direction + step_end + +FollowerPokeNorth: + walk_faster_up + delay_8 + lock_facing_direction + walk_faster_down + delay_4 + walk_faster_up + delay_4 + walk_faster_down + unlock_facing_direction + step_end + +FollowerPokeSouth: + walk_faster_down + delay_8 + lock_facing_direction + walk_faster_up + delay_4 + walk_faster_down + delay_4 + walk_faster_up + unlock_facing_direction + step_end + +FollowerPokeEast: + walk_faster_right + delay_8 + lock_facing_direction + walk_faster_left + delay_4 + walk_faster_right + delay_4 + walk_faster_left + unlock_facing_direction + step_end + +FollowerPokeWest: + walk_faster_left + delay_8 + lock_facing_direction + walk_faster_right + delay_4 + walk_faster_left + delay_4 + walk_faster_right + unlock_facing_direction + step_end + +FollowerLookAround: + face_away_player + delay_16 + delay_16 + face_left + delay_16 + delay_16 + face_up + delay_16 + delay_16 + face_down + delay_16 + delay_16 + step_end + +FollowerLookAway: + face_away_player + delay_16 + delay_16 + step_end + +FollowerLookAwayBark: + face_away_player + lock_facing_direction + jump_in_place_down + jump_in_place_down + unlock_facing_direction + step_end + +FollowerLookAwayPokeG: + face_away_player + lock_facing_direction + walk_in_place_down + walk_in_place_down + walk_in_place_down + unlock_facing_direction + step_end + +FollowerPokeGround: + lock_facing_direction + walk_in_place_down + walk_in_place_down + walk_in_place_down + unlock_facing_direction + step_end + +FollowerStartled: + face_away_player + lock_facing_direction + jump_in_place_down + unlock_facing_direction + face_player + step_end + +FollowerHopFast: + jump_in_place_up + jump_in_place_down + jump_in_place_left + jump_in_place_right + face_player + step_end + +FollowerDizzy: + walk_in_place_left + walk_in_place_fast_right + walk_in_place_slow_up + walk_in_place_fast_down + delay_4 + face_away_player + step_end + +FollowerLookAroundScared: + face_up + delay_16 + face_down + delay_16 + face_left + delay_16 + face_right + delay_16 + face_up + delay_16 + face_down + delay_16 + face_left + delay_16 + face_right + delay_16 + face_player + step_end + +FollowerDance: + lock_facing_direction + jump_in_place_up + unlock_facing_direction + walk_in_place_fast_up + walk_in_place_fast_left + walk_in_place_fast_down + walk_in_place_fast_right + walk_in_place_fast_up + walk_in_place_fast_left + walk_in_place_fast_down + walk_in_place_fast_right + jump_in_place_up + jump_in_place_down + jump_in_place_up + face_player + step_end + +@ Movement scripts + +EventScript_FollowerIsShivering:: + faceplayer + compare VAR_FACING, DIR_NORTH + call_if_eq ShiverVertical + compare VAR_FACING, DIR_SOUTH + call_if_eq ShiverVertical + compare VAR_FACING, DIR_WEST + call_if_eq ShiverHorizontal + compare VAR_FACING, DIR_EAST + call_if_eq ShiverHorizontal + goto EventScript_FollowerGeneric + +ShiverVertical: + applymovement 0xFE FollowerShiverVerticalMovement + waitmovement 0xFE + return + +ShiverHorizontal: + applymovement 0xFE FollowerShiverHorizontalMovement + waitmovement 0xFE + return + +EventScript_FollowerNostalgia:: + applymovement 0xFE FollowerNostalgiaMovement + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerHopping:: + faceplayer + applymovement 0xFE FollowerSkippingMovement + waitmovement 0xFE + goto EventScript_FollowerGeneric + +JumpOnN: + applymovement 0xFE FollowerJumpOnPlayerNorth + waitmovement 0xFE + return + +JumpOnS: + applymovement 0xFE FollowerJumpOnPlayerSouth + waitmovement 0xFE + return + +JumpOnE: + applymovement 0xFE FollowerJumpOnPlayerEast + waitmovement 0xFE + return + +JumpOnW: + applymovement 0xFE FollowerJumpOnPlayerWest + waitmovement 0xFE + return + +EventScript_FollowerJumpOnPlayer:: + faceplayer + compare VAR_FACING, DIR_NORTH + call_if_eq JumpOnS + compare VAR_FACING, DIR_SOUTH + call_if_eq JumpOnN + compare VAR_FACING, DIR_WEST + call_if_eq JumpOnE + compare VAR_FACING, DIR_EAST + call_if_eq JumpOnW + goto EventScript_FollowerGeneric + +CuddleN: + applymovement 0xFE FollowerCuddlingNorth + waitmovement 0xFE + return + +CuddleS: + applymovement 0xFE FollowerCuddlingSouth + waitmovement 0xFE + return + +CuddleE: + applymovement 0xFE FollowerCuddlingEast + waitmovement 0xFE + return + +CuddleW: + applymovement 0xFE FollowerCuddlingWest + waitmovement 0xFE + return + +EventScript_FollowerCuddling:: @ similar to Std_MsgboxDefault + faceplayer + compare VAR_FACING, DIR_NORTH + call_if_eq CuddleS + compare VAR_FACING, DIR_SOUTH + call_if_eq CuddleN + compare VAR_FACING, DIR_WEST + call_if_eq CuddleE + compare VAR_FACING, DIR_EAST + call_if_eq CuddleW + goto EventScript_FollowerGeneric + +ShCuddleN: + applymovement 0xFE FollowerShiverVerticalMovement + waitmovement 0xFE + applymovement 0xFE FollowerCuddlingNorth + waitmovement 0xFE + return + +ShCuddleS: + applymovement 0xFE FollowerShiverVerticalMovement + waitmovement 0xFE + applymovement 0xFE FollowerCuddlingSouth + waitmovement 0xFE + return + +ShCuddleE: + applymovement 0xFE FollowerShiverHorizontalMovement + waitmovement 0xFE + applymovement 0xFE FollowerCuddlingEast + waitmovement 0xFE + return + +ShCuddleW: + applymovement 0xFE FollowerShiverHorizontalMovement + waitmovement 0xFE + applymovement 0xFE FollowerCuddlingWest + waitmovement 0xFE + return + +EventScript_FollowerShiverCuddling:: + faceplayer + compare VAR_FACING, DIR_NORTH + call_if_eq ShCuddleS + compare VAR_FACING, DIR_SOUTH + call_if_eq ShCuddleN + compare VAR_FACING, DIR_WEST + call_if_eq ShCuddleE + compare VAR_FACING, DIR_EAST + call_if_eq ShCuddleW + goto EventScript_FollowerGeneric + +CreepCloserN: + applymovement 0xFE FollowerGetCloserNorth + waitmovement 0xFE + return + +CreepCloserS: + applymovement 0xFE FollowerGetCloserSouth + waitmovement 0xFE + return + +CreepCloserE: + applymovement 0xFE FollowerGetCloserEast + waitmovement 0xFE + return + +CreepCloserW: + applymovement 0xFE FollowerGetCloserWest + waitmovement 0xFE + return + +EventScript_FollowerGetCloser:: + faceplayer + compare VAR_FACING, DIR_NORTH + call_if_eq CreepCloserS + compare VAR_FACING, DIR_SOUTH + call_if_eq CreepCloserN + compare VAR_FACING, DIR_WEST + call_if_eq CreepCloserE + compare VAR_FACING, DIR_EAST + call_if_eq CreepCloserW + goto EventScript_FollowerGeneric + +PokePlayerN: + applymovement 0xFE FollowerGetCloserNorth + waitmovement 0xFE + return + +PokePlayerS: + applymovement 0xFE FollowerGetCloserSouth + waitmovement 0xFE + return + +PokePlayerE: + applymovement 0xFE FollowerGetCloserEast + waitmovement 0xFE + return + +PokePlayerW: + applymovement 0xFE FollowerGetCloserWest + waitmovement 0xFE + return + +EventScript_FollowerPokingPlayer:: + faceplayer + compare VAR_FACING, DIR_NORTH + call_if_eq PokePlayerS + compare VAR_FACING, DIR_SOUTH + call_if_eq PokePlayerN + compare VAR_FACING, DIR_WEST + call_if_eq PokePlayerE + compare VAR_FACING, DIR_EAST + call_if_eq PokePlayerW + goto EventScript_FollowerGeneric + +EventScript_FollowerLookAround:: + applymovement 0xFE FollowerLookAround + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerLookAway:: + applymovement 0xFE FollowerLookAway + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerLookAwayBark:: + applymovement 0xFE FollowerLookAwayBark + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerLookAwayPoke:: + applymovement 0xFE FollowerLookAwayPokeG + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerPokeGround:: + faceplayer + applymovement 0xFE FollowerPokeGround + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerStartled:: + applymovement 0xFE FollowerStartled + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerFastHopping:: + applymovement 0xFE FollowerHopFast + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerDizzy:: + applymovement 0xFE FollowerDizzy + waitmovement 0 + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerLookAroundScared:: + applymovement 0xFE FollowerLookAroundScared + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerDance:: + faceplayer + applymovement 0xFE FollowerDance + waitmovement 0 + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerFaceUp:: + applymovement 0xFE Common_Movement_FaceUp + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerFaceResult:: @ Face towards direction in VAR_RESULT + switch VAR_RESULT + case DIR_SOUTH, EventScript_FollowerFaceDown + case DIR_NORTH, EventScript_FollowerFaceUp + case DIR_WEST, EventScript_FollowerFaceLeft + case DIR_EAST, EventScript_FollowerFaceRight + goto EventScript_FollowerGeneric + +EventScript_FollowerFaceDown: + applymovement 0xFE Common_Movement_FaceDown + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerFaceLeft: + applymovement 0xFE Common_Movement_FaceLeft + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace + +EventScript_FollowerFaceRight: + applymovement 0xFE Common_Movement_FaceRight + waitmovement 0xFE + goto EventScript_FollowerGenericSkipFace diff --git a/data/scripts/pkmn_center_nurse.inc b/data/scripts/pkmn_center_nurse.inc index 64ccdfa77e..c0fe80a994 100644 --- a/data/scripts/pkmn_center_nurse.inc +++ b/data/scripts/pkmn_center_nurse.inc @@ -33,13 +33,14 @@ EventScript_PkmnCenterNurse_IllTakeYourPkmn2:: return EventScript_PkmnCenterNurse_TakeAndHealPkmn:: - applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterLeft + applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterLeft @ TODO: Make follower disappear here waitmovement 0 dofieldeffect FLDEFF_POKECENTER_HEAL waitfieldeffect FLDEFF_POKECENTER_HEAL applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterDown waitmovement 0 special HealPlayerParty + callnative UpdateFollowingPokemon return EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom:: diff --git a/data/scripts/secret_base.inc b/data/scripts/secret_base.inc index 918a9d6301..9a6fd77253 100644 --- a/data/scripts/secret_base.inc +++ b/data/scripts/secret_base.inc @@ -646,6 +646,7 @@ SecretBase_EventScript_BattleTrainer:: call_if_eq VAR_RESULT, B_OUTCOME_WON, SecretBase_EventScript_WonSecretBaseBattle call_if_eq VAR_RESULT, B_OUTCOME_LOST, SecretBase_EventScript_LostSecretBaseBattle special HealPlayerParty + callnative UpdateFollowingPokemon release end diff --git a/data/scripts/trainer_battle.inc b/data/scripts/trainer_battle.inc index bbbcaf3ba3..cbbdaac291 100644 --- a/data/scripts/trainer_battle.inc +++ b/data/scripts/trainer_battle.inc @@ -10,8 +10,10 @@ EventScript_TrainerApproach:: EventScript_TryDoNormalTrainerBattle:: lock faceplayer + setflag FLAG_SAFE_FOLLOWER_MOVEMENT applymovement VAR_LAST_TALKED, Movement_RevealTrainer waitmovement 0 + clearflag FLAG_SAFE_FOLLOWER_MOVEMENT specialvar VAR_RESULT, GetTrainerFlag goto_if_ne VAR_RESULT, FALSE, EventScript_NoNormalTrainerBattle special PlayTrainerEncounterMusic @@ -44,8 +46,10 @@ EventScript_NoDoubleTrainerBattle:: gotopostbattlescript EventScript_DoNoIntroTrainerBattle:: + setflag FLAG_SAFE_FOLLOWER_MOVEMENT applymovement VAR_LAST_TALKED, Movement_RevealTrainer waitmovement 0 + clearflag FLAG_SAFE_FOLLOWER_MOVEMENT special PlayTrainerEncounterMusic dotrainerbattle gotopostbattlescript @@ -93,8 +97,10 @@ EventScript_NotEnoughMonsForDoubleRematchBattle:: end EventScript_RevealTrainer:: + setflag FLAG_SAFE_FOLLOWER_MOVEMENT applymovement VAR_LAST_TALKED, Movement_RevealTrainer waitmovement 0 + clearflag FLAG_SAFE_FOLLOWER_MOVEMENT return Movement_RevealTrainer: diff --git a/data/tilesets/secondary/rustboro/metatile_attributes.bin b/data/tilesets/secondary/rustboro/metatile_attributes.bin index e2b728c657..56b728b08c 100644 Binary files a/data/tilesets/secondary/rustboro/metatile_attributes.bin and b/data/tilesets/secondary/rustboro/metatile_attributes.bin differ diff --git a/emotions.txt b/emotions.txt new file mode 100644 index 0000000000..590be93530 --- /dev/null +++ b/emotions.txt @@ -0,0 +1,149 @@ +Happy (Special): +Specific map: +{STR_VAR_1} greeted your mom. + +Landscape/map feature: +{STR_VAR_1} greeted everyone! +{STR_VAR_1} greeted the two. (when standing in front of 2 trainers). +{STR_VAR_1} is very eager! ( gym ) must have type advantage. +{STR_VAR_1} greeted Amphy! + +Neutral (Special): +Specific map: +Why is it doing warm-up exercises? (Cerulean Gym). +{STR_VAR_1} is running along the side of the pool! (Cerulean Gym). + +Map feature: +Your pokemon is smelling the scent of the flowers. (When next to flowers in Cherrygrove City). +{STR_VAR_1} Greeted Slowbro (Cerulean city, in front of Slowbro). +{STR_VAR_1} is playing on the sand. +{STR_VAR_1} is staring fixedly at the sea. +{STR_VAR_1} is stomping on the grass! +{STR_VAR_1} is playing around, Picking bits of grass. +{STR_VAR_1} seems highly interested in the tree. +{STR_VAR_1} is looking outside and frolicking! + +Pokemon exclusive: +(MAGIKARP) is leaping around more than usual (lake of rage, During team rockets broadcast) ( Pokemon Exclusive ). + +Pokemon feature: +{STR_VAR_1} seems happy to have taken a shower! (Celadon gym) (Grass,Water type). + +Misc: +{STR_VAR_1} seems dazzled after seeing the sky. +{STR_VAR_1} is fidgeting in front of everyone (maybe baby pokemon). +{STR_VAR_1} roared! +{STR_VAR_1} spun around in a circle! + +Sad (Special): +Pokemon feature: + +Upset (Special): +Specific map(s): +It seems to have eaten something strange. It's making an odd face... (Olivine Cafe). +{STR_VAR_1} is staring at the crumbling floor (burnt tower). +{STR_VAR_1} seems to think that (Player) has disappeared! ( Morty's Gym ). + +Map feature: +{STR_VAR_1} is splashing around in the wet grass. + +Pokemon feature: +Your pokemon doesn't like splashing around on the ground (must be fire type). + +Misc: +{STR_VAR_1} seems to feel a little claustrophobic. +{STR_VAR_1} is a bit nervous about the narrow space! +{STR_VAR_1} seems uneasy and is poking (PLAYER). + +Angry (Special): +Map feature: +{STR_VAR_1} is staring at the Persian statue and glaring. +{STR_VAR_1} is glaring at the PERSIAN statue! +{STR_VAR_1} is glaring at your foe! +{STR_VAR_1} is intimidating your foe! + +Pensive (Special): +Specific map(s): +{STR_VAR_1} seems to be listening to the sound of rustling leaves. +{STR_VAR_1} is preoccupied by the ceiling, which seems like it may collapse (burnt tower). +{STR_VAR_1} is concerned about the swaying pillar (sprout tower). +Your pokemon is drooling a little (Olivine Cafe). +{STR_VAR_1} is preoccupied by the floor, which seems like it may collapse (burnt tower). + +Map feature: +{STR_VAR_1} is staring intently at the reflection of its face. +{STR_VAR_1} seems interested in Amphy... +{STR_VAR_1} has a sleepy look on its face... (Near Jigglypuff in Radio Tower.). + +Misc: +Your pokemon turned to face the other way, showing a defiant expression. + +Music (Special): +Map feature: +{STR_VAR_1} is pulling out the grass. +{STR_VAR_1} is happy to see what's out doors! +{STR_VAR_1} is listening intently to the sound of the waves. +Your pokemon is staring spellbound at the night sky! +Your pokemon seems to be enjoying sliding around! +{STR_VAR_1} is steadily observing the flow of the river. +{STR_VAR_1} is noticing the scent of the grass. +Misc: +{STR_VAR_1} seems happy at the sight of water on the window! +{STR_VAR_1} is looking up at the ceiling. +{STR_VAR_1} seems to be enjoying this a little bit! +{STR_VAR_1} is wandering around enjoying the forest scenery. +{STR_VAR_1} is playing around in the fallen leaves. +{STR_VAR_1} is playing around with a leaf. +{STR_VAR_1} is playing around, touching the leaves. +Your pokemon is happily gazing at the beautiful, starry sky! +{STR_VAR_1} is rolling around in the grass. +{STR_VAR_1} seems to want to return to the lab (after you receive the Mystery egg). +Your pokemon is staring at the various items. +{STR_VAR_1} is looking up the tall mountain... (Mt. Mortar). +{STR_VAR_1} seems concerned about the waterfall. +{STR_VAR_1} is sniffing around the room. (Inside Hero's Room). +{STR_VAR_1} is dancing around the pillar! (Seems to occur more for Bellsprout)(sprout tower). +{STR_VAR_1} swayed around, dancing in a strange manner.(Seems to occur more for Bellsprout)(sprout tower). +{STR_VAR_1} swayed and danced around as it pleased (Seems to occur more for Bellsprout)(sprout tower). +Your Pokemon is playing around and splashing in the water! (Water's edge). +{STR_VAR_1} is looking up at the sky. +{STR_VAR_1} is poking at garbage (Goldenrods underground path). +Your pokemon is rolling a screw from a bicycle around. +{STR_VAR_1} is looking up at the sky. +{STR_VAR_1} is clawing the grass! +{STR_VAR_1} is looking around restlessly at the Forest. +{STR_VAR_1} is playfully nibbling at the ground. +(CYNDAQUIL) blew out a fireball. ( Pokemon Exclusive ). +(CYNDAQUIL) blew out a couple of fireballs. ( Pokemon Exclusive ). +(CHIKORITA) is waving its leaf around ( Pokemon Exclusive ). +(CHIKORITA) is making its leaf twitch ( Pokemon Exclusive ). +(TODADILE) is moving its jaw ( Pokemon Exclusive ). +(TODADILE) is opening and closing its mouth ( Pokemon Exclusive ). +{STR_VAR_1} is playing in the puddle. +{STR_VAR_1} is gazing restlessly at the building ( in goldenrod). + +Surprised (Special): +{STR_VAR_1} seems to have gotten caught in the clumps of grass. +{STR_VAR_1} slipped on the floor and seems likely to fall! +Your pokemon is very concerned about the room below ( Burnt tower ). +Careful! seems like the floor could collapse, and it might fall. +{STR_VAR_1} seems to think that (Player) has disappeared! ( Morty's Gym ). +{STR_VAR_1} gazed surprisingly at the rock! +Huh? your pokemon found something in top of the mountain ( outside Mt. Mortar) (!). +{STR_VAR_1} got tangled up in the branches and almost fell down! +{STR_VAR_1} looked up at the sky and shouted loudly. +{STR_VAR_1} seems to have found something! +{STR_VAR_1} almost forgot it was holding that (Held item). +{STR_VAR_1} is happy at the sight of the water on the window! +{STR_VAR_1} was surprised by the sounds in the thicket! +Seems the breeze is coming from here. +Oh! its slipping and came over here for support (on ice). +{STR_VAR_1} seems to have gotten a bit of zap! (Power plant). +{STR_VAR_1} is dazzled by the shiny brightness of the bridge! (Standing on Nugget Bridge). +{STR_VAR_1} is slipping on the water and almost fell over! +Curious (Special): +{STR_VAR_1} feels something... (burnt tower basement). +{STR_VAR_1} seems to be hearing a strange sound. (Rocket hideout in Mahogany). +{STR_VAR_1} seems to be hearing a strange sound. (Team rocket hide out). +{STR_VAR_1} is concerned about the other side of the fence, it seems. +{STR_VAR_1} is looking at the machine in a strange manner. (Power plant). diff --git a/extract_sprites.py b/extract_sprites.py new file mode 100644 index 0000000000..32e21aaa52 --- /dev/null +++ b/extract_sprites.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python3 +""" Extract sprites from HGSS follower spritesheets. """ +import os.path +import subprocess +import sys +from glob import glob + +import png + + +SPRITESHEETS = [('gen1.png', 15, 11, 1)] +output_dir = 'sprites' +index_to_name = {} +with open('names.txt', 'r') as f: + for line in f: + index, name = line.split(' ')[:2] + name = name.strip() + index_to_name[int(index)] = name.lower() +name_to_index = {v: k for k, v in index_to_name.items()} +PKMN_GRAPHICS = os.path.join('graphics', 'pokemon') + + +def extract_sprites(spritesheet): + path, width, height, offset = spritesheet + for y in range(height): + for x in range(width): + if x == 3 and y == 0 or x == 10 and y == 1: + continue + output_path = os.path.join(output_dir, f'{offset:03d}.png') + subprocess.run(['convert', '-extract', f'64x128+{x*(64+1)}+{y*(128+1)}', path, output_path], check=True) + offset += 1 + + +def stack_sprite(name, path): + joinp = os.path.join + frames = [joinp(path, 'down', name), joinp(path, 'down', 'frame2', name), + joinp(path, 'up', name), joinp(path, 'up', 'frame2', name), + joinp(path, 'left', name), joinp(path, 'left', 'frame2', name)] + output = joinp(path, name) + subprocess.run(['convert'] + frames + ['+append', output], check=True) + print(f'Stacked {output}') + +def canonicalize_names(): + for path in glob('overworld/**/*.png', recursive=True): + head, tail = os.path.split(path) + name, ext = os.path.splitext(tail) + try: + num = int(name) + except ValueError: + continue + new_name = f'{num:03d}' + new_path = os.path.join(head, new_name+ext) + os.rename(path, new_path) + print(path, '->', new_path) + +def closest_color(c, palette): + min_d = float('inf') + best = 0 + r1, g1, b1 = c + for i, (r2, g2, b2) in enumerate(palette[1:], 1): + # Color diff from https://stackoverflow.com/questions/1847092/given-an-rgb-value-what-would-be-the-best-way-to-find-the-closest-match-in-the-d + d = ((r2-r1)*0.30)**2 + ((g2-g1)*0.59)**2 + ((b2-b1)*0.11)**2 + if d < min_d: + min_d = d + best = i + return best + +def apply_palette(palette_file, input_file, output_file): # Apply one file's palette to another + plt = png.Reader(palette_file) + plt.read() + target_palette = tuple(c[:3] for c in plt.palette()) + inp = png.Reader(input_file) + w, h, rows, _ = inp.read() + src_palette = tuple(c[:3] for c in inp.palette()) + with open(output_file, 'wb') as f: + new_rows = [] + for row in rows: + new_rows.append([closest_color(src_palette[c], target_palette) if c else 0 for c in row]) + w = png.Writer(width=w, height=h, bitdepth=4, palette=target_palette) + w.write(f, new_rows) + +def paletteify(path, output_path=None): + output_path = output_path or path + joinp = os.path.join + _, tail = os.path.split(path) + species, _ = os.path.splitext(tail) + front = png.Reader(joinp(PKMN_GRAPHICS, species, 'anim_front.png')) + front.read() + target_palette = tuple(c[:3] for c in front.palette()) + r, g, b = target_palette[0] + color = f'rgb({r},{g},{b})' + # Strip alpha color + subprocess.run(['convert', path, '-background', color, '-alpha', 'remove', output_path], check=True) + apply_palette(joinp(PKMN_GRAPHICS, species, 'anim_front.png'), output_path, output_path) + +# Sprites from https://veekun.com/dex/downloads + +if __name__ == '__main__': + args = sys.argv[1:] + if args: + paletteify(args[0]) + else: + for path in sorted(glob('overworld/*.png')): + _, tail = os.path.split(path) + name, _ = os.path.splitext(tail) + output_path = os.path.join('graphics/object_events/pics/pokemon', f'{name}.png') + try: + paletteify(path, output_path) + except Exception as e: + print(name, e.__class__.__name__, e, file=sys.stderr) diff --git a/follower_emotions.py b/follower_emotions.py new file mode 100644 index 0000000000..5226348031 --- /dev/null +++ b/follower_emotions.py @@ -0,0 +1,50 @@ +""" Processes & outputs follower emotion messages """ +import sys +import re +import textwrap + +blank_regex = re.compile(r'\(?_+\)?') + + +# Converts a series of message lines to a better format +def convert_messages(infile, outfile='emotions.txt'): + with open(infile, 'r') as f_in, open(outfile, 'w') as f_out: + for line in f_in: + line = line.rstrip('\n') + if line and line[0] == '-': + line = line[1:] + line = line.lstrip() + if not line: + continue + line = blank_regex.sub('{STR_VAR_1}', line) + if line[-1] not in ('.', '?', '!', ':'): + line += '.' + print(line) + f_out.write('\n' + line) + +# Prepares a string for field-message display, performing line-wrapping, etc +# Does not add a terminator, as this is done by _("") +def prepare_string(s): + lines = textwrap.wrap(s, width=36) # Width of message window + s = lines[0] + for i, line in enumerate(lines[1:]): + ending = r'\p' if i % 2 else r'\n' + s += ending + line + return s + + +# Exports up to n messages in C format to outfile +def export_messages(infile, outfile, n=None, indent=0, start=0): + with open(infile, 'r') as f_in: + lines = f_in.readlines() + if n is not None: + lines = lines[:n] + with open(outfile, 'w') as f_out: + codelines = [' '*indent + f'static const u8 sCondMsg{start+i:02d}[] = _("{prepare_string(s)}");' for i, s in enumerate(lines)] + f_out.write('\n'.join(codelines)) + print(f'{len(lines)} lines written') + return len(lines) + + +if __name__ == '__main__': + export_messages('emotions.txt', 'emotions.h', n=1, start=7) diff --git a/front_palette.py b/front_palette.py new file mode 100644 index 0000000000..602c4e8e1e --- /dev/null +++ b/front_palette.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 +""" Extract sprites from HGSS follower spritesheets. """ +import os.path +from os.path import join as joinp +import subprocess +import sys +from glob import glob + +import png +from tqdm import tqdm + + +def stack_sprite(name, path): + frames = [joinp(path, 'down', name), joinp(path, 'down', 'frame2', name), + joinp(path, 'up', name), joinp(path, 'up', 'frame2', name), + joinp(path, 'left', name), joinp(path, 'left', 'frame2', name)] + output = joinp(path, name) + subprocess.run(['convert'] + frames + ['+append', output], check=True) + print(f'Stacked {output}') + +def closest_color(c, palette): + min_d = float('inf') + best = 0 + r1, g1, b1 = c + for i, (r2, g2, b2) in enumerate(palette[1:], 1): + # Color diff from https://stackoverflow.com/questions/1847092/given-an-rgb-value-what-would-be-the-best-way-to-find-the-closest-match-in-the-d + d = ((r2-r1)*0.30)**2 + ((g2-g1)*0.59)**2 + ((b2-b1)*0.11)**2 + if d < min_d: + min_d = d + best = i + return best + +def apply_palette(palette_file, input_file, output_file): # Apply one file's palette to another + plt = png.Reader(palette_file) + plt.read() + target_palette = tuple(c[:3] for c in plt.palette()) + inp = png.Reader(input_file) + w, h, rows, info = inp.read() + src_palette = tuple(c[:3] for c in inp.palette()) + new_rows = [[closest_color(src_palette[c][:3], target_palette) if c else 0 for c in row] for row in rows] + with open(output_file, 'wb') as f: + w = png.Writer(width=w, height=h, bitdepth=4, palette=target_palette) + w.write(f, new_rows) + +# Sprites from https://veekun.com/dex/downloads + +def apply_front_palettes(ow_dir, project_root=''): + mon_graphics = joinp(project_root, 'graphics', 'pokemon') + t = tqdm(sorted(glob(joinp(ow_dir, '*.png')))) + spaces = 0 + for path in t: + name, _ = os.path.splitext(os.path.basename(path)) + spaces = min(max(len(name), spaces), 10) + t.set_description(name + ' '*(spaces-len(name))) + output_path = joinp(project_root, 'graphics', 'object_events', 'pics', 'pokemon', f'{name}.png') + if 'unown' in name: + palette_path = joinp(mon_graphics, 'unown', 'a', 'anim_front.png') + elif name == 'castform': + palette_path = joinp(mon_graphics, name, 'anim_front_normal_form.png') + else: + palette_path = joinp(mon_graphics, name, 'anim_front.png') + try: + apply_palette(palette_path, path, output_path) + except Exception as e: + t.write(f'{name}: {e.__class__.__name__}: {e}', file=sys.stderr) + + +if __name__ == '__main__': + apply_front_palettes('overworld') diff --git a/gflib/sprite.c b/gflib/sprite.c index 80fba81fe3..11101ecac0 100644 --- a/gflib/sprite.c +++ b/gflib/sprite.c @@ -584,7 +584,7 @@ u8 CreateSpriteAt(u8 index, const struct SpriteTemplate *template, s16 x, s16 y, if (sprite->oam.affineMode & ST_OAM_AFFINE_ON_MASK) InitSpriteAffineAnim(sprite); - if (template->paletteTag != TAG_NONE) + if (template->paletteTag != TAG_NONE) // TODO: Load sprite palette if tag not present sprite->oam.paletteNum = IndexOfSpritePaletteTag(template->paletteTag); return index; @@ -1587,6 +1587,8 @@ void FreeAllSpritePalettes(void) u8 LoadSpritePalette(const struct SpritePalette *palette) { u8 index = IndexOfSpritePaletteTag(palette->tag); + u8 i; + u16 *debugPtr = (u16*) 0x0203d800; if (index != 0xFF) return index; @@ -1600,6 +1602,9 @@ u8 LoadSpritePalette(const struct SpritePalette *palette) else { sSpritePaletteTags[index] = palette->tag; + for (i = 0; i < 16; i++) { + debugPtr[i] = sSpritePaletteTags[i]; + } DoLoadSpritePalette(palette->data, PLTT_ID(index)); return index; } @@ -1650,8 +1655,12 @@ u16 GetSpritePaletteTagByPaletteNum(u8 paletteNum) void FreeSpritePaletteByTag(u16 tag) { u8 index = IndexOfSpritePaletteTag(tag); - if (index != 0xFF) - sSpritePaletteTags[index] = TAG_NONE; + if (index != 0xFF) { + sSpritePaletteTags[index] = TAG_NONE; + #if DEBUG + FillPalette(0, index * 16 + 0x100, 32); + #endif + } } void SetSubspriteTables(struct Sprite *sprite, const struct SubspriteTable *subspriteTables) diff --git a/graphics/field_effects/pics/bug_tracks.png b/graphics/field_effects/pics/bug_tracks.png new file mode 100644 index 0000000000..b7062d253f Binary files /dev/null and b/graphics/field_effects/pics/bug_tracks.png differ diff --git a/graphics/field_effects/pics/shadow_extra_large.png b/graphics/field_effects/pics/shadow_extra_large.png index 765a5291a8..eb334a976c 100644 Binary files a/graphics/field_effects/pics/shadow_extra_large.png and b/graphics/field_effects/pics/shadow_extra_large.png differ diff --git a/graphics/field_effects/pics/shadow_large.png b/graphics/field_effects/pics/shadow_large.png index e917823b05..1695208af5 100644 Binary files a/graphics/field_effects/pics/shadow_large.png and b/graphics/field_effects/pics/shadow_large.png differ diff --git a/graphics/field_effects/pics/shadow_medium.png b/graphics/field_effects/pics/shadow_medium.png index 83ab6e1f6e..4327a053d2 100644 Binary files a/graphics/field_effects/pics/shadow_medium.png and b/graphics/field_effects/pics/shadow_medium.png differ diff --git a/graphics/field_effects/pics/shadow_small.png b/graphics/field_effects/pics/shadow_small.png index f5feada2b9..6cd37c5f23 100644 Binary files a/graphics/field_effects/pics/shadow_small.png and b/graphics/field_effects/pics/shadow_small.png differ diff --git a/graphics/field_effects/pics/slither_tracks.png b/graphics/field_effects/pics/slither_tracks.png new file mode 100644 index 0000000000..7c8247c344 Binary files /dev/null and b/graphics/field_effects/pics/slither_tracks.png differ diff --git a/graphics/field_effects/pics/spot_tracks.png b/graphics/field_effects/pics/spot_tracks.png new file mode 100644 index 0000000000..cd8c9c0cf4 Binary files /dev/null and b/graphics/field_effects/pics/spot_tracks.png differ diff --git a/graphics/misc/emotes.pal b/graphics/misc/emotes.pal new file mode 100644 index 0000000000..295fc02237 --- /dev/null +++ b/graphics/misc/emotes.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +255 255 0 +151 48 0 +74 75 87 +88 88 97 +164 72 167 +248 63 2 +78 128 207 +48 160 0 +237 131 0 +205 144 203 +168 168 178 +251 167 159 +240 176 183 +219 181 221 +165 225 69 +247 249 246 diff --git a/graphics/misc/emotes.png b/graphics/misc/emotes.png new file mode 100644 index 0000000000..2460eaf999 Binary files /dev/null and b/graphics/misc/emotes.png differ diff --git a/graphics/object_events/palettes/light.pal b/graphics/object_events/palettes/light.pal new file mode 100644 index 0000000000..3beca89bdf --- /dev/null +++ b/graphics/object_events/palettes/light.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +110 198 165 +255 213 18 +255 214 38 +254 217 39 +254 218 53 +255 220 65 +255 221 76 +255 223 86 +254 225 95 +254 228 104 +254 229 112 +254 230 120 +255 232 132 +255 235 148 +255 237 162 +255 240 176 diff --git a/graphics/object_events/pics/misc/animated_ball.png b/graphics/object_events/pics/misc/animated_ball.png new file mode 100644 index 0000000000..534e66c7b4 Binary files /dev/null and b/graphics/object_events/pics/misc/animated_ball.png differ diff --git a/graphics/object_events/pics/misc/light.png b/graphics/object_events/pics/misc/light.png new file mode 100644 index 0000000000..d1a0402d10 Binary files /dev/null and b/graphics/object_events/pics/misc/light.png differ diff --git a/graphics/object_events/pics/pokemon/abra.png b/graphics/object_events/pics/pokemon/abra.png new file mode 100644 index 0000000000..69613dd5de Binary files /dev/null and b/graphics/object_events/pics/pokemon/abra.png differ diff --git a/graphics/object_events/pics/pokemon/absol.png b/graphics/object_events/pics/pokemon/absol.png new file mode 100644 index 0000000000..7e13de7dea Binary files /dev/null and b/graphics/object_events/pics/pokemon/absol.png differ diff --git a/graphics/object_events/pics/pokemon/aerodactyl.png b/graphics/object_events/pics/pokemon/aerodactyl.png new file mode 100644 index 0000000000..fabef1ad67 Binary files /dev/null and b/graphics/object_events/pics/pokemon/aerodactyl.png differ diff --git a/graphics/object_events/pics/pokemon/aggron.png b/graphics/object_events/pics/pokemon/aggron.png new file mode 100644 index 0000000000..5bd984899c Binary files /dev/null and b/graphics/object_events/pics/pokemon/aggron.png differ diff --git a/graphics/object_events/pics/pokemon/aipom.png b/graphics/object_events/pics/pokemon/aipom.png new file mode 100644 index 0000000000..cbddc94820 Binary files /dev/null and b/graphics/object_events/pics/pokemon/aipom.png differ diff --git a/graphics/object_events/pics/pokemon/alakazam.png b/graphics/object_events/pics/pokemon/alakazam.png new file mode 100644 index 0000000000..f9d12d9bea Binary files /dev/null and b/graphics/object_events/pics/pokemon/alakazam.png differ diff --git a/graphics/object_events/pics/pokemon/altaria.png b/graphics/object_events/pics/pokemon/altaria.png new file mode 100644 index 0000000000..4846085baa Binary files /dev/null and b/graphics/object_events/pics/pokemon/altaria.png differ diff --git a/graphics/object_events/pics/pokemon/ampharos.png b/graphics/object_events/pics/pokemon/ampharos.png new file mode 100644 index 0000000000..076d853d03 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ampharos.png differ diff --git a/graphics/object_events/pics/pokemon/anorith.png b/graphics/object_events/pics/pokemon/anorith.png new file mode 100644 index 0000000000..4588e2fe1f Binary files /dev/null and b/graphics/object_events/pics/pokemon/anorith.png differ diff --git a/graphics/object_events/pics/pokemon/arbok.png b/graphics/object_events/pics/pokemon/arbok.png new file mode 100644 index 0000000000..d99a2b4a99 Binary files /dev/null and b/graphics/object_events/pics/pokemon/arbok.png differ diff --git a/graphics/object_events/pics/pokemon/arcanine.png b/graphics/object_events/pics/pokemon/arcanine.png new file mode 100644 index 0000000000..b3263b06a4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/arcanine.png differ diff --git a/graphics/object_events/pics/pokemon/ariados.png b/graphics/object_events/pics/pokemon/ariados.png new file mode 100644 index 0000000000..7c9bea26af Binary files /dev/null and b/graphics/object_events/pics/pokemon/ariados.png differ diff --git a/graphics/object_events/pics/pokemon/armaldo.png b/graphics/object_events/pics/pokemon/armaldo.png new file mode 100644 index 0000000000..1b60202daf Binary files /dev/null and b/graphics/object_events/pics/pokemon/armaldo.png differ diff --git a/graphics/object_events/pics/pokemon/aron.png b/graphics/object_events/pics/pokemon/aron.png new file mode 100644 index 0000000000..cb3006d44d Binary files /dev/null and b/graphics/object_events/pics/pokemon/aron.png differ diff --git a/graphics/object_events/pics/pokemon/articuno.png b/graphics/object_events/pics/pokemon/articuno.png new file mode 100644 index 0000000000..776024b046 Binary files /dev/null and b/graphics/object_events/pics/pokemon/articuno.png differ diff --git a/graphics/object_events/pics/pokemon/azumarill.png b/graphics/object_events/pics/pokemon/azumarill.png index 84b07ea5bc..fc9dade92a 100644 Binary files a/graphics/object_events/pics/pokemon/azumarill.png and b/graphics/object_events/pics/pokemon/azumarill.png differ diff --git a/graphics/object_events/pics/pokemon/azumarill_old.png b/graphics/object_events/pics/pokemon/azumarill_old.png new file mode 100644 index 0000000000..84b07ea5bc Binary files /dev/null and b/graphics/object_events/pics/pokemon/azumarill_old.png differ diff --git a/graphics/object_events/pics/pokemon/azurill.png b/graphics/object_events/pics/pokemon/azurill.png index 99cd25fe5c..b0dc77c734 100644 Binary files a/graphics/object_events/pics/pokemon/azurill.png and b/graphics/object_events/pics/pokemon/azurill.png differ diff --git a/graphics/object_events/pics/pokemon/azurill_old.png b/graphics/object_events/pics/pokemon/azurill_old.png new file mode 100644 index 0000000000..99cd25fe5c Binary files /dev/null and b/graphics/object_events/pics/pokemon/azurill_old.png differ diff --git a/graphics/object_events/pics/pokemon/bagon.png b/graphics/object_events/pics/pokemon/bagon.png new file mode 100644 index 0000000000..99a322d4b3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/bagon.png differ diff --git a/graphics/object_events/pics/pokemon/baltoy.png b/graphics/object_events/pics/pokemon/baltoy.png new file mode 100644 index 0000000000..e84afb661c Binary files /dev/null and b/graphics/object_events/pics/pokemon/baltoy.png differ diff --git a/graphics/object_events/pics/pokemon/banette.png b/graphics/object_events/pics/pokemon/banette.png new file mode 100644 index 0000000000..14223bf887 Binary files /dev/null and b/graphics/object_events/pics/pokemon/banette.png differ diff --git a/graphics/object_events/pics/pokemon/barboach.png b/graphics/object_events/pics/pokemon/barboach.png new file mode 100644 index 0000000000..af6e0f1f4b Binary files /dev/null and b/graphics/object_events/pics/pokemon/barboach.png differ diff --git a/graphics/object_events/pics/pokemon/bayleef.png b/graphics/object_events/pics/pokemon/bayleef.png new file mode 100644 index 0000000000..58545acd1b Binary files /dev/null and b/graphics/object_events/pics/pokemon/bayleef.png differ diff --git a/graphics/object_events/pics/pokemon/beautifly.png b/graphics/object_events/pics/pokemon/beautifly.png new file mode 100644 index 0000000000..4f2456e850 Binary files /dev/null and b/graphics/object_events/pics/pokemon/beautifly.png differ diff --git a/graphics/object_events/pics/pokemon/beedrill.png b/graphics/object_events/pics/pokemon/beedrill.png new file mode 100644 index 0000000000..7a163b6297 Binary files /dev/null and b/graphics/object_events/pics/pokemon/beedrill.png differ diff --git a/graphics/object_events/pics/pokemon/beldum.png b/graphics/object_events/pics/pokemon/beldum.png new file mode 100644 index 0000000000..df2d686670 Binary files /dev/null and b/graphics/object_events/pics/pokemon/beldum.png differ diff --git a/graphics/object_events/pics/pokemon/bellossom.png b/graphics/object_events/pics/pokemon/bellossom.png new file mode 100644 index 0000000000..70a83c2f4d Binary files /dev/null and b/graphics/object_events/pics/pokemon/bellossom.png differ diff --git a/graphics/object_events/pics/pokemon/bellsprout.png b/graphics/object_events/pics/pokemon/bellsprout.png new file mode 100644 index 0000000000..bf21afbed9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/bellsprout.png differ diff --git a/graphics/object_events/pics/pokemon/blastoise.png b/graphics/object_events/pics/pokemon/blastoise.png new file mode 100644 index 0000000000..1699c8d169 Binary files /dev/null and b/graphics/object_events/pics/pokemon/blastoise.png differ diff --git a/graphics/object_events/pics/pokemon/blaziken.png b/graphics/object_events/pics/pokemon/blaziken.png new file mode 100644 index 0000000000..feb0675270 Binary files /dev/null and b/graphics/object_events/pics/pokemon/blaziken.png differ diff --git a/graphics/object_events/pics/pokemon/blissey.png b/graphics/object_events/pics/pokemon/blissey.png new file mode 100644 index 0000000000..8248ba521a Binary files /dev/null and b/graphics/object_events/pics/pokemon/blissey.png differ diff --git a/graphics/object_events/pics/pokemon/breloom.png b/graphics/object_events/pics/pokemon/breloom.png new file mode 100644 index 0000000000..cf8eb0c718 Binary files /dev/null and b/graphics/object_events/pics/pokemon/breloom.png differ diff --git a/graphics/object_events/pics/pokemon/bulbasaur.png b/graphics/object_events/pics/pokemon/bulbasaur.png new file mode 100644 index 0000000000..a37a56b79c Binary files /dev/null and b/graphics/object_events/pics/pokemon/bulbasaur.png differ diff --git a/graphics/object_events/pics/pokemon/butterfree.png b/graphics/object_events/pics/pokemon/butterfree.png new file mode 100644 index 0000000000..805ee1fdf6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/butterfree.png differ diff --git a/graphics/object_events/pics/pokemon/cacnea.png b/graphics/object_events/pics/pokemon/cacnea.png new file mode 100644 index 0000000000..0997129a47 Binary files /dev/null and b/graphics/object_events/pics/pokemon/cacnea.png differ diff --git a/graphics/object_events/pics/pokemon/cacturne.png b/graphics/object_events/pics/pokemon/cacturne.png new file mode 100644 index 0000000000..3bb30ca68b Binary files /dev/null and b/graphics/object_events/pics/pokemon/cacturne.png differ diff --git a/graphics/object_events/pics/pokemon/camerupt.png b/graphics/object_events/pics/pokemon/camerupt.png new file mode 100644 index 0000000000..b190664b68 Binary files /dev/null and b/graphics/object_events/pics/pokemon/camerupt.png differ diff --git a/graphics/object_events/pics/pokemon/carvanha.png b/graphics/object_events/pics/pokemon/carvanha.png new file mode 100644 index 0000000000..7861390afb Binary files /dev/null and b/graphics/object_events/pics/pokemon/carvanha.png differ diff --git a/graphics/object_events/pics/pokemon/cascoon.png b/graphics/object_events/pics/pokemon/cascoon.png new file mode 100644 index 0000000000..104aa23c36 Binary files /dev/null and b/graphics/object_events/pics/pokemon/cascoon.png differ diff --git a/graphics/object_events/pics/pokemon/castform.png b/graphics/object_events/pics/pokemon/castform.png new file mode 100644 index 0000000000..5c7574a78c Binary files /dev/null and b/graphics/object_events/pics/pokemon/castform.png differ diff --git a/graphics/object_events/pics/pokemon/castform_rainy.png b/graphics/object_events/pics/pokemon/castform_rainy.png new file mode 100644 index 0000000000..b2d279c212 Binary files /dev/null and b/graphics/object_events/pics/pokemon/castform_rainy.png differ diff --git a/graphics/object_events/pics/pokemon/castform_snowy.png b/graphics/object_events/pics/pokemon/castform_snowy.png new file mode 100644 index 0000000000..9cf4ca0026 Binary files /dev/null and b/graphics/object_events/pics/pokemon/castform_snowy.png differ diff --git a/graphics/object_events/pics/pokemon/castform_sunny.png b/graphics/object_events/pics/pokemon/castform_sunny.png new file mode 100644 index 0000000000..4d26be85f9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/castform_sunny.png differ diff --git a/graphics/object_events/pics/pokemon/caterpie.png b/graphics/object_events/pics/pokemon/caterpie.png new file mode 100644 index 0000000000..581a2b5fa5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/caterpie.png differ diff --git a/graphics/object_events/pics/pokemon/celebi.png b/graphics/object_events/pics/pokemon/celebi.png new file mode 100644 index 0000000000..45f930fdb2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/celebi.png differ diff --git a/graphics/object_events/pics/pokemon/chansey.png b/graphics/object_events/pics/pokemon/chansey.png new file mode 100644 index 0000000000..b8237d18c7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/chansey.png differ diff --git a/graphics/object_events/pics/pokemon/charizard.png b/graphics/object_events/pics/pokemon/charizard.png new file mode 100644 index 0000000000..a5ae65caeb Binary files /dev/null and b/graphics/object_events/pics/pokemon/charizard.png differ diff --git a/graphics/object_events/pics/pokemon/charmander.png b/graphics/object_events/pics/pokemon/charmander.png new file mode 100644 index 0000000000..8cc5d1a258 Binary files /dev/null and b/graphics/object_events/pics/pokemon/charmander.png differ diff --git a/graphics/object_events/pics/pokemon/charmeleon.png b/graphics/object_events/pics/pokemon/charmeleon.png new file mode 100644 index 0000000000..99d38dbaf6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/charmeleon.png differ diff --git a/graphics/object_events/pics/pokemon/chikorita.png b/graphics/object_events/pics/pokemon/chikorita.png new file mode 100644 index 0000000000..a888d2bb09 Binary files /dev/null and b/graphics/object_events/pics/pokemon/chikorita.png differ diff --git a/graphics/object_events/pics/pokemon/chimecho.png b/graphics/object_events/pics/pokemon/chimecho.png new file mode 100644 index 0000000000..bb21ff26fd Binary files /dev/null and b/graphics/object_events/pics/pokemon/chimecho.png differ diff --git a/graphics/object_events/pics/pokemon/chinchou.png b/graphics/object_events/pics/pokemon/chinchou.png new file mode 100644 index 0000000000..c6550ccdd3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/chinchou.png differ diff --git a/graphics/object_events/pics/pokemon/clamperl.png b/graphics/object_events/pics/pokemon/clamperl.png new file mode 100644 index 0000000000..2a4f337299 Binary files /dev/null and b/graphics/object_events/pics/pokemon/clamperl.png differ diff --git a/graphics/object_events/pics/pokemon/claydol.png b/graphics/object_events/pics/pokemon/claydol.png new file mode 100644 index 0000000000..13bd51356f Binary files /dev/null and b/graphics/object_events/pics/pokemon/claydol.png differ diff --git a/graphics/object_events/pics/pokemon/clefable.png b/graphics/object_events/pics/pokemon/clefable.png new file mode 100644 index 0000000000..7d59d44421 Binary files /dev/null and b/graphics/object_events/pics/pokemon/clefable.png differ diff --git a/graphics/object_events/pics/pokemon/clefairy.png b/graphics/object_events/pics/pokemon/clefairy.png new file mode 100644 index 0000000000..b1ab1f4ec8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/clefairy.png differ diff --git a/graphics/object_events/pics/pokemon/cleffa.png b/graphics/object_events/pics/pokemon/cleffa.png new file mode 100644 index 0000000000..2adc34fac9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/cleffa.png differ diff --git a/graphics/object_events/pics/pokemon/cloyster.png b/graphics/object_events/pics/pokemon/cloyster.png new file mode 100644 index 0000000000..d979526f72 Binary files /dev/null and b/graphics/object_events/pics/pokemon/cloyster.png differ diff --git a/graphics/object_events/pics/pokemon/combusken.png b/graphics/object_events/pics/pokemon/combusken.png new file mode 100644 index 0000000000..b95ae2af8b Binary files /dev/null and b/graphics/object_events/pics/pokemon/combusken.png differ diff --git a/graphics/object_events/pics/pokemon/corphish.png b/graphics/object_events/pics/pokemon/corphish.png new file mode 100644 index 0000000000..49f3ad7642 Binary files /dev/null and b/graphics/object_events/pics/pokemon/corphish.png differ diff --git a/graphics/object_events/pics/pokemon/corsola.png b/graphics/object_events/pics/pokemon/corsola.png new file mode 100644 index 0000000000..8214f16120 Binary files /dev/null and b/graphics/object_events/pics/pokemon/corsola.png differ diff --git a/graphics/object_events/pics/pokemon/cradily.png b/graphics/object_events/pics/pokemon/cradily.png new file mode 100644 index 0000000000..50f19dfa34 Binary files /dev/null and b/graphics/object_events/pics/pokemon/cradily.png differ diff --git a/graphics/object_events/pics/pokemon/crawdaunt.png b/graphics/object_events/pics/pokemon/crawdaunt.png new file mode 100644 index 0000000000..684c8896dc Binary files /dev/null and b/graphics/object_events/pics/pokemon/crawdaunt.png differ diff --git a/graphics/object_events/pics/pokemon/crobat.png b/graphics/object_events/pics/pokemon/crobat.png new file mode 100644 index 0000000000..bba7b85b59 Binary files /dev/null and b/graphics/object_events/pics/pokemon/crobat.png differ diff --git a/graphics/object_events/pics/pokemon/croconaw.png b/graphics/object_events/pics/pokemon/croconaw.png new file mode 100644 index 0000000000..c796ba8166 Binary files /dev/null and b/graphics/object_events/pics/pokemon/croconaw.png differ diff --git a/graphics/object_events/pics/pokemon/cubone.png b/graphics/object_events/pics/pokemon/cubone.png new file mode 100644 index 0000000000..254b1d7137 Binary files /dev/null and b/graphics/object_events/pics/pokemon/cubone.png differ diff --git a/graphics/object_events/pics/pokemon/cyndaquil.png b/graphics/object_events/pics/pokemon/cyndaquil.png new file mode 100644 index 0000000000..4f3efcd7bb Binary files /dev/null and b/graphics/object_events/pics/pokemon/cyndaquil.png differ diff --git a/graphics/object_events/pics/pokemon/delcatty.png b/graphics/object_events/pics/pokemon/delcatty.png new file mode 100644 index 0000000000..d93216ac4a Binary files /dev/null and b/graphics/object_events/pics/pokemon/delcatty.png differ diff --git a/graphics/object_events/pics/pokemon/delibird.png b/graphics/object_events/pics/pokemon/delibird.png new file mode 100644 index 0000000000..977f78180c Binary files /dev/null and b/graphics/object_events/pics/pokemon/delibird.png differ diff --git a/graphics/object_events/pics/pokemon/deoxys.png b/graphics/object_events/pics/pokemon/deoxys.png index 9aa8dc2188..2d2f169a8d 100644 Binary files a/graphics/object_events/pics/pokemon/deoxys.png and b/graphics/object_events/pics/pokemon/deoxys.png differ diff --git a/graphics/object_events/pics/pokemon/deoxys_old.png b/graphics/object_events/pics/pokemon/deoxys_old.png new file mode 100644 index 0000000000..9aa8dc2188 Binary files /dev/null and b/graphics/object_events/pics/pokemon/deoxys_old.png differ diff --git a/graphics/object_events/pics/pokemon/dewgong.png b/graphics/object_events/pics/pokemon/dewgong.png new file mode 100644 index 0000000000..4ad2d31592 Binary files /dev/null and b/graphics/object_events/pics/pokemon/dewgong.png differ diff --git a/graphics/object_events/pics/pokemon/diglett.png b/graphics/object_events/pics/pokemon/diglett.png new file mode 100644 index 0000000000..e6d28409dc Binary files /dev/null and b/graphics/object_events/pics/pokemon/diglett.png differ diff --git a/graphics/object_events/pics/pokemon/ditto.png b/graphics/object_events/pics/pokemon/ditto.png new file mode 100644 index 0000000000..190ca1614e Binary files /dev/null and b/graphics/object_events/pics/pokemon/ditto.png differ diff --git a/graphics/object_events/pics/pokemon/dodrio.png b/graphics/object_events/pics/pokemon/dodrio.png new file mode 100644 index 0000000000..a90d8e7a74 Binary files /dev/null and b/graphics/object_events/pics/pokemon/dodrio.png differ diff --git a/graphics/object_events/pics/pokemon/doduo.png b/graphics/object_events/pics/pokemon/doduo.png new file mode 100644 index 0000000000..b062621b1c Binary files /dev/null and b/graphics/object_events/pics/pokemon/doduo.png differ diff --git a/graphics/object_events/pics/pokemon/donphan.png b/graphics/object_events/pics/pokemon/donphan.png new file mode 100644 index 0000000000..19db7fe766 Binary files /dev/null and b/graphics/object_events/pics/pokemon/donphan.png differ diff --git a/graphics/object_events/pics/pokemon/dragonair.png b/graphics/object_events/pics/pokemon/dragonair.png new file mode 100644 index 0000000000..e6bdb2b2c9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/dragonair.png differ diff --git a/graphics/object_events/pics/pokemon/dragonite.png b/graphics/object_events/pics/pokemon/dragonite.png new file mode 100644 index 0000000000..7b4d74dd28 Binary files /dev/null and b/graphics/object_events/pics/pokemon/dragonite.png differ diff --git a/graphics/object_events/pics/pokemon/dratini.png b/graphics/object_events/pics/pokemon/dratini.png new file mode 100644 index 0000000000..5482338871 Binary files /dev/null and b/graphics/object_events/pics/pokemon/dratini.png differ diff --git a/graphics/object_events/pics/pokemon/drowzee.png b/graphics/object_events/pics/pokemon/drowzee.png new file mode 100644 index 0000000000..061cd521f0 Binary files /dev/null and b/graphics/object_events/pics/pokemon/drowzee.png differ diff --git a/graphics/object_events/pics/pokemon/dugtrio.png b/graphics/object_events/pics/pokemon/dugtrio.png new file mode 100644 index 0000000000..e9dea55248 Binary files /dev/null and b/graphics/object_events/pics/pokemon/dugtrio.png differ diff --git a/graphics/object_events/pics/pokemon/dunsparce.png b/graphics/object_events/pics/pokemon/dunsparce.png new file mode 100644 index 0000000000..8de544894d Binary files /dev/null and b/graphics/object_events/pics/pokemon/dunsparce.png differ diff --git a/graphics/object_events/pics/pokemon/dusclops.png b/graphics/object_events/pics/pokemon/dusclops.png index fb2c85576c..6e826ff65d 100644 Binary files a/graphics/object_events/pics/pokemon/dusclops.png and b/graphics/object_events/pics/pokemon/dusclops.png differ diff --git a/graphics/object_events/pics/pokemon/dusclops_old.png b/graphics/object_events/pics/pokemon/dusclops_old.png new file mode 100644 index 0000000000..fb2c85576c Binary files /dev/null and b/graphics/object_events/pics/pokemon/dusclops_old.png differ diff --git a/graphics/object_events/pics/pokemon/duskull.png b/graphics/object_events/pics/pokemon/duskull.png new file mode 100644 index 0000000000..79ecd0fa1d Binary files /dev/null and b/graphics/object_events/pics/pokemon/duskull.png differ diff --git a/graphics/object_events/pics/pokemon/dustox.png b/graphics/object_events/pics/pokemon/dustox.png new file mode 100644 index 0000000000..b71f9f600b Binary files /dev/null and b/graphics/object_events/pics/pokemon/dustox.png differ diff --git a/graphics/object_events/pics/pokemon/eevee.png b/graphics/object_events/pics/pokemon/eevee.png new file mode 100644 index 0000000000..127edea860 Binary files /dev/null and b/graphics/object_events/pics/pokemon/eevee.png differ diff --git a/graphics/object_events/pics/pokemon/ekans.png b/graphics/object_events/pics/pokemon/ekans.png new file mode 100644 index 0000000000..b23c27347b Binary files /dev/null and b/graphics/object_events/pics/pokemon/ekans.png differ diff --git a/graphics/object_events/pics/pokemon/electabuzz.png b/graphics/object_events/pics/pokemon/electabuzz.png new file mode 100644 index 0000000000..96debe262f Binary files /dev/null and b/graphics/object_events/pics/pokemon/electabuzz.png differ diff --git a/graphics/object_events/pics/pokemon/electrike.png b/graphics/object_events/pics/pokemon/electrike.png new file mode 100644 index 0000000000..5268cbcd09 Binary files /dev/null and b/graphics/object_events/pics/pokemon/electrike.png differ diff --git a/graphics/object_events/pics/pokemon/electrode.png b/graphics/object_events/pics/pokemon/electrode.png new file mode 100644 index 0000000000..f8c922946d Binary files /dev/null and b/graphics/object_events/pics/pokemon/electrode.png differ diff --git a/graphics/object_events/pics/pokemon/elekid.png b/graphics/object_events/pics/pokemon/elekid.png new file mode 100644 index 0000000000..08518beec6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/elekid.png differ diff --git a/graphics/object_events/pics/pokemon/entei.png b/graphics/object_events/pics/pokemon/entei.png new file mode 100644 index 0000000000..dd195685df Binary files /dev/null and b/graphics/object_events/pics/pokemon/entei.png differ diff --git a/graphics/object_events/pics/pokemon/espeon.png b/graphics/object_events/pics/pokemon/espeon.png new file mode 100644 index 0000000000..442b997823 Binary files /dev/null and b/graphics/object_events/pics/pokemon/espeon.png differ diff --git a/graphics/object_events/pics/pokemon/exeggcute.png b/graphics/object_events/pics/pokemon/exeggcute.png new file mode 100644 index 0000000000..7350d289d2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/exeggcute.png differ diff --git a/graphics/object_events/pics/pokemon/exeggutor.png b/graphics/object_events/pics/pokemon/exeggutor.png new file mode 100644 index 0000000000..404c4104d6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/exeggutor.png differ diff --git a/graphics/object_events/pics/pokemon/exploud.png b/graphics/object_events/pics/pokemon/exploud.png new file mode 100644 index 0000000000..b25a1a2885 Binary files /dev/null and b/graphics/object_events/pics/pokemon/exploud.png differ diff --git a/graphics/object_events/pics/pokemon/farfetchd.png b/graphics/object_events/pics/pokemon/farfetchd.png new file mode 100644 index 0000000000..c8093e49be Binary files /dev/null and b/graphics/object_events/pics/pokemon/farfetchd.png differ diff --git a/graphics/object_events/pics/pokemon/fearow.png b/graphics/object_events/pics/pokemon/fearow.png new file mode 100644 index 0000000000..8e60df8bab Binary files /dev/null and b/graphics/object_events/pics/pokemon/fearow.png differ diff --git a/graphics/object_events/pics/pokemon/feebas.png b/graphics/object_events/pics/pokemon/feebas.png new file mode 100644 index 0000000000..a844fa689e Binary files /dev/null and b/graphics/object_events/pics/pokemon/feebas.png differ diff --git a/graphics/object_events/pics/pokemon/feraligatr.png b/graphics/object_events/pics/pokemon/feraligatr.png new file mode 100644 index 0000000000..1a9046b3c9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/feraligatr.png differ diff --git a/graphics/object_events/pics/pokemon/flaaffy.png b/graphics/object_events/pics/pokemon/flaaffy.png new file mode 100644 index 0000000000..55e02b1c35 Binary files /dev/null and b/graphics/object_events/pics/pokemon/flaaffy.png differ diff --git a/graphics/object_events/pics/pokemon/flareon.png b/graphics/object_events/pics/pokemon/flareon.png new file mode 100644 index 0000000000..f4f4d4ffb7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/flareon.png differ diff --git a/graphics/object_events/pics/pokemon/flygon.png b/graphics/object_events/pics/pokemon/flygon.png new file mode 100644 index 0000000000..d007efa50b Binary files /dev/null and b/graphics/object_events/pics/pokemon/flygon.png differ diff --git a/graphics/object_events/pics/pokemon/forretress.png b/graphics/object_events/pics/pokemon/forretress.png new file mode 100644 index 0000000000..36d721de0d Binary files /dev/null and b/graphics/object_events/pics/pokemon/forretress.png differ diff --git a/graphics/object_events/pics/pokemon/furret.png b/graphics/object_events/pics/pokemon/furret.png new file mode 100644 index 0000000000..2ac228ea1e Binary files /dev/null and b/graphics/object_events/pics/pokemon/furret.png differ diff --git a/graphics/object_events/pics/pokemon/gardevoir.png b/graphics/object_events/pics/pokemon/gardevoir.png new file mode 100644 index 0000000000..cd416d612d Binary files /dev/null and b/graphics/object_events/pics/pokemon/gardevoir.png differ diff --git a/graphics/object_events/pics/pokemon/gastly.png b/graphics/object_events/pics/pokemon/gastly.png new file mode 100644 index 0000000000..4969ac665f Binary files /dev/null and b/graphics/object_events/pics/pokemon/gastly.png differ diff --git a/graphics/object_events/pics/pokemon/gengar.png b/graphics/object_events/pics/pokemon/gengar.png new file mode 100644 index 0000000000..153d16f958 Binary files /dev/null and b/graphics/object_events/pics/pokemon/gengar.png differ diff --git a/graphics/object_events/pics/pokemon/geodude.png b/graphics/object_events/pics/pokemon/geodude.png new file mode 100644 index 0000000000..9eaf4303e1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/geodude.png differ diff --git a/graphics/object_events/pics/pokemon/girafarig.png b/graphics/object_events/pics/pokemon/girafarig.png new file mode 100644 index 0000000000..6e290b85a9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/girafarig.png differ diff --git a/graphics/object_events/pics/pokemon/glalie.png b/graphics/object_events/pics/pokemon/glalie.png new file mode 100644 index 0000000000..e05f72dea1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/glalie.png differ diff --git a/graphics/object_events/pics/pokemon/gligar.png b/graphics/object_events/pics/pokemon/gligar.png new file mode 100644 index 0000000000..3b97805387 Binary files /dev/null and b/graphics/object_events/pics/pokemon/gligar.png differ diff --git a/graphics/object_events/pics/pokemon/gloom.png b/graphics/object_events/pics/pokemon/gloom.png new file mode 100644 index 0000000000..25a7c5ebf7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/gloom.png differ diff --git a/graphics/object_events/pics/pokemon/golbat.png b/graphics/object_events/pics/pokemon/golbat.png new file mode 100644 index 0000000000..0b176b58c0 Binary files /dev/null and b/graphics/object_events/pics/pokemon/golbat.png differ diff --git a/graphics/object_events/pics/pokemon/goldeen.png b/graphics/object_events/pics/pokemon/goldeen.png new file mode 100644 index 0000000000..bd6deb06ff Binary files /dev/null and b/graphics/object_events/pics/pokemon/goldeen.png differ diff --git a/graphics/object_events/pics/pokemon/golduck.png b/graphics/object_events/pics/pokemon/golduck.png new file mode 100644 index 0000000000..288d78ae5e Binary files /dev/null and b/graphics/object_events/pics/pokemon/golduck.png differ diff --git a/graphics/object_events/pics/pokemon/golem.png b/graphics/object_events/pics/pokemon/golem.png new file mode 100644 index 0000000000..bfd7d02ceb Binary files /dev/null and b/graphics/object_events/pics/pokemon/golem.png differ diff --git a/graphics/object_events/pics/pokemon/gorebyss.png b/graphics/object_events/pics/pokemon/gorebyss.png new file mode 100644 index 0000000000..1870f2abbe Binary files /dev/null and b/graphics/object_events/pics/pokemon/gorebyss.png differ diff --git a/graphics/object_events/pics/pokemon/granbull.png b/graphics/object_events/pics/pokemon/granbull.png new file mode 100644 index 0000000000..2fdfb1e9d5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/granbull.png differ diff --git a/graphics/object_events/pics/pokemon/graveler.png b/graphics/object_events/pics/pokemon/graveler.png new file mode 100644 index 0000000000..42b5cba07b Binary files /dev/null and b/graphics/object_events/pics/pokemon/graveler.png differ diff --git a/graphics/object_events/pics/pokemon/grimer.png b/graphics/object_events/pics/pokemon/grimer.png new file mode 100644 index 0000000000..5b4523387d Binary files /dev/null and b/graphics/object_events/pics/pokemon/grimer.png differ diff --git a/graphics/object_events/pics/pokemon/groudon.png b/graphics/object_events/pics/pokemon/groudon.png index 3d14c5ac9e..baec3777a7 100644 Binary files a/graphics/object_events/pics/pokemon/groudon.png and b/graphics/object_events/pics/pokemon/groudon.png differ diff --git a/graphics/object_events/pics/pokemon/groudon_old.png b/graphics/object_events/pics/pokemon/groudon_old.png new file mode 100644 index 0000000000..3d14c5ac9e Binary files /dev/null and b/graphics/object_events/pics/pokemon/groudon_old.png differ diff --git a/graphics/object_events/pics/pokemon/grovyle.png b/graphics/object_events/pics/pokemon/grovyle.png new file mode 100644 index 0000000000..3c852580f4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/grovyle.png differ diff --git a/graphics/object_events/pics/pokemon/growlithe.png b/graphics/object_events/pics/pokemon/growlithe.png new file mode 100644 index 0000000000..ecce6a8c30 Binary files /dev/null and b/graphics/object_events/pics/pokemon/growlithe.png differ diff --git a/graphics/object_events/pics/pokemon/grumpig.png b/graphics/object_events/pics/pokemon/grumpig.png new file mode 100644 index 0000000000..6d0f22e7c8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/grumpig.png differ diff --git a/graphics/object_events/pics/pokemon/gulpin.png b/graphics/object_events/pics/pokemon/gulpin.png new file mode 100644 index 0000000000..1a3e050602 Binary files /dev/null and b/graphics/object_events/pics/pokemon/gulpin.png differ diff --git a/graphics/object_events/pics/pokemon/gyarados.png b/graphics/object_events/pics/pokemon/gyarados.png new file mode 100644 index 0000000000..482d3d52e3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/gyarados.png differ diff --git a/graphics/object_events/pics/pokemon/hariyama.png b/graphics/object_events/pics/pokemon/hariyama.png new file mode 100644 index 0000000000..3711c8e5e3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/hariyama.png differ diff --git a/graphics/object_events/pics/pokemon/haunter.png b/graphics/object_events/pics/pokemon/haunter.png new file mode 100644 index 0000000000..f004f3483f Binary files /dev/null and b/graphics/object_events/pics/pokemon/haunter.png differ diff --git a/graphics/object_events/pics/pokemon/heracross.png b/graphics/object_events/pics/pokemon/heracross.png new file mode 100644 index 0000000000..ff29253ef8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/heracross.png differ diff --git a/graphics/object_events/pics/pokemon/hitmonchan.png b/graphics/object_events/pics/pokemon/hitmonchan.png new file mode 100644 index 0000000000..f8f32a50e1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/hitmonchan.png differ diff --git a/graphics/object_events/pics/pokemon/hitmonlee.png b/graphics/object_events/pics/pokemon/hitmonlee.png new file mode 100644 index 0000000000..6479c3641b Binary files /dev/null and b/graphics/object_events/pics/pokemon/hitmonlee.png differ diff --git a/graphics/object_events/pics/pokemon/hitmontop.png b/graphics/object_events/pics/pokemon/hitmontop.png new file mode 100644 index 0000000000..7274d4c015 Binary files /dev/null and b/graphics/object_events/pics/pokemon/hitmontop.png differ diff --git a/graphics/object_events/pics/pokemon/ho_oh.png b/graphics/object_events/pics/pokemon/ho_oh.png index e6c7374e03..5a18f8dd2e 100644 Binary files a/graphics/object_events/pics/pokemon/ho_oh.png and b/graphics/object_events/pics/pokemon/ho_oh.png differ diff --git a/graphics/object_events/pics/pokemon/ho_oh_old.png b/graphics/object_events/pics/pokemon/ho_oh_old.png new file mode 100644 index 0000000000..e6c7374e03 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ho_oh_old.png differ diff --git a/graphics/object_events/pics/pokemon/hoothoot.png b/graphics/object_events/pics/pokemon/hoothoot.png new file mode 100644 index 0000000000..1c6eedaac8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/hoothoot.png differ diff --git a/graphics/object_events/pics/pokemon/hoppip.png b/graphics/object_events/pics/pokemon/hoppip.png new file mode 100644 index 0000000000..ad0f382e68 Binary files /dev/null and b/graphics/object_events/pics/pokemon/hoppip.png differ diff --git a/graphics/object_events/pics/pokemon/horsea.png b/graphics/object_events/pics/pokemon/horsea.png new file mode 100644 index 0000000000..c6fe9807c2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/horsea.png differ diff --git a/graphics/object_events/pics/pokemon/houndoom.png b/graphics/object_events/pics/pokemon/houndoom.png new file mode 100644 index 0000000000..869da31981 Binary files /dev/null and b/graphics/object_events/pics/pokemon/houndoom.png differ diff --git a/graphics/object_events/pics/pokemon/houndour.png b/graphics/object_events/pics/pokemon/houndour.png new file mode 100644 index 0000000000..daacf9b565 Binary files /dev/null and b/graphics/object_events/pics/pokemon/houndour.png differ diff --git a/graphics/object_events/pics/pokemon/huntail.png b/graphics/object_events/pics/pokemon/huntail.png new file mode 100644 index 0000000000..3aec64c4bf Binary files /dev/null and b/graphics/object_events/pics/pokemon/huntail.png differ diff --git a/graphics/object_events/pics/pokemon/hypno.png b/graphics/object_events/pics/pokemon/hypno.png new file mode 100644 index 0000000000..f6a1292fdb Binary files /dev/null and b/graphics/object_events/pics/pokemon/hypno.png differ diff --git a/graphics/object_events/pics/pokemon/igglybuff.png b/graphics/object_events/pics/pokemon/igglybuff.png new file mode 100644 index 0000000000..e1a3f53ae8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/igglybuff.png differ diff --git a/graphics/object_events/pics/pokemon/illumise.png b/graphics/object_events/pics/pokemon/illumise.png new file mode 100644 index 0000000000..5841698e5c Binary files /dev/null and b/graphics/object_events/pics/pokemon/illumise.png differ diff --git a/graphics/object_events/pics/pokemon/ivysaur.png b/graphics/object_events/pics/pokemon/ivysaur.png new file mode 100644 index 0000000000..376fd432a5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ivysaur.png differ diff --git a/graphics/object_events/pics/pokemon/jigglypuff.png b/graphics/object_events/pics/pokemon/jigglypuff.png new file mode 100644 index 0000000000..5d874de2c6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/jigglypuff.png differ diff --git a/graphics/object_events/pics/pokemon/jirachi.png b/graphics/object_events/pics/pokemon/jirachi.png new file mode 100644 index 0000000000..49932d092f Binary files /dev/null and b/graphics/object_events/pics/pokemon/jirachi.png differ diff --git a/graphics/object_events/pics/pokemon/jolteon.png b/graphics/object_events/pics/pokemon/jolteon.png new file mode 100644 index 0000000000..bdd51d2e97 Binary files /dev/null and b/graphics/object_events/pics/pokemon/jolteon.png differ diff --git a/graphics/object_events/pics/pokemon/jumpluff.png b/graphics/object_events/pics/pokemon/jumpluff.png new file mode 100644 index 0000000000..56bf7a444e Binary files /dev/null and b/graphics/object_events/pics/pokemon/jumpluff.png differ diff --git a/graphics/object_events/pics/pokemon/jynx.png b/graphics/object_events/pics/pokemon/jynx.png new file mode 100644 index 0000000000..02bc90175f Binary files /dev/null and b/graphics/object_events/pics/pokemon/jynx.png differ diff --git a/graphics/object_events/pics/pokemon/kabuto.png b/graphics/object_events/pics/pokemon/kabuto.png new file mode 100644 index 0000000000..8f20a1577c Binary files /dev/null and b/graphics/object_events/pics/pokemon/kabuto.png differ diff --git a/graphics/object_events/pics/pokemon/kabutops.png b/graphics/object_events/pics/pokemon/kabutops.png new file mode 100644 index 0000000000..ddc6403981 Binary files /dev/null and b/graphics/object_events/pics/pokemon/kabutops.png differ diff --git a/graphics/object_events/pics/pokemon/kadabra.png b/graphics/object_events/pics/pokemon/kadabra.png new file mode 100644 index 0000000000..0bbd204155 Binary files /dev/null and b/graphics/object_events/pics/pokemon/kadabra.png differ diff --git a/graphics/object_events/pics/pokemon/kakuna.png b/graphics/object_events/pics/pokemon/kakuna.png new file mode 100644 index 0000000000..ff3da1eb7d Binary files /dev/null and b/graphics/object_events/pics/pokemon/kakuna.png differ diff --git a/graphics/object_events/pics/pokemon/kangaskhan.png b/graphics/object_events/pics/pokemon/kangaskhan.png new file mode 100644 index 0000000000..2b5ddc81fe Binary files /dev/null and b/graphics/object_events/pics/pokemon/kangaskhan.png differ diff --git a/graphics/object_events/pics/pokemon/kecleon.png b/graphics/object_events/pics/pokemon/kecleon.png index 47ae584b79..a6e21e2f1c 100644 Binary files a/graphics/object_events/pics/pokemon/kecleon.png and b/graphics/object_events/pics/pokemon/kecleon.png differ diff --git a/graphics/object_events/pics/pokemon/kecleon_old.png b/graphics/object_events/pics/pokemon/kecleon_old.png new file mode 100644 index 0000000000..47ae584b79 Binary files /dev/null and b/graphics/object_events/pics/pokemon/kecleon_old.png differ diff --git a/graphics/object_events/pics/pokemon/kingdra.png b/graphics/object_events/pics/pokemon/kingdra.png new file mode 100644 index 0000000000..cc90e98b20 Binary files /dev/null and b/graphics/object_events/pics/pokemon/kingdra.png differ diff --git a/graphics/object_events/pics/pokemon/kingler.png b/graphics/object_events/pics/pokemon/kingler.png new file mode 100644 index 0000000000..387a5acc89 Binary files /dev/null and b/graphics/object_events/pics/pokemon/kingler.png differ diff --git a/graphics/object_events/pics/pokemon/kirlia.png b/graphics/object_events/pics/pokemon/kirlia.png index bac74a9ccb..d8dffdb984 100644 Binary files a/graphics/object_events/pics/pokemon/kirlia.png and b/graphics/object_events/pics/pokemon/kirlia.png differ diff --git a/graphics/object_events/pics/pokemon/kirlia_old.png b/graphics/object_events/pics/pokemon/kirlia_old.png new file mode 100644 index 0000000000..bac74a9ccb Binary files /dev/null and b/graphics/object_events/pics/pokemon/kirlia_old.png differ diff --git a/graphics/object_events/pics/pokemon/koffing.png b/graphics/object_events/pics/pokemon/koffing.png new file mode 100644 index 0000000000..d4510c2cbf Binary files /dev/null and b/graphics/object_events/pics/pokemon/koffing.png differ diff --git a/graphics/object_events/pics/pokemon/krabby.png b/graphics/object_events/pics/pokemon/krabby.png new file mode 100644 index 0000000000..7a1ddce18a Binary files /dev/null and b/graphics/object_events/pics/pokemon/krabby.png differ diff --git a/graphics/object_events/pics/pokemon/kyogre.png b/graphics/object_events/pics/pokemon/kyogre.png index 32f67aafa2..3676217437 100644 Binary files a/graphics/object_events/pics/pokemon/kyogre.png and b/graphics/object_events/pics/pokemon/kyogre.png differ diff --git a/graphics/object_events/pics/pokemon/kyogre_old.png b/graphics/object_events/pics/pokemon/kyogre_old.png new file mode 100644 index 0000000000..32f67aafa2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/kyogre_old.png differ diff --git a/graphics/object_events/pics/pokemon/lairon.png b/graphics/object_events/pics/pokemon/lairon.png new file mode 100644 index 0000000000..5a7968dcac Binary files /dev/null and b/graphics/object_events/pics/pokemon/lairon.png differ diff --git a/graphics/object_events/pics/pokemon/lanturn.png b/graphics/object_events/pics/pokemon/lanturn.png new file mode 100644 index 0000000000..99782661ea Binary files /dev/null and b/graphics/object_events/pics/pokemon/lanturn.png differ diff --git a/graphics/object_events/pics/pokemon/lapras.png b/graphics/object_events/pics/pokemon/lapras.png new file mode 100644 index 0000000000..2b602ad4b6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/lapras.png differ diff --git a/graphics/object_events/pics/pokemon/larvitar.png b/graphics/object_events/pics/pokemon/larvitar.png new file mode 100644 index 0000000000..478f864486 Binary files /dev/null and b/graphics/object_events/pics/pokemon/larvitar.png differ diff --git a/graphics/object_events/pics/pokemon/latias.png b/graphics/object_events/pics/pokemon/latias.png new file mode 100644 index 0000000000..2c4bedf3b9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/latias.png differ diff --git a/graphics/object_events/pics/pokemon/latios.png b/graphics/object_events/pics/pokemon/latios.png new file mode 100644 index 0000000000..69160cf181 Binary files /dev/null and b/graphics/object_events/pics/pokemon/latios.png differ diff --git a/graphics/object_events/pics/pokemon/ledian.png b/graphics/object_events/pics/pokemon/ledian.png new file mode 100644 index 0000000000..f4653d768f Binary files /dev/null and b/graphics/object_events/pics/pokemon/ledian.png differ diff --git a/graphics/object_events/pics/pokemon/ledyba.png b/graphics/object_events/pics/pokemon/ledyba.png new file mode 100644 index 0000000000..f80bc91775 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ledyba.png differ diff --git a/graphics/object_events/pics/pokemon/lickitung.png b/graphics/object_events/pics/pokemon/lickitung.png new file mode 100644 index 0000000000..a04f584196 Binary files /dev/null and b/graphics/object_events/pics/pokemon/lickitung.png differ diff --git a/graphics/object_events/pics/pokemon/lileep.png b/graphics/object_events/pics/pokemon/lileep.png new file mode 100644 index 0000000000..d0cc084028 Binary files /dev/null and b/graphics/object_events/pics/pokemon/lileep.png differ diff --git a/graphics/object_events/pics/pokemon/linoone.png b/graphics/object_events/pics/pokemon/linoone.png new file mode 100644 index 0000000000..c3b96b1253 Binary files /dev/null and b/graphics/object_events/pics/pokemon/linoone.png differ diff --git a/graphics/object_events/pics/pokemon/lombre.png b/graphics/object_events/pics/pokemon/lombre.png new file mode 100644 index 0000000000..5543070f67 Binary files /dev/null and b/graphics/object_events/pics/pokemon/lombre.png differ diff --git a/graphics/object_events/pics/pokemon/lotad.png b/graphics/object_events/pics/pokemon/lotad.png new file mode 100644 index 0000000000..8e59c51836 Binary files /dev/null and b/graphics/object_events/pics/pokemon/lotad.png differ diff --git a/graphics/object_events/pics/pokemon/loudred.png b/graphics/object_events/pics/pokemon/loudred.png new file mode 100644 index 0000000000..9fa6c40c3a Binary files /dev/null and b/graphics/object_events/pics/pokemon/loudred.png differ diff --git a/graphics/object_events/pics/pokemon/ludicolo.png b/graphics/object_events/pics/pokemon/ludicolo.png new file mode 100644 index 0000000000..fd7917db70 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ludicolo.png differ diff --git a/graphics/object_events/pics/pokemon/lugia.png b/graphics/object_events/pics/pokemon/lugia.png index 1dfc6858b9..31d53e8aab 100644 Binary files a/graphics/object_events/pics/pokemon/lugia.png and b/graphics/object_events/pics/pokemon/lugia.png differ diff --git a/graphics/object_events/pics/pokemon/lugia_old.png b/graphics/object_events/pics/pokemon/lugia_old.png new file mode 100644 index 0000000000..1dfc6858b9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/lugia_old.png differ diff --git a/graphics/object_events/pics/pokemon/lunatone.png b/graphics/object_events/pics/pokemon/lunatone.png new file mode 100644 index 0000000000..1f1fa469b9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/lunatone.png differ diff --git a/graphics/object_events/pics/pokemon/luvdisc.png b/graphics/object_events/pics/pokemon/luvdisc.png new file mode 100644 index 0000000000..ec742dd3cc Binary files /dev/null and b/graphics/object_events/pics/pokemon/luvdisc.png differ diff --git a/graphics/object_events/pics/pokemon/machamp.png b/graphics/object_events/pics/pokemon/machamp.png new file mode 100644 index 0000000000..165c97e920 Binary files /dev/null and b/graphics/object_events/pics/pokemon/machamp.png differ diff --git a/graphics/object_events/pics/pokemon/machoke.png b/graphics/object_events/pics/pokemon/machoke.png new file mode 100644 index 0000000000..3730865ba3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/machoke.png differ diff --git a/graphics/object_events/pics/pokemon/machop.png b/graphics/object_events/pics/pokemon/machop.png new file mode 100644 index 0000000000..1c2069bd2a Binary files /dev/null and b/graphics/object_events/pics/pokemon/machop.png differ diff --git a/graphics/object_events/pics/pokemon/magby.png b/graphics/object_events/pics/pokemon/magby.png new file mode 100644 index 0000000000..1a5a5b3b32 Binary files /dev/null and b/graphics/object_events/pics/pokemon/magby.png differ diff --git a/graphics/object_events/pics/pokemon/magcargo.png b/graphics/object_events/pics/pokemon/magcargo.png new file mode 100644 index 0000000000..7464a5143d Binary files /dev/null and b/graphics/object_events/pics/pokemon/magcargo.png differ diff --git a/graphics/object_events/pics/pokemon/magikarp.png b/graphics/object_events/pics/pokemon/magikarp.png new file mode 100644 index 0000000000..9442339d10 Binary files /dev/null and b/graphics/object_events/pics/pokemon/magikarp.png differ diff --git a/graphics/object_events/pics/pokemon/magmar.png b/graphics/object_events/pics/pokemon/magmar.png new file mode 100644 index 0000000000..167b17b762 Binary files /dev/null and b/graphics/object_events/pics/pokemon/magmar.png differ diff --git a/graphics/object_events/pics/pokemon/magnemite.png b/graphics/object_events/pics/pokemon/magnemite.png new file mode 100644 index 0000000000..b35e1fef56 Binary files /dev/null and b/graphics/object_events/pics/pokemon/magnemite.png differ diff --git a/graphics/object_events/pics/pokemon/magneton.png b/graphics/object_events/pics/pokemon/magneton.png new file mode 100644 index 0000000000..bf15d01a9c Binary files /dev/null and b/graphics/object_events/pics/pokemon/magneton.png differ diff --git a/graphics/object_events/pics/pokemon/makuhita.png b/graphics/object_events/pics/pokemon/makuhita.png new file mode 100644 index 0000000000..ac8cd38f8e Binary files /dev/null and b/graphics/object_events/pics/pokemon/makuhita.png differ diff --git a/graphics/object_events/pics/pokemon/manectric.png b/graphics/object_events/pics/pokemon/manectric.png new file mode 100644 index 0000000000..cd6bd3fc96 Binary files /dev/null and b/graphics/object_events/pics/pokemon/manectric.png differ diff --git a/graphics/object_events/pics/pokemon/mankey.png b/graphics/object_events/pics/pokemon/mankey.png new file mode 100644 index 0000000000..5175272811 Binary files /dev/null and b/graphics/object_events/pics/pokemon/mankey.png differ diff --git a/graphics/object_events/pics/pokemon/mantine.png b/graphics/object_events/pics/pokemon/mantine.png new file mode 100644 index 0000000000..7a66128a48 Binary files /dev/null and b/graphics/object_events/pics/pokemon/mantine.png differ diff --git a/graphics/object_events/pics/pokemon/mareep.png b/graphics/object_events/pics/pokemon/mareep.png new file mode 100644 index 0000000000..1effc12c2a Binary files /dev/null and b/graphics/object_events/pics/pokemon/mareep.png differ diff --git a/graphics/object_events/pics/pokemon/marill.png b/graphics/object_events/pics/pokemon/marill.png new file mode 100644 index 0000000000..d3b8bc2dc4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/marill.png differ diff --git a/graphics/object_events/pics/pokemon/marowak.png b/graphics/object_events/pics/pokemon/marowak.png new file mode 100644 index 0000000000..ed8447205b Binary files /dev/null and b/graphics/object_events/pics/pokemon/marowak.png differ diff --git a/graphics/object_events/pics/pokemon/marshtomp.png b/graphics/object_events/pics/pokemon/marshtomp.png new file mode 100644 index 0000000000..f3689e4870 Binary files /dev/null and b/graphics/object_events/pics/pokemon/marshtomp.png differ diff --git a/graphics/object_events/pics/pokemon/masquerain.png b/graphics/object_events/pics/pokemon/masquerain.png new file mode 100644 index 0000000000..328aa4263c Binary files /dev/null and b/graphics/object_events/pics/pokemon/masquerain.png differ diff --git a/graphics/object_events/pics/pokemon/mawile.png b/graphics/object_events/pics/pokemon/mawile.png new file mode 100644 index 0000000000..43ad3b9f34 Binary files /dev/null and b/graphics/object_events/pics/pokemon/mawile.png differ diff --git a/graphics/object_events/pics/pokemon/medicham.png b/graphics/object_events/pics/pokemon/medicham.png new file mode 100644 index 0000000000..4a98c808a5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/medicham.png differ diff --git a/graphics/object_events/pics/pokemon/meditite.png b/graphics/object_events/pics/pokemon/meditite.png new file mode 100644 index 0000000000..7e2ad4a5e4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/meditite.png differ diff --git a/graphics/object_events/pics/pokemon/meganium.png b/graphics/object_events/pics/pokemon/meganium.png new file mode 100644 index 0000000000..fcdc97e80f Binary files /dev/null and b/graphics/object_events/pics/pokemon/meganium.png differ diff --git a/graphics/object_events/pics/pokemon/meowth.png b/graphics/object_events/pics/pokemon/meowth.png new file mode 100644 index 0000000000..bdebcac30d Binary files /dev/null and b/graphics/object_events/pics/pokemon/meowth.png differ diff --git a/graphics/object_events/pics/pokemon/metagross.png b/graphics/object_events/pics/pokemon/metagross.png new file mode 100644 index 0000000000..d7bd9c0d8f Binary files /dev/null and b/graphics/object_events/pics/pokemon/metagross.png differ diff --git a/graphics/object_events/pics/pokemon/metang.png b/graphics/object_events/pics/pokemon/metang.png new file mode 100644 index 0000000000..100d3458ad Binary files /dev/null and b/graphics/object_events/pics/pokemon/metang.png differ diff --git a/graphics/object_events/pics/pokemon/metapod.png b/graphics/object_events/pics/pokemon/metapod.png new file mode 100644 index 0000000000..140ae77fdd Binary files /dev/null and b/graphics/object_events/pics/pokemon/metapod.png differ diff --git a/graphics/object_events/pics/pokemon/mew.png b/graphics/object_events/pics/pokemon/mew.png index 00cbd27794..bc6cc0dc92 100644 Binary files a/graphics/object_events/pics/pokemon/mew.png and b/graphics/object_events/pics/pokemon/mew.png differ diff --git a/graphics/object_events/pics/pokemon/mew_old.png b/graphics/object_events/pics/pokemon/mew_old.png new file mode 100644 index 0000000000..00cbd27794 Binary files /dev/null and b/graphics/object_events/pics/pokemon/mew_old.png differ diff --git a/graphics/object_events/pics/pokemon/mewtwo.png b/graphics/object_events/pics/pokemon/mewtwo.png new file mode 100644 index 0000000000..6d8c13dd5f Binary files /dev/null and b/graphics/object_events/pics/pokemon/mewtwo.png differ diff --git a/graphics/object_events/pics/pokemon/mightyena.png b/graphics/object_events/pics/pokemon/mightyena.png new file mode 100644 index 0000000000..c806339498 Binary files /dev/null and b/graphics/object_events/pics/pokemon/mightyena.png differ diff --git a/graphics/object_events/pics/pokemon/milotic.png b/graphics/object_events/pics/pokemon/milotic.png new file mode 100644 index 0000000000..f26b9c0f3b Binary files /dev/null and b/graphics/object_events/pics/pokemon/milotic.png differ diff --git a/graphics/object_events/pics/pokemon/miltank.png b/graphics/object_events/pics/pokemon/miltank.png new file mode 100644 index 0000000000..9c40d97ba7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/miltank.png differ diff --git a/graphics/object_events/pics/pokemon/minun.png b/graphics/object_events/pics/pokemon/minun.png new file mode 100644 index 0000000000..9140239f27 Binary files /dev/null and b/graphics/object_events/pics/pokemon/minun.png differ diff --git a/graphics/object_events/pics/pokemon/misdreavus.png b/graphics/object_events/pics/pokemon/misdreavus.png new file mode 100644 index 0000000000..9753d612b5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/misdreavus.png differ diff --git a/graphics/object_events/pics/pokemon/moltres.png b/graphics/object_events/pics/pokemon/moltres.png new file mode 100644 index 0000000000..f8199cf907 Binary files /dev/null and b/graphics/object_events/pics/pokemon/moltres.png differ diff --git a/graphics/object_events/pics/pokemon/mr_mime.png b/graphics/object_events/pics/pokemon/mr_mime.png new file mode 100644 index 0000000000..344d479ee4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/mr_mime.png differ diff --git a/graphics/object_events/pics/pokemon/mudkip.png b/graphics/object_events/pics/pokemon/mudkip.png new file mode 100644 index 0000000000..65941bf946 Binary files /dev/null and b/graphics/object_events/pics/pokemon/mudkip.png differ diff --git a/graphics/object_events/pics/pokemon/muk.png b/graphics/object_events/pics/pokemon/muk.png new file mode 100644 index 0000000000..84ab63aa83 Binary files /dev/null and b/graphics/object_events/pics/pokemon/muk.png differ diff --git a/graphics/object_events/pics/pokemon/murkrow.png b/graphics/object_events/pics/pokemon/murkrow.png new file mode 100644 index 0000000000..62063434a2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/murkrow.png differ diff --git a/graphics/object_events/pics/pokemon/natu.png b/graphics/object_events/pics/pokemon/natu.png new file mode 100644 index 0000000000..7096895e31 Binary files /dev/null and b/graphics/object_events/pics/pokemon/natu.png differ diff --git a/graphics/object_events/pics/pokemon/nidoking.png b/graphics/object_events/pics/pokemon/nidoking.png new file mode 100644 index 0000000000..d85e68f466 Binary files /dev/null and b/graphics/object_events/pics/pokemon/nidoking.png differ diff --git a/graphics/object_events/pics/pokemon/nidoqueen.png b/graphics/object_events/pics/pokemon/nidoqueen.png new file mode 100644 index 0000000000..557c4aa300 Binary files /dev/null and b/graphics/object_events/pics/pokemon/nidoqueen.png differ diff --git a/graphics/object_events/pics/pokemon/nidoran_f.png b/graphics/object_events/pics/pokemon/nidoran_f.png new file mode 100644 index 0000000000..d10506636c Binary files /dev/null and b/graphics/object_events/pics/pokemon/nidoran_f.png differ diff --git a/graphics/object_events/pics/pokemon/nidoran_m.png b/graphics/object_events/pics/pokemon/nidoran_m.png new file mode 100644 index 0000000000..48d6c1af5f Binary files /dev/null and b/graphics/object_events/pics/pokemon/nidoran_m.png differ diff --git a/graphics/object_events/pics/pokemon/nidorina.png b/graphics/object_events/pics/pokemon/nidorina.png new file mode 100644 index 0000000000..7d4e8fed80 Binary files /dev/null and b/graphics/object_events/pics/pokemon/nidorina.png differ diff --git a/graphics/object_events/pics/pokemon/nidorino.png b/graphics/object_events/pics/pokemon/nidorino.png new file mode 100644 index 0000000000..b91be9b5dc Binary files /dev/null and b/graphics/object_events/pics/pokemon/nidorino.png differ diff --git a/graphics/object_events/pics/pokemon/nincada.png b/graphics/object_events/pics/pokemon/nincada.png new file mode 100644 index 0000000000..8797cb94dd Binary files /dev/null and b/graphics/object_events/pics/pokemon/nincada.png differ diff --git a/graphics/object_events/pics/pokemon/ninetales.png b/graphics/object_events/pics/pokemon/ninetales.png new file mode 100644 index 0000000000..cc0f49e743 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ninetales.png differ diff --git a/graphics/object_events/pics/pokemon/ninjask.png b/graphics/object_events/pics/pokemon/ninjask.png new file mode 100644 index 0000000000..a83f9b7d60 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ninjask.png differ diff --git a/graphics/object_events/pics/pokemon/noctowl.png b/graphics/object_events/pics/pokemon/noctowl.png new file mode 100644 index 0000000000..4f9680fd32 Binary files /dev/null and b/graphics/object_events/pics/pokemon/noctowl.png differ diff --git a/graphics/object_events/pics/pokemon/nosepass.png b/graphics/object_events/pics/pokemon/nosepass.png new file mode 100644 index 0000000000..201da05de2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/nosepass.png differ diff --git a/graphics/object_events/pics/pokemon/numel.png b/graphics/object_events/pics/pokemon/numel.png new file mode 100644 index 0000000000..8777fc3529 Binary files /dev/null and b/graphics/object_events/pics/pokemon/numel.png differ diff --git a/graphics/object_events/pics/pokemon/nuzleaf.png b/graphics/object_events/pics/pokemon/nuzleaf.png new file mode 100644 index 0000000000..59215f86fe Binary files /dev/null and b/graphics/object_events/pics/pokemon/nuzleaf.png differ diff --git a/graphics/object_events/pics/pokemon/octillery.png b/graphics/object_events/pics/pokemon/octillery.png new file mode 100644 index 0000000000..82e6ef463b Binary files /dev/null and b/graphics/object_events/pics/pokemon/octillery.png differ diff --git a/graphics/object_events/pics/pokemon/oddish.png b/graphics/object_events/pics/pokemon/oddish.png new file mode 100644 index 0000000000..7d8582e933 Binary files /dev/null and b/graphics/object_events/pics/pokemon/oddish.png differ diff --git a/graphics/object_events/pics/pokemon/omanyte.png b/graphics/object_events/pics/pokemon/omanyte.png new file mode 100644 index 0000000000..5bd3c05e37 Binary files /dev/null and b/graphics/object_events/pics/pokemon/omanyte.png differ diff --git a/graphics/object_events/pics/pokemon/omastar.png b/graphics/object_events/pics/pokemon/omastar.png new file mode 100644 index 0000000000..4087c809ff Binary files /dev/null and b/graphics/object_events/pics/pokemon/omastar.png differ diff --git a/graphics/object_events/pics/pokemon/onix.png b/graphics/object_events/pics/pokemon/onix.png new file mode 100644 index 0000000000..93cb4164cb Binary files /dev/null and b/graphics/object_events/pics/pokemon/onix.png differ diff --git a/graphics/object_events/pics/pokemon/paras.png b/graphics/object_events/pics/pokemon/paras.png new file mode 100644 index 0000000000..527da45bfe Binary files /dev/null and b/graphics/object_events/pics/pokemon/paras.png differ diff --git a/graphics/object_events/pics/pokemon/parasect.png b/graphics/object_events/pics/pokemon/parasect.png new file mode 100644 index 0000000000..7aedd4de6b Binary files /dev/null and b/graphics/object_events/pics/pokemon/parasect.png differ diff --git a/graphics/object_events/pics/pokemon/pelipper.png b/graphics/object_events/pics/pokemon/pelipper.png new file mode 100644 index 0000000000..3733feb3a2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/pelipper.png differ diff --git a/graphics/object_events/pics/pokemon/persian.png b/graphics/object_events/pics/pokemon/persian.png new file mode 100644 index 0000000000..7ded628de3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/persian.png differ diff --git a/graphics/object_events/pics/pokemon/phanpy.png b/graphics/object_events/pics/pokemon/phanpy.png new file mode 100644 index 0000000000..db5c52d6e2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/phanpy.png differ diff --git a/graphics/object_events/pics/pokemon/pichu.png b/graphics/object_events/pics/pokemon/pichu.png new file mode 100644 index 0000000000..a938f563bf Binary files /dev/null and b/graphics/object_events/pics/pokemon/pichu.png differ diff --git a/graphics/object_events/pics/pokemon/pidgeot.png b/graphics/object_events/pics/pokemon/pidgeot.png new file mode 100644 index 0000000000..733924b274 Binary files /dev/null and b/graphics/object_events/pics/pokemon/pidgeot.png differ diff --git a/graphics/object_events/pics/pokemon/pidgeotto.png b/graphics/object_events/pics/pokemon/pidgeotto.png new file mode 100644 index 0000000000..848a3eebc4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/pidgeotto.png differ diff --git a/graphics/object_events/pics/pokemon/pidgey.png b/graphics/object_events/pics/pokemon/pidgey.png new file mode 100644 index 0000000000..dfaeebffc9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/pidgey.png differ diff --git a/graphics/object_events/pics/pokemon/pikachu.png b/graphics/object_events/pics/pokemon/pikachu.png index b2d15ef179..6a6fde2235 100644 Binary files a/graphics/object_events/pics/pokemon/pikachu.png and b/graphics/object_events/pics/pokemon/pikachu.png differ diff --git a/graphics/object_events/pics/pokemon/pikachu_old.png b/graphics/object_events/pics/pokemon/pikachu_old.png new file mode 100644 index 0000000000..b2d15ef179 Binary files /dev/null and b/graphics/object_events/pics/pokemon/pikachu_old.png differ diff --git a/graphics/object_events/pics/pokemon/piloswine.png b/graphics/object_events/pics/pokemon/piloswine.png new file mode 100644 index 0000000000..9f8676636e Binary files /dev/null and b/graphics/object_events/pics/pokemon/piloswine.png differ diff --git a/graphics/object_events/pics/pokemon/pineco.png b/graphics/object_events/pics/pokemon/pineco.png new file mode 100644 index 0000000000..79ea8beb3c Binary files /dev/null and b/graphics/object_events/pics/pokemon/pineco.png differ diff --git a/graphics/object_events/pics/pokemon/pinsir.png b/graphics/object_events/pics/pokemon/pinsir.png new file mode 100644 index 0000000000..352a518243 Binary files /dev/null and b/graphics/object_events/pics/pokemon/pinsir.png differ diff --git a/graphics/object_events/pics/pokemon/plusle.png b/graphics/object_events/pics/pokemon/plusle.png new file mode 100644 index 0000000000..8be270ffec Binary files /dev/null and b/graphics/object_events/pics/pokemon/plusle.png differ diff --git a/graphics/object_events/pics/pokemon/politoed.png b/graphics/object_events/pics/pokemon/politoed.png new file mode 100644 index 0000000000..fb076915a6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/politoed.png differ diff --git a/graphics/object_events/pics/pokemon/poliwag.png b/graphics/object_events/pics/pokemon/poliwag.png new file mode 100644 index 0000000000..354ee262bc Binary files /dev/null and b/graphics/object_events/pics/pokemon/poliwag.png differ diff --git a/graphics/object_events/pics/pokemon/poliwhirl.png b/graphics/object_events/pics/pokemon/poliwhirl.png new file mode 100644 index 0000000000..76362bfc99 Binary files /dev/null and b/graphics/object_events/pics/pokemon/poliwhirl.png differ diff --git a/graphics/object_events/pics/pokemon/poliwrath.png b/graphics/object_events/pics/pokemon/poliwrath.png new file mode 100644 index 0000000000..904160827d Binary files /dev/null and b/graphics/object_events/pics/pokemon/poliwrath.png differ diff --git a/graphics/object_events/pics/pokemon/ponyta.png b/graphics/object_events/pics/pokemon/ponyta.png new file mode 100644 index 0000000000..4326c8ff34 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ponyta.png differ diff --git a/graphics/object_events/pics/pokemon/poochyena.png b/graphics/object_events/pics/pokemon/poochyena.png index 171a551d3b..ebfb94708b 100644 Binary files a/graphics/object_events/pics/pokemon/poochyena.png and b/graphics/object_events/pics/pokemon/poochyena.png differ diff --git a/graphics/object_events/pics/pokemon/poochyena_old.png b/graphics/object_events/pics/pokemon/poochyena_old.png new file mode 100644 index 0000000000..171a551d3b Binary files /dev/null and b/graphics/object_events/pics/pokemon/poochyena_old.png differ diff --git a/graphics/object_events/pics/pokemon/porygon.png b/graphics/object_events/pics/pokemon/porygon.png new file mode 100644 index 0000000000..43bc30f12d Binary files /dev/null and b/graphics/object_events/pics/pokemon/porygon.png differ diff --git a/graphics/object_events/pics/pokemon/porygon2.png b/graphics/object_events/pics/pokemon/porygon2.png new file mode 100644 index 0000000000..77383576b8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/porygon2.png differ diff --git a/graphics/object_events/pics/pokemon/primeape.png b/graphics/object_events/pics/pokemon/primeape.png new file mode 100644 index 0000000000..0ec19a2a05 Binary files /dev/null and b/graphics/object_events/pics/pokemon/primeape.png differ diff --git a/graphics/object_events/pics/pokemon/psyduck.png b/graphics/object_events/pics/pokemon/psyduck.png new file mode 100644 index 0000000000..d60e90c190 Binary files /dev/null and b/graphics/object_events/pics/pokemon/psyduck.png differ diff --git a/graphics/object_events/pics/pokemon/pupitar.png b/graphics/object_events/pics/pokemon/pupitar.png new file mode 100644 index 0000000000..91d7238218 Binary files /dev/null and b/graphics/object_events/pics/pokemon/pupitar.png differ diff --git a/graphics/object_events/pics/pokemon/quagsire.png b/graphics/object_events/pics/pokemon/quagsire.png new file mode 100644 index 0000000000..3f3ef930e7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/quagsire.png differ diff --git a/graphics/object_events/pics/pokemon/quilava.png b/graphics/object_events/pics/pokemon/quilava.png new file mode 100644 index 0000000000..b1f1d1e358 Binary files /dev/null and b/graphics/object_events/pics/pokemon/quilava.png differ diff --git a/graphics/object_events/pics/pokemon/qwilfish.png b/graphics/object_events/pics/pokemon/qwilfish.png new file mode 100644 index 0000000000..277b6e1213 Binary files /dev/null and b/graphics/object_events/pics/pokemon/qwilfish.png differ diff --git a/graphics/object_events/pics/pokemon/raichu.png b/graphics/object_events/pics/pokemon/raichu.png new file mode 100644 index 0000000000..b5ffa04028 Binary files /dev/null and b/graphics/object_events/pics/pokemon/raichu.png differ diff --git a/graphics/object_events/pics/pokemon/raikou.png b/graphics/object_events/pics/pokemon/raikou.png new file mode 100644 index 0000000000..742385deeb Binary files /dev/null and b/graphics/object_events/pics/pokemon/raikou.png differ diff --git a/graphics/object_events/pics/pokemon/ralts.png b/graphics/object_events/pics/pokemon/ralts.png new file mode 100644 index 0000000000..3d67cfe817 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ralts.png differ diff --git a/graphics/object_events/pics/pokemon/rapidash.png b/graphics/object_events/pics/pokemon/rapidash.png new file mode 100644 index 0000000000..c8c098b683 Binary files /dev/null and b/graphics/object_events/pics/pokemon/rapidash.png differ diff --git a/graphics/object_events/pics/pokemon/raticate.png b/graphics/object_events/pics/pokemon/raticate.png new file mode 100644 index 0000000000..dd13a7c2de Binary files /dev/null and b/graphics/object_events/pics/pokemon/raticate.png differ diff --git a/graphics/object_events/pics/pokemon/rattata.png b/graphics/object_events/pics/pokemon/rattata.png new file mode 100644 index 0000000000..a3ab65a3f5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/rattata.png differ diff --git a/graphics/object_events/pics/pokemon/rayquaza.png b/graphics/object_events/pics/pokemon/rayquaza.png index 9a74dc64f0..e0b0b8c200 100644 Binary files a/graphics/object_events/pics/pokemon/rayquaza.png and b/graphics/object_events/pics/pokemon/rayquaza.png differ diff --git a/graphics/object_events/pics/pokemon/rayquaza_cutscene.png b/graphics/object_events/pics/pokemon/rayquaza_cutscene.png new file mode 100644 index 0000000000..9a74dc64f0 Binary files /dev/null and b/graphics/object_events/pics/pokemon/rayquaza_cutscene.png differ diff --git a/graphics/object_events/pics/pokemon/regice.png b/graphics/object_events/pics/pokemon/regice.png new file mode 100644 index 0000000000..0cefcfc4f2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/regice.png differ diff --git a/graphics/object_events/pics/pokemon/regirock.png b/graphics/object_events/pics/pokemon/regirock.png new file mode 100644 index 0000000000..0630d3a4bf Binary files /dev/null and b/graphics/object_events/pics/pokemon/regirock.png differ diff --git a/graphics/object_events/pics/pokemon/registeel.png b/graphics/object_events/pics/pokemon/registeel.png new file mode 100644 index 0000000000..f735eba0e4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/registeel.png differ diff --git a/graphics/object_events/pics/pokemon/relicanth.png b/graphics/object_events/pics/pokemon/relicanth.png new file mode 100644 index 0000000000..bf1d178778 Binary files /dev/null and b/graphics/object_events/pics/pokemon/relicanth.png differ diff --git a/graphics/object_events/pics/pokemon/remoraid.png b/graphics/object_events/pics/pokemon/remoraid.png new file mode 100644 index 0000000000..90d0eaed8e Binary files /dev/null and b/graphics/object_events/pics/pokemon/remoraid.png differ diff --git a/graphics/object_events/pics/pokemon/rhydon.png b/graphics/object_events/pics/pokemon/rhydon.png new file mode 100644 index 0000000000..1d7090dd93 Binary files /dev/null and b/graphics/object_events/pics/pokemon/rhydon.png differ diff --git a/graphics/object_events/pics/pokemon/rhyhorn.png b/graphics/object_events/pics/pokemon/rhyhorn.png new file mode 100644 index 0000000000..f380db4bf4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/rhyhorn.png differ diff --git a/graphics/object_events/pics/pokemon/roselia.png b/graphics/object_events/pics/pokemon/roselia.png new file mode 100644 index 0000000000..c451f11d96 Binary files /dev/null and b/graphics/object_events/pics/pokemon/roselia.png differ diff --git a/graphics/object_events/pics/pokemon/sableye.png b/graphics/object_events/pics/pokemon/sableye.png new file mode 100644 index 0000000000..175d7133c4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/sableye.png differ diff --git a/graphics/object_events/pics/pokemon/salamence.png b/graphics/object_events/pics/pokemon/salamence.png new file mode 100644 index 0000000000..e7bb255877 Binary files /dev/null and b/graphics/object_events/pics/pokemon/salamence.png differ diff --git a/graphics/object_events/pics/pokemon/sandshrew.png b/graphics/object_events/pics/pokemon/sandshrew.png new file mode 100644 index 0000000000..ef3c30dc26 Binary files /dev/null and b/graphics/object_events/pics/pokemon/sandshrew.png differ diff --git a/graphics/object_events/pics/pokemon/sandslash.png b/graphics/object_events/pics/pokemon/sandslash.png new file mode 100644 index 0000000000..f1662257ce Binary files /dev/null and b/graphics/object_events/pics/pokemon/sandslash.png differ diff --git a/graphics/object_events/pics/pokemon/sceptile.png b/graphics/object_events/pics/pokemon/sceptile.png new file mode 100644 index 0000000000..b806c08c1f Binary files /dev/null and b/graphics/object_events/pics/pokemon/sceptile.png differ diff --git a/graphics/object_events/pics/pokemon/scizor.png b/graphics/object_events/pics/pokemon/scizor.png new file mode 100644 index 0000000000..00554a04a5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/scizor.png differ diff --git a/graphics/object_events/pics/pokemon/scyther.png b/graphics/object_events/pics/pokemon/scyther.png new file mode 100644 index 0000000000..7deeb6ebc1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/scyther.png differ diff --git a/graphics/object_events/pics/pokemon/seadra.png b/graphics/object_events/pics/pokemon/seadra.png new file mode 100644 index 0000000000..0a6494a2bd Binary files /dev/null and b/graphics/object_events/pics/pokemon/seadra.png differ diff --git a/graphics/object_events/pics/pokemon/seaking.png b/graphics/object_events/pics/pokemon/seaking.png new file mode 100644 index 0000000000..5d34a273ad Binary files /dev/null and b/graphics/object_events/pics/pokemon/seaking.png differ diff --git a/graphics/object_events/pics/pokemon/sealeo.png b/graphics/object_events/pics/pokemon/sealeo.png new file mode 100644 index 0000000000..ce0eb16ffa Binary files /dev/null and b/graphics/object_events/pics/pokemon/sealeo.png differ diff --git a/graphics/object_events/pics/pokemon/seedot.png b/graphics/object_events/pics/pokemon/seedot.png new file mode 100644 index 0000000000..fa16b28df8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/seedot.png differ diff --git a/graphics/object_events/pics/pokemon/seel.png b/graphics/object_events/pics/pokemon/seel.png new file mode 100644 index 0000000000..d64b24e943 Binary files /dev/null and b/graphics/object_events/pics/pokemon/seel.png differ diff --git a/graphics/object_events/pics/pokemon/sentret.png b/graphics/object_events/pics/pokemon/sentret.png new file mode 100644 index 0000000000..eba10d7c89 Binary files /dev/null and b/graphics/object_events/pics/pokemon/sentret.png differ diff --git a/graphics/object_events/pics/pokemon/seviper.png b/graphics/object_events/pics/pokemon/seviper.png new file mode 100644 index 0000000000..7a6d446482 Binary files /dev/null and b/graphics/object_events/pics/pokemon/seviper.png differ diff --git a/graphics/object_events/pics/pokemon/sharpedo.png b/graphics/object_events/pics/pokemon/sharpedo.png new file mode 100644 index 0000000000..1d4c8a5112 Binary files /dev/null and b/graphics/object_events/pics/pokemon/sharpedo.png differ diff --git a/graphics/object_events/pics/pokemon/shedinja.png b/graphics/object_events/pics/pokemon/shedinja.png new file mode 100644 index 0000000000..0f878808e4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/shedinja.png differ diff --git a/graphics/object_events/pics/pokemon/shelgon.png b/graphics/object_events/pics/pokemon/shelgon.png new file mode 100644 index 0000000000..93a9bc739d Binary files /dev/null and b/graphics/object_events/pics/pokemon/shelgon.png differ diff --git a/graphics/object_events/pics/pokemon/shellder.png b/graphics/object_events/pics/pokemon/shellder.png new file mode 100644 index 0000000000..c097c292b0 Binary files /dev/null and b/graphics/object_events/pics/pokemon/shellder.png differ diff --git a/graphics/object_events/pics/pokemon/shiftry.png b/graphics/object_events/pics/pokemon/shiftry.png new file mode 100644 index 0000000000..03553c3f2e Binary files /dev/null and b/graphics/object_events/pics/pokemon/shiftry.png differ diff --git a/graphics/object_events/pics/pokemon/shroomish.png b/graphics/object_events/pics/pokemon/shroomish.png new file mode 100644 index 0000000000..de258414e7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/shroomish.png differ diff --git a/graphics/object_events/pics/pokemon/shuckle.png b/graphics/object_events/pics/pokemon/shuckle.png new file mode 100644 index 0000000000..9f89c758ac Binary files /dev/null and b/graphics/object_events/pics/pokemon/shuckle.png differ diff --git a/graphics/object_events/pics/pokemon/shuppet.png b/graphics/object_events/pics/pokemon/shuppet.png new file mode 100644 index 0000000000..533e6ae55b Binary files /dev/null and b/graphics/object_events/pics/pokemon/shuppet.png differ diff --git a/graphics/object_events/pics/pokemon/silcoon.png b/graphics/object_events/pics/pokemon/silcoon.png new file mode 100644 index 0000000000..685e91d7a4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/silcoon.png differ diff --git a/graphics/object_events/pics/pokemon/skarmory.png b/graphics/object_events/pics/pokemon/skarmory.png new file mode 100644 index 0000000000..ced42da31d Binary files /dev/null and b/graphics/object_events/pics/pokemon/skarmory.png differ diff --git a/graphics/object_events/pics/pokemon/skiploom.png b/graphics/object_events/pics/pokemon/skiploom.png new file mode 100644 index 0000000000..6fd848942b Binary files /dev/null and b/graphics/object_events/pics/pokemon/skiploom.png differ diff --git a/graphics/object_events/pics/pokemon/skitty.png b/graphics/object_events/pics/pokemon/skitty.png index 2b78104123..88fb6566ba 100644 Binary files a/graphics/object_events/pics/pokemon/skitty.png and b/graphics/object_events/pics/pokemon/skitty.png differ diff --git a/graphics/object_events/pics/pokemon/skitty_old.png b/graphics/object_events/pics/pokemon/skitty_old.png new file mode 100644 index 0000000000..2b78104123 Binary files /dev/null and b/graphics/object_events/pics/pokemon/skitty_old.png differ diff --git a/graphics/object_events/pics/pokemon/slaking.png b/graphics/object_events/pics/pokemon/slaking.png new file mode 100644 index 0000000000..84e5efc38c Binary files /dev/null and b/graphics/object_events/pics/pokemon/slaking.png differ diff --git a/graphics/object_events/pics/pokemon/slakoth.png b/graphics/object_events/pics/pokemon/slakoth.png new file mode 100644 index 0000000000..10f7b0c162 Binary files /dev/null and b/graphics/object_events/pics/pokemon/slakoth.png differ diff --git a/graphics/object_events/pics/pokemon/slowbro.png b/graphics/object_events/pics/pokemon/slowbro.png new file mode 100644 index 0000000000..bc919bd508 Binary files /dev/null and b/graphics/object_events/pics/pokemon/slowbro.png differ diff --git a/graphics/object_events/pics/pokemon/slowking.png b/graphics/object_events/pics/pokemon/slowking.png new file mode 100644 index 0000000000..3173a30fa9 Binary files /dev/null and b/graphics/object_events/pics/pokemon/slowking.png differ diff --git a/graphics/object_events/pics/pokemon/slowpoke.png b/graphics/object_events/pics/pokemon/slowpoke.png new file mode 100644 index 0000000000..b7ffb9f472 Binary files /dev/null and b/graphics/object_events/pics/pokemon/slowpoke.png differ diff --git a/graphics/object_events/pics/pokemon/slugma.png b/graphics/object_events/pics/pokemon/slugma.png new file mode 100644 index 0000000000..0f54cf238c Binary files /dev/null and b/graphics/object_events/pics/pokemon/slugma.png differ diff --git a/graphics/object_events/pics/pokemon/smeargle.png b/graphics/object_events/pics/pokemon/smeargle.png new file mode 100644 index 0000000000..282ae1f6d2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/smeargle.png differ diff --git a/graphics/object_events/pics/pokemon/smoochum.png b/graphics/object_events/pics/pokemon/smoochum.png new file mode 100644 index 0000000000..62c6c41858 Binary files /dev/null and b/graphics/object_events/pics/pokemon/smoochum.png differ diff --git a/graphics/object_events/pics/pokemon/sneasel.png b/graphics/object_events/pics/pokemon/sneasel.png new file mode 100644 index 0000000000..37085eaff8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/sneasel.png differ diff --git a/graphics/object_events/pics/pokemon/snorlax.png b/graphics/object_events/pics/pokemon/snorlax.png new file mode 100644 index 0000000000..14bb87fc97 Binary files /dev/null and b/graphics/object_events/pics/pokemon/snorlax.png differ diff --git a/graphics/object_events/pics/pokemon/snorunt.png b/graphics/object_events/pics/pokemon/snorunt.png new file mode 100644 index 0000000000..34249e1613 Binary files /dev/null and b/graphics/object_events/pics/pokemon/snorunt.png differ diff --git a/graphics/object_events/pics/pokemon/snubbull.png b/graphics/object_events/pics/pokemon/snubbull.png new file mode 100644 index 0000000000..3e717b856d Binary files /dev/null and b/graphics/object_events/pics/pokemon/snubbull.png differ diff --git a/graphics/object_events/pics/pokemon/solrock.png b/graphics/object_events/pics/pokemon/solrock.png new file mode 100644 index 0000000000..894526490c Binary files /dev/null and b/graphics/object_events/pics/pokemon/solrock.png differ diff --git a/graphics/object_events/pics/pokemon/spearow.png b/graphics/object_events/pics/pokemon/spearow.png new file mode 100644 index 0000000000..1bf0540459 Binary files /dev/null and b/graphics/object_events/pics/pokemon/spearow.png differ diff --git a/graphics/object_events/pics/pokemon/spheal.png b/graphics/object_events/pics/pokemon/spheal.png new file mode 100644 index 0000000000..d20074238d Binary files /dev/null and b/graphics/object_events/pics/pokemon/spheal.png differ diff --git a/graphics/object_events/pics/pokemon/spinarak.png b/graphics/object_events/pics/pokemon/spinarak.png new file mode 100644 index 0000000000..0f78256a48 Binary files /dev/null and b/graphics/object_events/pics/pokemon/spinarak.png differ diff --git a/graphics/object_events/pics/pokemon/spinda.png b/graphics/object_events/pics/pokemon/spinda.png new file mode 100644 index 0000000000..ab92fefa3a Binary files /dev/null and b/graphics/object_events/pics/pokemon/spinda.png differ diff --git a/graphics/object_events/pics/pokemon/spoink.png b/graphics/object_events/pics/pokemon/spoink.png new file mode 100644 index 0000000000..249879e3f1 Binary files /dev/null and b/graphics/object_events/pics/pokemon/spoink.png differ diff --git a/graphics/object_events/pics/pokemon/squirtle.png b/graphics/object_events/pics/pokemon/squirtle.png new file mode 100644 index 0000000000..e7cd922366 Binary files /dev/null and b/graphics/object_events/pics/pokemon/squirtle.png differ diff --git a/graphics/object_events/pics/pokemon/stantler.png b/graphics/object_events/pics/pokemon/stantler.png new file mode 100644 index 0000000000..9e286923f3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/stantler.png differ diff --git a/graphics/object_events/pics/pokemon/starmie.png b/graphics/object_events/pics/pokemon/starmie.png new file mode 100644 index 0000000000..06bdefa000 Binary files /dev/null and b/graphics/object_events/pics/pokemon/starmie.png differ diff --git a/graphics/object_events/pics/pokemon/staryu.png b/graphics/object_events/pics/pokemon/staryu.png new file mode 100644 index 0000000000..dcae94887f Binary files /dev/null and b/graphics/object_events/pics/pokemon/staryu.png differ diff --git a/graphics/object_events/pics/pokemon/steelix.png b/graphics/object_events/pics/pokemon/steelix.png new file mode 100644 index 0000000000..a5461601e3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/steelix.png differ diff --git a/graphics/object_events/pics/pokemon/sudowoodo.png b/graphics/object_events/pics/pokemon/sudowoodo.png index 0e084dcc0e..6db283b215 100644 Binary files a/graphics/object_events/pics/pokemon/sudowoodo.png and b/graphics/object_events/pics/pokemon/sudowoodo.png differ diff --git a/graphics/object_events/pics/pokemon/sudowoodo_tree.png b/graphics/object_events/pics/pokemon/sudowoodo_tree.png new file mode 100644 index 0000000000..0e084dcc0e Binary files /dev/null and b/graphics/object_events/pics/pokemon/sudowoodo_tree.png differ diff --git a/graphics/object_events/pics/pokemon/suicune.png b/graphics/object_events/pics/pokemon/suicune.png new file mode 100644 index 0000000000..aee3d646d8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/suicune.png differ diff --git a/graphics/object_events/pics/pokemon/sunflora.png b/graphics/object_events/pics/pokemon/sunflora.png new file mode 100644 index 0000000000..2218003c7f Binary files /dev/null and b/graphics/object_events/pics/pokemon/sunflora.png differ diff --git a/graphics/object_events/pics/pokemon/sunkern.png b/graphics/object_events/pics/pokemon/sunkern.png new file mode 100644 index 0000000000..ae9f2169ee Binary files /dev/null and b/graphics/object_events/pics/pokemon/sunkern.png differ diff --git a/graphics/object_events/pics/pokemon/surskit.png b/graphics/object_events/pics/pokemon/surskit.png new file mode 100644 index 0000000000..b29ec87572 Binary files /dev/null and b/graphics/object_events/pics/pokemon/surskit.png differ diff --git a/graphics/object_events/pics/pokemon/swablu.png b/graphics/object_events/pics/pokemon/swablu.png new file mode 100644 index 0000000000..02fb1af432 Binary files /dev/null and b/graphics/object_events/pics/pokemon/swablu.png differ diff --git a/graphics/object_events/pics/pokemon/swalot.png b/graphics/object_events/pics/pokemon/swalot.png new file mode 100644 index 0000000000..1beec209e4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/swalot.png differ diff --git a/graphics/object_events/pics/pokemon/swampert.png b/graphics/object_events/pics/pokemon/swampert.png new file mode 100644 index 0000000000..a72513f8ad Binary files /dev/null and b/graphics/object_events/pics/pokemon/swampert.png differ diff --git a/graphics/object_events/pics/pokemon/swellow.png b/graphics/object_events/pics/pokemon/swellow.png new file mode 100644 index 0000000000..10e7e5200f Binary files /dev/null and b/graphics/object_events/pics/pokemon/swellow.png differ diff --git a/graphics/object_events/pics/pokemon/swinub.png b/graphics/object_events/pics/pokemon/swinub.png new file mode 100644 index 0000000000..4676bb9191 Binary files /dev/null and b/graphics/object_events/pics/pokemon/swinub.png differ diff --git a/graphics/object_events/pics/pokemon/taillow.png b/graphics/object_events/pics/pokemon/taillow.png new file mode 100644 index 0000000000..0773282da2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/taillow.png differ diff --git a/graphics/object_events/pics/pokemon/tangela.png b/graphics/object_events/pics/pokemon/tangela.png new file mode 100644 index 0000000000..3556657896 Binary files /dev/null and b/graphics/object_events/pics/pokemon/tangela.png differ diff --git a/graphics/object_events/pics/pokemon/tauros.png b/graphics/object_events/pics/pokemon/tauros.png new file mode 100644 index 0000000000..7e9ac057bf Binary files /dev/null and b/graphics/object_events/pics/pokemon/tauros.png differ diff --git a/graphics/object_events/pics/pokemon/teddiursa.png b/graphics/object_events/pics/pokemon/teddiursa.png new file mode 100644 index 0000000000..5a02f97856 Binary files /dev/null and b/graphics/object_events/pics/pokemon/teddiursa.png differ diff --git a/graphics/object_events/pics/pokemon/tentacool.png b/graphics/object_events/pics/pokemon/tentacool.png new file mode 100644 index 0000000000..5a28509c9f Binary files /dev/null and b/graphics/object_events/pics/pokemon/tentacool.png differ diff --git a/graphics/object_events/pics/pokemon/tentacruel.png b/graphics/object_events/pics/pokemon/tentacruel.png new file mode 100644 index 0000000000..fabd2969cb Binary files /dev/null and b/graphics/object_events/pics/pokemon/tentacruel.png differ diff --git a/graphics/object_events/pics/pokemon/togepi.png b/graphics/object_events/pics/pokemon/togepi.png new file mode 100644 index 0000000000..3fe68efa07 Binary files /dev/null and b/graphics/object_events/pics/pokemon/togepi.png differ diff --git a/graphics/object_events/pics/pokemon/togetic.png b/graphics/object_events/pics/pokemon/togetic.png new file mode 100644 index 0000000000..74f8346b6a Binary files /dev/null and b/graphics/object_events/pics/pokemon/togetic.png differ diff --git a/graphics/object_events/pics/pokemon/torchic.png b/graphics/object_events/pics/pokemon/torchic.png new file mode 100644 index 0000000000..f25ad726b8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/torchic.png differ diff --git a/graphics/object_events/pics/pokemon/torkoal.png b/graphics/object_events/pics/pokemon/torkoal.png new file mode 100644 index 0000000000..b7fcde5041 Binary files /dev/null and b/graphics/object_events/pics/pokemon/torkoal.png differ diff --git a/graphics/object_events/pics/pokemon/totodile.png b/graphics/object_events/pics/pokemon/totodile.png new file mode 100644 index 0000000000..502fe36ef0 Binary files /dev/null and b/graphics/object_events/pics/pokemon/totodile.png differ diff --git a/graphics/object_events/pics/pokemon/trapinch.png b/graphics/object_events/pics/pokemon/trapinch.png new file mode 100644 index 0000000000..55391b9d6f Binary files /dev/null and b/graphics/object_events/pics/pokemon/trapinch.png differ diff --git a/graphics/object_events/pics/pokemon/treecko.png b/graphics/object_events/pics/pokemon/treecko.png new file mode 100644 index 0000000000..afae608480 Binary files /dev/null and b/graphics/object_events/pics/pokemon/treecko.png differ diff --git a/graphics/object_events/pics/pokemon/tropius.png b/graphics/object_events/pics/pokemon/tropius.png new file mode 100644 index 0000000000..6553506970 Binary files /dev/null and b/graphics/object_events/pics/pokemon/tropius.png differ diff --git a/graphics/object_events/pics/pokemon/typhlosion.png b/graphics/object_events/pics/pokemon/typhlosion.png new file mode 100644 index 0000000000..9cbaf47dd0 Binary files /dev/null and b/graphics/object_events/pics/pokemon/typhlosion.png differ diff --git a/graphics/object_events/pics/pokemon/tyranitar.png b/graphics/object_events/pics/pokemon/tyranitar.png new file mode 100644 index 0000000000..266c2037ab Binary files /dev/null and b/graphics/object_events/pics/pokemon/tyranitar.png differ diff --git a/graphics/object_events/pics/pokemon/tyrogue.png b/graphics/object_events/pics/pokemon/tyrogue.png new file mode 100644 index 0000000000..fbf8f5fc47 Binary files /dev/null and b/graphics/object_events/pics/pokemon/tyrogue.png differ diff --git a/graphics/object_events/pics/pokemon/umbreon.png b/graphics/object_events/pics/pokemon/umbreon.png new file mode 100644 index 0000000000..9c6972d053 Binary files /dev/null and b/graphics/object_events/pics/pokemon/umbreon.png differ diff --git a/graphics/object_events/pics/pokemon/unown_a.png b/graphics/object_events/pics/pokemon/unown_a.png new file mode 100644 index 0000000000..7646b5fe82 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_a.png differ diff --git a/graphics/object_events/pics/pokemon/unown_b.png b/graphics/object_events/pics/pokemon/unown_b.png new file mode 100644 index 0000000000..b2500cca0c Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_b.png differ diff --git a/graphics/object_events/pics/pokemon/unown_c.png b/graphics/object_events/pics/pokemon/unown_c.png new file mode 100644 index 0000000000..d7f631f31e Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_c.png differ diff --git a/graphics/object_events/pics/pokemon/unown_d.png b/graphics/object_events/pics/pokemon/unown_d.png new file mode 100644 index 0000000000..426e517d5d Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_d.png differ diff --git a/graphics/object_events/pics/pokemon/unown_e.png b/graphics/object_events/pics/pokemon/unown_e.png new file mode 100644 index 0000000000..741a5ef42e Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_e.png differ diff --git a/graphics/object_events/pics/pokemon/unown_exclamation.png b/graphics/object_events/pics/pokemon/unown_exclamation.png new file mode 100644 index 0000000000..4271c7ab99 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_exclamation.png differ diff --git a/graphics/object_events/pics/pokemon/unown_f.png b/graphics/object_events/pics/pokemon/unown_f.png new file mode 100644 index 0000000000..ea3332e941 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_f.png differ diff --git a/graphics/object_events/pics/pokemon/unown_g.png b/graphics/object_events/pics/pokemon/unown_g.png new file mode 100644 index 0000000000..d9308fbe3a Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_g.png differ diff --git a/graphics/object_events/pics/pokemon/unown_h.png b/graphics/object_events/pics/pokemon/unown_h.png new file mode 100644 index 0000000000..9abe3e4001 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_h.png differ diff --git a/graphics/object_events/pics/pokemon/unown_i.png b/graphics/object_events/pics/pokemon/unown_i.png new file mode 100644 index 0000000000..39aa3b8572 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_i.png differ diff --git a/graphics/object_events/pics/pokemon/unown_j.png b/graphics/object_events/pics/pokemon/unown_j.png new file mode 100644 index 0000000000..af240eafd3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_j.png differ diff --git a/graphics/object_events/pics/pokemon/unown_k.png b/graphics/object_events/pics/pokemon/unown_k.png new file mode 100644 index 0000000000..b448f866e6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_k.png differ diff --git a/graphics/object_events/pics/pokemon/unown_l.png b/graphics/object_events/pics/pokemon/unown_l.png new file mode 100644 index 0000000000..b11096a1ab Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_l.png differ diff --git a/graphics/object_events/pics/pokemon/unown_m.png b/graphics/object_events/pics/pokemon/unown_m.png new file mode 100644 index 0000000000..0d5f60e297 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_m.png differ diff --git a/graphics/object_events/pics/pokemon/unown_n.png b/graphics/object_events/pics/pokemon/unown_n.png new file mode 100644 index 0000000000..8b39392831 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_n.png differ diff --git a/graphics/object_events/pics/pokemon/unown_o.png b/graphics/object_events/pics/pokemon/unown_o.png new file mode 100644 index 0000000000..23a5f2e277 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_o.png differ diff --git a/graphics/object_events/pics/pokemon/unown_p.png b/graphics/object_events/pics/pokemon/unown_p.png new file mode 100644 index 0000000000..f3699ebdcd Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_p.png differ diff --git a/graphics/object_events/pics/pokemon/unown_q.png b/graphics/object_events/pics/pokemon/unown_q.png new file mode 100644 index 0000000000..1e2bc7f46f Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_q.png differ diff --git a/graphics/object_events/pics/pokemon/unown_question.png b/graphics/object_events/pics/pokemon/unown_question.png new file mode 100644 index 0000000000..e4d2102883 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_question.png differ diff --git a/graphics/object_events/pics/pokemon/unown_r.png b/graphics/object_events/pics/pokemon/unown_r.png new file mode 100644 index 0000000000..70194b27cd Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_r.png differ diff --git a/graphics/object_events/pics/pokemon/unown_s.png b/graphics/object_events/pics/pokemon/unown_s.png new file mode 100644 index 0000000000..2dacced847 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_s.png differ diff --git a/graphics/object_events/pics/pokemon/unown_t.png b/graphics/object_events/pics/pokemon/unown_t.png new file mode 100644 index 0000000000..cb476bf5ee Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_t.png differ diff --git a/graphics/object_events/pics/pokemon/unown_u.png b/graphics/object_events/pics/pokemon/unown_u.png new file mode 100644 index 0000000000..2bde348541 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_u.png differ diff --git a/graphics/object_events/pics/pokemon/unown_v.png b/graphics/object_events/pics/pokemon/unown_v.png new file mode 100644 index 0000000000..0bb8dba96c Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_v.png differ diff --git a/graphics/object_events/pics/pokemon/unown_w.png b/graphics/object_events/pics/pokemon/unown_w.png new file mode 100644 index 0000000000..d49a4cf96c Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_w.png differ diff --git a/graphics/object_events/pics/pokemon/unown_x.png b/graphics/object_events/pics/pokemon/unown_x.png new file mode 100644 index 0000000000..e1621d278b Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_x.png differ diff --git a/graphics/object_events/pics/pokemon/unown_y.png b/graphics/object_events/pics/pokemon/unown_y.png new file mode 100644 index 0000000000..d9fe25135b Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_y.png differ diff --git a/graphics/object_events/pics/pokemon/unown_z.png b/graphics/object_events/pics/pokemon/unown_z.png new file mode 100644 index 0000000000..e2097128e7 Binary files /dev/null and b/graphics/object_events/pics/pokemon/unown_z.png differ diff --git a/graphics/object_events/pics/pokemon/ursaring.png b/graphics/object_events/pics/pokemon/ursaring.png new file mode 100644 index 0000000000..e0b7dc01f6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/ursaring.png differ diff --git a/graphics/object_events/pics/pokemon/vaporeon.png b/graphics/object_events/pics/pokemon/vaporeon.png new file mode 100644 index 0000000000..17ed5e02c8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/vaporeon.png differ diff --git a/graphics/object_events/pics/pokemon/venomoth.png b/graphics/object_events/pics/pokemon/venomoth.png new file mode 100644 index 0000000000..014e5c36e3 Binary files /dev/null and b/graphics/object_events/pics/pokemon/venomoth.png differ diff --git a/graphics/object_events/pics/pokemon/venonat.png b/graphics/object_events/pics/pokemon/venonat.png new file mode 100644 index 0000000000..231531c849 Binary files /dev/null and b/graphics/object_events/pics/pokemon/venonat.png differ diff --git a/graphics/object_events/pics/pokemon/venusaur.png b/graphics/object_events/pics/pokemon/venusaur.png new file mode 100644 index 0000000000..1c49947b2e Binary files /dev/null and b/graphics/object_events/pics/pokemon/venusaur.png differ diff --git a/graphics/object_events/pics/pokemon/vibrava.png b/graphics/object_events/pics/pokemon/vibrava.png new file mode 100644 index 0000000000..b91ff30756 Binary files /dev/null and b/graphics/object_events/pics/pokemon/vibrava.png differ diff --git a/graphics/object_events/pics/pokemon/victreebel.png b/graphics/object_events/pics/pokemon/victreebel.png new file mode 100644 index 0000000000..01454190da Binary files /dev/null and b/graphics/object_events/pics/pokemon/victreebel.png differ diff --git a/graphics/object_events/pics/pokemon/vigoroth.png b/graphics/object_events/pics/pokemon/vigoroth.png index d9ea6dbed5..f05be0d0ac 100644 Binary files a/graphics/object_events/pics/pokemon/vigoroth.png and b/graphics/object_events/pics/pokemon/vigoroth.png differ diff --git a/graphics/object_events/pics/pokemon/vigoroth_mover.png b/graphics/object_events/pics/pokemon/vigoroth_mover.png new file mode 100644 index 0000000000..d9ea6dbed5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/vigoroth_mover.png differ diff --git a/graphics/object_events/pics/pokemon/vileplume.png b/graphics/object_events/pics/pokemon/vileplume.png new file mode 100644 index 0000000000..f36d5daa66 Binary files /dev/null and b/graphics/object_events/pics/pokemon/vileplume.png differ diff --git a/graphics/object_events/pics/pokemon/volbeat.png b/graphics/object_events/pics/pokemon/volbeat.png new file mode 100644 index 0000000000..d8ade51b98 Binary files /dev/null and b/graphics/object_events/pics/pokemon/volbeat.png differ diff --git a/graphics/object_events/pics/pokemon/voltorb.png b/graphics/object_events/pics/pokemon/voltorb.png new file mode 100644 index 0000000000..91b5b76f82 Binary files /dev/null and b/graphics/object_events/pics/pokemon/voltorb.png differ diff --git a/graphics/object_events/pics/pokemon/vulpix.png b/graphics/object_events/pics/pokemon/vulpix.png new file mode 100644 index 0000000000..d3b632f428 Binary files /dev/null and b/graphics/object_events/pics/pokemon/vulpix.png differ diff --git a/graphics/object_events/pics/pokemon/wailmer.png b/graphics/object_events/pics/pokemon/wailmer.png new file mode 100644 index 0000000000..809983ce94 Binary files /dev/null and b/graphics/object_events/pics/pokemon/wailmer.png differ diff --git a/graphics/object_events/pics/pokemon/wailord.png b/graphics/object_events/pics/pokemon/wailord.png new file mode 100644 index 0000000000..a1fc3a087a Binary files /dev/null and b/graphics/object_events/pics/pokemon/wailord.png differ diff --git a/graphics/object_events/pics/pokemon/walrein.png b/graphics/object_events/pics/pokemon/walrein.png new file mode 100644 index 0000000000..0c727a970a Binary files /dev/null and b/graphics/object_events/pics/pokemon/walrein.png differ diff --git a/graphics/object_events/pics/pokemon/wartortle.png b/graphics/object_events/pics/pokemon/wartortle.png new file mode 100644 index 0000000000..870d26c64c Binary files /dev/null and b/graphics/object_events/pics/pokemon/wartortle.png differ diff --git a/graphics/object_events/pics/pokemon/weedle.png b/graphics/object_events/pics/pokemon/weedle.png new file mode 100644 index 0000000000..bebc67b3a6 Binary files /dev/null and b/graphics/object_events/pics/pokemon/weedle.png differ diff --git a/graphics/object_events/pics/pokemon/weepinbell.png b/graphics/object_events/pics/pokemon/weepinbell.png new file mode 100644 index 0000000000..3376f35dd2 Binary files /dev/null and b/graphics/object_events/pics/pokemon/weepinbell.png differ diff --git a/graphics/object_events/pics/pokemon/weezing.png b/graphics/object_events/pics/pokemon/weezing.png new file mode 100644 index 0000000000..e40fe692ee Binary files /dev/null and b/graphics/object_events/pics/pokemon/weezing.png differ diff --git a/graphics/object_events/pics/pokemon/whiscash.png b/graphics/object_events/pics/pokemon/whiscash.png new file mode 100644 index 0000000000..37c8d2e168 Binary files /dev/null and b/graphics/object_events/pics/pokemon/whiscash.png differ diff --git a/graphics/object_events/pics/pokemon/whismur.png b/graphics/object_events/pics/pokemon/whismur.png new file mode 100644 index 0000000000..714137dd4f Binary files /dev/null and b/graphics/object_events/pics/pokemon/whismur.png differ diff --git a/graphics/object_events/pics/pokemon/wigglytuff.png b/graphics/object_events/pics/pokemon/wigglytuff.png new file mode 100644 index 0000000000..cd34c18656 Binary files /dev/null and b/graphics/object_events/pics/pokemon/wigglytuff.png differ diff --git a/graphics/object_events/pics/pokemon/wingull.png b/graphics/object_events/pics/pokemon/wingull.png index 9401d77f8a..bef36dd115 100644 Binary files a/graphics/object_events/pics/pokemon/wingull.png and b/graphics/object_events/pics/pokemon/wingull.png differ diff --git a/graphics/object_events/pics/pokemon/wingull_old.png b/graphics/object_events/pics/pokemon/wingull_old.png new file mode 100644 index 0000000000..9401d77f8a Binary files /dev/null and b/graphics/object_events/pics/pokemon/wingull_old.png differ diff --git a/graphics/object_events/pics/pokemon/wobbuffet.png b/graphics/object_events/pics/pokemon/wobbuffet.png new file mode 100644 index 0000000000..6396fd0cec Binary files /dev/null and b/graphics/object_events/pics/pokemon/wobbuffet.png differ diff --git a/graphics/object_events/pics/pokemon/wooper.png b/graphics/object_events/pics/pokemon/wooper.png new file mode 100644 index 0000000000..bd0bd97fac Binary files /dev/null and b/graphics/object_events/pics/pokemon/wooper.png differ diff --git a/graphics/object_events/pics/pokemon/wurmple.png b/graphics/object_events/pics/pokemon/wurmple.png new file mode 100644 index 0000000000..d8091c43d0 Binary files /dev/null and b/graphics/object_events/pics/pokemon/wurmple.png differ diff --git a/graphics/object_events/pics/pokemon/wynaut.png b/graphics/object_events/pics/pokemon/wynaut.png new file mode 100644 index 0000000000..09dc53f2fb Binary files /dev/null and b/graphics/object_events/pics/pokemon/wynaut.png differ diff --git a/graphics/object_events/pics/pokemon/xatu.png b/graphics/object_events/pics/pokemon/xatu.png new file mode 100644 index 0000000000..b7797f8efb Binary files /dev/null and b/graphics/object_events/pics/pokemon/xatu.png differ diff --git a/graphics/object_events/pics/pokemon/yanma.png b/graphics/object_events/pics/pokemon/yanma.png new file mode 100644 index 0000000000..ec67acf012 Binary files /dev/null and b/graphics/object_events/pics/pokemon/yanma.png differ diff --git a/graphics/object_events/pics/pokemon/zangoose.png b/graphics/object_events/pics/pokemon/zangoose.png new file mode 100644 index 0000000000..61a6cdc0b8 Binary files /dev/null and b/graphics/object_events/pics/pokemon/zangoose.png differ diff --git a/graphics/object_events/pics/pokemon/zapdos.png b/graphics/object_events/pics/pokemon/zapdos.png new file mode 100644 index 0000000000..b11b36eb63 Binary files /dev/null and b/graphics/object_events/pics/pokemon/zapdos.png differ diff --git a/graphics/object_events/pics/pokemon/zigzagoon.png b/graphics/object_events/pics/pokemon/zigzagoon.png index 2eaf2403d5..2d847ca802 100644 Binary files a/graphics/object_events/pics/pokemon/zigzagoon.png and b/graphics/object_events/pics/pokemon/zigzagoon.png differ diff --git a/graphics/object_events/pics/pokemon/zigzagoon_old.png b/graphics/object_events/pics/pokemon/zigzagoon_old.png new file mode 100644 index 0000000000..2eaf2403d5 Binary files /dev/null and b/graphics/object_events/pics/pokemon/zigzagoon_old.png differ diff --git a/graphics/object_events/pics/pokemon/zubat.png b/graphics/object_events/pics/pokemon/zubat.png new file mode 100644 index 0000000000..9c349a1bd4 Binary files /dev/null and b/graphics/object_events/pics/pokemon/zubat.png differ diff --git a/graphics/pokemon/castform/sunny/anim_front.png b/graphics/pokemon/castform/sunny/anim_front.png index 7e14f9892e..399e6eeb86 100644 Binary files a/graphics/pokemon/castform/sunny/anim_front.png and b/graphics/pokemon/castform/sunny/anim_front.png differ diff --git a/graphics/pokemon/castform/sunny/normal.pal b/graphics/pokemon/castform/sunny/normal.pal index af0cfbb93b..90e2a7882b 100644 --- a/graphics/pokemon/castform/sunny/normal.pal +++ b/graphics/pokemon/castform/sunny/normal.pal @@ -6,7 +6,7 @@ JASC-PAL 205 90 74 238 123 74 255 156 65 -0 0 0 +255 197 136 255 246 106 230 213 106 255 156 98 diff --git a/graphics/weather/fog.pal b/graphics/weather/fog.pal index 6191b66928..1f40dd4e74 100644 --- a/graphics/weather/fog.pal +++ b/graphics/weather/fog.pal @@ -10,7 +10,7 @@ JASC-PAL 213 213 213 222 222 222 164 164 164 -255 0 255 +0 0 0 255 0 255 255 0 255 180 180 180 diff --git a/include/battle_main.h b/include/battle_main.h index 4f20e4c17a..54c7cd9ad8 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -49,6 +49,7 @@ void SpriteCB_FaintSlideAnim(struct Sprite *sprite); void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude); void EndBounceEffect(u8 battler, u8 which); void SpriteCB_PlayerMonFromBall(struct Sprite *sprite); +void SpriteCB_PlayerMonSlideIn(struct Sprite *sprite); void SpriteCB_TrainerThrowObject(struct Sprite *sprite); void AnimSetCenterToCornerVecX(struct Sprite *sprite); void BeginBattleIntroDummy(void); diff --git a/include/battle_tower.h b/include/battle_tower.h index a803145927..8288ffb7ea 100644 --- a/include/battle_tower.h +++ b/include/battle_tower.h @@ -54,7 +54,7 @@ void CallBattleTowerFunc(void); u16 GetRandomScaledFrontierTrainerId(u8 challengeNum, u8 battleNum); void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId); void SetEReaderTrainerGfxId(void); -u8 GetBattleFacilityTrainerGfxId(u16 trainerId); +u16 GetBattleFacilityTrainerGfxId(u16 trainerId); void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm); u8 GetFrontierTrainerFrontSpriteId(u16 trainerId); u8 GetFrontierOpponentClass(u16 trainerId); @@ -81,7 +81,7 @@ void GetBattleTowerTrainerLanguage(u8 *dst, u16 trainerId); u8 SetFacilityPtrsGetLevel(void); u8 GetFrontierEnemyMonLevel(u8 lvlMode); s32 GetHighestLevelInPlayerParty(void); -u8 FacilityClassToGraphicsId(u8 facilityClass); +u16 FacilityClassToGraphicsId(u8 facilityClass); bool32 ValidateBattleTowerRecord(u8 recordId); // unused void TrySetLinkBattleTowerEnemyPartyLevel(void); diff --git a/include/battle_util.h b/include/battle_util.h index 96ffc2fa16..2e1fdbf0d6 100644 --- a/include/battle_util.h +++ b/include/battle_util.h @@ -170,6 +170,7 @@ s32 CalculateMoveDamageAndEffectiveness(u16 move, u8 battlerAtk, u8 battlerDef, u16 CalcTypeEffectivenessMultiplier(u16 move, u8 moveType, u8 battlerAtk, u8 battlerDef, bool32 recordAbilities); u16 CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef); u16 GetTypeModifier(u8 atkType, u8 defType); +u16 GetTypeEffectiveness(struct Pokemon *mon, u8 moveType); s32 GetStealthHazardDamage(u8 hazardType, u8 battlerId); s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp); bool32 CanMegaEvolve(u8 battlerId); diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index af5af53403..f7c2d36284 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_FOLLOW_PLAYER 0x51 +#define NUM_MOVEMENT_TYPES 0x52 #define MOVEMENT_ACTION_FACE_DOWN 0x0 #define MOVEMENT_ACTION_FACE_UP 0x1 @@ -242,6 +243,8 @@ #define MOVEMENT_ACTION_FIGURE_8 0x9B #define MOVEMENT_ACTION_FLY_UP 0x9C #define MOVEMENT_ACTION_FLY_DOWN 0x9D +#define MOVEMENT_ACTION_EXIT_POKEBALL 0x9E +#define MOVEMENT_ACTION_ENTER_POKEBALL 0x9F #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 c8fa942655..03a12d0e66 100644 --- a/include/constants/event_objects.h +++ b/include/constants/event_objects.h @@ -240,6 +240,8 @@ #define OBJ_EVENT_GFX_LINK_RS_MAY 236 #define OBJ_EVENT_GFX_LUGIA 237 #define OBJ_EVENT_GFX_HOOH 238 +#define OBJ_EVENT_GFX_ANIMATED_BALL OBJ_EVENT_GFX_ITEM_BALL // replaces ITEM_BALL +#define OBJ_EVENT_GFX_OW_MON OBJ_EVENT_GFX_REGICE // NOTE: By default, the max value for NUM_OBJ_EVENT_GFX is 239. // @@ -274,10 +276,18 @@ #define OBJ_EVENT_GFX_VAR_E (OBJ_EVENT_GFX_VARS + 0xE) #define OBJ_EVENT_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF) // 255 +#define OBJ_EVENT_GFX_MON_BASE 0x200 // 512 +#define OBJ_EVENT_GFX_SPECIES_BITS 11 +#define OBJ_EVENT_GFX_SPECIES_MASK ((1 << OBJ_EVENT_GFX_SPECIES_BITS) - 1) + +#define OW_SPECIES(x) (((x)->graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE) +#define OW_FORM(x) ((x)->graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS) + #define SHADOW_SIZE_S 0 #define SHADOW_SIZE_M 1 #define SHADOW_SIZE_L 2 -#define SHADOW_SIZE_XL 3 +#define SHADOW_SIZE_XL 3 // unused; repurposed to mean no shadow +#define SHADOW_SIZE_NONE 3 #define F_INANIMATE (1 << 6) #define F_DISABLE_REFLECTION_PALETTE_LOAD (1 << 7) @@ -285,6 +295,9 @@ #define TRACKS_NONE 0 #define TRACKS_FOOT 1 #define TRACKS_BIKE_TIRE 2 +#define TRACKS_SLITHER 3 +#define TRACKS_SPOT 4 +#define TRACKS_BUG 5 #define FIRST_DECORATION_SPRITE_GFX OBJ_EVENT_GFX_PICHU_DOLL @@ -294,6 +307,7 @@ // Special object event local ids #define OBJ_EVENT_ID_PLAYER 0xFF #define OBJ_EVENT_ID_CAMERA 0x7F +#define OBJ_EVENT_ID_FOLLOWER 0xFE // Object event local ids referenced in C files #define LOCALID_ROUTE111_PLAYER_FALLING 45 diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index a620409479..e6a0b8058c 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -35,6 +35,7 @@ #define FLDEFF_USE_FLY 31 #define FLDEFF_FLY_IN 32 #define FLDEFF_QUESTION_MARK_ICON 33 +#define FLDEFF_EMOTE 33 // shares a slot with FLDEFF_QUESTION_MARK_ICON #define FLDEFF_FEET_IN_FLOWING_WATER 34 #define FLDEFF_BIKE_TIRE_TRACKS 35 #define FLDEFF_SAND_DISGUISE 36 @@ -68,6 +69,9 @@ #define FLDEFF_RAYQUAZA_SPOTLIGHT 64 #define FLDEFF_DESTROY_DEOXYS_ROCK 65 #define FLDEFF_MOVE_DEOXYS_ROCK 66 +#define FLDEFF_TRACKS_SLITHER 67 +#define FLDEFF_TRACKS_SPOT 68 +#define FLDEFF_TRACKS_BUG 69 #define FLDEFFOBJ_SHADOW_S 0 #define FLDEFFOBJ_SHADOW_M 1 @@ -107,6 +111,10 @@ #define FLDEFFOBJ_SMALL_SPARKLE 35 #define FLDEFFOBJ_RAYQUAZA 36 +#define FLDEFFOBJ_TRACKS_SLITHER 37 +#define FLDEFFOBJ_TRACKS_SPOT 38 +#define FLDEFFOBJ_TRACKS_BUG 39 + #define FLDEFF_PAL_TAG_CUT_GRASS 0x1000 #define FLDEFF_PAL_TAG_SECRET_POWER_TREE 0x1003 #define FLDEFF_PAL_TAG_GENERAL_0 0x1004 @@ -120,4 +128,11 @@ #define FLDEFF_PAL_TAG_HOF_MONITOR 0x1010 #define FLDEFF_PAL_TAG_UNKNOWN 0x1011 + +// Duplicates of event_object_movement tags +#define FLDEFF_PAL_TAG_MAY 0x1110 // OBJ_EVENT_PAL_TAG_MAY +#define FLDEFF_PAL_TAG_BRENDAN 0x1100 // OBJ_EVENT_PAL_TAG_BRENDAN +#define FLDEFF_PAL_TAG_NPC_1 0x1103 // OBJ_EVENT_PAL_TAG_NPC_1 +#define FLDEFF_PAL_TAG_NPC_2 0x1104 // OBJ_EVENT_PAL_TAG_NPC_2 + #endif // GUARD_FIELD_EFFECT_CONSTANTS_H diff --git a/include/constants/flags.h b/include/constants/flags.h index 59bde846c5..55dfc4c2b9 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -21,7 +21,7 @@ #define FLAG_TEMP_B (TEMP_FLAGS_START + 0xB) // Unused Flag #define FLAG_TEMP_C (TEMP_FLAGS_START + 0xC) // Unused Flag #define FLAG_TEMP_D (TEMP_FLAGS_START + 0xD) // Unused Flag -#define FLAG_TEMP_E (TEMP_FLAGS_START + 0xE) // Unused Flag +#define FLAG_TEMP_HIDE_FOLLOWER (TEMP_FLAGS_START + 0xE) // When set, follower pokemon won't be spawned #define FLAG_TEMP_F (TEMP_FLAGS_START + 0xF) // Unused Flag #define FLAG_TEMP_10 (TEMP_FLAGS_START + 0x10) // Unused Flag #define FLAG_TEMP_11 (TEMP_FLAGS_START + 0x11) @@ -1641,6 +1641,7 @@ #define FLAG_ENABLE_MULTI_CORRIDOR_DOOR (SPECIAL_FLAGS_START + 0x2) #define FLAG_SPECIAL_FLAG_UNUSED_0x4003 (SPECIAL_FLAGS_START + 0x3) // Unused Flag #define FLAG_STORING_ITEMS_IN_PYRAMID_BAG (SPECIAL_FLAGS_START + 0x4) +#define FLAG_SAFE_FOLLOWER_MOVEMENT (SPECIAL_FLAGS_START + 0x5) // When set, applymovement does not put the follower inside a pokeball // FLAG_SPECIAL_FLAG_0x4005 - 0x407F also exist and are unused #define SPECIAL_FLAGS_END (SPECIAL_FLAGS_START + 0x7F) diff --git a/include/data.h b/include/data.h index 6e41ac703a..aa884d1d13 100644 --- a/include/data.h +++ b/include/data.h @@ -4,6 +4,17 @@ #include "constants/moves.h" #define SPECIES_SHINY_TAG 5000 +#define N_FOLLOWER_HAPPY_MESSAGES 31 +#define N_FOLLOWER_NEUTRAL_MESSAGES 14 +#define N_FOLLOWER_SAD_MESSAGES 3 +#define N_FOLLOWER_UPSET_MESSAGES 3 +#define N_FOLLOWER_ANGRY_MESSAGES 5 +#define N_FOLLOWER_PENSIVE_MESSAGES 20 +#define N_FOLLOWER_LOVE_MESSAGES 10 +#define N_FOLLOWER_SURPRISE_MESSAGES 20 +#define N_FOLLOWER_CURIOUS_MESSAGES 7 +#define N_FOLLOWER_MUSIC_MESSAGES 14 +#define N_FOLLOWER_POISONED_MESSAGES 1 #define MAX_TRAINER_ITEMS 4 @@ -115,6 +126,19 @@ struct Trainer #define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) +struct FollowerMsgInfo { + const u8 *text; + const u8 *script; +}; + +struct FollowerMessagePool +{ + const struct FollowerMsgInfo * messages; + const u8 * script; + u16 length; +}; + + extern const u16 gMinigameDigits_Pal[]; extern const u32 gMinigameDigits_Gfx[]; @@ -165,4 +189,17 @@ extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; extern const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1]; extern const u8 *const gZMoveNames[]; +// Follower text messages +extern const struct FollowerMsgInfo gFollowerHappyMessages[]; +extern const struct FollowerMsgInfo gFollowerNeutralMessages[]; +extern const struct FollowerMsgInfo gFollowerSadMessages[]; +extern const struct FollowerMsgInfo gFollowerUpsetMessages[]; +extern const struct FollowerMsgInfo gFollowerAngryMessages[]; +extern const struct FollowerMsgInfo gFollowerPensiveMessages[]; +extern const struct FollowerMsgInfo gFollowerLoveMessages[]; +extern const struct FollowerMsgInfo gFollowerSurpriseMessages[]; +extern const struct FollowerMsgInfo gFollowerCuriousMessages[]; +extern const struct FollowerMsgInfo gFollowerMusicMessages[]; +extern const struct FollowerMsgInfo gFollowerPoisonedMessages[]; + #endif // GUARD_DATA_H diff --git a/include/event_data.h b/include/event_data.h index 51875ec5a4..04287b7ed6 100644 --- a/include/event_data.h +++ b/include/event_data.h @@ -22,7 +22,7 @@ u16 *GetVarPointer(u16 id); u16 VarGet(u16 id); u16 VarGetIfExist(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 FlagToggle(u16 id); diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 01269cdb5e..2336955bb3 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -48,6 +48,13 @@ enum ReflectionTypes NUM_REFLECTION_TYPES }; +enum FollowerTransformTypes +{ + TRANSFORM_TYPE_NONE, + TRANSFORM_TYPE_PERMANENT, + TRANSFORM_TYPE_RANDOM_WILD, +}; + #define FIGURE_8_LENGTH 72 #define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0) @@ -106,7 +113,6 @@ u8 GetObjectEventIdByXY(s16 x, s16 y); void SetObjectEventDirection(struct ObjectEvent *objectEvent, u8 direction); u8 GetFirstInactiveObjectEventId(void); void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup); -void LoadPlayerObjectReflectionPalette(u16 tag, u8 slot); void LoadSpecialObjectReflectionPalette(u16 tag, u8 slot); void TryMoveObjectEventToMapCoords(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); void PatchObjectPalette(u16 paletteTag, u8 paletteSlot); @@ -115,21 +121,28 @@ void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup void GetMapCoordsFromSpritePos(s16 x, s16 y, s16 *destX, s16 *destY); u8 GetFaceDirectionAnimNum(u8 direction); void SetSpritePosToOffsetMapCoords(s16 *x, s16 *y, s16 dx, s16 dy); +void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite); void ObjectEventClearHeldMovement(struct ObjectEvent *); void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *); +struct Pokemon * GetFirstLiveMon(void); +void UpdateFollowingPokemon(void); +void RemoveFollowingPokemon(void); +struct ObjectEvent * GetFollowerObject(void); void TrySpawnObjectEvents(s16 cameraX, s16 cameraY); u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority); u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup); -u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation); +u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation); u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *); void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY); void CameraObjectReset1(void); -void ObjectEventSetGraphicsId(struct ObjectEvent *, u8 graphicsId); +u8 UpdateSpritePaletteByTemplate(const struct SpriteTemplate *, struct Sprite *); +void ObjectEventSetGraphicsId(struct ObjectEvent *, u16 graphicsId); void ObjectEventTurn(struct ObjectEvent *, u8 direction); void ObjectEventTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direction); -const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId); +const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId); void SetObjectInvisibility(u8 localId, u8 mapNum, u8 mapGroup, bool8 invisible); void FreeAndReserveObjectSpritePalettes(void); +u8 LoadObjectEventPalette(u16 paletteTag); void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); void ResetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup); void SetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority); @@ -271,6 +284,7 @@ void MovementType_JogInPlace(struct Sprite *); void MovementType_RunInPlace(struct Sprite *); void MovementType_Invisible(struct Sprite *); void MovementType_WalkSlowlyInPlace(struct Sprite *); +void MovementType_FollowPlayer(struct Sprite *); u8 GetSlideMovementAction(u32); u8 GetJumpMovementAction(u32); u8 GetJump2MovementAction(u32); @@ -420,6 +434,21 @@ bool8 CopyablePlayerMovement_WalkFaster(struct ObjectEvent *, struct Sprite *, u bool8 CopyablePlayerMovement_Slide(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); bool8 CopyablePlayerMovement_JumpInPlace(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); bool8 CopyablePlayerMovement_Jump(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); + +u8 MovementType_FollowPlayer_Shadow(struct ObjectEvent *, struct Sprite *); +u8 MovementType_FollowPlayer_Active(struct ObjectEvent *, struct Sprite *); +u8 MovementType_FollowPlayer_Moving(struct ObjectEvent *, struct Sprite *); +void StartSpriteAnimInDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 animNum); + +bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 FollowablePlayerMovement_FaceDirection(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 FollowablePlayerMovement_Step(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 FollowablePlayerMovement_GoSpeed1(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 FollowablePlayerMovement_GoSpeed2(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 FollowablePlayerMovement_Slide(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 fph_IM_DIFFERENT(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 FollowablePlayerMovement_GoSpeed4(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); +bool8 FollowablePlayerMovement_Jump(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); bool8 CopyablePlayerMovement_Jump2(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)); u8 MovementType_CopyPlayerInGrass_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementType_Buried_Step0(struct ObjectEvent *, struct Sprite *); @@ -432,9 +461,9 @@ 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 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction); +u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, 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); diff --git a/include/event_scripts.h b/include/event_scripts.h index 4e0a88f82a..a64b8ffc4c 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1,6 +1,33 @@ #ifndef GUARD_EVENT_SCRIPTS_H #define GUARD_EVENT_SCRIPTS_H +extern const u8 EventScript_Follower[]; +extern const u8 EventScript_FollowerEnd[]; +extern const u8 EventScript_FollowerGeneric[]; +extern const u8 EventScript_FollowerLovesYou[]; + +extern const u8 EventScript_FollowerIsShivering[]; +extern const u8 EventScript_FollowerNostalgia[]; +extern const u8 EventScript_FollowerHopping[]; +extern const u8 EventScript_FollowerJumpOnPlayer[]; +extern const u8 EventScript_FollowerCuddling[]; +extern const u8 EventScript_FollowerShiverCuddling[]; +extern const u8 EventScript_FollowerGetCloser[]; +extern const u8 EventScript_FollowerPokingPlayer[]; +extern const u8 EventScript_FollowerLookAround[]; +extern const u8 EventScript_FollowerLookAway[]; +extern const u8 EventScript_FollowerLookAwayBark[]; +extern const u8 EventScript_FollowerLookAwayPoke[]; +extern const u8 EventScript_FollowerPokeGround[]; +extern const u8 EventScript_FollowerStartled[]; +extern const u8 EventScript_FollowerFastHopping[]; +extern const u8 EventScript_FollowerDizzy[]; +extern const u8 EventScript_FollowerLookAroundScared[]; +extern const u8 EventScript_FollowerDance[]; +extern const u8 EventScript_FollowerFaceUp[]; +extern const u8 EventScript_FollowerFaceResult[]; +extern const u8 EnterPokeballMovement[]; + extern const u8 EventScript_TestSignpostMsg[]; extern const u8 EventScript_TryGetTrainerScript[]; extern const u8 EventScript_StartTrainerApproach[]; diff --git a/include/field_effect.h b/include/field_effect.h index 4cde29e8a3..5842b0b4f6 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -13,6 +13,7 @@ u32 FieldEffectStart(u8); bool8 FieldEffectActiveListContains(u8 id); void FieldEffectActiveListClear(void); void ReturnToFieldFromFlyMapSelect(void); +void FieldCallback_Fly(void); u8 AddNewGameBirchObject(s16, s16, u8); void FieldEffectStop(struct Sprite *sprite, u8 id); u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer); @@ -24,6 +25,7 @@ void FieldEffectScript_LoadTiles(u8 **script); void FieldEffectScript_LoadFadedPalette(u8 **script); void FieldEffectScript_LoadPalette(u8 **script); void FieldEffectScript_CallNative(u8 **script, u32 *val); +void FieldEffectFreeGraphicsResources(struct Sprite *sprite); void FieldEffectFreeTilesIfUnused(u16 tileStart); void FieldEffectFreePaletteIfUnused(u8 paletteNum); bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val); diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 2ae5d79f75..22dcb119a4 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -21,6 +21,7 @@ bool8 UpdateRevealDisguise(struct ObjectEvent *); void StartRevealDisguise(struct ObjectEvent *); void StartAshFieldEffect(s16, s16, u16, s16); void SetUpReflection(struct ObjectEvent *, struct Sprite *, u8); +void SetUpShadow(struct ObjectEvent *, struct Sprite *); u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent *); u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); void UpdateRayquazaSpotlightEffect(struct Sprite *); diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index 39fc886af8..dae0f6c0db 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); +u16 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 state, u8 gender); +u16 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender); void SetPlayerAvatarFieldMove(void); -u8 GetPlayerAvatarGraphicsIdByCurrentState(void); +u16 GetPlayerAvatarGraphicsIdByCurrentState(void); void SetPlayerAvatarStateMask(u8 flags); -u8 GetPlayerAvatarGraphicsIdByStateId(u8 state); +u16 GetPlayerAvatarGraphicsIdByStateId(u8 state); 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/fldeff.h b/include/fldeff.h index bed235a1be..f676720ede 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -46,7 +46,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/follower_helper.h b/include/follower_helper.h new file mode 100644 index 0000000000..115242fdb9 --- /dev/null +++ b/include/follower_helper.h @@ -0,0 +1,129 @@ +#ifndef GUARD_FOLLOWER_HELPER_H +#define GUARD_FOLLOWER_HELPER_H + +enum { + FOLLOWER_EMOTION_HAPPY = 0, + FOLLOWER_EMOTION_NEUTRAL, // Also called "No emotion" + FOLLOWER_EMOTION_SAD, + FOLLOWER_EMOTION_UPSET, + FOLLOWER_EMOTION_ANGRY, + FOLLOWER_EMOTION_PENSIVE, + FOLLOWER_EMOTION_LOVE, + FOLLOWER_EMOTION_SURPRISE, + FOLLOWER_EMOTION_CURIOUS, + FOLLOWER_EMOTION_MUSIC, + FOLLOWER_EMOTION_POISONED, + FOLLOWER_EMOTION_LENGTH, +}; + +// This struct is optimized for size +// Each "section" can be used to combine multiple conditions, +// i.e, species and map +// Just set the flags accordingly and use the right union member +struct __attribute__((packed)) FollowerMsgInfoExtended { + const u8 *text; + const u8 *script; + + union __attribute__((packed)) { + u16 species:10; + struct __attribute__((packed)) { + u16 type1:5; + u16 type2:5; // if >= NUMBER_OF_MON_TYPES, inverts checking for type1 + } types; + u16 status:10; + } st; + u16 stFlags:2; // 0 = no matching, 1 = species matching, 2 = type matching, 3 = status + u16 emotion:4; // emotion for this message + + union __attribute__((packed)) { + struct __attribute__((packed)) { + u16 mapSec:8; + } mapSec; + struct __attribute__((packed)) { + u16 mapNum:8; + u16 mapGroup:6; + } map; + struct __attribute__((packed)) { + u16 behavior1:8; + u16 behavior2:6; // not full; only goes up to 0x3F + } mb; + } mm; + u16 mmFlags:2; // 1 = map sec, 2 = map, 3 = metatile behavior + + union __attribute__((packed)) { + struct __attribute__((packed)) { + u16 weather1:5; + u16 weather2:5; + } weather; + u16 song:10; + u16 timeOfDay:10; + } wt; + u16 wtFlags:2; // 1 = weather matching, 2 = song, 3 = time + u16 weight:3; + // if set, `text` is treated as an array of up to 4 texts instead + u16 textSpread:1; + + union __attribute__((packed)) { + struct __attribute__((packed)) { + u16 behavior:8; + u16 distance:6; + } mb; + } near; + u16 nearFlags:2; // 1 = mb within '+'-shaped distance away +}; + +enum { + ST_FLAGS_SPECIES = 1, + ST_FLAGS_TYPE, + ST_FLAGS_STATUS, +}; + +enum { + MM_FLAGS_MAPSEC = 1, + MM_FLAGS_MAP, + MM_FLAGS_MB, // (m)etatile (b)ehavior +}; + +enum { + WT_FLAGS_WEATHER = 1, + WT_FLAGS_MUSIC, + WT_FLAGS_TIME, +}; + +#define NEAR_FLAGS_MB 1 + +enum { + COND_MSG_CELEBI, + COND_MSG_FIRE, + COND_MSG_EVER_GRANDE, + COND_MSG_ROUTE_112, + COND_MSG_DAY_CARE, + COND_MSG_MART, + COND_MSG_VICTORY_ROAD, + COND_MSG_BIKE_SHOP, + COND_MSG_MACHINES, + COND_MSG_SAILING, + COND_MSG_PUDDLE, + COND_MSG_SAND, + COND_MSG_GRASS, + COND_MSG_FOOTPRINTS, + COND_MSG_ELEVATOR, + COND_MSG_ICE_ROOM, + COND_MSG_ROUTE_117, + COND_MSG_DRAGON_GROWL, + COND_MSG_FEAR, + COND_MSG_FIRE_RAIN, + COND_MSG_FROZEN, + COND_MSG_SEASIDE, + COND_MSG_WATERFALL, + COND_MSG_RAIN, + COND_MSG_REFLECTION, + COND_MSG_LEAVES, + COND_MSG_ICE, + COND_MSG_BURN, + COND_MSG_COUNT, +}; + +extern const struct FollowerMsgInfoExtended gFollowerConditionalMessages[COND_MSG_COUNT]; + +#endif //GUARD_FOLLOWER_HELPER_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 7461929c3a..fe396f0fd0 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -63,25 +63,24 @@ struct BackupMapLayout u16 *map; }; -struct ObjectEventTemplate +struct __attribute__((packed)) ObjectEventTemplate { /*0x00*/ u8 localId; - /*0x01*/ u8 graphicsId; - /*0x02*/ u8 kind; // Always OBJ_KIND_NORMAL in Emerald. - /*0x03*/ //u8 padding1; + /*0x01*/ u16 graphicsId; + /*0x03*/ u8 kind; // Always OBJ_KIND_NORMAL in Emerald. /*0x04*/ s16 x; /*0x06*/ s16 y; /*0x08*/ u8 elevation; /*0x09*/ u8 movementType; /*0x0A*/ u16 movementRangeX:4; u16 movementRangeY:4; - //u16 padding2:8; + u16 unused:8; /*0x0C*/ u16 trainerType; /*0x0E*/ u16 trainerRange_berryTreeId; /*0x10*/ const u8 *script; /*0x14*/ u16 flagId; - /*0x16*/ //u8 padding3[2]; -}; + /*0x16*/ u16 filler; +}; // size = 0x18 struct WarpEvent { @@ -195,9 +194,8 @@ struct ObjectEvent u32 disableJumpLandingGroundEffect:1; u32 fixedPriority:1; u32 hideReflection:1; - //u32 padding:4; - /*0x04*/ u8 spriteId; - /*0x05*/ u8 graphicsId; + u32 shiny:1; // OW mon shininess + /*0x04*/ u16 graphicsId; // 11 bits for species; high 5 bits for form /*0x06*/ u8 movementType; /*0x07*/ u8 trainerType; /*0x08*/ u8 localId; @@ -221,7 +219,7 @@ struct ObjectEvent /*0x20*/ u8 previousMovementDirection; /*0x21*/ u8 directionSequenceIndex; /*0x22*/ u8 playerCopyableMovement; // COPY_MOVE_* - /*0x23*/ //u8 padding2; + /*0x23*/ u8 spriteId; /*size = 0x24*/ }; diff --git a/include/global.h b/include/global.h index eca45bdb63..e30fcfb531 100644 --- a/include/global.h +++ b/include/global.h @@ -540,6 +540,8 @@ struct SaveBlock2 extern struct SaveBlock2 *gSaveBlock2Ptr; +extern bool8 IsAccurateGBA(void); + struct SecretBaseParty { u32 personality[PARTY_SIZE]; diff --git a/include/overworld.h b/include/overworld.h index adaa6aad04..1bd0bdd110 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -25,6 +25,10 @@ #define MOVEMENT_MODE_SCRIPTED 2 #define SKIP_OBJECT_EVENT_LOAD 1 +#define TIME_OF_DAY_NIGHT 0 +#define TIME_OF_DAY_TWILIGHT 1 +#define TIME_OF_DAY_DAY 2 +#define TIME_OF_DAY_MAX TIME_OF_DAY_DAY struct InitialPlayerAvatarState { diff --git a/include/party_menu.h b/include/party_menu.h index 31e5910748..d9279c7109 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -43,6 +43,7 @@ u8 GetAilmentFromStatus(u32 status); u8 GetMonAilment(struct Pokemon *mon); void DisplayPartyMenuStdMessage(u32 stringId); bool8 FieldCallback_PrepareFadeInFromMenu(void); +bool8 FieldCallback_PrepareFadeInForTeleport(void); void CB2_ReturnToPartyMenuFromFlyMap(void); void LoadHeldItemIcons(void); void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty); diff --git a/include/pokeball.h b/include/pokeball.h index 815221c89f..2b4d2db15d 100644 --- a/include/pokeball.h +++ b/include/pokeball.h @@ -47,6 +47,7 @@ extern const struct SpriteTemplate gBallSpriteTemplates[]; #define POKEBALL_PLAYER_SENDOUT 0xFF #define POKEBALL_OPPONENT_SENDOUT 0xFE +#define POKEBALL_PLAYER_SLIDEIN 0xFD u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow); void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 delay, u32 fadePalettes, u16 species); diff --git a/include/pokemon.h b/include/pokemon.h index 2c32054c59..2f6824d82f 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -100,6 +100,7 @@ enum { MON_DATA_SPEED2, MON_DATA_SPATK2, MON_DATA_SPDEF2, + MON_DATA_NATURE, }; struct PokemonSubstruct0 diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h index e56ed0ffa5..abd770a24b 100644 --- a/include/trainer_pokemon_sprites.h +++ b/include/trainer_pokemon_sprites.h @@ -11,6 +11,7 @@ bool16 ResetAllPicSprites(void); u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 CreateMonPicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 FreeAndDestroyMonPicSprite(u16 spriteId); +u16 FreeAndDestroyMonPicSpriteNoPalette(u16 spriteId); u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); u16 FreeAndDestroyTrainerPicSprite(u16 spriteId); u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId); diff --git a/ld_script.txt b/ld_script.txt index dcce51a0f7..60d01f3ae6 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -122,6 +122,7 @@ SECTIONS { src/field_door.o(.text); src/field_player_avatar.o(.text); src/event_object_movement.o(.text); + src/follower_helper.o(.text); src/field_message_box.o(.text); src/event_object_lock.o(.text); src/text_window.o(.text); @@ -512,6 +513,7 @@ SECTIONS { src/field_door.o(.rodata); src/field_player_avatar.o(.rodata); src/event_object_movement.o(.rodata); + src/follower_helper.o(.rodata); src/text_window.o(.rodata); src/scrcmd.o(.rodata); src/field_control_avatar.o(.rodata); diff --git a/palette.py b/palette.py new file mode 100755 index 0000000000..5fbcb48d4b --- /dev/null +++ b/palette.py @@ -0,0 +1,26 @@ +#!/usr/bin/python3 +""" Extract a GBA-compatible palette from a PNG. """ +import sys +import os.path +import png + +PAL_PRELUDE = 'JASC-PAL\n0100\n' + + +def extract_palette(path): + r = png.Reader(path) + r.read() + root, _ = os.path.splitext(path) + out_path = root + '.pal' + with open(out_path, 'w', newline='\r\n') as f: + f.write(PAL_PRELUDE) + colors = r.palette() + if len(colors) < 16: + colors += [(0, 0, 0) for _ in range(16-len(colors))] + f.write(f'{len(colors)}\n') + for r, g, b in colors: + f.write(f'{r} {g} {b}\n') + + +if __name__ == '__main__': + extract_palette(*sys.argv[1:]) diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index c89d6e81cd..f02b18f936 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -1,5 +1,6 @@ OBJEVENTGFXDIR := graphics/object_events/pics FLDEFFGFXDIR := graphics/field_effects/pics +MISCGFXDIR := graphics/misc $(OBJEVENTGFXDIR)/people/brendan/walking.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 @@ -405,70 +406,71 @@ $(OBJEVENTGFXDIR)/people/youngster.4bpp: %.4bpp: %.png -$(OBJEVENTGFXDIR)/pokemon/azumarill.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/azumarill_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(OBJEVENTGFXDIR)/pokemon/azurill.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/azurill_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(OBJEVENTGFXDIR)/pokemon/deoxys.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/deoxys_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/dusclops.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/dusclops_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 $(OBJEVENTGFXDIR)/pokemon/enemy_zigzagoon.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/groudon.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/groudon_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/ho_oh.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/ho_oh_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/kecleon.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/kecleon_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(OBJEVENTGFXDIR)/pokemon/kirlia.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/kirlia_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/kyogre.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/kyogre_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 $(OBJEVENTGFXDIR)/pokemon/latias_latios.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/lugia.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/lugia_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/mew.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/mew_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/pikachu.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/pikachu_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(OBJEVENTGFXDIR)/pokemon/poochyena.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/poochyena_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/rayquaza.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/rayquaza_cutscene.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 8 -mheight 8 -$(OBJEVENTGFXDIR)/pokemon/skitty.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/skitty_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(OBJEVENTGFXDIR)/pokemon/sudowoodo.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/sudowoodo_tree.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/vigoroth.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/vigoroth_mover.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 -$(OBJEVENTGFXDIR)/pokemon/wingull.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/wingull_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 -$(OBJEVENTGFXDIR)/pokemon/zigzagoon.4bpp: %.4bpp: %.png +$(OBJEVENTGFXDIR)/pokemon/zigzagoon_old.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 - +$(OBJEVENTGFXDIR)/misc/animated_ball.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 4 $(OBJEVENTGFXDIR)/berry_trees/aguav.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 @@ -641,6 +643,16 @@ $(FLDEFFGFXDIR)/jump_tall_grass.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/bike_tire_tracks.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 + +$(FLDEFFGFXDIR)/slither_tracks.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 2 + +$(FLDEFFGFXDIR)/bug_tracks.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 2 + +$(FLDEFFGFXDIR)/spot_tracks.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 2 + $(FLDEFFGFXDIR)/bubbles.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 @@ -719,5 +731,1256 @@ $(FLDEFFGFXDIR)/secret_power_tree.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/record_mix_lights.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 1 +$(OBJEVENTGFXDIR)/pokemon/bulbasaur.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ivysaur.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/venusaur.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/charmander.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/charmeleon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/charizard.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/squirtle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wartortle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/blastoise.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/caterpie.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/metapod.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/butterfree.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/weedle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kakuna.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/beedrill.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pidgey.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pidgeotto.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pidgeot.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/rattata.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/raticate.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/spearow.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/fearow.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ekans.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/arbok.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pikachu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/raichu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sandshrew.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sandslash.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nidoran_f.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nidorina.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nidoqueen.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nidoran_m.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nidorino.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nidoking.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/clefairy.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/clefable.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/vulpix.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ninetales.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/jigglypuff.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wigglytuff.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/zubat.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/golbat.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/oddish.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/gloom.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/vileplume.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/paras.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/parasect.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/venonat.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/venomoth.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/diglett.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dugtrio.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/meowth.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/persian.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/psyduck.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/golduck.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mankey.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/primeape.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/growlithe.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/arcanine.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/poliwag.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/poliwhirl.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/poliwrath.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/abra.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kadabra.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/alakazam.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/machop.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/machoke.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/machamp.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/bellsprout.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/weepinbell.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/victreebel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/tentacool.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/tentacruel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/geodude.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/graveler.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/golem.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ponyta.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/rapidash.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/slowpoke.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/slowbro.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/magnemite.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/magneton.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/farfetchd.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/doduo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dodrio.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/seel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dewgong.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/grimer.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/muk.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/shellder.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/cloyster.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/gastly.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/haunter.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/gengar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/onix.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/drowzee.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/hypno.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/krabby.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kingler.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/voltorb.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/electrode.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/exeggcute.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/exeggutor.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/cubone.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/marowak.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/hitmonlee.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/hitmonchan.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lickitung.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/koffing.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/weezing.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/rhyhorn.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/rhydon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/chansey.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/tangela.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kangaskhan.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/horsea.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/seadra.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/goldeen.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/seaking.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/staryu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/starmie.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mr_mime.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/scyther.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/jynx.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/electabuzz.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/magmar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pinsir.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/tauros.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/magikarp.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/gyarados.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lapras.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ditto.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/eevee.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/vaporeon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/jolteon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/flareon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/porygon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/omanyte.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/omastar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kabuto.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kabutops.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/aerodactyl.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/snorlax.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/articuno.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/zapdos.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/moltres.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dratini.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dragonair.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dragonite.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mewtwo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mew.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/chikorita.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/bayleef.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/meganium.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/cyndaquil.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/quilava.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/typhlosion.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/totodile.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/croconaw.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/feraligatr.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sentret.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/furret.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/hoothoot.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/noctowl.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ledyba.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ledian.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/spinarak.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ariados.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/crobat.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/chinchou.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lanturn.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pichu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/cleffa.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/igglybuff.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/togepi.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/togetic.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/natu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/xatu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mareep.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/flaaffy.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ampharos.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/bellossom.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/marill.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/azumarill.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sudowoodo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/politoed.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/hoppip.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/skiploom.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/jumpluff.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/aipom.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sunkern.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sunflora.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/yanma.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wooper.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/quagsire.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/espeon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/umbreon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/murkrow.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/slowking.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/misdreavus.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_a.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_b.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_c.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_d.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_e.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_f.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_g.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_h.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_i.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_j.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_k.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_l.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_m.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_n.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_o.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_p.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_q.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_r.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_s.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_t.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_u.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_v.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_w.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_x.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_y.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_z.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_exclamation.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/unown_question.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wobbuffet.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/girafarig.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pineco.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/forretress.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dunsparce.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/gligar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/steelix.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/snubbull.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/granbull.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/qwilfish.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/scizor.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/shuckle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/heracross.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sneasel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/teddiursa.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ursaring.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/slugma.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/magcargo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/swinub.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/piloswine.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/corsola.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/remoraid.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/octillery.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/delibird.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mantine.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/skarmory.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/houndour.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/houndoom.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kingdra.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/phanpy.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/donphan.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/porygon2.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/stantler.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/smeargle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/tyrogue.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/hitmontop.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/smoochum.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/elekid.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/magby.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/miltank.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/blissey.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/raikou.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/entei.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/suicune.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/larvitar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pupitar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/tyranitar.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lugia.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ho_oh.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/celebi.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/treecko.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/grovyle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sceptile.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/torchic.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/combusken.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/blaziken.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mudkip.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/marshtomp.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/swampert.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/poochyena.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mightyena.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/zigzagoon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/linoone.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wurmple.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/silcoon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/beautifly.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/cascoon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dustox.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lotad.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lombre.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ludicolo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/seedot.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nuzleaf.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/shiftry.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/taillow.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/swellow.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wingull.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/pelipper.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ralts.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kirlia.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/gardevoir.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/surskit.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/masquerain.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/shroomish.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/breloom.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/slakoth.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/vigoroth.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/slaking.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nincada.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/ninjask.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/shedinja.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/whismur.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/loudred.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/exploud.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/makuhita.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/hariyama.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/azurill.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/nosepass.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/skitty.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/delcatty.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sableye.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/mawile.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/aron.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lairon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/aggron.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/meditite.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/medicham.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/electrike.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/manectric.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/plusle.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/minun.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/volbeat.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/illumise.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/roselia.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/gulpin.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/swalot.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/carvanha.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sharpedo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wailmer.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wailord.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/numel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/camerupt.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/torkoal.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/spoink.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/grumpig.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/spinda.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/trapinch.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/vibrava.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/flygon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/cacnea.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/cacturne.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/swablu.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/altaria.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/zangoose.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/seviper.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lunatone.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/solrock.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/barboach.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/whiscash.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/corphish.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/crawdaunt.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/baltoy.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/claydol.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/lileep.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/cradily.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/anorith.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/armaldo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/feebas.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/milotic.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/castform.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/castform_sunny.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/castform_rainy.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/castform_snowy.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kecleon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/shuppet.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/banette.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/duskull.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/dusclops.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/tropius.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/chimecho.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/absol.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/wynaut.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/snorunt.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/glalie.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/spheal.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/sealeo.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/walrein.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/clamperl.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/huntail.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/gorebyss.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/relicanth.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/luvdisc.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/bagon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/shelgon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/salamence.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/beldum.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/metang.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/metagross.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/regirock.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/regice.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/registeel.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/latias.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/latios.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/kyogre.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/groudon.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/rayquaza.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/jirachi.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(OBJEVENTGFXDIR)/pokemon/deoxys.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + +$(MISCGFXDIR)/emotes.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 2 -mheight 2 + graphics/door_anims/battle_tower_multi_corridor.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 4 diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index c88dbff78f..7242127b07 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -11,6 +11,7 @@ #include "battle_z_move.h" #include "bg.h" #include "data.h" +#include "event_object_movement.h" #include "item.h" #include "item_menu.h" #include "link.h" @@ -114,7 +115,7 @@ static void Task_UpdateLvlInHealthbox(u8); static void PrintLinkStandbyMsg(void); static u32 CopyPlayerMonData(u8, u8 *); static void SetPlayerMonData(u8); -static void StartSendOutAnim(u8, bool8); +static void StartSendOutAnim(u8, bool8, bool8); static void DoSwitchOutAnimation(void); static void PlayerDoMoveAnimation(void); static void Task_StartSendOutAnim(u8); @@ -2409,11 +2410,25 @@ static void PlayerHandleSwitchInAnim(void) BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); gActionSelectionCursor[gActiveBattler] = 0; gMoveSelectionCursor[gActiveBattler] = 0; - StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2]); + StartSendOutAnim(gActiveBattler, gBattleResources->bufferA[gActiveBattler][2], FALSE); gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnimShowHealthbox; } -static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) +// In normal singles, if follower pokemon is out, have it slide in instead of being thrown +static bool8 ShouldDoSlideInAnim(void) { + struct ObjectEvent *followerObj = GetFollowerObject(); + if (!followerObj || followerObj->invisible) + return FALSE; + if (gBattleTypeFlags & ( + BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_FIRST_BATTLE | + BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TWO_OPPONENTS | + BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL) + ) + return FALSE; + return TRUE; +} + +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit, bool8 doSlideIn) { u16 species; @@ -2441,7 +2456,7 @@ static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, doSlideIn ? POKEBALL_PLAYER_SLIDEIN : POKEBALL_PLAYER_SENDOUT); } static void PlayerHandleReturnMonToBall(void) @@ -3194,7 +3209,7 @@ static void PlayerHandleIntroTrainerBallThrow(void) gSprites[gBattlerSpriteIds[gActiveBattler]].sBattlerId = gActiveBattler; StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], ShouldDoSlideInAnim() ? 2 : 1); paletteNum = AllocSpritePalette(0xD6F8); LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); @@ -3241,17 +3256,17 @@ static void Task_StartSendOutAnim(u8 taskId) if (TwoIntroMons(gActiveBattler) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE, ShouldDoSlideInAnim()); gActiveBattler ^= BIT_FLANK; gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - StartSendOutAnim(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE, ShouldDoSlideInAnim()); gActiveBattler ^= BIT_FLANK; } else { gBattleResources->bufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - StartSendOutAnim(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE, ShouldDoSlideInAnim()); } gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; gActiveBattler = savedActiveBattler; diff --git a/src/battle_main.c b/src/battle_main.c index 270447a0e1..6dba58d99a 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3026,6 +3026,29 @@ void SpriteCB_PlayerMonFromBall(struct Sprite *sprite) BattleAnimateBackSprite(sprite, sprite->sSpeciesId); } +void SpriteCB_PlayerMonSlideIn(struct Sprite *sprite) { + if (sprite->data[3] == 0) { + PlaySE(SE_BALL_TRAY_ENTER); + sprite->data[3]++; + } else if (sprite->data[3] == 1) { + if (sprite->animEnded) + return; + sprite->data[4] = sprite->x; + sprite->x = -33; + sprite->invisible = FALSE; + sprite->data[3]++; + } else if (sprite->data[3] < 27) { + sprite->x += 4; + sprite->data[3]++; + } else { + sprite->data[3] = 0; + sprite->x = sprite->data[4]; + sprite->data[4] = 0; + sprite->callback = SpriteCB_PlayerMonFromBall; + PlayCry_ByMode(sprite->sSpeciesId, -25, CRY_MODE_NORMAL); + } +} + static void SpriteCB_TrainerThrowObject_Main(struct Sprite *sprite) { AnimSetCenterToCornerVecX(sprite); diff --git a/src/battle_tower.c b/src/battle_tower.c index 4e16467f04..5d4ad2b957 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1257,11 +1257,11 @@ void SetEReaderTrainerGfxId(void) SetBattleFacilityTrainerGfxId(TRAINER_EREADER, 0); } -u8 GetBattleFacilityTrainerGfxId(u16 trainerId) +u16 GetBattleFacilityTrainerGfxId(u16 trainerId) { u32 i; u8 facilityClass; - u8 trainerObjectGfxId; + u16 trainerObjectGfxId; SetFacilityPtrsGetLevel(); if (trainerId == TRAINER_EREADER) @@ -3638,7 +3638,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount) } } -u8 FacilityClassToGraphicsId(u8 facilityClass) +u16 FacilityClassToGraphicsId(u8 facilityClass) { u8 trainerObjectGfxId; u8 i; diff --git a/src/battle_util.c b/src/battle_util.c index 93d0233630..951a6790ff 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -9900,6 +9900,29 @@ static u16 GetInverseTypeMultiplier(u16 multiplier) } } +u16 GetTypeEffectiveness(struct Pokemon *mon, u8 moveType) +{ + u16 modifier = UQ_4_12(1.0); + u16 abilityDef = GetMonAbility(mon); + u16 speciesDef = GetMonData(&mon, MON_DATA_SPECIES); + u8 type1 = gSpeciesInfo[speciesDef].types[0]; + u8 type2 = gSpeciesInfo[speciesDef].types[1]; + + if (moveType != TYPE_MYSTERY) + { + MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, type1, 0, FALSE); + if (type2 != type1) + MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, type2, 0, FALSE); + + if (moveType == TYPE_GROUND && abilityDef == ABILITY_LEVITATE) + modifier = UQ_4_12(0.0); + if (abilityDef == ABILITY_WONDER_GUARD && modifier <= UQ_4_12(1.0)) + modifier = UQ_4_12(0.0); + } + + return modifier; +} + u16 GetTypeModifier(u8 atkType, u8 defType) { #if B_FLAG_INVERSE_BATTLE != 0 diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 3487428495..01d3e82bbd 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -1,5 +1,6 @@ #include "global.h" #include "event_data.h" +#include "event_object_movement.h" #include "field_camera.h" #include "field_effect.h" #include "script.h" @@ -214,6 +215,7 @@ static void DoBrailleRegirockEffect(void) PlaySE(SE_BANG); FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED); UnlockPlayerFieldControls(); + UnfreezeObjectEvents(); } bool8 ShouldDoBrailleRegisteelEffect(void) @@ -253,6 +255,7 @@ static void DoBrailleRegisteelEffect(void) PlaySE(SE_BANG); FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED); UnlockPlayerFieldControls(); + UnfreezeObjectEvents(); } // theory: another commented out DoBrailleWait and Task_BrailleWait. diff --git a/src/cable_car.c b/src/cable_car.c index 7d18df7b7f..28cb316807 100644 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -790,12 +790,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, @@ -1058,4 +1058,3 @@ static void InitGroundTilemapData(bool8 goingDown) sCableCar->groundTimer = 0; } - diff --git a/src/contest_util.c b/src/contest_util.c index 5da02a285b..4e20c82cf1 100644 --- a/src/contest_util.c +++ b/src/contest_util.c @@ -2489,6 +2489,12 @@ void SetLinkContestPlayerGfx(void) } } +// copied from event_object_movement +#define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100 +#define OBJ_EVENT_PAL_TAG_MAY 0x1110 +#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122 +#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123 + void LoadLinkContestPlayerPalettes(void) { int i; @@ -2497,28 +2503,28 @@ void LoadLinkContestPlayerPalettes(void) struct Sprite *sprite; static const u8 sContestantLocalIds[CONTESTANT_COUNT] = { 3, 4, 5, 14 }; - gReservedSpritePaletteCount = 12; + // gReservedSpritePaletteCount = 12; + // TODO: Does dynamically allocating link player palettes break link contests? if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK) { for (i = 0; i < gNumLinkContestPlayers; i++) { objectEventId = GetObjectEventIdByLocalIdAndMap(sContestantLocalIds[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); sprite = &gSprites[gObjectEvents[objectEventId].spriteId]; - sprite->oam.paletteNum = 6 + i; version = (u8)gLinkPlayers[i].version; if (version == VERSION_RUBY || version == VERSION_SAPPHIRE) { if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPal_RubySapphireBrendan, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP); + sprite->oam.paletteNum = LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_RS_BRENDAN); else - LoadPalette(gObjectEventPal_RubySapphireMay, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP); + sprite->oam.paletteNum = LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_RS_MAY); } else { if (gLinkPlayers[i].gender == MALE) - LoadPalette(gObjectEventPal_Brendan, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP); + sprite->oam.paletteNum = LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_BRENDAN); else - LoadPalette(gObjectEventPal_May, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP); + sprite->oam.paletteNum = LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_MAY); } } } diff --git a/src/data.c b/src/data.c index 1ced9ce81d..a3462845b2 100644 --- a/src/data.c +++ b/src/data.c @@ -324,3 +324,4 @@ const union AnimCmd *const gAnims_MonPic[MAX_MON_PIC_FRAMES] = #include "data/trainers.h" #include "data/text/species_names.h" #include "data/text/move_names.h" +#include "data/text/follower_messages.h" diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h index 64a3c3283b..14113d3a43 100755 --- a/src/data/field_effects/field_effect_object_template_pointers.h +++ b/src/data/field_effects/field_effect_object_template_pointers.h @@ -35,6 +35,9 @@ extern const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch; extern const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles; extern const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle; extern const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_SlitherTracks; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_BugTracks; +extern const struct SpriteTemplate gFieldEffectObjectTemplate_SpotTracks; const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall, @@ -74,4 +77,7 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles, [FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle, [FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza, + [FLDEFFOBJ_TRACKS_SLITHER] = &gFieldEffectObjectTemplate_SlitherTracks, + [FLDEFFOBJ_TRACKS_SPOT] = &gFieldEffectObjectTemplate_SpotTracks, + [FLDEFFOBJ_TRACKS_BUG] = &gFieldEffectObjectTemplate_BugTracks, }; diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index d19adf6f0b..0aef3d0d8a 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -28,45 +28,13 @@ static const struct SpriteFrameImage sPicTable_ShadowExtraLarge[] = { obj_frame_tiles(gFieldEffectObjectPic_ShadowExtraLarge), }; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = { - .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, - .oam = &gObjectEventBaseOam_8x8, - .anims = sAnimTable_Shadow, - .images = sPicTable_ShadowSmall, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateShadowFieldEffect, -}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = {0xFFFF, TAG_WEATHER_START, &gObjectEventBaseOam_8x8, sAnimTable_Shadow, sPicTable_ShadowSmall, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = { - .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, - .oam = &gObjectEventBaseOam_16x8, - .anims = sAnimTable_Shadow, - .images = sPicTable_ShadowMedium, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateShadowFieldEffect, -}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = {0xFFFF, TAG_WEATHER_START, &gObjectEventBaseOam_16x8, sAnimTable_Shadow, sPicTable_ShadowMedium, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = { - .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, - .oam = &gObjectEventBaseOam_32x8, - .anims = sAnimTable_Shadow, - .images = sPicTable_ShadowLarge, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateShadowFieldEffect, -}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = {0xFFFF, TAG_WEATHER_START, &gObjectEventBaseOam_32x8, sAnimTable_Shadow, sPicTable_ShadowLarge, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; -const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = { - .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, - .oam = &gObjectEventBaseOam_64x32, - .anims = sAnimTable_Shadow, - .images = sPicTable_ShadowExtraLarge, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = UpdateShadowFieldEffect, -}; +const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = {0xFFFF, TAG_WEATHER_START, &gObjectEventBaseOam_64x32, sAnimTable_Shadow, sPicTable_ShadowExtraLarge, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; static const struct SpriteFrameImage sPicTable_TallGrass[] = { overworld_frame(gFieldEffectObjectPic_TallGrass, 2, 2, 0), @@ -210,7 +178,7 @@ static const union AnimCmd *const sAnimTable_SurfBlob[] = const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_MAY, .oam = &gObjectEventBaseOam_32x32, .anims = sAnimTable_SurfBlob, .images = sPicTable_SurfBlob, @@ -267,7 +235,7 @@ static const union AnimCmd *const sAnimTable_Arrow[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_MAY, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Arrow, .images = sPicTable_Arrow, @@ -431,6 +399,36 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = { .callback = UpdateFootprintsTireTracksFieldEffect, }; +static const struct SpriteFrameImage sPicTable_BugTracks[] = { + overworld_frame(gFieldEffectObjectPic_BugTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_BugTracks, 2, 2, 1), +}; + +static const struct SpriteFrameImage sPicTable_SpotTracks[] = { + overworld_frame(gFieldEffectObjectPic_SpotTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_SpotTracks, 2, 2, 1), +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_BugTracks = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_DeepSandFootprints, + .images = sPicTable_BugTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_SpotTracks = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_DeepSandFootprints, + .images = sPicTable_SpotTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, +}; + static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = { overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 1), @@ -438,6 +436,14 @@ static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = { overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 3), }; + +static const struct SpriteFrameImage sPicTable_SlitherTracks[] = { + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 0), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 1), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 2), + overworld_frame(gFieldEffectObjectPic_SlitherTracks, 2, 2, 3), +}; + static const union AnimCmd sBikeTireTracksAnim_South[] = { ANIMCMD_FRAME(2, 1), @@ -509,6 +515,17 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = { .callback = UpdateFootprintsTireTracksFieldEffect, }; + +const struct SpriteTemplate gFieldEffectObjectTemplate_SlitherTracks = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .oam = &gObjectEventBaseOam_16x16, + .anims = sAnimTable_BikeTireTracks, + .images = sPicTable_SlitherTracks, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateFootprintsTireTracksFieldEffect, +}; + static const struct SpriteFrameImage sPicTable_JumpBigSplash[] = { overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 0), overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 1), @@ -931,7 +948,7 @@ static const union AnimCmd *const sAnimTable_Sparkle[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = FLDEFF_PAL_TAG_NPC_2, .oam = &gObjectEventBaseOam_16x16, .anims = sAnimTable_Sparkle, .images = sPicTable_Sparkle, @@ -975,7 +992,7 @@ static const union AnimCmd *const sAnimTable_TreeDisguise[] = const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_NPC_3, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_TreeDisguise, .images = sPicTable_TreeDisguise, @@ -1019,7 +1036,7 @@ static const union AnimCmd *const sAnimTable_MountainDisguise[] = const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_NPC_2, .oam = &gObjectEventBaseOam_16x32, .anims = sAnimTable_MountainDisguise, .images = sPicTable_MountainDisguise, @@ -1064,7 +1081,7 @@ static const union AnimCmd *const sAnimTable_Bird[] = const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_MAY, .oam = &gObjectEventBaseOam_32x32, .anims = sAnimTable_Bird, .images = sPicTable_Bird, diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index 2e1b6b3b31..5736cc2acf 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -66,6 +66,9 @@ u8 MovementAction_WalkInPlaceSlowLeft_Step0(struct ObjectEvent *, struct Sprite u8 MovementAction_WalkInPlaceSlowRight_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlaceNormalDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlace_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_EnterPokeball_Step2(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlaceNormalUp_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlaceNormalLeft_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlaceNormalRight_Step0(struct ObjectEvent *, struct Sprite *); @@ -77,6 +80,8 @@ u8 MovementAction_WalkInPlaceFasterDown_Step0(struct ObjectEvent *, struct Sprit u8 MovementAction_WalkInPlaceFasterUp_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlaceFasterLeft_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_WalkInPlaceFasterRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_EnterPokeball_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_RideWaterCurrentDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_RideWaterCurrentDown_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_RideWaterCurrentUp_Step0(struct ObjectEvent *, struct Sprite *); @@ -303,6 +308,8 @@ u8 (*const gMovementActionFuncs_WalkInPlaceFasterDown[])(struct ObjectEvent *, s u8 (*const gMovementActionFuncs_WalkInPlaceFasterUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkInPlaceFasterLeft[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_WalkInPlaceFasterRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_ExitPokeball[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_EnterPokeball[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RideWaterCurrentDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RideWaterCurrentUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_RideWaterCurrentLeft[])(struct ObjectEvent *, struct Sprite *); @@ -580,6 +587,8 @@ 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_EXIT_POKEBALL] = gMovementActionFuncs_ExitPokeball, + [MOVEMENT_ACTION_ENTER_POKEBALL] = gMovementActionFuncs_EnterPokeball, }; u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = { @@ -873,6 +882,18 @@ u8 (*const gMovementActionFuncs_WalkInPlaceFasterDown[])(struct ObjectEvent *, s MovementAction_PauseSpriteAnim, }; +u8 (*const gMovementActionFuncs_ExitPokeball[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_ExitPokeball_Step0, + MovementAction_ExitPokeball_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_EnterPokeball[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_EnterPokeball_Step0, + MovementAction_EnterPokeball_Step1, + MovementAction_EnterPokeball_Step2, +}; + u8 (*const gMovementActionFuncs_WalkInPlaceFasterUp[])(struct ObjectEvent *, struct Sprite *) = { MovementAction_WalkInPlaceFasterUp_Step0, MovementAction_WalkInPlace_Step1, diff --git a/src/data/object_events/movement_type_func_tables.h b/src/data/object_events/movement_type_func_tables.h index f5189d838f..c30f7daaf7 100755 --- a/src/data/object_events/movement_type_func_tables.h +++ b/src/data/object_events/movement_type_func_tables.h @@ -401,6 +401,26 @@ bool8 (*const gCopyPlayerMovementFuncs[])(struct ObjectEvent *, struct Sprite *, [COPY_MOVE_EMPTY_2] = CopyablePlayerMovement_None, }; +u8 (*const gMovementTypeFuncs_FollowPlayer[])(struct ObjectEvent *, struct Sprite *) = { + MovementType_FollowPlayer_Shadow, + MovementType_FollowPlayer_Active, + MovementType_FollowPlayer_Moving, +}; + +bool8 (*const gFollowPlayerMovementFuncs[])(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)) = { + [COPY_MOVE_NONE] = FollowablePlayerMovement_Idle, + [COPY_MOVE_FACE] = FollowablePlayerMovement_Idle, + [COPY_MOVE_WALK] = FollowablePlayerMovement_Step, + [COPY_MOVE_WALK_FAST] = FollowablePlayerMovement_GoSpeed1, + [COPY_MOVE_WALK_FASTER] = FollowablePlayerMovement_GoSpeed2, + [COPY_MOVE_SLIDE] = FollowablePlayerMovement_Slide, + [COPY_MOVE_JUMP_IN_PLACE] = fph_IM_DIFFERENT, + [COPY_MOVE_JUMP] = FollowablePlayerMovement_GoSpeed4, + [COPY_MOVE_JUMP2] = FollowablePlayerMovement_Step, + [COPY_MOVE_EMPTY_1] = FollowablePlayerMovement_Idle, + [COPY_MOVE_EMPTY_2] = FollowablePlayerMovement_Idle, +}; + u8 (*const gMovementTypeFuncs_CopyPlayerInGrass[])(struct ObjectEvent *, struct Sprite *) = { MovementType_CopyPlayer_Step0, MovementType_CopyPlayerInGrass_Step1, diff --git a/src/data/object_events/object_event_anims.h b/src/data/object_events/object_event_anims.h index f96e52de53..8bb579e01b 100755 --- a/src/data/object_events/object_event_anims.h +++ b/src/data/object_events/object_event_anims.h @@ -187,18 +187,36 @@ static const union AnimCmd sAnim_FaceNorth[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_FaceNorth2F[] = +{ + ANIMCMD_FRAME(2, 16), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_FaceWest[] = { ANIMCMD_FRAME(2, 16), ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_FaceWest2F[] = +{ + ANIMCMD_FRAME(4, 16), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_FaceEast[] = { ANIMCMD_FRAME(2, 16, .hFlip = TRUE), ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_FaceEast2F[] = +{ + ANIMCMD_FRAME(4, 16, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoSouth[] = { ANIMCMD_FRAME(3, 8), @@ -208,6 +226,15 @@ static const union AnimCmd sAnim_GoSouth[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_GoSouth2F[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoNorth[] = { ANIMCMD_FRAME(5, 8), @@ -217,6 +244,15 @@ static const union AnimCmd sAnim_GoNorth[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_GoNorth2F[] = +{ + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(2, 6), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoWest[] = { ANIMCMD_FRAME(7, 8), @@ -226,6 +262,15 @@ static const union AnimCmd sAnim_GoWest[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_GoWest2F[] = +{ + ANIMCMD_FRAME(4, 6), + ANIMCMD_FRAME(5, 6), + ANIMCMD_FRAME(5, 6), + ANIMCMD_FRAME(4, 6), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoEast[] = { ANIMCMD_FRAME(7, 8, .hFlip = TRUE), @@ -235,6 +280,15 @@ static const union AnimCmd sAnim_GoEast[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_GoEast2F[] = +{ + ANIMCMD_FRAME(4, 6, .hFlip = TRUE), + ANIMCMD_FRAME(5, 6, .hFlip = TRUE), + ANIMCMD_FRAME(5, 6, .hFlip = TRUE), + ANIMCMD_FRAME(4, 6, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFastSouth[] = { ANIMCMD_FRAME(3, 4), @@ -244,6 +298,15 @@ static const union AnimCmd sAnim_GoFastSouth[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_GoFastSouth2F[] = +{ + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(1, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFastNorth[] = { ANIMCMD_FRAME(5, 4), @@ -253,6 +316,15 @@ static const union AnimCmd sAnim_GoFastNorth[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_GoFastNorth2F[] = +{ + ANIMCMD_FRAME(2, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(2, 4), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFastWest[] = { ANIMCMD_FRAME(7, 4), @@ -262,6 +334,15 @@ static const union AnimCmd sAnim_GoFastWest[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_GoFastWest2F[] = +{ + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFastEast[] = { ANIMCMD_FRAME(7, 4, .hFlip = TRUE), @@ -271,6 +352,15 @@ static const union AnimCmd sAnim_GoFastEast[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_GoFastEast2F[] = +{ + ANIMCMD_FRAME(4, 4, .hFlip = TRUE), + ANIMCMD_FRAME(5, 4, .hFlip = TRUE), + ANIMCMD_FRAME(5, 4, .hFlip = TRUE), + ANIMCMD_FRAME(4, 4, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFasterSouth[] = { ANIMCMD_FRAME(3, 2), @@ -280,6 +370,70 @@ static const union AnimCmd sAnim_GoFasterSouth[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_ExitPokeballSouth[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(0, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_ExitPokeballNorth[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(2, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_ExitPokeballWest[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(4, 8), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_ExitPokeballEast[] = +{ + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(4, 8, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_EnterSouth[] = +{ + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 3), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFasterNorth[] = { ANIMCMD_FRAME(5, 2), @@ -289,6 +443,18 @@ static const union AnimCmd sAnim_GoFasterNorth[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_EnterNorth[] = +{ + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 3), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFasterWest[] = { ANIMCMD_FRAME(7, 2), @@ -298,6 +464,18 @@ static const union AnimCmd sAnim_GoFasterWest[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_EnterWest[] = +{ + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 3), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFasterEast[] = { ANIMCMD_FRAME(7, 2, .hFlip = TRUE), @@ -307,6 +485,18 @@ static const union AnimCmd sAnim_GoFasterEast[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_EnterEast[] = +{ + ANIMCMD_FRAME(4, 8, .hFlip = TRUE), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(0, 3), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFastestSouth[] = { ANIMCMD_FRAME(3, 1), @@ -316,6 +506,54 @@ static const union AnimCmd sAnim_GoFastestSouth[] = ANIMCMD_JUMP(0), }; +static const union AnimCmd sAnim_ExitPokeballFastSouth[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(0, 1), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_ExitPokeballFastNorth[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(2, 2), + ANIMCMD_FRAME(2, 1), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_ExitPokeballFastWest[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(4, 2), + ANIMCMD_FRAME(4, 1), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sAnim_ExitPokeballFastEast[] = +{ + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(3, 1), + ANIMCMD_FRAME(4, 1), + ANIMCMD_FRAME(4, 2, .hFlip = TRUE), + ANIMCMD_FRAME(4, 1, .hFlip = TRUE), + ANIMCMD_JUMP(0), +}; + static const union AnimCmd sAnim_GoFastestNorth[] = { ANIMCMD_FRAME(5, 1), @@ -845,6 +1083,34 @@ static const union AnimCmd *const sAnimTable_Standard[] = { [ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast, }; +static const union AnimCmd *const sAnimTable_Following[] = { + sAnim_FaceSouth, + sAnim_FaceNorth2F, + sAnim_FaceWest2F, + sAnim_FaceEast2F, + sAnim_GoSouth2F, + sAnim_GoNorth2F, + sAnim_GoWest2F, + sAnim_GoEast2F, + sAnim_GoFastSouth2F, + sAnim_GoFastNorth2F, + sAnim_GoFastWest2F, + sAnim_GoFastEast2F, + sAnim_EnterSouth, + sAnim_EnterNorth, + sAnim_EnterWest, + sAnim_EnterEast, + sAnim_ExitPokeballSouth, + sAnim_ExitPokeballNorth, + sAnim_ExitPokeballWest, + sAnim_ExitPokeballEast, + // ANIM_STD_COUNT = + sAnim_ExitPokeballFastSouth, + sAnim_ExitPokeballFastNorth, + sAnim_ExitPokeballFastWest, + sAnim_ExitPokeballFastEast, +}; + static const union AnimCmd *const sAnimTable_HoOh[] = { [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth, [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth, @@ -1153,6 +1419,10 @@ static const struct StepAnimTable sStepAnimTables[] = { .anims = sAnimTable_Standard, .animPos = {1, 3, 0, 2}, }, + { + .anims = sAnimTable_Following, + .animPos = {1, 3, 0, 2}, + }, { .anims = sAnimTable_BrendanMayNormal, .animPos = {1, 3, 0, 2}, diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 2f2cf689be..59b8550fde 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -163,19 +163,9 @@ const u32 gObjectEventPic_GameboyKid[] = INCBIN_U32("graphics/object_events/pics const u32 gObjectEventPic_ContestJudge[] = INCBIN_U32("graphics/object_events/pics/people/contest_judge.4bpp"); const u32 gObjectEventPic_Archie[] = INCBIN_U32("graphics/object_events/pics/people/team_aqua/archie.4bpp"); const u32 gObjectEventPic_Maxie[] = INCBIN_U32("graphics/object_events/pics/people/team_magma/maxie.4bpp"); -const u32 gObjectEventPic_Kyogre[] = INCBIN_U32("graphics/object_events/pics/pokemon/kyogre.4bpp"); -const u32 gObjectEventPic_Groudon[] = INCBIN_U32("graphics/object_events/pics/pokemon/groudon.4bpp"); const u32 gObjectEventPic_Regi[] = INCBIN_U32("graphics/object_events/pics/pokemon/regi.4bpp"); -const u32 gObjectEventPic_Skitty[] = INCBIN_U32("graphics/object_events/pics/pokemon/skitty.4bpp"); -const u32 gObjectEventPic_Kecleon[] = INCBIN_U32("graphics/object_events/pics/pokemon/kecleon.4bpp"); -const u32 gObjectEventPic_Rayquaza[] = INCBIN_U32("graphics/object_events/pics/pokemon/rayquaza.4bpp"); const u32 gObjectEventPic_RayquazaStill[] = INCBIN_U32("graphics/object_events/pics/pokemon/rayquaza_still.4bpp"); -const u32 gObjectEventPic_Zigzagoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/zigzagoon.4bpp"); -const u32 gObjectEventPic_Pikachu[] = INCBIN_U32("graphics/object_events/pics/pokemon/pikachu.4bpp"); -const u32 gObjectEventPic_Azumarill[] = INCBIN_U32("graphics/object_events/pics/pokemon/azumarill.4bpp"); -const u32 gObjectEventPic_Wingull[] = INCBIN_U32("graphics/object_events/pics/pokemon/wingull.4bpp"); const u32 gObjectEventPic_TuberMSwimming[] = INCBIN_U32("graphics/object_events/pics/people/tuber_m_swimming.4bpp"); -const u32 gObjectEventPic_Azurill[] = INCBIN_U32("graphics/object_events/pics/pokemon/azurill.4bpp"); const u32 gObjectEventPic_Mom[] = INCBIN_U32("graphics/object_events/pics/people/mom.4bpp"); const u16 gObjectEventPal_Kyogre[] = INCBIN_U16("graphics/object_events/palettes/kyogre.gbapal"); const u16 gObjectEventPal_KyogreReflection[] = INCBIN_U16("graphics/object_events/palettes/kyogre_reflection.gbapal"); @@ -241,12 +231,10 @@ const u32 gObjectEventPic_SubmarineShadow[] = INCBIN_U32("graphics/object_events const u16 gObjectEventPal_SubmarineShadow[] = INCBIN_U16("graphics/object_events/palettes/submarine_shadow.gbapal"); const u32 gObjectEventPic_Truck[] = INCBIN_U32("graphics/object_events/pics/misc/truck.4bpp"); const u16 gObjectEventPal_Truck[] = INCBIN_U16("graphics/object_events/palettes/truck.gbapal"); -const u32 gObjectEventPic_Vigoroth[] = INCBIN_U32("graphics/object_events/pics/pokemon/vigoroth.4bpp"); const u16 gObjectEventPal_Vigoroth[] = INCBIN_U16("graphics/object_events/palettes/vigoroth.gbapal"); const u32 gObjectEventPic_BirchsBag[] = INCBIN_U32("graphics/object_events/pics/misc/birchs_bag.4bpp"); const u32 gObjectEventPic_EnemyZigzagoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/enemy_zigzagoon.4bpp"); const u16 gObjectEventPal_EnemyZigzagoon[] = INCBIN_U16("graphics/object_events/palettes/enemy_zigzagoon.gbapal"); -const u32 gObjectEventPic_Poochyena[] = INCBIN_U32("graphics/object_events/pics/pokemon/poochyena.4bpp"); const u16 gObjectEventPal_Poochyena[] = INCBIN_U16("graphics/object_events/palettes/poochyena.gbapal"); const u32 gObjectEventPic_CableCar[] = INCBIN_U32("graphics/object_events/pics/misc/cable_car.4bpp"); const u16 gObjectEventPal_CableCar[] = INCBIN_U16("graphics/object_events/palettes/cable_car.gbapal"); @@ -329,6 +317,9 @@ const u32 gFieldEffectObjectPic_ShortGrass[] = INCBIN_U32("graphics/field_effect const u32 gFieldEffectObjectPic_SandFootprints[] = INCBIN_U32("graphics/field_effects/pics/sand_footprints.4bpp"); const u32 gFieldEffectObjectPic_DeepSandFootprints[] = INCBIN_U32("graphics/field_effects/pics/deep_sand_footprints.4bpp"); const u32 gFieldEffectObjectPic_BikeTireTracks[] = INCBIN_U32("graphics/field_effects/pics/bike_tire_tracks.4bpp"); +const u32 gFieldEffectObjectPic_SlitherTracks[] = INCBIN_U32("graphics/field_effects/pics/slither_tracks.4bpp"); +const u32 gFieldEffectObjectPic_SpotTracks[] = INCBIN_U32("graphics/field_effects/pics/spot_tracks.4bpp"); +const u32 gFieldEffectObjectPic_BugTracks[] = INCBIN_U32("graphics/field_effects/pics/bug_tracks.4bpp"); const u32 gFieldEffectObjectPic_UnusedSand[] = INCBIN_U32("graphics/field_effects/pics/unused_sand.4bpp"); const u32 gFieldEffectObjectPic_SandPile[] = INCBIN_U32("graphics/field_effects/pics/sand_pile.4bpp"); const u32 gFieldEffectObjectPic_JumpBigSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_big_splash.4bpp"); @@ -349,21 +340,16 @@ const u32 gFieldEffectObjectPic_Bird[] = INCBIN_U32("graphics/field_effects/pics const u32 gObjectEventPic_Juan[] = INCBIN_U32("graphics/object_events/pics/people/gym_leaders/juan.4bpp"); const u32 gObjectEventPic_Scott[] = INCBIN_U32("graphics/object_events/pics/people/scott.4bpp"); const u32 gObjectEventPic_Statue[] = INCBIN_U32("graphics/object_events/pics/misc/statue.4bpp"); -const u32 gObjectEventPic_Kirlia[] = INCBIN_U32("graphics/object_events/pics/pokemon/kirlia.4bpp"); -const u32 gObjectEventPic_Dusclops[] = INCBIN_U32("graphics/object_events/pics/pokemon/dusclops.4bpp"); const u32 gObjectEventPic_MysteryEventDeliveryman[] = INCBIN_U32("graphics/object_events/pics/people/mystery_event_deliveryman.4bpp"); const u32 gObjectEventPic_UnionRoomAttendant[] = INCBIN_U32("graphics/object_events/pics/people/union_room_attendant.4bpp"); const u32 gObjectEventPic_MovingBox[] = INCBIN_U32("graphics/object_events/pics/misc/moving_box.4bpp"); const u16 gObjectEventPal_MovingBox[] = INCBIN_U16("graphics/object_events/palettes/moving_box.gbapal"); -const u32 gObjectEventPic_Sudowoodo[] = INCBIN_U32("graphics/object_events/pics/pokemon/sudowoodo.4bpp"); -const u32 gObjectEventPic_Mew[] = INCBIN_U32("graphics/object_events/pics/pokemon/mew.4bpp"); const u16 gObjectEventPal_RedLeaf[] = INCBIN_U16("graphics/object_events/palettes/red_leaf.gbapal"); const u32 gObjectEventPic_Red[] = INCBIN_U32("graphics/object_events/pics/people/red.4bpp"); const u32 gObjectEventPic_Leaf[] = INCBIN_U32("graphics/object_events/pics/people/leaf.4bpp"); const u16 gObjectEventPal_BirthIslandStone[] = INCBIN_U16("graphics/object_events/palettes/birth_island_stone.gbapal"); const u32 gObjectEventPic_BirthIslandStone[] = INCBIN_U32("graphics/object_events/pics/misc/birth_island_stone.4bpp"); const u16 gObjectEventPal_Deoxys[] = INCBIN_U16("graphics/object_events/palettes/deoxys.gbapal"); -const u32 gObjectEventPic_Deoxys[] = INCBIN_U32("graphics/object_events/pics/pokemon/deoxys.4bpp"); const u32 gObjectEventPic_Anabel[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/anabel.4bpp"); const u32 gObjectEventPic_Tucker[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/tucker.4bpp"); const u32 gObjectEventPic_Spenser[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/spenser.4bpp"); @@ -371,7 +357,446 @@ const u32 gObjectEventPic_Greta[] = INCBIN_U32("graphics/object_events/pics/peop const u32 gObjectEventPic_Noland[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/noland.4bpp"); const u32 gObjectEventPic_Lucy[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/lucy.4bpp"); const u32 gObjectEventPic_Brandon[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/brandon.4bpp"); +const u32 gObjectEventPic_AnimatedBall[] = INCBIN_U32("graphics/object_events/pics/misc/animated_ball.4bpp"); +const u32 gObjectEventPic_Bulbasaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/bulbasaur.4bpp"); +const u32 gObjectEventPic_Ivysaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/ivysaur.4bpp"); +const u32 gObjectEventPic_Venusaur[] = INCBIN_U32("graphics/object_events/pics/pokemon/venusaur.4bpp"); +const u32 gObjectEventPic_Charmander[] = INCBIN_U32("graphics/object_events/pics/pokemon/charmander.4bpp"); +const u32 gObjectEventPic_Charmeleon[] = INCBIN_U32("graphics/object_events/pics/pokemon/charmeleon.4bpp"); +const u32 gObjectEventPic_Charizard[] = INCBIN_U32("graphics/object_events/pics/pokemon/charizard.4bpp"); +const u32 gObjectEventPic_Squirtle[] = INCBIN_U32("graphics/object_events/pics/pokemon/squirtle.4bpp"); +const u32 gObjectEventPic_Wartortle[] = INCBIN_U32("graphics/object_events/pics/pokemon/wartortle.4bpp"); +const u32 gObjectEventPic_Blastoise[] = INCBIN_U32("graphics/object_events/pics/pokemon/blastoise.4bpp"); +const u32 gObjectEventPic_Caterpie[] = INCBIN_U32("graphics/object_events/pics/pokemon/caterpie.4bpp"); +const u32 gObjectEventPic_Metapod[] = INCBIN_U32("graphics/object_events/pics/pokemon/metapod.4bpp"); +const u32 gObjectEventPic_Butterfree[] = INCBIN_U32("graphics/object_events/pics/pokemon/butterfree.4bpp"); +const u32 gObjectEventPic_Weedle[] = INCBIN_U32("graphics/object_events/pics/pokemon/weedle.4bpp"); +const u32 gObjectEventPic_Kakuna[] = INCBIN_U32("graphics/object_events/pics/pokemon/kakuna.4bpp"); +const u32 gObjectEventPic_Beedrill[] = INCBIN_U32("graphics/object_events/pics/pokemon/beedrill.4bpp"); +const u32 gObjectEventPic_Pidgey[] = INCBIN_U32("graphics/object_events/pics/pokemon/pidgey.4bpp"); +const u32 gObjectEventPic_Pidgeotto[] = INCBIN_U32("graphics/object_events/pics/pokemon/pidgeotto.4bpp"); +const u32 gObjectEventPic_Pidgeot[] = INCBIN_U32("graphics/object_events/pics/pokemon/pidgeot.4bpp"); +const u32 gObjectEventPic_Rattata[] = INCBIN_U32("graphics/object_events/pics/pokemon/rattata.4bpp"); +const u32 gObjectEventPic_Raticate[] = INCBIN_U32("graphics/object_events/pics/pokemon/raticate.4bpp"); +const u32 gObjectEventPic_Spearow[] = INCBIN_U32("graphics/object_events/pics/pokemon/spearow.4bpp"); +const u32 gObjectEventPic_Fearow[] = INCBIN_U32("graphics/object_events/pics/pokemon/fearow.4bpp"); +const u32 gObjectEventPic_Ekans[] = INCBIN_U32("graphics/object_events/pics/pokemon/ekans.4bpp"); +const u32 gObjectEventPic_Arbok[] = INCBIN_U32("graphics/object_events/pics/pokemon/arbok.4bpp"); +const u32 gObjectEventPic_Pikachu[] = INCBIN_U32("graphics/object_events/pics/pokemon/pikachu.4bpp"); +const u32 gObjectEventPic_Raichu[] = INCBIN_U32("graphics/object_events/pics/pokemon/raichu.4bpp"); +const u32 gObjectEventPic_Sandshrew[] = INCBIN_U32("graphics/object_events/pics/pokemon/sandshrew.4bpp"); +const u32 gObjectEventPic_Sandslash[] = INCBIN_U32("graphics/object_events/pics/pokemon/sandslash.4bpp"); +const u32 gObjectEventPic_Nidoran_f[] = INCBIN_U32("graphics/object_events/pics/pokemon/nidoran_f.4bpp"); +const u32 gObjectEventPic_Nidorina[] = INCBIN_U32("graphics/object_events/pics/pokemon/nidorina.4bpp"); +const u32 gObjectEventPic_Nidoqueen[] = INCBIN_U32("graphics/object_events/pics/pokemon/nidoqueen.4bpp"); +const u32 gObjectEventPic_Nidoran_m[] = INCBIN_U32("graphics/object_events/pics/pokemon/nidoran_m.4bpp"); +const u32 gObjectEventPic_Nidorino[] = INCBIN_U32("graphics/object_events/pics/pokemon/nidorino.4bpp"); +const u32 gObjectEventPic_Nidoking[] = INCBIN_U32("graphics/object_events/pics/pokemon/nidoking.4bpp"); +const u32 gObjectEventPic_Clefairy[] = INCBIN_U32("graphics/object_events/pics/pokemon/clefairy.4bpp"); +const u32 gObjectEventPic_Clefable[] = INCBIN_U32("graphics/object_events/pics/pokemon/clefable.4bpp"); +const u32 gObjectEventPic_Vulpix[] = INCBIN_U32("graphics/object_events/pics/pokemon/vulpix.4bpp"); +const u32 gObjectEventPic_Ninetales[] = INCBIN_U32("graphics/object_events/pics/pokemon/ninetales.4bpp"); +const u32 gObjectEventPic_Jigglypuff[] = INCBIN_U32("graphics/object_events/pics/pokemon/jigglypuff.4bpp"); +const u32 gObjectEventPic_Wigglytuff[] = INCBIN_U32("graphics/object_events/pics/pokemon/wigglytuff.4bpp"); +const u32 gObjectEventPic_Zubat[] = INCBIN_U32("graphics/object_events/pics/pokemon/zubat.4bpp"); +const u32 gObjectEventPic_Golbat[] = INCBIN_U32("graphics/object_events/pics/pokemon/golbat.4bpp"); +const u32 gObjectEventPic_Oddish[] = INCBIN_U32("graphics/object_events/pics/pokemon/oddish.4bpp"); +const u32 gObjectEventPic_Gloom[] = INCBIN_U32("graphics/object_events/pics/pokemon/gloom.4bpp"); +const u32 gObjectEventPic_Vileplume[] = INCBIN_U32("graphics/object_events/pics/pokemon/vileplume.4bpp"); +const u32 gObjectEventPic_Paras[] = INCBIN_U32("graphics/object_events/pics/pokemon/paras.4bpp"); +const u32 gObjectEventPic_Parasect[] = INCBIN_U32("graphics/object_events/pics/pokemon/parasect.4bpp"); +const u32 gObjectEventPic_Venonat[] = INCBIN_U32("graphics/object_events/pics/pokemon/venonat.4bpp"); +const u32 gObjectEventPic_Venomoth[] = INCBIN_U32("graphics/object_events/pics/pokemon/venomoth.4bpp"); +const u32 gObjectEventPic_Diglett[] = INCBIN_U32("graphics/object_events/pics/pokemon/diglett.4bpp"); +const u32 gObjectEventPic_Dugtrio[] = INCBIN_U32("graphics/object_events/pics/pokemon/dugtrio.4bpp"); +const u32 gObjectEventPic_Meowth[] = INCBIN_U32("graphics/object_events/pics/pokemon/meowth.4bpp"); +const u32 gObjectEventPic_Persian[] = INCBIN_U32("graphics/object_events/pics/pokemon/persian.4bpp"); +const u32 gObjectEventPic_Psyduck[] = INCBIN_U32("graphics/object_events/pics/pokemon/psyduck.4bpp"); +const u32 gObjectEventPic_Golduck[] = INCBIN_U32("graphics/object_events/pics/pokemon/golduck.4bpp"); +const u32 gObjectEventPic_Mankey[] = INCBIN_U32("graphics/object_events/pics/pokemon/mankey.4bpp"); +const u32 gObjectEventPic_Primeape[] = INCBIN_U32("graphics/object_events/pics/pokemon/primeape.4bpp"); +const u32 gObjectEventPic_Growlithe[] = INCBIN_U32("graphics/object_events/pics/pokemon/growlithe.4bpp"); +const u32 gObjectEventPic_Arcanine[] = INCBIN_U32("graphics/object_events/pics/pokemon/arcanine.4bpp"); +const u32 gObjectEventPic_Poliwag[] = INCBIN_U32("graphics/object_events/pics/pokemon/poliwag.4bpp"); +const u32 gObjectEventPic_Poliwhirl[] = INCBIN_U32("graphics/object_events/pics/pokemon/poliwhirl.4bpp"); +const u32 gObjectEventPic_Poliwrath[] = INCBIN_U32("graphics/object_events/pics/pokemon/poliwrath.4bpp"); +const u32 gObjectEventPic_Abra[] = INCBIN_U32("graphics/object_events/pics/pokemon/abra.4bpp"); +const u32 gObjectEventPic_Kadabra[] = INCBIN_U32("graphics/object_events/pics/pokemon/kadabra.4bpp"); +const u32 gObjectEventPic_Alakazam[] = INCBIN_U32("graphics/object_events/pics/pokemon/alakazam.4bpp"); +const u32 gObjectEventPic_Machop[] = INCBIN_U32("graphics/object_events/pics/pokemon/machop.4bpp"); +const u32 gObjectEventPic_Machoke[] = INCBIN_U32("graphics/object_events/pics/pokemon/machoke.4bpp"); +const u32 gObjectEventPic_Machamp[] = INCBIN_U32("graphics/object_events/pics/pokemon/machamp.4bpp"); +const u32 gObjectEventPic_Bellsprout[] = INCBIN_U32("graphics/object_events/pics/pokemon/bellsprout.4bpp"); +const u32 gObjectEventPic_Weepinbell[] = INCBIN_U32("graphics/object_events/pics/pokemon/weepinbell.4bpp"); +const u32 gObjectEventPic_Victreebel[] = INCBIN_U32("graphics/object_events/pics/pokemon/victreebel.4bpp"); +const u32 gObjectEventPic_Tentacool[] = INCBIN_U32("graphics/object_events/pics/pokemon/tentacool.4bpp"); +const u32 gObjectEventPic_Tentacruel[] = INCBIN_U32("graphics/object_events/pics/pokemon/tentacruel.4bpp"); +const u32 gObjectEventPic_Geodude[] = INCBIN_U32("graphics/object_events/pics/pokemon/geodude.4bpp"); +const u32 gObjectEventPic_Graveler[] = INCBIN_U32("graphics/object_events/pics/pokemon/graveler.4bpp"); +const u32 gObjectEventPic_Golem[] = INCBIN_U32("graphics/object_events/pics/pokemon/golem.4bpp"); +const u32 gObjectEventPic_Ponyta[] = INCBIN_U32("graphics/object_events/pics/pokemon/ponyta.4bpp"); +const u32 gObjectEventPic_Rapidash[] = INCBIN_U32("graphics/object_events/pics/pokemon/rapidash.4bpp"); +const u32 gObjectEventPic_Slowpoke[] = INCBIN_U32("graphics/object_events/pics/pokemon/slowpoke.4bpp"); +const u32 gObjectEventPic_Slowbro[] = INCBIN_U32("graphics/object_events/pics/pokemon/slowbro.4bpp"); +const u32 gObjectEventPic_Magnemite[] = INCBIN_U32("graphics/object_events/pics/pokemon/magnemite.4bpp"); +const u32 gObjectEventPic_Magneton[] = INCBIN_U32("graphics/object_events/pics/pokemon/magneton.4bpp"); +const u32 gObjectEventPic_Farfetchd[] = INCBIN_U32("graphics/object_events/pics/pokemon/farfetchd.4bpp"); +const u32 gObjectEventPic_Doduo[] = INCBIN_U32("graphics/object_events/pics/pokemon/doduo.4bpp"); +const u32 gObjectEventPic_Dodrio[] = INCBIN_U32("graphics/object_events/pics/pokemon/dodrio.4bpp"); +const u32 gObjectEventPic_Seel[] = INCBIN_U32("graphics/object_events/pics/pokemon/seel.4bpp"); +const u32 gObjectEventPic_Dewgong[] = INCBIN_U32("graphics/object_events/pics/pokemon/dewgong.4bpp"); +const u32 gObjectEventPic_Grimer[] = INCBIN_U32("graphics/object_events/pics/pokemon/grimer.4bpp"); +const u32 gObjectEventPic_Muk[] = INCBIN_U32("graphics/object_events/pics/pokemon/muk.4bpp"); +const u32 gObjectEventPic_Shellder[] = INCBIN_U32("graphics/object_events/pics/pokemon/shellder.4bpp"); +const u32 gObjectEventPic_Cloyster[] = INCBIN_U32("graphics/object_events/pics/pokemon/cloyster.4bpp"); +const u32 gObjectEventPic_Gastly[] = INCBIN_U32("graphics/object_events/pics/pokemon/gastly.4bpp"); +const u32 gObjectEventPic_Haunter[] = INCBIN_U32("graphics/object_events/pics/pokemon/haunter.4bpp"); +const u32 gObjectEventPic_Gengar[] = INCBIN_U32("graphics/object_events/pics/pokemon/gengar.4bpp"); +const u32 gObjectEventPic_Onix[] = INCBIN_U32("graphics/object_events/pics/pokemon/onix.4bpp"); +const u32 gObjectEventPic_Drowzee[] = INCBIN_U32("graphics/object_events/pics/pokemon/drowzee.4bpp"); +const u32 gObjectEventPic_Hypno[] = INCBIN_U32("graphics/object_events/pics/pokemon/hypno.4bpp"); +const u32 gObjectEventPic_Krabby[] = INCBIN_U32("graphics/object_events/pics/pokemon/krabby.4bpp"); +const u32 gObjectEventPic_Kingler[] = INCBIN_U32("graphics/object_events/pics/pokemon/kingler.4bpp"); +const u32 gObjectEventPic_Voltorb[] = INCBIN_U32("graphics/object_events/pics/pokemon/voltorb.4bpp"); +const u32 gObjectEventPic_Electrode[] = INCBIN_U32("graphics/object_events/pics/pokemon/electrode.4bpp"); +const u32 gObjectEventPic_Exeggcute[] = INCBIN_U32("graphics/object_events/pics/pokemon/exeggcute.4bpp"); +const u32 gObjectEventPic_Exeggutor[] = INCBIN_U32("graphics/object_events/pics/pokemon/exeggutor.4bpp"); +const u32 gObjectEventPic_Cubone[] = INCBIN_U32("graphics/object_events/pics/pokemon/cubone.4bpp"); +const u32 gObjectEventPic_Marowak[] = INCBIN_U32("graphics/object_events/pics/pokemon/marowak.4bpp"); +const u32 gObjectEventPic_Hitmonlee[] = INCBIN_U32("graphics/object_events/pics/pokemon/hitmonlee.4bpp"); +const u32 gObjectEventPic_Hitmonchan[] = INCBIN_U32("graphics/object_events/pics/pokemon/hitmonchan.4bpp"); +const u32 gObjectEventPic_Lickitung[] = INCBIN_U32("graphics/object_events/pics/pokemon/lickitung.4bpp"); +const u32 gObjectEventPic_Koffing[] = INCBIN_U32("graphics/object_events/pics/pokemon/koffing.4bpp"); +const u32 gObjectEventPic_Weezing[] = INCBIN_U32("graphics/object_events/pics/pokemon/weezing.4bpp"); +const u32 gObjectEventPic_Rhyhorn[] = INCBIN_U32("graphics/object_events/pics/pokemon/rhyhorn.4bpp"); +const u32 gObjectEventPic_Rhydon[] = INCBIN_U32("graphics/object_events/pics/pokemon/rhydon.4bpp"); +const u32 gObjectEventPic_Chansey[] = INCBIN_U32("graphics/object_events/pics/pokemon/chansey.4bpp"); +const u32 gObjectEventPic_Tangela[] = INCBIN_U32("graphics/object_events/pics/pokemon/tangela.4bpp"); +const u32 gObjectEventPic_Kangaskhan[] = INCBIN_U32("graphics/object_events/pics/pokemon/kangaskhan.4bpp"); +const u32 gObjectEventPic_Horsea[] = INCBIN_U32("graphics/object_events/pics/pokemon/horsea.4bpp"); +const u32 gObjectEventPic_Seadra[] = INCBIN_U32("graphics/object_events/pics/pokemon/seadra.4bpp"); +const u32 gObjectEventPic_Goldeen[] = INCBIN_U32("graphics/object_events/pics/pokemon/goldeen.4bpp"); +const u32 gObjectEventPic_Seaking[] = INCBIN_U32("graphics/object_events/pics/pokemon/seaking.4bpp"); +const u32 gObjectEventPic_Staryu[] = INCBIN_U32("graphics/object_events/pics/pokemon/staryu.4bpp"); +const u32 gObjectEventPic_Starmie[] = INCBIN_U32("graphics/object_events/pics/pokemon/starmie.4bpp"); +const u32 gObjectEventPic_Mr_Mime[] = INCBIN_U32("graphics/object_events/pics/pokemon/mr_mime.4bpp"); +const u32 gObjectEventPic_Scyther[] = INCBIN_U32("graphics/object_events/pics/pokemon/scyther.4bpp"); +const u32 gObjectEventPic_Jynx[] = INCBIN_U32("graphics/object_events/pics/pokemon/jynx.4bpp"); +const u32 gObjectEventPic_Electabuzz[] = INCBIN_U32("graphics/object_events/pics/pokemon/electabuzz.4bpp"); +const u32 gObjectEventPic_Magmar[] = INCBIN_U32("graphics/object_events/pics/pokemon/magmar.4bpp"); +const u32 gObjectEventPic_Pinsir[] = INCBIN_U32("graphics/object_events/pics/pokemon/pinsir.4bpp"); +const u32 gObjectEventPic_Tauros[] = INCBIN_U32("graphics/object_events/pics/pokemon/tauros.4bpp"); +const u32 gObjectEventPic_Magikarp[] = INCBIN_U32("graphics/object_events/pics/pokemon/magikarp.4bpp"); +const u32 gObjectEventPic_Gyarados[] = INCBIN_U32("graphics/object_events/pics/pokemon/gyarados.4bpp"); +const u32 gObjectEventPic_Lapras[] = INCBIN_U32("graphics/object_events/pics/pokemon/lapras.4bpp"); +const u32 gObjectEventPic_Ditto[] = INCBIN_U32("graphics/object_events/pics/pokemon/ditto.4bpp"); +const u32 gObjectEventPic_Eevee[] = INCBIN_U32("graphics/object_events/pics/pokemon/eevee.4bpp"); +const u32 gObjectEventPic_Vaporeon[] = INCBIN_U32("graphics/object_events/pics/pokemon/vaporeon.4bpp"); +const u32 gObjectEventPic_Jolteon[] = INCBIN_U32("graphics/object_events/pics/pokemon/jolteon.4bpp"); +const u32 gObjectEventPic_Flareon[] = INCBIN_U32("graphics/object_events/pics/pokemon/flareon.4bpp"); +const u32 gObjectEventPic_Porygon[] = INCBIN_U32("graphics/object_events/pics/pokemon/porygon.4bpp"); +const u32 gObjectEventPic_Omanyte[] = INCBIN_U32("graphics/object_events/pics/pokemon/omanyte.4bpp"); +const u32 gObjectEventPic_Omastar[] = INCBIN_U32("graphics/object_events/pics/pokemon/omastar.4bpp"); +const u32 gObjectEventPic_Kabuto[] = INCBIN_U32("graphics/object_events/pics/pokemon/kabuto.4bpp"); +const u32 gObjectEventPic_Kabutops[] = INCBIN_U32("graphics/object_events/pics/pokemon/kabutops.4bpp"); +const u32 gObjectEventPic_Aerodactyl[] = INCBIN_U32("graphics/object_events/pics/pokemon/aerodactyl.4bpp"); +const u32 gObjectEventPic_Snorlax[] = INCBIN_U32("graphics/object_events/pics/pokemon/snorlax.4bpp"); +const u32 gObjectEventPic_Articuno[] = INCBIN_U32("graphics/object_events/pics/pokemon/articuno.4bpp"); +const u32 gObjectEventPic_Zapdos[] = INCBIN_U32("graphics/object_events/pics/pokemon/zapdos.4bpp"); +const u32 gObjectEventPic_Moltres[] = INCBIN_U32("graphics/object_events/pics/pokemon/moltres.4bpp"); +const u32 gObjectEventPic_Dratini[] = INCBIN_U32("graphics/object_events/pics/pokemon/dratini.4bpp"); +const u32 gObjectEventPic_Dragonair[] = INCBIN_U32("graphics/object_events/pics/pokemon/dragonair.4bpp"); +const u32 gObjectEventPic_Dragonite[] = INCBIN_U32("graphics/object_events/pics/pokemon/dragonite.4bpp"); +const u32 gObjectEventPic_Mewtwo[] = INCBIN_U32("graphics/object_events/pics/pokemon/mewtwo.4bpp"); +const u32 gObjectEventPic_Mew[] = INCBIN_U32("graphics/object_events/pics/pokemon/mew.4bpp"); +const u32 gObjectEventPic_Chikorita[] = INCBIN_U32("graphics/object_events/pics/pokemon/chikorita.4bpp"); +const u32 gObjectEventPic_Bayleef[] = INCBIN_U32("graphics/object_events/pics/pokemon/bayleef.4bpp"); +const u32 gObjectEventPic_Meganium[] = INCBIN_U32("graphics/object_events/pics/pokemon/meganium.4bpp"); +const u32 gObjectEventPic_Cyndaquil[] = INCBIN_U32("graphics/object_events/pics/pokemon/cyndaquil.4bpp"); +const u32 gObjectEventPic_Quilava[] = INCBIN_U32("graphics/object_events/pics/pokemon/quilava.4bpp"); +const u32 gObjectEventPic_Typhlosion[] = INCBIN_U32("graphics/object_events/pics/pokemon/typhlosion.4bpp"); +const u32 gObjectEventPic_Totodile[] = INCBIN_U32("graphics/object_events/pics/pokemon/totodile.4bpp"); +const u32 gObjectEventPic_Croconaw[] = INCBIN_U32("graphics/object_events/pics/pokemon/croconaw.4bpp"); +const u32 gObjectEventPic_Feraligatr[] = INCBIN_U32("graphics/object_events/pics/pokemon/feraligatr.4bpp"); +const u32 gObjectEventPic_Sentret[] = INCBIN_U32("graphics/object_events/pics/pokemon/sentret.4bpp"); +const u32 gObjectEventPic_Furret[] = INCBIN_U32("graphics/object_events/pics/pokemon/furret.4bpp"); +const u32 gObjectEventPic_Hoothoot[] = INCBIN_U32("graphics/object_events/pics/pokemon/hoothoot.4bpp"); +const u32 gObjectEventPic_Noctowl[] = INCBIN_U32("graphics/object_events/pics/pokemon/noctowl.4bpp"); +const u32 gObjectEventPic_Ledyba[] = INCBIN_U32("graphics/object_events/pics/pokemon/ledyba.4bpp"); +const u32 gObjectEventPic_Ledian[] = INCBIN_U32("graphics/object_events/pics/pokemon/ledian.4bpp"); +const u32 gObjectEventPic_Spinarak[] = INCBIN_U32("graphics/object_events/pics/pokemon/spinarak.4bpp"); +const u32 gObjectEventPic_Ariados[] = INCBIN_U32("graphics/object_events/pics/pokemon/ariados.4bpp"); +const u32 gObjectEventPic_Crobat[] = INCBIN_U32("graphics/object_events/pics/pokemon/crobat.4bpp"); +const u32 gObjectEventPic_Chinchou[] = INCBIN_U32("graphics/object_events/pics/pokemon/chinchou.4bpp"); +const u32 gObjectEventPic_Lanturn[] = INCBIN_U32("graphics/object_events/pics/pokemon/lanturn.4bpp"); +const u32 gObjectEventPic_Pichu[] = INCBIN_U32("graphics/object_events/pics/pokemon/pichu.4bpp"); +const u32 gObjectEventPic_Cleffa[] = INCBIN_U32("graphics/object_events/pics/pokemon/cleffa.4bpp"); +const u32 gObjectEventPic_Igglybuff[] = INCBIN_U32("graphics/object_events/pics/pokemon/igglybuff.4bpp"); +const u32 gObjectEventPic_Togepi[] = INCBIN_U32("graphics/object_events/pics/pokemon/togepi.4bpp"); +const u32 gObjectEventPic_Togetic[] = INCBIN_U32("graphics/object_events/pics/pokemon/togetic.4bpp"); +const u32 gObjectEventPic_Natu[] = INCBIN_U32("graphics/object_events/pics/pokemon/natu.4bpp"); +const u32 gObjectEventPic_Xatu[] = INCBIN_U32("graphics/object_events/pics/pokemon/xatu.4bpp"); +const u32 gObjectEventPic_Mareep[] = INCBIN_U32("graphics/object_events/pics/pokemon/mareep.4bpp"); +const u32 gObjectEventPic_Flaaffy[] = INCBIN_U32("graphics/object_events/pics/pokemon/flaaffy.4bpp"); +const u32 gObjectEventPic_Ampharos[] = INCBIN_U32("graphics/object_events/pics/pokemon/ampharos.4bpp"); +const u32 gObjectEventPic_Bellossom[] = INCBIN_U32("graphics/object_events/pics/pokemon/bellossom.4bpp"); +const u32 gObjectEventPic_Marill[] = INCBIN_U32("graphics/object_events/pics/pokemon/marill.4bpp"); +const u32 gObjectEventPic_Azumarill[] = INCBIN_U32("graphics/object_events/pics/pokemon/azumarill.4bpp"); +const u32 gObjectEventPic_Sudowoodo[] = INCBIN_U32("graphics/object_events/pics/pokemon/sudowoodo.4bpp"); +const u32 gObjectEventPic_Politoed[] = INCBIN_U32("graphics/object_events/pics/pokemon/politoed.4bpp"); +const u32 gObjectEventPic_Hoppip[] = INCBIN_U32("graphics/object_events/pics/pokemon/hoppip.4bpp"); +const u32 gObjectEventPic_Skiploom[] = INCBIN_U32("graphics/object_events/pics/pokemon/skiploom.4bpp"); +const u32 gObjectEventPic_Jumpluff[] = INCBIN_U32("graphics/object_events/pics/pokemon/jumpluff.4bpp"); +const u32 gObjectEventPic_Aipom[] = INCBIN_U32("graphics/object_events/pics/pokemon/aipom.4bpp"); +const u32 gObjectEventPic_Sunkern[] = INCBIN_U32("graphics/object_events/pics/pokemon/sunkern.4bpp"); +const u32 gObjectEventPic_Sunflora[] = INCBIN_U32("graphics/object_events/pics/pokemon/sunflora.4bpp"); +const u32 gObjectEventPic_Yanma[] = INCBIN_U32("graphics/object_events/pics/pokemon/yanma.4bpp"); +const u32 gObjectEventPic_Wooper[] = INCBIN_U32("graphics/object_events/pics/pokemon/wooper.4bpp"); +const u32 gObjectEventPic_Quagsire[] = INCBIN_U32("graphics/object_events/pics/pokemon/quagsire.4bpp"); +const u32 gObjectEventPic_Espeon[] = INCBIN_U32("graphics/object_events/pics/pokemon/espeon.4bpp"); +const u32 gObjectEventPic_Umbreon[] = INCBIN_U32("graphics/object_events/pics/pokemon/umbreon.4bpp"); +const u32 gObjectEventPic_Murkrow[] = INCBIN_U32("graphics/object_events/pics/pokemon/murkrow.4bpp"); +const u32 gObjectEventPic_Slowking[] = INCBIN_U32("graphics/object_events/pics/pokemon/slowking.4bpp"); +const u32 gObjectEventPic_Misdreavus[] = INCBIN_U32("graphics/object_events/pics/pokemon/misdreavus.4bpp"); +const u32 gObjectEventPic_Unown_A[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_a.4bpp"); +const u32 gObjectEventPic_Unown_B[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_b.4bpp"); +const u32 gObjectEventPic_Unown_C[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_c.4bpp"); +const u32 gObjectEventPic_Unown_D[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_d.4bpp"); +const u32 gObjectEventPic_Unown_E[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_e.4bpp"); +const u32 gObjectEventPic_Unown_F[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_f.4bpp"); +const u32 gObjectEventPic_Unown_G[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_g.4bpp"); +const u32 gObjectEventPic_Unown_H[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_h.4bpp"); +const u32 gObjectEventPic_Unown_I[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_i.4bpp"); +const u32 gObjectEventPic_Unown_J[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_j.4bpp"); +const u32 gObjectEventPic_Unown_K[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_k.4bpp"); +const u32 gObjectEventPic_Unown_L[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_l.4bpp"); +const u32 gObjectEventPic_Unown_M[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_m.4bpp"); +const u32 gObjectEventPic_Unown_N[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_n.4bpp"); +const u32 gObjectEventPic_Unown_O[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_o.4bpp"); +const u32 gObjectEventPic_Unown_P[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_p.4bpp"); +const u32 gObjectEventPic_Unown_Q[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_q.4bpp"); +const u32 gObjectEventPic_Unown_R[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_r.4bpp"); +const u32 gObjectEventPic_Unown_S[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_s.4bpp"); +const u32 gObjectEventPic_Unown_T[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_t.4bpp"); +const u32 gObjectEventPic_Unown_U[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_u.4bpp"); +const u32 gObjectEventPic_Unown_V[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_v.4bpp"); +const u32 gObjectEventPic_Unown_W[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_w.4bpp"); +const u32 gObjectEventPic_Unown_X[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_x.4bpp"); +const u32 gObjectEventPic_Unown_Y[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_y.4bpp"); +const u32 gObjectEventPic_Unown_Z[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_z.4bpp"); +const u32 gObjectEventPic_Unown_Exclamation[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_exclamation.4bpp"); +const u32 gObjectEventPic_Unown_Question[] = INCBIN_U32("graphics/object_events/pics/pokemon/unown_question.4bpp"); +const u32 gObjectEventPic_Wobbuffet[] = INCBIN_U32("graphics/object_events/pics/pokemon/wobbuffet.4bpp"); +const u32 gObjectEventPic_Girafarig[] = INCBIN_U32("graphics/object_events/pics/pokemon/girafarig.4bpp"); +const u32 gObjectEventPic_Pineco[] = INCBIN_U32("graphics/object_events/pics/pokemon/pineco.4bpp"); +const u32 gObjectEventPic_Forretress[] = INCBIN_U32("graphics/object_events/pics/pokemon/forretress.4bpp"); +const u32 gObjectEventPic_Dunsparce[] = INCBIN_U32("graphics/object_events/pics/pokemon/dunsparce.4bpp"); +const u32 gObjectEventPic_Gligar[] = INCBIN_U32("graphics/object_events/pics/pokemon/gligar.4bpp"); +const u32 gObjectEventPic_Steelix[] = INCBIN_U32("graphics/object_events/pics/pokemon/steelix.4bpp"); +const u32 gObjectEventPic_Snubbull[] = INCBIN_U32("graphics/object_events/pics/pokemon/snubbull.4bpp"); +const u32 gObjectEventPic_Granbull[] = INCBIN_U32("graphics/object_events/pics/pokemon/granbull.4bpp"); +const u32 gObjectEventPic_Qwilfish[] = INCBIN_U32("graphics/object_events/pics/pokemon/qwilfish.4bpp"); +const u32 gObjectEventPic_Scizor[] = INCBIN_U32("graphics/object_events/pics/pokemon/scizor.4bpp"); +const u32 gObjectEventPic_Shuckle[] = INCBIN_U32("graphics/object_events/pics/pokemon/shuckle.4bpp"); +const u32 gObjectEventPic_Heracross[] = INCBIN_U32("graphics/object_events/pics/pokemon/heracross.4bpp"); +const u32 gObjectEventPic_Sneasel[] = INCBIN_U32("graphics/object_events/pics/pokemon/sneasel.4bpp"); +const u32 gObjectEventPic_Teddiursa[] = INCBIN_U32("graphics/object_events/pics/pokemon/teddiursa.4bpp"); +const u32 gObjectEventPic_Ursaring[] = INCBIN_U32("graphics/object_events/pics/pokemon/ursaring.4bpp"); +const u32 gObjectEventPic_Slugma[] = INCBIN_U32("graphics/object_events/pics/pokemon/slugma.4bpp"); +const u32 gObjectEventPic_Magcargo[] = INCBIN_U32("graphics/object_events/pics/pokemon/magcargo.4bpp"); +const u32 gObjectEventPic_Swinub[] = INCBIN_U32("graphics/object_events/pics/pokemon/swinub.4bpp"); +const u32 gObjectEventPic_Piloswine[] = INCBIN_U32("graphics/object_events/pics/pokemon/piloswine.4bpp"); +const u32 gObjectEventPic_Corsola[] = INCBIN_U32("graphics/object_events/pics/pokemon/corsola.4bpp"); +const u32 gObjectEventPic_Remoraid[] = INCBIN_U32("graphics/object_events/pics/pokemon/remoraid.4bpp"); +const u32 gObjectEventPic_Octillery[] = INCBIN_U32("graphics/object_events/pics/pokemon/octillery.4bpp"); +const u32 gObjectEventPic_Delibird[] = INCBIN_U32("graphics/object_events/pics/pokemon/delibird.4bpp"); +const u32 gObjectEventPic_Mantine[] = INCBIN_U32("graphics/object_events/pics/pokemon/mantine.4bpp"); +const u32 gObjectEventPic_Skarmory[] = INCBIN_U32("graphics/object_events/pics/pokemon/skarmory.4bpp"); +const u32 gObjectEventPic_Houndour[] = INCBIN_U32("graphics/object_events/pics/pokemon/houndour.4bpp"); +const u32 gObjectEventPic_Houndoom[] = INCBIN_U32("graphics/object_events/pics/pokemon/houndoom.4bpp"); +const u32 gObjectEventPic_Kingdra[] = INCBIN_U32("graphics/object_events/pics/pokemon/kingdra.4bpp"); +const u32 gObjectEventPic_Phanpy[] = INCBIN_U32("graphics/object_events/pics/pokemon/phanpy.4bpp"); +const u32 gObjectEventPic_Donphan[] = INCBIN_U32("graphics/object_events/pics/pokemon/donphan.4bpp"); +const u32 gObjectEventPic_Porygon2[] = INCBIN_U32("graphics/object_events/pics/pokemon/porygon2.4bpp"); +const u32 gObjectEventPic_Stantler[] = INCBIN_U32("graphics/object_events/pics/pokemon/stantler.4bpp"); +const u32 gObjectEventPic_Smeargle[] = INCBIN_U32("graphics/object_events/pics/pokemon/smeargle.4bpp"); +const u32 gObjectEventPic_Tyrogue[] = INCBIN_U32("graphics/object_events/pics/pokemon/tyrogue.4bpp"); +const u32 gObjectEventPic_Hitmontop[] = INCBIN_U32("graphics/object_events/pics/pokemon/hitmontop.4bpp"); +const u32 gObjectEventPic_Smoochum[] = INCBIN_U32("graphics/object_events/pics/pokemon/smoochum.4bpp"); +const u32 gObjectEventPic_Elekid[] = INCBIN_U32("graphics/object_events/pics/pokemon/elekid.4bpp"); +const u32 gObjectEventPic_Magby[] = INCBIN_U32("graphics/object_events/pics/pokemon/magby.4bpp"); +const u32 gObjectEventPic_Miltank[] = INCBIN_U32("graphics/object_events/pics/pokemon/miltank.4bpp"); +const u32 gObjectEventPic_Blissey[] = INCBIN_U32("graphics/object_events/pics/pokemon/blissey.4bpp"); +const u32 gObjectEventPic_Raikou[] = INCBIN_U32("graphics/object_events/pics/pokemon/raikou.4bpp"); +const u32 gObjectEventPic_Entei[] = INCBIN_U32("graphics/object_events/pics/pokemon/entei.4bpp"); +const u32 gObjectEventPic_Suicune[] = INCBIN_U32("graphics/object_events/pics/pokemon/suicune.4bpp"); +const u32 gObjectEventPic_Larvitar[] = INCBIN_U32("graphics/object_events/pics/pokemon/larvitar.4bpp"); +const u32 gObjectEventPic_Pupitar[] = INCBIN_U32("graphics/object_events/pics/pokemon/pupitar.4bpp"); +const u32 gObjectEventPic_Tyranitar[] = INCBIN_U32("graphics/object_events/pics/pokemon/tyranitar.4bpp"); const u32 gObjectEventPic_Lugia[] = INCBIN_U32("graphics/object_events/pics/pokemon/lugia.4bpp"); -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 u32 gObjectEventPic_Ho_oh[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh.4bpp"); +const u32 gObjectEventPic_Celebi[] = INCBIN_U32("graphics/object_events/pics/pokemon/celebi.4bpp"); +const u32 gObjectEventPic_Treecko[] = INCBIN_U32("graphics/object_events/pics/pokemon/treecko.4bpp"); +const u32 gObjectEventPic_Grovyle[] = INCBIN_U32("graphics/object_events/pics/pokemon/grovyle.4bpp"); +const u32 gObjectEventPic_Sceptile[] = INCBIN_U32("graphics/object_events/pics/pokemon/sceptile.4bpp"); +const u32 gObjectEventPic_Torchic[] = INCBIN_U32("graphics/object_events/pics/pokemon/torchic.4bpp"); +const u32 gObjectEventPic_Combusken[] = INCBIN_U32("graphics/object_events/pics/pokemon/combusken.4bpp"); +const u32 gObjectEventPic_Blaziken[] = INCBIN_U32("graphics/object_events/pics/pokemon/blaziken.4bpp"); +const u32 gObjectEventPic_Mudkip[] = INCBIN_U32("graphics/object_events/pics/pokemon/mudkip.4bpp"); +const u32 gObjectEventPic_Marshtomp[] = INCBIN_U32("graphics/object_events/pics/pokemon/marshtomp.4bpp"); +const u32 gObjectEventPic_Swampert[] = INCBIN_U32("graphics/object_events/pics/pokemon/swampert.4bpp"); +const u32 gObjectEventPic_Poochyena[] = INCBIN_U32("graphics/object_events/pics/pokemon/poochyena.4bpp"); +const u32 gObjectEventPic_Mightyena[] = INCBIN_U32("graphics/object_events/pics/pokemon/mightyena.4bpp"); +const u32 gObjectEventPic_Zigzagoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/zigzagoon.4bpp"); +const u32 gObjectEventPic_Linoone[] = INCBIN_U32("graphics/object_events/pics/pokemon/linoone.4bpp"); +const u32 gObjectEventPic_Wurmple[] = INCBIN_U32("graphics/object_events/pics/pokemon/wurmple.4bpp"); +const u32 gObjectEventPic_Silcoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/silcoon.4bpp"); +const u32 gObjectEventPic_Beautifly[] = INCBIN_U32("graphics/object_events/pics/pokemon/beautifly.4bpp"); +const u32 gObjectEventPic_Cascoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/cascoon.4bpp"); +const u32 gObjectEventPic_Dustox[] = INCBIN_U32("graphics/object_events/pics/pokemon/dustox.4bpp"); +const u32 gObjectEventPic_Lotad[] = INCBIN_U32("graphics/object_events/pics/pokemon/lotad.4bpp"); +const u32 gObjectEventPic_Lombre[] = INCBIN_U32("graphics/object_events/pics/pokemon/lombre.4bpp"); +const u32 gObjectEventPic_Ludicolo[] = INCBIN_U32("graphics/object_events/pics/pokemon/ludicolo.4bpp"); +const u32 gObjectEventPic_Seedot[] = INCBIN_U32("graphics/object_events/pics/pokemon/seedot.4bpp"); +const u32 gObjectEventPic_Nuzleaf[] = INCBIN_U32("graphics/object_events/pics/pokemon/nuzleaf.4bpp"); +const u32 gObjectEventPic_Shiftry[] = INCBIN_U32("graphics/object_events/pics/pokemon/shiftry.4bpp"); +const u32 gObjectEventPic_Taillow[] = INCBIN_U32("graphics/object_events/pics/pokemon/taillow.4bpp"); +const u32 gObjectEventPic_Swellow[] = INCBIN_U32("graphics/object_events/pics/pokemon/swellow.4bpp"); +const u32 gObjectEventPic_Wingull[] = INCBIN_U32("graphics/object_events/pics/pokemon/wingull.4bpp"); +const u32 gObjectEventPic_Pelipper[] = INCBIN_U32("graphics/object_events/pics/pokemon/pelipper.4bpp"); +const u32 gObjectEventPic_Ralts[] = INCBIN_U32("graphics/object_events/pics/pokemon/ralts.4bpp"); +const u32 gObjectEventPic_Kirlia[] = INCBIN_U32("graphics/object_events/pics/pokemon/kirlia.4bpp"); +const u32 gObjectEventPic_Gardevoir[] = INCBIN_U32("graphics/object_events/pics/pokemon/gardevoir.4bpp"); +const u32 gObjectEventPic_Surskit[] = INCBIN_U32("graphics/object_events/pics/pokemon/surskit.4bpp"); +const u32 gObjectEventPic_Masquerain[] = INCBIN_U32("graphics/object_events/pics/pokemon/masquerain.4bpp"); +const u32 gObjectEventPic_Shroomish[] = INCBIN_U32("graphics/object_events/pics/pokemon/shroomish.4bpp"); +const u32 gObjectEventPic_Breloom[] = INCBIN_U32("graphics/object_events/pics/pokemon/breloom.4bpp"); +const u32 gObjectEventPic_Slakoth[] = INCBIN_U32("graphics/object_events/pics/pokemon/slakoth.4bpp"); +const u32 gObjectEventPic_Vigoroth[] = INCBIN_U32("graphics/object_events/pics/pokemon/vigoroth.4bpp"); +const u32 gObjectEventPic_Slaking[] = INCBIN_U32("graphics/object_events/pics/pokemon/slaking.4bpp"); +const u32 gObjectEventPic_Nincada[] = INCBIN_U32("graphics/object_events/pics/pokemon/nincada.4bpp"); +const u32 gObjectEventPic_Ninjask[] = INCBIN_U32("graphics/object_events/pics/pokemon/ninjask.4bpp"); +const u32 gObjectEventPic_Shedinja[] = INCBIN_U32("graphics/object_events/pics/pokemon/shedinja.4bpp"); +const u32 gObjectEventPic_Whismur[] = INCBIN_U32("graphics/object_events/pics/pokemon/whismur.4bpp"); +const u32 gObjectEventPic_Loudred[] = INCBIN_U32("graphics/object_events/pics/pokemon/loudred.4bpp"); +const u32 gObjectEventPic_Exploud[] = INCBIN_U32("graphics/object_events/pics/pokemon/exploud.4bpp"); +const u32 gObjectEventPic_Makuhita[] = INCBIN_U32("graphics/object_events/pics/pokemon/makuhita.4bpp"); +const u32 gObjectEventPic_Hariyama[] = INCBIN_U32("graphics/object_events/pics/pokemon/hariyama.4bpp"); +const u32 gObjectEventPic_Azurill[] = INCBIN_U32("graphics/object_events/pics/pokemon/azurill.4bpp"); +const u32 gObjectEventPic_Nosepass[] = INCBIN_U32("graphics/object_events/pics/pokemon/nosepass.4bpp"); +const u32 gObjectEventPic_Skitty[] = INCBIN_U32("graphics/object_events/pics/pokemon/skitty.4bpp"); +const u32 gObjectEventPic_Delcatty[] = INCBIN_U32("graphics/object_events/pics/pokemon/delcatty.4bpp"); +const u32 gObjectEventPic_Sableye[] = INCBIN_U32("graphics/object_events/pics/pokemon/sableye.4bpp"); +const u32 gObjectEventPic_Mawile[] = INCBIN_U32("graphics/object_events/pics/pokemon/mawile.4bpp"); +const u32 gObjectEventPic_Aron[] = INCBIN_U32("graphics/object_events/pics/pokemon/aron.4bpp"); +const u32 gObjectEventPic_Lairon[] = INCBIN_U32("graphics/object_events/pics/pokemon/lairon.4bpp"); +const u32 gObjectEventPic_Aggron[] = INCBIN_U32("graphics/object_events/pics/pokemon/aggron.4bpp"); +const u32 gObjectEventPic_Meditite[] = INCBIN_U32("graphics/object_events/pics/pokemon/meditite.4bpp"); +const u32 gObjectEventPic_Medicham[] = INCBIN_U32("graphics/object_events/pics/pokemon/medicham.4bpp"); +const u32 gObjectEventPic_Electrike[] = INCBIN_U32("graphics/object_events/pics/pokemon/electrike.4bpp"); +const u32 gObjectEventPic_Manectric[] = INCBIN_U32("graphics/object_events/pics/pokemon/manectric.4bpp"); +const u32 gObjectEventPic_Plusle[] = INCBIN_U32("graphics/object_events/pics/pokemon/plusle.4bpp"); +const u32 gObjectEventPic_Minun[] = INCBIN_U32("graphics/object_events/pics/pokemon/minun.4bpp"); +const u32 gObjectEventPic_Volbeat[] = INCBIN_U32("graphics/object_events/pics/pokemon/volbeat.4bpp"); +const u32 gObjectEventPic_Illumise[] = INCBIN_U32("graphics/object_events/pics/pokemon/illumise.4bpp"); +const u32 gObjectEventPic_Roselia[] = INCBIN_U32("graphics/object_events/pics/pokemon/roselia.4bpp"); +const u32 gObjectEventPic_Gulpin[] = INCBIN_U32("graphics/object_events/pics/pokemon/gulpin.4bpp"); +const u32 gObjectEventPic_Swalot[] = INCBIN_U32("graphics/object_events/pics/pokemon/swalot.4bpp"); +const u32 gObjectEventPic_Carvanha[] = INCBIN_U32("graphics/object_events/pics/pokemon/carvanha.4bpp"); +const u32 gObjectEventPic_Sharpedo[] = INCBIN_U32("graphics/object_events/pics/pokemon/sharpedo.4bpp"); +const u32 gObjectEventPic_Wailmer[] = INCBIN_U32("graphics/object_events/pics/pokemon/wailmer.4bpp"); +const u32 gObjectEventPic_Wailord[] = INCBIN_U32("graphics/object_events/pics/pokemon/wailord.4bpp"); +const u32 gObjectEventPic_Numel[] = INCBIN_U32("graphics/object_events/pics/pokemon/numel.4bpp"); +const u32 gObjectEventPic_Camerupt[] = INCBIN_U32("graphics/object_events/pics/pokemon/camerupt.4bpp"); +const u32 gObjectEventPic_Torkoal[] = INCBIN_U32("graphics/object_events/pics/pokemon/torkoal.4bpp"); +const u32 gObjectEventPic_Spoink[] = INCBIN_U32("graphics/object_events/pics/pokemon/spoink.4bpp"); +const u32 gObjectEventPic_Grumpig[] = INCBIN_U32("graphics/object_events/pics/pokemon/grumpig.4bpp"); +const u32 gObjectEventPic_Spinda[] = INCBIN_U32("graphics/object_events/pics/pokemon/spinda.4bpp"); +const u32 gObjectEventPic_Trapinch[] = INCBIN_U32("graphics/object_events/pics/pokemon/trapinch.4bpp"); +const u32 gObjectEventPic_Vibrava[] = INCBIN_U32("graphics/object_events/pics/pokemon/vibrava.4bpp"); +const u32 gObjectEventPic_Flygon[] = INCBIN_U32("graphics/object_events/pics/pokemon/flygon.4bpp"); +const u32 gObjectEventPic_Cacnea[] = INCBIN_U32("graphics/object_events/pics/pokemon/cacnea.4bpp"); +const u32 gObjectEventPic_Cacturne[] = INCBIN_U32("graphics/object_events/pics/pokemon/cacturne.4bpp"); +const u32 gObjectEventPic_Swablu[] = INCBIN_U32("graphics/object_events/pics/pokemon/swablu.4bpp"); +const u32 gObjectEventPic_Altaria[] = INCBIN_U32("graphics/object_events/pics/pokemon/altaria.4bpp"); +const u32 gObjectEventPic_Zangoose[] = INCBIN_U32("graphics/object_events/pics/pokemon/zangoose.4bpp"); +const u32 gObjectEventPic_Seviper[] = INCBIN_U32("graphics/object_events/pics/pokemon/seviper.4bpp"); +const u32 gObjectEventPic_Lunatone[] = INCBIN_U32("graphics/object_events/pics/pokemon/lunatone.4bpp"); +const u32 gObjectEventPic_Solrock[] = INCBIN_U32("graphics/object_events/pics/pokemon/solrock.4bpp"); +const u32 gObjectEventPic_Barboach[] = INCBIN_U32("graphics/object_events/pics/pokemon/barboach.4bpp"); +const u32 gObjectEventPic_Whiscash[] = INCBIN_U32("graphics/object_events/pics/pokemon/whiscash.4bpp"); +const u32 gObjectEventPic_Corphish[] = INCBIN_U32("graphics/object_events/pics/pokemon/corphish.4bpp"); +const u32 gObjectEventPic_Crawdaunt[] = INCBIN_U32("graphics/object_events/pics/pokemon/crawdaunt.4bpp"); +const u32 gObjectEventPic_Baltoy[] = INCBIN_U32("graphics/object_events/pics/pokemon/baltoy.4bpp"); +const u32 gObjectEventPic_Claydol[] = INCBIN_U32("graphics/object_events/pics/pokemon/claydol.4bpp"); +const u32 gObjectEventPic_Lileep[] = INCBIN_U32("graphics/object_events/pics/pokemon/lileep.4bpp"); +const u32 gObjectEventPic_Cradily[] = INCBIN_U32("graphics/object_events/pics/pokemon/cradily.4bpp"); +const u32 gObjectEventPic_Anorith[] = INCBIN_U32("graphics/object_events/pics/pokemon/anorith.4bpp"); +const u32 gObjectEventPic_Armaldo[] = INCBIN_U32("graphics/object_events/pics/pokemon/armaldo.4bpp"); +const u32 gObjectEventPic_Feebas[] = INCBIN_U32("graphics/object_events/pics/pokemon/feebas.4bpp"); +const u32 gObjectEventPic_Milotic[] = INCBIN_U32("graphics/object_events/pics/pokemon/milotic.4bpp"); +const u32 gObjectEventPic_Castform[] = INCBIN_U32("graphics/object_events/pics/pokemon/castform.4bpp"); +const u32 gObjectEventPic_CastformSunny[] = INCBIN_U32("graphics/object_events/pics/pokemon/castform_sunny.4bpp"); +const u32 gObjectEventPic_CastformRainy[] = INCBIN_U32("graphics/object_events/pics/pokemon/castform_rainy.4bpp"); +const u32 gObjectEventPic_CastformSnowy[] = INCBIN_U32("graphics/object_events/pics/pokemon/castform_snowy.4bpp"); +const u32 gObjectEventPic_Kecleon[] = INCBIN_U32("graphics/object_events/pics/pokemon/kecleon.4bpp"); +const u32 gObjectEventPic_Shuppet[] = INCBIN_U32("graphics/object_events/pics/pokemon/shuppet.4bpp"); +const u32 gObjectEventPic_Banette[] = INCBIN_U32("graphics/object_events/pics/pokemon/banette.4bpp"); +const u32 gObjectEventPic_Duskull[] = INCBIN_U32("graphics/object_events/pics/pokemon/duskull.4bpp"); +const u32 gObjectEventPic_Dusclops[] = INCBIN_U32("graphics/object_events/pics/pokemon/dusclops.4bpp"); +const u32 gObjectEventPic_Tropius[] = INCBIN_U32("graphics/object_events/pics/pokemon/tropius.4bpp"); +const u32 gObjectEventPic_Chimecho[] = INCBIN_U32("graphics/object_events/pics/pokemon/chimecho.4bpp"); +const u32 gObjectEventPic_Absol[] = INCBIN_U32("graphics/object_events/pics/pokemon/absol.4bpp"); +const u32 gObjectEventPic_Wynaut[] = INCBIN_U32("graphics/object_events/pics/pokemon/wynaut.4bpp"); +const u32 gObjectEventPic_Snorunt[] = INCBIN_U32("graphics/object_events/pics/pokemon/snorunt.4bpp"); +const u32 gObjectEventPic_Glalie[] = INCBIN_U32("graphics/object_events/pics/pokemon/glalie.4bpp"); +const u32 gObjectEventPic_Spheal[] = INCBIN_U32("graphics/object_events/pics/pokemon/spheal.4bpp"); +const u32 gObjectEventPic_Sealeo[] = INCBIN_U32("graphics/object_events/pics/pokemon/sealeo.4bpp"); +const u32 gObjectEventPic_Walrein[] = INCBIN_U32("graphics/object_events/pics/pokemon/walrein.4bpp"); +const u32 gObjectEventPic_Clamperl[] = INCBIN_U32("graphics/object_events/pics/pokemon/clamperl.4bpp"); +const u32 gObjectEventPic_Huntail[] = INCBIN_U32("graphics/object_events/pics/pokemon/huntail.4bpp"); +const u32 gObjectEventPic_Gorebyss[] = INCBIN_U32("graphics/object_events/pics/pokemon/gorebyss.4bpp"); +const u32 gObjectEventPic_Relicanth[] = INCBIN_U32("graphics/object_events/pics/pokemon/relicanth.4bpp"); +const u32 gObjectEventPic_Luvdisc[] = INCBIN_U32("graphics/object_events/pics/pokemon/luvdisc.4bpp"); +const u32 gObjectEventPic_Bagon[] = INCBIN_U32("graphics/object_events/pics/pokemon/bagon.4bpp"); +const u32 gObjectEventPic_Shelgon[] = INCBIN_U32("graphics/object_events/pics/pokemon/shelgon.4bpp"); +const u32 gObjectEventPic_Salamence[] = INCBIN_U32("graphics/object_events/pics/pokemon/salamence.4bpp"); +const u32 gObjectEventPic_Beldum[] = INCBIN_U32("graphics/object_events/pics/pokemon/beldum.4bpp"); +const u32 gObjectEventPic_Metang[] = INCBIN_U32("graphics/object_events/pics/pokemon/metang.4bpp"); +const u32 gObjectEventPic_Metagross[] = INCBIN_U32("graphics/object_events/pics/pokemon/metagross.4bpp"); +const u32 gObjectEventPic_Regirock[] = INCBIN_U32("graphics/object_events/pics/pokemon/regirock.4bpp"); +const u32 gObjectEventPic_Regice[] = INCBIN_U32("graphics/object_events/pics/pokemon/regice.4bpp"); +const u32 gObjectEventPic_Registeel[] = INCBIN_U32("graphics/object_events/pics/pokemon/registeel.4bpp"); +const u32 gObjectEventPic_Latias[] = INCBIN_U32("graphics/object_events/pics/pokemon/latias.4bpp"); +const u32 gObjectEventPic_Latios[] = INCBIN_U32("graphics/object_events/pics/pokemon/latios.4bpp"); +const u32 gObjectEventPic_Kyogre[] = INCBIN_U32("graphics/object_events/pics/pokemon/kyogre.4bpp"); +const u32 gObjectEventPic_Groudon[] = INCBIN_U32("graphics/object_events/pics/pokemon/groudon.4bpp"); +const u32 gObjectEventPic_Rayquaza[] = INCBIN_U32("graphics/object_events/pics/pokemon/rayquaza.4bpp"); +const u32 gObjectEventPic_Jirachi[] = INCBIN_U32("graphics/object_events/pics/pokemon/jirachi.4bpp"); +const u32 gObjectEventPic_Deoxys[] = INCBIN_U32("graphics/object_events/pics/pokemon/deoxys.4bpp"); + +const u32 gObjectEventPic_DeoxysOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/deoxys_old.4bpp"); +const u32 gObjectEventPic_MewOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/mew_old.4bpp"); +const u32 gObjectEventPic_DusclopsOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/dusclops_old.4bpp"); +const u32 gObjectEventPic_KirliaOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/kirlia_old.4bpp"); +const u32 gObjectEventPic_AzurillOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/azurill_old.4bpp"); +const u32 gObjectEventPic_KecleonOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/kecleon_old.4bpp"); +const u32 gObjectEventPic_WingullOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/wingull_old.4bpp"); +const u32 gObjectEventPic_AzumarillOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/azumarill_old.4bpp"); +const u32 gObjectEventPic_PikachuOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/pikachu_old.4bpp"); +const u32 gObjectEventPic_ZigzagoonOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/zigzagoon_old.4bpp"); +const u32 gObjectEventPic_SkittyOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/skitty_old.4bpp"); +const u32 gObjectEventPic_PoochyenaOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/poochyena_old.4bpp"); +const u32 gObjectEventPic_LugiaOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/lugia_old.4bpp"); +const u32 gObjectEventPic_HoOhOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh_old.4bpp"); +const u32 gObjectEventPic_GroudonOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/groudon_old.4bpp"); +const u32 gObjectEventPic_KyogreOld[] = INCBIN_U32("graphics/object_events/pics/pokemon/kyogre_old.4bpp"); + +const u32 gObjectEventPic_VigorothMover[] = INCBIN_U32("graphics/object_events/pics/pokemon/vigoroth_mover.4bpp"); +const u32 gObjectEventPic_SudowoodoTree[] = INCBIN_U32("graphics/object_events/pics/pokemon/sudowoodo_tree.4bpp"); +const u32 gObjectEventPic_RayquazaCutscene[] = INCBIN_U32("graphics/object_events/pics/pokemon/rayquaza_cutscene.4bpp"); + const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal"); +const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal"); + +const u16 gObjectEventPaletteEmotes[] = INCBIN_U16("graphics/misc/emotes.gbapal"); diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h index 146bb87306..bd7d77e7d0 100755 --- a/src/data/object_events/object_event_graphics_info.h +++ b/src/data/object_events/object_event_graphics_info.h @@ -1894,7 +1894,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poochyena = { .oam = &gObjectEventBaseOam_32x32, .subspriteTables = sOamTables_32x32, .anims = sAnimTable_Standard, - .images = sPicTable_Poochyena, + .images = sPicTable_PoochyenaOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -3927,7 +3927,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = { .oam = &gObjectEventBaseOam_16x16, .subspriteTables = sOamTables_16x16, .anims = sAnimTable_Standard, - .images = sPicTable_Skitty, + .images = sPicTable_SkittyOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -3946,7 +3946,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon = { .oam = &gObjectEventBaseOam_16x16, .subspriteTables = sOamTables_16x16, .anims = sAnimTable_Standard, - .images = sPicTable_Kecleon, + .images = sPicTable_KecleonOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4003,7 +4003,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza = { .oam = &gObjectEventBaseOam_64x64, .subspriteTables = sOamTables_64x64, .anims = sAnimTable_Rayquaza, - .images = sPicTable_Rayquaza, + .images = sPicTable_RayquazaCutscene, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4022,7 +4022,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = { .oam = &gObjectEventBaseOam_16x16, .subspriteTables = sOamTables_16x16, .anims = sAnimTable_Standard, - .images = sPicTable_Zigzagoon, + .images = sPicTable_ZigzagoonOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4041,7 +4041,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = { .oam = &gObjectEventBaseOam_16x16, .subspriteTables = sOamTables_16x16, .anims = sAnimTable_Standard, - .images = sPicTable_Pikachu, + .images = sPicTable_PikachuOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4060,7 +4060,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = { .oam = &gObjectEventBaseOam_16x16, .subspriteTables = sOamTables_16x16, .anims = sAnimTable_Standard, - .images = sPicTable_Azumarill, + .images = sPicTable_AzumarillOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4079,7 +4079,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = { .oam = &gObjectEventBaseOam_16x16, .subspriteTables = sOamTables_16x16, .anims = sAnimTable_Standard, - .images = sPicTable_Wingull, + .images = sPicTable_WingullOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4098,7 +4098,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShado .oam = &gObjectEventBaseOam_16x16, .subspriteTables = sOamTables_16x16, .anims = sAnimTable_Standard, - .images = sPicTable_Kecleon, + .images = sPicTable_KecleonOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4136,7 +4136,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = { .oam = &gObjectEventBaseOam_16x16, .subspriteTables = sOamTables_16x16, .anims = sAnimTable_Standard, - .images = sPicTable_Azurill, + .images = sPicTable_AzurillOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4288,7 +4288,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kirlia = { .oam = &gObjectEventBaseOam_16x32, .subspriteTables = sOamTables_16x32, .anims = sAnimTable_Standard, - .images = sPicTable_Kirlia, + .images = sPicTable_KirliaOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4307,7 +4307,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dusclops = { .oam = &gObjectEventBaseOam_16x32, .subspriteTables = sOamTables_16x32, .anims = sAnimTable_Standard, - .images = sPicTable_Dusclops, + .images = sPicTable_DusclopsOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4383,7 +4383,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sudowoodo = { .oam = &gObjectEventBaseOam_16x32, .subspriteTables = sOamTables_16x32, .anims = sAnimTable_Standard, - .images = sPicTable_Sudowoodo, + .images = sPicTable_SudowoodoTree, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4402,7 +4402,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew = { .oam = &gObjectEventBaseOam_16x32, .subspriteTables = sOamTables_16x32, .anims = sAnimTable_Standard, - .images = sPicTable_Mew, + .images = sPicTable_MewOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4421,7 +4421,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Deoxys = { .oam = &gObjectEventBaseOam_32x32, .subspriteTables = sOamTables_32x32, .anims = sAnimTable_Standard, - .images = sPicTable_Deoxys, + .images = sPicTable_DeoxysOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4630,7 +4630,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = { .oam = &gObjectEventBaseOam_32x32, .subspriteTables = sOamTables_32x32, .anims = sAnimTable_Standard, - .images = sPicTable_Lugia, + .images = sPicTable_LugiaOld, .affineAnims = gDummySpriteAffineAnimTable, }; @@ -4649,6 +4649,44 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = { .oam = &gObjectEventBaseOam_32x32, .subspriteTables = sOamTables_32x32, .anims = sAnimTable_HoOh, - .images = sPicTable_HoOh, + .images = sPicTable_HoOhOld, + .affineAnims = gDummySpriteAffineAnimTable, +}; + +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AnimatedBall = { + .tileTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_NPC_3, + .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, + .size = 256, + .width = 16, + .height = 32, + .paletteSlot = PALSLOT_NPC_1, + .shadowSize = SHADOW_SIZE_M, + .inanimate = TRUE, + .disableReflectionPaletteLoad = FALSE, + .tracks = TRACKS_NONE, + .oam = &gObjectEventBaseOam_16x32, + .subspriteTables = sOamTables_16x32, + .anims = sAnimTable_Following, + .images = sPicTable_AnimatedBall, + .affineAnims = gDummySpriteAffineAnimTable, +}; + +const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Follower = { + .tileTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_DYNAMIC, + .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, + .size = 512, + .width = 32, + .height = 32, + .paletteSlot = PALSLOT_NPC_1, + .shadowSize = SHADOW_SIZE_M, + .inanimate = FALSE, + .disableReflectionPaletteLoad = FALSE, + .tracks = TRACKS_FOOT, + .oam = &gObjectEventBaseOam_32x32, + .subspriteTables = sOamTables_32x32, + .anims = sAnimTable_Following, + .images = sPicTable_Togetic, .affineAnims = gDummySpriteAffineAnimTable, }; diff --git a/src/data/object_events/object_event_graphics_info_followers.h b/src/data/object_events/object_event_graphics_info_followers.h new file mode 100644 index 0000000000..851dfbe889 --- /dev/null +++ b/src/data/object_events/object_event_graphics_info_followers.h @@ -0,0 +1,424 @@ +// Species-indexed pokemon object event table +const struct ObjectEventGraphicsInfo gPokemonObjectGraphics[] = { + [SPECIES_BULBASAUR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Bulbasaur, gDummySpriteAffineAnimTable}, + [SPECIES_IVYSAUR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ivysaur, gDummySpriteAffineAnimTable}, + [SPECIES_VENUSAUR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Venusaur, gDummySpriteAffineAnimTable}, + [SPECIES_CHARMANDER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Charmander, gDummySpriteAffineAnimTable}, + [SPECIES_CHARMELEON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Charmeleon, gDummySpriteAffineAnimTable}, + [SPECIES_CHARIZARD] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Charizard, gDummySpriteAffineAnimTable}, + [SPECIES_SQUIRTLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Squirtle, gDummySpriteAffineAnimTable}, + [SPECIES_WARTORTLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wartortle, gDummySpriteAffineAnimTable}, + [SPECIES_BLASTOISE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Blastoise, gDummySpriteAffineAnimTable}, + [SPECIES_CATERPIE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Caterpie, gDummySpriteAffineAnimTable}, + [SPECIES_METAPOD] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Metapod, gDummySpriteAffineAnimTable}, + [SPECIES_BUTTERFREE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Butterfree, gDummySpriteAffineAnimTable}, + [SPECIES_WEEDLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Weedle, gDummySpriteAffineAnimTable}, + [SPECIES_KAKUNA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kakuna, gDummySpriteAffineAnimTable}, + [SPECIES_BEEDRILL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Beedrill, gDummySpriteAffineAnimTable}, + [SPECIES_PIDGEY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pidgey, gDummySpriteAffineAnimTable}, + [SPECIES_PIDGEOTTO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pidgeotto, gDummySpriteAffineAnimTable}, + [SPECIES_PIDGEOT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pidgeot, gDummySpriteAffineAnimTable}, + [SPECIES_RATTATA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Rattata, gDummySpriteAffineAnimTable}, + [SPECIES_RATICATE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Raticate, gDummySpriteAffineAnimTable}, + [SPECIES_SPEAROW] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Spearow, gDummySpriteAffineAnimTable}, + [SPECIES_FEAROW] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Fearow, gDummySpriteAffineAnimTable}, + [SPECIES_EKANS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ekans, gDummySpriteAffineAnimTable}, + [SPECIES_ARBOK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Arbok, gDummySpriteAffineAnimTable}, + [SPECIES_PIKACHU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pikachu, gDummySpriteAffineAnimTable}, + [SPECIES_RAICHU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Raichu, gDummySpriteAffineAnimTable}, + [SPECIES_SANDSHREW] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sandshrew, gDummySpriteAffineAnimTable}, + [SPECIES_SANDSLASH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sandslash, gDummySpriteAffineAnimTable}, + [SPECIES_NIDORAN_F] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nidoran_f, gDummySpriteAffineAnimTable}, + [SPECIES_NIDORINA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nidorina, gDummySpriteAffineAnimTable}, + [SPECIES_NIDOQUEEN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nidoqueen, gDummySpriteAffineAnimTable}, + [SPECIES_NIDORAN_M] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nidoran_m, gDummySpriteAffineAnimTable}, + [SPECIES_NIDORINO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nidorino, gDummySpriteAffineAnimTable}, + [SPECIES_NIDOKING] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nidoking, gDummySpriteAffineAnimTable}, + [SPECIES_CLEFAIRY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Clefairy, gDummySpriteAffineAnimTable}, + [SPECIES_CLEFABLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Clefable, gDummySpriteAffineAnimTable}, + [SPECIES_VULPIX] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Vulpix, gDummySpriteAffineAnimTable}, + [SPECIES_NINETALES] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ninetales, gDummySpriteAffineAnimTable}, + [SPECIES_JIGGLYPUFF] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Jigglypuff, gDummySpriteAffineAnimTable}, + [SPECIES_WIGGLYTUFF] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wigglytuff, gDummySpriteAffineAnimTable}, + [SPECIES_ZUBAT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Zubat, gDummySpriteAffineAnimTable}, + [SPECIES_GOLBAT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Golbat, gDummySpriteAffineAnimTable}, + [SPECIES_ODDISH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Oddish, gDummySpriteAffineAnimTable}, + [SPECIES_GLOOM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Gloom, gDummySpriteAffineAnimTable}, + [SPECIES_VILEPLUME] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Vileplume, gDummySpriteAffineAnimTable}, + [SPECIES_PARAS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Paras, gDummySpriteAffineAnimTable}, + [SPECIES_PARASECT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Parasect, gDummySpriteAffineAnimTable}, + [SPECIES_VENONAT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Venonat, gDummySpriteAffineAnimTable}, + [SPECIES_VENOMOTH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Venomoth, gDummySpriteAffineAnimTable}, + [SPECIES_DIGLETT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Diglett, gDummySpriteAffineAnimTable}, + [SPECIES_DUGTRIO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dugtrio, gDummySpriteAffineAnimTable}, + [SPECIES_MEOWTH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Meowth, gDummySpriteAffineAnimTable}, + [SPECIES_PERSIAN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Persian, gDummySpriteAffineAnimTable}, + [SPECIES_PSYDUCK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Psyduck, gDummySpriteAffineAnimTable}, + [SPECIES_GOLDUCK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Golduck, gDummySpriteAffineAnimTable}, + [SPECIES_MANKEY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mankey, gDummySpriteAffineAnimTable}, + [SPECIES_PRIMEAPE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Primeape, gDummySpriteAffineAnimTable}, + [SPECIES_GROWLITHE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Growlithe, gDummySpriteAffineAnimTable}, + [SPECIES_ARCANINE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Arcanine, gDummySpriteAffineAnimTable}, + [SPECIES_POLIWAG] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Poliwag, gDummySpriteAffineAnimTable}, + [SPECIES_POLIWHIRL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Poliwhirl, gDummySpriteAffineAnimTable}, + [SPECIES_POLIWRATH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Poliwrath, gDummySpriteAffineAnimTable}, + [SPECIES_ABRA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Abra, gDummySpriteAffineAnimTable}, + [SPECIES_KADABRA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kadabra, gDummySpriteAffineAnimTable}, + [SPECIES_ALAKAZAM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Alakazam, gDummySpriteAffineAnimTable}, + [SPECIES_MACHOP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Machop, gDummySpriteAffineAnimTable}, + [SPECIES_MACHOKE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Machoke, gDummySpriteAffineAnimTable}, + [SPECIES_MACHAMP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Machamp, gDummySpriteAffineAnimTable}, + [SPECIES_BELLSPROUT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Bellsprout, gDummySpriteAffineAnimTable}, + [SPECIES_WEEPINBELL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Weepinbell, gDummySpriteAffineAnimTable}, + [SPECIES_VICTREEBEL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Victreebel, gDummySpriteAffineAnimTable}, + [SPECIES_TENTACOOL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Tentacool, gDummySpriteAffineAnimTable}, + [SPECIES_TENTACRUEL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Tentacruel, gDummySpriteAffineAnimTable}, + [SPECIES_GEODUDE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Geodude, gDummySpriteAffineAnimTable}, + [SPECIES_GRAVELER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Graveler, gDummySpriteAffineAnimTable}, + [SPECIES_GOLEM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Golem, gDummySpriteAffineAnimTable}, + [SPECIES_PONYTA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ponyta, gDummySpriteAffineAnimTable}, + [SPECIES_RAPIDASH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Rapidash, gDummySpriteAffineAnimTable}, + [SPECIES_SLOWPOKE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Slowpoke, gDummySpriteAffineAnimTable}, + [SPECIES_SLOWBRO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Slowbro, gDummySpriteAffineAnimTable}, + [SPECIES_MAGNEMITE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Magnemite, gDummySpriteAffineAnimTable}, + [SPECIES_MAGNETON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Magneton, gDummySpriteAffineAnimTable}, + [SPECIES_FARFETCHD] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Farfetchd, gDummySpriteAffineAnimTable}, + [SPECIES_DODUO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Doduo, gDummySpriteAffineAnimTable}, + [SPECIES_DODRIO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dodrio, gDummySpriteAffineAnimTable}, + [SPECIES_SEEL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Seel, gDummySpriteAffineAnimTable}, + [SPECIES_DEWGONG] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dewgong, gDummySpriteAffineAnimTable}, + [SPECIES_GRIMER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Grimer, gDummySpriteAffineAnimTable}, + [SPECIES_MUK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Muk, gDummySpriteAffineAnimTable}, + [SPECIES_SHELLDER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Shellder, gDummySpriteAffineAnimTable}, + [SPECIES_CLOYSTER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Cloyster, gDummySpriteAffineAnimTable}, + [SPECIES_GASTLY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Gastly, gDummySpriteAffineAnimTable}, + [SPECIES_HAUNTER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Haunter, gDummySpriteAffineAnimTable}, + [SPECIES_GENGAR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Gengar, gDummySpriteAffineAnimTable}, + [SPECIES_ONIX] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Onix, gDummySpriteAffineAnimTable}, + [SPECIES_DROWZEE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Drowzee, gDummySpriteAffineAnimTable}, + [SPECIES_HYPNO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Hypno, gDummySpriteAffineAnimTable}, + [SPECIES_KRABBY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Krabby, gDummySpriteAffineAnimTable}, + [SPECIES_KINGLER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kingler, gDummySpriteAffineAnimTable}, + [SPECIES_VOLTORB] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Voltorb, gDummySpriteAffineAnimTable}, + [SPECIES_ELECTRODE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Electrode, gDummySpriteAffineAnimTable}, + [SPECIES_EXEGGCUTE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Exeggcute, gDummySpriteAffineAnimTable}, + [SPECIES_EXEGGUTOR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Exeggutor, gDummySpriteAffineAnimTable}, + [SPECIES_CUBONE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Cubone, gDummySpriteAffineAnimTable}, + [SPECIES_MAROWAK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Marowak, gDummySpriteAffineAnimTable}, + [SPECIES_HITMONLEE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Hitmonlee, gDummySpriteAffineAnimTable}, + [SPECIES_HITMONCHAN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Hitmonchan, gDummySpriteAffineAnimTable}, + [SPECIES_LICKITUNG] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lickitung, gDummySpriteAffineAnimTable}, + [SPECIES_KOFFING] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Koffing, gDummySpriteAffineAnimTable}, + [SPECIES_WEEZING] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Weezing, gDummySpriteAffineAnimTable}, + [SPECIES_RHYHORN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Rhyhorn, gDummySpriteAffineAnimTable}, + [SPECIES_RHYDON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Rhydon, gDummySpriteAffineAnimTable}, + [SPECIES_CHANSEY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Chansey, gDummySpriteAffineAnimTable}, + [SPECIES_TANGELA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Tangela, gDummySpriteAffineAnimTable}, + [SPECIES_KANGASKHAN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kangaskhan, gDummySpriteAffineAnimTable}, + [SPECIES_HORSEA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Horsea, gDummySpriteAffineAnimTable}, + [SPECIES_SEADRA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Seadra, gDummySpriteAffineAnimTable}, + [SPECIES_GOLDEEN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Goldeen, gDummySpriteAffineAnimTable}, + [SPECIES_SEAKING] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Seaking, gDummySpriteAffineAnimTable}, + [SPECIES_STARYU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Staryu, gDummySpriteAffineAnimTable}, + [SPECIES_STARMIE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Starmie, gDummySpriteAffineAnimTable}, + [SPECIES_MR_MIME] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mr_Mime, gDummySpriteAffineAnimTable}, + [SPECIES_SCYTHER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Scyther, gDummySpriteAffineAnimTable}, + [SPECIES_JYNX] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Jynx, gDummySpriteAffineAnimTable}, + [SPECIES_ELECTABUZZ] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Electabuzz, gDummySpriteAffineAnimTable}, + [SPECIES_MAGMAR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Magmar, gDummySpriteAffineAnimTable}, + [SPECIES_PINSIR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pinsir, gDummySpriteAffineAnimTable}, + [SPECIES_TAUROS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Tauros, gDummySpriteAffineAnimTable}, + [SPECIES_MAGIKARP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Magikarp, gDummySpriteAffineAnimTable}, + [SPECIES_GYARADOS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Gyarados, gDummySpriteAffineAnimTable}, + [SPECIES_LAPRAS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lapras, gDummySpriteAffineAnimTable}, + [SPECIES_DITTO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ditto, gDummySpriteAffineAnimTable}, + [SPECIES_EEVEE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Eevee, gDummySpriteAffineAnimTable}, + [SPECIES_VAPOREON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Vaporeon, gDummySpriteAffineAnimTable}, + [SPECIES_JOLTEON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Jolteon, gDummySpriteAffineAnimTable}, + [SPECIES_FLAREON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Flareon, gDummySpriteAffineAnimTable}, + [SPECIES_PORYGON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Porygon, gDummySpriteAffineAnimTable}, + [SPECIES_OMANYTE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Omanyte, gDummySpriteAffineAnimTable}, + [SPECIES_OMASTAR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Omastar, gDummySpriteAffineAnimTable}, + [SPECIES_KABUTO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kabuto, gDummySpriteAffineAnimTable}, + [SPECIES_KABUTOPS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kabutops, gDummySpriteAffineAnimTable}, + [SPECIES_AERODACTYL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Aerodactyl, gDummySpriteAffineAnimTable}, + [SPECIES_SNORLAX] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Snorlax, gDummySpriteAffineAnimTable}, + [SPECIES_ARTICUNO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Articuno, gDummySpriteAffineAnimTable}, + [SPECIES_ZAPDOS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Zapdos, gDummySpriteAffineAnimTable}, + [SPECIES_MOLTRES] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Moltres, gDummySpriteAffineAnimTable}, + [SPECIES_DRATINI] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dratini, gDummySpriteAffineAnimTable}, + [SPECIES_DRAGONAIR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dragonair, gDummySpriteAffineAnimTable}, + [SPECIES_DRAGONITE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dragonite, gDummySpriteAffineAnimTable}, + [SPECIES_MEWTWO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mewtwo, gDummySpriteAffineAnimTable}, + [SPECIES_MEW] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mew, gDummySpriteAffineAnimTable}, + [SPECIES_CHIKORITA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Chikorita, gDummySpriteAffineAnimTable}, + [SPECIES_BAYLEEF] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Bayleef, gDummySpriteAffineAnimTable}, + [SPECIES_MEGANIUM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Meganium, gDummySpriteAffineAnimTable}, + [SPECIES_CYNDAQUIL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Cyndaquil, gDummySpriteAffineAnimTable}, + [SPECIES_QUILAVA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Quilava, gDummySpriteAffineAnimTable}, + [SPECIES_TYPHLOSION] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Typhlosion, gDummySpriteAffineAnimTable}, + [SPECIES_TOTODILE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Totodile, gDummySpriteAffineAnimTable}, + [SPECIES_CROCONAW] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Croconaw, gDummySpriteAffineAnimTable}, + [SPECIES_FERALIGATR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Feraligatr, gDummySpriteAffineAnimTable}, + [SPECIES_SENTRET] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sentret, gDummySpriteAffineAnimTable}, + [SPECIES_FURRET] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Furret, gDummySpriteAffineAnimTable}, + [SPECIES_HOOTHOOT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Hoothoot, gDummySpriteAffineAnimTable}, + [SPECIES_NOCTOWL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Noctowl, gDummySpriteAffineAnimTable}, + [SPECIES_LEDYBA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ledyba, gDummySpriteAffineAnimTable}, + [SPECIES_LEDIAN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ledian, gDummySpriteAffineAnimTable}, + [SPECIES_SPINARAK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Spinarak, gDummySpriteAffineAnimTable}, + [SPECIES_ARIADOS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ariados, gDummySpriteAffineAnimTable}, + [SPECIES_CROBAT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Crobat, gDummySpriteAffineAnimTable}, + [SPECIES_CHINCHOU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Chinchou, gDummySpriteAffineAnimTable}, + [SPECIES_LANTURN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lanturn, gDummySpriteAffineAnimTable}, + [SPECIES_PICHU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pichu, gDummySpriteAffineAnimTable}, + [SPECIES_CLEFFA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Cleffa, gDummySpriteAffineAnimTable}, + [SPECIES_IGGLYBUFF] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Igglybuff, gDummySpriteAffineAnimTable}, + [SPECIES_TOGEPI] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Togepi, gDummySpriteAffineAnimTable}, + [SPECIES_TOGETIC] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Togetic, gDummySpriteAffineAnimTable}, + [SPECIES_NATU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Natu, gDummySpriteAffineAnimTable}, + [SPECIES_XATU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Xatu, gDummySpriteAffineAnimTable}, + [SPECIES_MAREEP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mareep, gDummySpriteAffineAnimTable}, + [SPECIES_FLAAFFY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Flaaffy, gDummySpriteAffineAnimTable}, + [SPECIES_AMPHAROS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ampharos, gDummySpriteAffineAnimTable}, + [SPECIES_BELLOSSOM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Bellossom, gDummySpriteAffineAnimTable}, + [SPECIES_MARILL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Marill, gDummySpriteAffineAnimTable}, + [SPECIES_AZUMARILL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Azumarill, gDummySpriteAffineAnimTable}, + [SPECIES_SUDOWOODO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sudowoodo, gDummySpriteAffineAnimTable}, + [SPECIES_POLITOED] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Politoed, gDummySpriteAffineAnimTable}, + [SPECIES_HOPPIP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Hoppip, gDummySpriteAffineAnimTable}, + [SPECIES_SKIPLOOM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Skiploom, gDummySpriteAffineAnimTable}, + [SPECIES_JUMPLUFF] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Jumpluff, gDummySpriteAffineAnimTable}, + [SPECIES_AIPOM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Aipom, gDummySpriteAffineAnimTable}, + [SPECIES_SUNKERN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sunkern, gDummySpriteAffineAnimTable}, + [SPECIES_SUNFLORA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sunflora, gDummySpriteAffineAnimTable}, + [SPECIES_YANMA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Yanma, gDummySpriteAffineAnimTable}, + [SPECIES_WOOPER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wooper, gDummySpriteAffineAnimTable}, + [SPECIES_QUAGSIRE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Quagsire, gDummySpriteAffineAnimTable}, + [SPECIES_ESPEON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Espeon, gDummySpriteAffineAnimTable}, + [SPECIES_UMBREON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Umbreon, gDummySpriteAffineAnimTable}, + [SPECIES_MURKROW] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Murkrow, gDummySpriteAffineAnimTable}, + [SPECIES_SLOWKING] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Slowking, gDummySpriteAffineAnimTable}, + [SPECIES_MISDREAVUS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Misdreavus, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_A, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_B] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_B, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_C] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_C, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_D] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_D, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_E] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_E, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_F] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_F, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_G] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_G, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_H] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_H, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_I] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_I, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_J] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_J, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_K] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_K, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_L] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_L, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_M] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_M, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_N] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_N, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_O] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_O, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_P] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_P, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_Q] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_Q, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_R] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_R, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_S] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_S, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_T] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_T, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_U] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_U, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_V] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_V, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_W] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_W, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_X] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_X, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_Y] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_Y, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_Z] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_Z, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_EMARK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_Exclamation, gDummySpriteAffineAnimTable}, + [SPECIES_UNOWN_QMARK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Unown_Question, gDummySpriteAffineAnimTable}, + [SPECIES_WOBBUFFET] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wobbuffet, gDummySpriteAffineAnimTable}, + [SPECIES_GIRAFARIG] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Girafarig, gDummySpriteAffineAnimTable}, + [SPECIES_PINECO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pineco, gDummySpriteAffineAnimTable}, + [SPECIES_FORRETRESS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Forretress, gDummySpriteAffineAnimTable}, + [SPECIES_DUNSPARCE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dunsparce, gDummySpriteAffineAnimTable}, + [SPECIES_GLIGAR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Gligar, gDummySpriteAffineAnimTable}, + [SPECIES_STEELIX] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Steelix, gDummySpriteAffineAnimTable}, + [SPECIES_SNUBBULL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Snubbull, gDummySpriteAffineAnimTable}, + [SPECIES_GRANBULL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Granbull, gDummySpriteAffineAnimTable}, + [SPECIES_QWILFISH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Qwilfish, gDummySpriteAffineAnimTable}, + [SPECIES_SCIZOR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Scizor, gDummySpriteAffineAnimTable}, + [SPECIES_SHUCKLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Shuckle, gDummySpriteAffineAnimTable}, + [SPECIES_HERACROSS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Heracross, gDummySpriteAffineAnimTable}, + [SPECIES_SNEASEL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sneasel, gDummySpriteAffineAnimTable}, + [SPECIES_TEDDIURSA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Teddiursa, gDummySpriteAffineAnimTable}, + [SPECIES_URSARING] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ursaring, gDummySpriteAffineAnimTable}, + [SPECIES_SLUGMA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Slugma, gDummySpriteAffineAnimTable}, + [SPECIES_MAGCARGO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Magcargo, gDummySpriteAffineAnimTable}, + [SPECIES_SWINUB] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Swinub, gDummySpriteAffineAnimTable}, + [SPECIES_PILOSWINE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Piloswine, gDummySpriteAffineAnimTable}, + [SPECIES_CORSOLA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Corsola, gDummySpriteAffineAnimTable}, + [SPECIES_REMORAID] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Remoraid, gDummySpriteAffineAnimTable}, + [SPECIES_OCTILLERY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Octillery, gDummySpriteAffineAnimTable}, + [SPECIES_DELIBIRD] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Delibird, gDummySpriteAffineAnimTable}, + [SPECIES_MANTINE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mantine, gDummySpriteAffineAnimTable}, + [SPECIES_SKARMORY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Skarmory, gDummySpriteAffineAnimTable}, + [SPECIES_HOUNDOUR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Houndour, gDummySpriteAffineAnimTable}, + [SPECIES_HOUNDOOM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Houndoom, gDummySpriteAffineAnimTable}, + [SPECIES_KINGDRA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kingdra, gDummySpriteAffineAnimTable}, + [SPECIES_PHANPY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Phanpy, gDummySpriteAffineAnimTable}, + [SPECIES_DONPHAN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Donphan, gDummySpriteAffineAnimTable}, + [SPECIES_PORYGON2] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Porygon2, gDummySpriteAffineAnimTable}, + [SPECIES_STANTLER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Stantler, gDummySpriteAffineAnimTable}, + [SPECIES_SMEARGLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Smeargle, gDummySpriteAffineAnimTable}, + [SPECIES_TYROGUE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Tyrogue, gDummySpriteAffineAnimTable}, + [SPECIES_HITMONTOP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Hitmontop, gDummySpriteAffineAnimTable}, + [SPECIES_SMOOCHUM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Smoochum, gDummySpriteAffineAnimTable}, + [SPECIES_ELEKID] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Elekid, gDummySpriteAffineAnimTable}, + [SPECIES_MAGBY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Magby, gDummySpriteAffineAnimTable}, + [SPECIES_MILTANK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Miltank, gDummySpriteAffineAnimTable}, + [SPECIES_BLISSEY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Blissey, gDummySpriteAffineAnimTable}, + [SPECIES_RAIKOU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Raikou, gDummySpriteAffineAnimTable}, + [SPECIES_ENTEI] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Entei, gDummySpriteAffineAnimTable}, + [SPECIES_SUICUNE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Suicune, gDummySpriteAffineAnimTable}, + [SPECIES_LARVITAR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Larvitar, gDummySpriteAffineAnimTable}, + [SPECIES_PUPITAR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pupitar, gDummySpriteAffineAnimTable}, + [SPECIES_TYRANITAR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Tyranitar, gDummySpriteAffineAnimTable}, + [SPECIES_LUGIA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lugia, gDummySpriteAffineAnimTable}, + [SPECIES_HO_OH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ho_oh, gDummySpriteAffineAnimTable}, + [SPECIES_CELEBI] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Celebi, gDummySpriteAffineAnimTable}, + [SPECIES_TREECKO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Treecko, gDummySpriteAffineAnimTable}, + [SPECIES_GROVYLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Grovyle, gDummySpriteAffineAnimTable}, + [SPECIES_SCEPTILE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sceptile, gDummySpriteAffineAnimTable}, + [SPECIES_TORCHIC] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Torchic, gDummySpriteAffineAnimTable}, + [SPECIES_COMBUSKEN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Combusken, gDummySpriteAffineAnimTable}, + [SPECIES_BLAZIKEN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Blaziken, gDummySpriteAffineAnimTable}, + [SPECIES_MUDKIP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mudkip, gDummySpriteAffineAnimTable}, + [SPECIES_MARSHTOMP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Marshtomp, gDummySpriteAffineAnimTable}, + [SPECIES_SWAMPERT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Swampert, gDummySpriteAffineAnimTable}, + [SPECIES_POOCHYENA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Poochyena, gDummySpriteAffineAnimTable}, + [SPECIES_MIGHTYENA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mightyena, gDummySpriteAffineAnimTable}, + [SPECIES_ZIGZAGOON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Zigzagoon, gDummySpriteAffineAnimTable}, + [SPECIES_LINOONE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Linoone, gDummySpriteAffineAnimTable}, + [SPECIES_WURMPLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wurmple, gDummySpriteAffineAnimTable}, + [SPECIES_SILCOON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Silcoon, gDummySpriteAffineAnimTable}, + [SPECIES_BEAUTIFLY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Beautifly, gDummySpriteAffineAnimTable}, + [SPECIES_CASCOON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Cascoon, gDummySpriteAffineAnimTable}, + [SPECIES_DUSTOX] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dustox, gDummySpriteAffineAnimTable}, + [SPECIES_LOTAD] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lotad, gDummySpriteAffineAnimTable}, + [SPECIES_LOMBRE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lombre, gDummySpriteAffineAnimTable}, + [SPECIES_LUDICOLO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ludicolo, gDummySpriteAffineAnimTable}, + [SPECIES_SEEDOT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Seedot, gDummySpriteAffineAnimTable}, + [SPECIES_NUZLEAF] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nuzleaf, gDummySpriteAffineAnimTable}, + [SPECIES_SHIFTRY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Shiftry, gDummySpriteAffineAnimTable}, + [SPECIES_TAILLOW] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Taillow, gDummySpriteAffineAnimTable}, + [SPECIES_SWELLOW] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Swellow, gDummySpriteAffineAnimTable}, + [SPECIES_WINGULL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wingull, gDummySpriteAffineAnimTable}, + [SPECIES_PELIPPER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Pelipper, gDummySpriteAffineAnimTable}, + [SPECIES_RALTS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ralts, gDummySpriteAffineAnimTable}, + [SPECIES_KIRLIA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kirlia, gDummySpriteAffineAnimTable}, + [SPECIES_GARDEVOIR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Gardevoir, gDummySpriteAffineAnimTable}, + [SPECIES_SURSKIT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Surskit, gDummySpriteAffineAnimTable}, + [SPECIES_MASQUERAIN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Masquerain, gDummySpriteAffineAnimTable}, + [SPECIES_SHROOMISH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Shroomish, gDummySpriteAffineAnimTable}, + [SPECIES_BRELOOM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Breloom, gDummySpriteAffineAnimTable}, + [SPECIES_SLAKOTH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Slakoth, gDummySpriteAffineAnimTable}, + [SPECIES_VIGOROTH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Vigoroth, gDummySpriteAffineAnimTable}, + [SPECIES_SLAKING] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Slaking, gDummySpriteAffineAnimTable}, + [SPECIES_NINCADA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nincada, gDummySpriteAffineAnimTable}, + [SPECIES_NINJASK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Ninjask, gDummySpriteAffineAnimTable}, + [SPECIES_SHEDINJA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Shedinja, gDummySpriteAffineAnimTable}, + [SPECIES_WHISMUR] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Whismur, gDummySpriteAffineAnimTable}, + [SPECIES_LOUDRED] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Loudred, gDummySpriteAffineAnimTable}, + [SPECIES_EXPLOUD] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Exploud, gDummySpriteAffineAnimTable}, + [SPECIES_MAKUHITA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Makuhita, gDummySpriteAffineAnimTable}, + [SPECIES_HARIYAMA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Hariyama, gDummySpriteAffineAnimTable}, + [SPECIES_AZURILL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Azurill, gDummySpriteAffineAnimTable}, + [SPECIES_NOSEPASS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Nosepass, gDummySpriteAffineAnimTable}, + [SPECIES_SKITTY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Skitty, gDummySpriteAffineAnimTable}, + [SPECIES_DELCATTY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Delcatty, gDummySpriteAffineAnimTable}, + [SPECIES_SABLEYE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sableye, gDummySpriteAffineAnimTable}, + [SPECIES_MAWILE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Mawile, gDummySpriteAffineAnimTable}, + [SPECIES_ARON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Aron, gDummySpriteAffineAnimTable}, + [SPECIES_LAIRON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lairon, gDummySpriteAffineAnimTable}, + [SPECIES_AGGRON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Aggron, gDummySpriteAffineAnimTable}, + [SPECIES_MEDITITE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Meditite, gDummySpriteAffineAnimTable}, + [SPECIES_MEDICHAM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Medicham, gDummySpriteAffineAnimTable}, + [SPECIES_ELECTRIKE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Electrike, gDummySpriteAffineAnimTable}, + [SPECIES_MANECTRIC] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Manectric, gDummySpriteAffineAnimTable}, + [SPECIES_PLUSLE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Plusle, gDummySpriteAffineAnimTable}, + [SPECIES_MINUN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Minun, gDummySpriteAffineAnimTable}, + [SPECIES_VOLBEAT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Volbeat, gDummySpriteAffineAnimTable}, + [SPECIES_ILLUMISE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Illumise, gDummySpriteAffineAnimTable}, + [SPECIES_ROSELIA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Roselia, gDummySpriteAffineAnimTable}, + [SPECIES_GULPIN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Gulpin, gDummySpriteAffineAnimTable}, + [SPECIES_SWALOT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Swalot, gDummySpriteAffineAnimTable}, + [SPECIES_CARVANHA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Carvanha, gDummySpriteAffineAnimTable}, + [SPECIES_SHARPEDO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sharpedo, gDummySpriteAffineAnimTable}, + [SPECIES_WAILMER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wailmer, gDummySpriteAffineAnimTable}, + [SPECIES_WAILORD] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wailord, gDummySpriteAffineAnimTable}, + [SPECIES_NUMEL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Numel, gDummySpriteAffineAnimTable}, + [SPECIES_CAMERUPT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Camerupt, gDummySpriteAffineAnimTable}, + [SPECIES_TORKOAL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Torkoal, gDummySpriteAffineAnimTable}, + [SPECIES_SPOINK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Spoink, gDummySpriteAffineAnimTable}, + [SPECIES_GRUMPIG] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Grumpig, gDummySpriteAffineAnimTable}, + [SPECIES_SPINDA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Spinda, gDummySpriteAffineAnimTable}, + [SPECIES_TRAPINCH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Trapinch, gDummySpriteAffineAnimTable}, + [SPECIES_VIBRAVA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Vibrava, gDummySpriteAffineAnimTable}, + [SPECIES_FLYGON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Flygon, gDummySpriteAffineAnimTable}, + [SPECIES_CACNEA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Cacnea, gDummySpriteAffineAnimTable}, + [SPECIES_CACTURNE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Cacturne, gDummySpriteAffineAnimTable}, + [SPECIES_SWABLU] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Swablu, gDummySpriteAffineAnimTable}, + [SPECIES_ALTARIA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Altaria, gDummySpriteAffineAnimTable}, + [SPECIES_ZANGOOSE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Zangoose, gDummySpriteAffineAnimTable}, + [SPECIES_SEVIPER] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BIKE_TIRE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Seviper, gDummySpriteAffineAnimTable}, + [SPECIES_LUNATONE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lunatone, gDummySpriteAffineAnimTable}, + [SPECIES_SOLROCK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Solrock, gDummySpriteAffineAnimTable}, + [SPECIES_BARBOACH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Barboach, gDummySpriteAffineAnimTable}, + [SPECIES_WHISCASH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Whiscash, gDummySpriteAffineAnimTable}, + [SPECIES_CORPHISH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Corphish, gDummySpriteAffineAnimTable}, + [SPECIES_CRAWDAUNT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Crawdaunt, gDummySpriteAffineAnimTable}, + [SPECIES_BALTOY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Baltoy, gDummySpriteAffineAnimTable}, + [SPECIES_CLAYDOL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Claydol, gDummySpriteAffineAnimTable}, + [SPECIES_LILEEP] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Lileep, gDummySpriteAffineAnimTable}, + [SPECIES_CRADILY] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Cradily, gDummySpriteAffineAnimTable}, + [SPECIES_ANORITH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_BUG, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Anorith, gDummySpriteAffineAnimTable}, + [SPECIES_ARMALDO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Armaldo, gDummySpriteAffineAnimTable}, + [SPECIES_FEEBAS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Feebas, gDummySpriteAffineAnimTable}, + [SPECIES_MILOTIC] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Milotic, gDummySpriteAffineAnimTable}, + [SPECIES_CASTFORM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Castform, gDummySpriteAffineAnimTable}, + [SPECIES_KECLEON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kecleon, gDummySpriteAffineAnimTable}, + [SPECIES_SHUPPET] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Shuppet, gDummySpriteAffineAnimTable}, + [SPECIES_BANETTE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Banette, gDummySpriteAffineAnimTable}, + [SPECIES_DUSKULL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Duskull, gDummySpriteAffineAnimTable}, + [SPECIES_DUSCLOPS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Dusclops, gDummySpriteAffineAnimTable}, + [SPECIES_TROPIUS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Tropius, gDummySpriteAffineAnimTable}, + [SPECIES_CHIMECHO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Chimecho, gDummySpriteAffineAnimTable}, + [SPECIES_ABSOL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Absol, gDummySpriteAffineAnimTable}, + [SPECIES_WYNAUT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Wynaut, gDummySpriteAffineAnimTable}, + [SPECIES_SNORUNT] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Snorunt, gDummySpriteAffineAnimTable}, + [SPECIES_GLALIE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Glalie, gDummySpriteAffineAnimTable}, + [SPECIES_SPHEAL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Spheal, gDummySpriteAffineAnimTable}, + [SPECIES_SEALEO] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Sealeo, gDummySpriteAffineAnimTable}, + [SPECIES_WALREIN] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Walrein, gDummySpriteAffineAnimTable}, + [SPECIES_CLAMPERL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Clamperl, gDummySpriteAffineAnimTable}, + [SPECIES_HUNTAIL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Huntail, gDummySpriteAffineAnimTable}, + [SPECIES_GOREBYSS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SLITHER, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Gorebyss, gDummySpriteAffineAnimTable}, + [SPECIES_RELICANTH] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Relicanth, gDummySpriteAffineAnimTable}, + [SPECIES_LUVDISC] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_SPOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Luvdisc, gDummySpriteAffineAnimTable}, + [SPECIES_BAGON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Bagon, gDummySpriteAffineAnimTable}, + [SPECIES_SHELGON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Shelgon, gDummySpriteAffineAnimTable}, + [SPECIES_SALAMENCE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Salamence, gDummySpriteAffineAnimTable}, + [SPECIES_BELDUM] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Beldum, gDummySpriteAffineAnimTable}, + [SPECIES_METANG] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Metang, gDummySpriteAffineAnimTable}, + [SPECIES_METAGROSS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Metagross, gDummySpriteAffineAnimTable}, + [SPECIES_REGIROCK] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Regirock, gDummySpriteAffineAnimTable}, + [SPECIES_REGICE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Regice, gDummySpriteAffineAnimTable}, + [SPECIES_REGISTEEL] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Registeel, gDummySpriteAffineAnimTable}, + [SPECIES_LATIAS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Latias, gDummySpriteAffineAnimTable}, + [SPECIES_LATIOS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Latios, gDummySpriteAffineAnimTable}, + [SPECIES_KYOGRE] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Kyogre, gDummySpriteAffineAnimTable}, + [SPECIES_GROUDON] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Groudon, gDummySpriteAffineAnimTable}, + [SPECIES_RAYQUAZA] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Rayquaza, gDummySpriteAffineAnimTable}, + [SPECIES_JIRACHI] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Jirachi, gDummySpriteAffineAnimTable}, + [SPECIES_DEOXYS] = {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_FOOT, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Deoxys, gDummySpriteAffineAnimTable}, +}; + +// Normal, sunny, rainy, snowy +const struct ObjectEventGraphicsInfo gCastformObjectGraphics[] = { + {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_Castform, gDummySpriteAffineAnimTable}, + {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformSunny, gDummySpriteAffineAnimTable}, + {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformRainy, gDummySpriteAffineAnimTable}, + {0xFFFF, OBJ_EVENT_PAL_TAG_DYNAMIC, OBJ_EVENT_PAL_TAG_NONE, 512, 32, 32, 2, SHADOW_SIZE_M, FALSE, FALSE, TRACKS_NONE, &gObjectEventBaseOam_32x32, sOamTables_32x32, sAnimTable_Following, sPicTable_CastformSnowy, 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 ae1117164a..89dad499d3 100755 --- a/src/data/object_events/object_event_graphics_info_pointers.h +++ b/src/data/object_events/object_event_graphics_info_pointers.h @@ -237,6 +237,10 @@ extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphir extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh; +// Begin pokemon event objects +extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AnimatedBall; +extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Follower; + extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader; @@ -245,7 +249,6 @@ extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1; extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2; - const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM_OBJ_EVENT_GFX] = { [OBJ_EVENT_GFX_BRENDAN_NORMAL] = &gObjectEventGraphicsInfo_BrendanNormal, [OBJ_EVENT_GFX_BRENDAN_MACH_BIKE] = &gObjectEventGraphicsInfo_BrendanMachBike, @@ -306,7 +309,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM [OBJ_EVENT_GFX_CYCLING_TRIATHLETE_M] = &gObjectEventGraphicsInfo_CyclingTriathleteM, [OBJ_EVENT_GFX_CYCLING_TRIATHLETE_F] = &gObjectEventGraphicsInfo_CyclingTriathleteF, [OBJ_EVENT_GFX_NURSE] = &gObjectEventGraphicsInfo_Nurse, - [OBJ_EVENT_GFX_ITEM_BALL] = &gObjectEventGraphicsInfo_ItemBall, + // [OBJ_EVENT_GFX_ITEM_BALL] = &gObjectEventGraphicsInfo_AnimatedBall, [OBJ_EVENT_GFX_BERRY_TREE] = &gObjectEventGraphicsInfo_BerryTree, [OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES] = &gObjectEventGraphicsInfo_BerryTreeEarlyStages, [OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES] = &gObjectEventGraphicsInfo_BerryTreeLateStages, @@ -448,7 +451,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM [OBJ_EVENT_GFX_GROUDON_FRONT] = &gObjectEventGraphicsInfo_GroudonFront, [OBJ_EVENT_GFX_FOSSIL] = &gObjectEventGraphicsInfo_Fossil, [OBJ_EVENT_GFX_REGIROCK] = &gObjectEventGraphicsInfo_Regirock, - [OBJ_EVENT_GFX_REGICE] = &gObjectEventGraphicsInfo_Regice, + // [OBJ_EVENT_GFX_REGICE] = &gObjectEventGraphicsInfo_Regice, [OBJ_EVENT_GFX_REGISTEEL] = &gObjectEventGraphicsInfo_Registeel, [OBJ_EVENT_GFX_SKITTY] = &gObjectEventGraphicsInfo_Skitty, [OBJ_EVENT_GFX_KECLEON] = &gObjectEventGraphicsInfo_Kecleon, @@ -486,6 +489,8 @@ 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_ANIMATED_BALL] = &gObjectEventGraphicsInfo_AnimatedBall, + [OBJ_EVENT_GFX_OW_MON] = &gObjectEventGraphicsInfo_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 1b8c9c727a..975694de11 100755 --- a/src/data/object_events/object_event_pic_tables.h +++ b/src/data/object_events/object_event_pic_tables.h @@ -926,27 +926,27 @@ static const struct SpriteFrameImage sPicTable_Truck[] = { }; static const struct SpriteFrameImage sPicTable_VigorothCarryingBox[] = { - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 0), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 0), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 0), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 1), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 2), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 1), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 2), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 1), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 2), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 0), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 0), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 0), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 1), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 2), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 1), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 2), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 1), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 2), }; static const struct SpriteFrameImage sPicTable_VigorothFacingAway[] = { - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 3), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 3), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 3), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4), - overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 3), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 3), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 3), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4), + overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4), }; static const struct SpriteFrameImage sPicTable_BirchsBag[] = { @@ -965,18 +965,6 @@ static const struct SpriteFrameImage sPicTable_EnemyZigzagoon[] = { overworld_frame(gObjectEventPic_EnemyZigzagoon, 4, 4, 8), }; -static const struct SpriteFrameImage sPicTable_Poochyena[] = { - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 0), - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 1), - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 2), - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 3), - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 4), - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 5), - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 6), - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 7), - overworld_frame(gObjectEventPic_Poochyena, 4, 4, 8), -}; - static const struct SpriteFrameImage sPicTable_Artist[] = { overworld_frame(gObjectEventPic_Artist, 2, 4, 0), overworld_frame(gObjectEventPic_Artist, 2, 4, 1), @@ -1710,51 +1698,51 @@ static const struct SpriteFrameImage sPicTable_Maxie[] = { }; static const struct SpriteFrameImage sPicTable_KyogreFront[] = { - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 0), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 0), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 0), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 0), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 0), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 0), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1), }; static const struct SpriteFrameImage sPicTable_GroudonFront[] = { - overworld_frame(gObjectEventPic_Groudon, 4, 4, 0), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 0), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 0), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 1), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 1), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 1), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 1), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 1), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 1), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 0), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 0), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 0), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1), }; static const struct SpriteFrameImage sPicTable_KyogreSide[] = { - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 2), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 2), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 2), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3), - overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 2), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 2), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 2), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3), + overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3), }; static const struct SpriteFrameImage sPicTable_GroudonSide[] = { - overworld_frame(gObjectEventPic_Groudon, 4, 4, 2), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 2), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 2), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 3), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 3), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 3), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 3), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 3), - overworld_frame(gObjectEventPic_Groudon, 4, 4, 3), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 2), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 2), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 2), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3), + overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3), }; static const struct SpriteFrameImage sPicTable_Fossil[] = { @@ -1773,38 +1761,6 @@ static const struct SpriteFrameImage sPicTable_Regi[] = { obj_frame_tiles(gObjectEventPic_Regi), }; -static const struct SpriteFrameImage sPicTable_Skitty[] = { - overworld_frame(gObjectEventPic_Skitty, 2, 2, 0), - overworld_frame(gObjectEventPic_Skitty, 2, 2, 1), - overworld_frame(gObjectEventPic_Skitty, 2, 2, 2), - overworld_frame(gObjectEventPic_Skitty, 2, 2, 0), - overworld_frame(gObjectEventPic_Skitty, 2, 2, 0), - overworld_frame(gObjectEventPic_Skitty, 2, 2, 1), - overworld_frame(gObjectEventPic_Skitty, 2, 2, 1), - overworld_frame(gObjectEventPic_Skitty, 2, 2, 2), - overworld_frame(gObjectEventPic_Skitty, 2, 2, 2), -}; - -static const struct SpriteFrameImage sPicTable_Kecleon[] = { - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 0), - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 1), - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 2), - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 0), - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 0), - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 1), - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 1), - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 2), - overworld_frame(gObjectEventPic_Kecleon, 2, 2, 2), -}; - -static const struct SpriteFrameImage sPicTable_Rayquaza[] = { - overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 0), - overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 1), - overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 2), - overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 3), - overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 4), -}; - static const struct SpriteFrameImage sPicTable_RayquazaStill[] = { obj_frame_tiles(gObjectEventPic_RayquazaStill), obj_frame_tiles(gObjectEventPic_RayquazaStill), @@ -1817,54 +1773,6 @@ static const struct SpriteFrameImage sPicTable_RayquazaStill[] = { obj_frame_tiles(gObjectEventPic_RayquazaStill), }; -static const struct SpriteFrameImage sPicTable_Zigzagoon[] = { - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 0), - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 1), - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 2), - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 0), - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 0), - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 1), - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 1), - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 2), - overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 2), -}; - -static const struct SpriteFrameImage sPicTable_Pikachu[] = { - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 0), - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 1), - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 2), - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 0), - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 0), - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 1), - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 1), - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 2), - overworld_frame(gObjectEventPic_Pikachu, 2, 2, 2), -}; - -static const struct SpriteFrameImage sPicTable_Azumarill[] = { - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 0), - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 1), - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 2), - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 0), - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 0), - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 1), - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 1), - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 2), - overworld_frame(gObjectEventPic_Azumarill, 2, 2, 2), -}; - -static const struct SpriteFrameImage sPicTable_Wingull[] = { - overworld_frame(gObjectEventPic_Wingull, 2, 2, 0), - overworld_frame(gObjectEventPic_Wingull, 2, 2, 2), - overworld_frame(gObjectEventPic_Wingull, 2, 2, 4), - overworld_frame(gObjectEventPic_Wingull, 2, 2, 1), - overworld_frame(gObjectEventPic_Wingull, 2, 2, 1), - overworld_frame(gObjectEventPic_Wingull, 2, 2, 3), - overworld_frame(gObjectEventPic_Wingull, 2, 2, 3), - overworld_frame(gObjectEventPic_Wingull, 2, 2, 5), - overworld_frame(gObjectEventPic_Wingull, 2, 2, 5), -}; - static const struct SpriteFrameImage sPicTable_TuberMSwimming[] = { overworld_frame(gObjectEventPic_TuberMSwimming, 2, 2, 0), overworld_frame(gObjectEventPic_TuberMSwimming, 2, 2, 1), @@ -1877,18 +1785,6 @@ static const struct SpriteFrameImage sPicTable_TuberMSwimming[] = { overworld_frame(gObjectEventPic_TuberMSwimming, 2, 2, 8), }; -static const struct SpriteFrameImage sPicTable_Azurill[] = { - overworld_frame(gObjectEventPic_Azurill, 2, 2, 0), - overworld_frame(gObjectEventPic_Azurill, 2, 2, 1), - overworld_frame(gObjectEventPic_Azurill, 2, 2, 2), - overworld_frame(gObjectEventPic_Azurill, 2, 2, 0), - overworld_frame(gObjectEventPic_Azurill, 2, 2, 0), - overworld_frame(gObjectEventPic_Azurill, 2, 2, 1), - overworld_frame(gObjectEventPic_Azurill, 2, 2, 1), - overworld_frame(gObjectEventPic_Azurill, 2, 2, 2), - overworld_frame(gObjectEventPic_Azurill, 2, 2, 2), -}; - static const struct SpriteFrameImage sPicTable_Mom[] = { overworld_frame(gObjectEventPic_Mom, 2, 4, 0), overworld_frame(gObjectEventPic_Mom, 2, 4, 1), @@ -1941,30 +1837,6 @@ static const struct SpriteFrameImage sPicTable_Statue[] = { obj_frame_tiles(gObjectEventPic_Statue), }; -static const struct SpriteFrameImage sPicTable_Dusclops[] = { - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 0), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 1), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 2), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 3), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 4), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 5), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 6), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 7), - overworld_frame(gObjectEventPic_Dusclops, 2, 4, 8), -}; - -static const struct SpriteFrameImage sPicTable_Kirlia[] = { - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 0), - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 1), - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 2), - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 3), - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 4), - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 5), - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 6), - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 7), - overworld_frame(gObjectEventPic_Kirlia, 2, 4, 8), -}; - static const struct SpriteFrameImage sPicTable_UnionRoomAttendant[] = { overworld_frame(gObjectEventPic_UnionRoomAttendant, 2, 4, 0), overworld_frame(gObjectEventPic_UnionRoomAttendant, 2, 4, 1), @@ -1977,30 +1849,6 @@ static const struct SpriteFrameImage sPicTable_UnionRoomAttendant[] = { overworld_frame(gObjectEventPic_UnionRoomAttendant, 2, 4, 2), }; -static const struct SpriteFrameImage sPicTable_Sudowoodo[] = { - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0), - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0), - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 1), - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0), - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0), - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0), - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0), - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 1), - overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 2), -}; - -static const struct SpriteFrameImage sPicTable_Mew[] = { - overworld_frame(gObjectEventPic_Mew, 2, 4, 0), - overworld_frame(gObjectEventPic_Mew, 2, 4, 1), - overworld_frame(gObjectEventPic_Mew, 2, 4, 2), - overworld_frame(gObjectEventPic_Mew, 2, 4, 3), - overworld_frame(gObjectEventPic_Mew, 2, 4, 4), - overworld_frame(gObjectEventPic_Mew, 2, 4, 5), - overworld_frame(gObjectEventPic_Mew, 2, 4, 6), - overworld_frame(gObjectEventPic_Mew, 2, 4, 7), - overworld_frame(gObjectEventPic_Mew, 2, 4, 8), -}; - static const struct SpriteFrameImage sPicTable_Red[] = { overworld_frame(gObjectEventPic_Red, 2, 4, 0), overworld_frame(gObjectEventPic_Red, 2, 4, 1), @@ -2025,16 +1873,24 @@ static const struct SpriteFrameImage sPicTable_Leaf[] = { overworld_frame(gObjectEventPic_Leaf, 2, 4, 8), }; -static const struct SpriteFrameImage sPicTable_Deoxys[] = { - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0), - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0), - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0), - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0), - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 1), - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0), - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 1), - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0), - overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0), +static const struct SpriteFrameImage sPicTable_SudowoodoTree[] = { + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0), + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0), + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 1), + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0), + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0), + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0), + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0), + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 1), + overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 2), +}; + +static const struct SpriteFrameImage sPicTable_RayquazaCutscene[] = { + overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 0), + overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 1), + overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 2), + overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 3), + overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 4), }; static const struct SpriteFrameImage sPicTable_BirthIslandStone[] = { @@ -2125,28 +1981,3498 @@ static const struct SpriteFrameImage sPicTable_Brandon[] = { overworld_frame(gObjectEventPic_Brandon, 2, 4, 8), }; -static const struct SpriteFrameImage sPicTable_Lugia[] = { - overworld_frame(gObjectEventPic_Lugia, 4, 4, 0), - overworld_frame(gObjectEventPic_Lugia, 4, 4, 0), - overworld_frame(gObjectEventPic_Lugia, 4, 4, 0), - overworld_frame(gObjectEventPic_Lugia, 4, 4, 0), - overworld_frame(gObjectEventPic_Lugia, 4, 4, 1), - overworld_frame(gObjectEventPic_Lugia, 4, 4, 0), - overworld_frame(gObjectEventPic_Lugia, 4, 4, 1), - overworld_frame(gObjectEventPic_Lugia, 4, 4, 0), - overworld_frame(gObjectEventPic_Lugia, 4, 4, 1), +static const struct SpriteFrameImage sPicTable_AnimatedBall[] = { + overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 0), + overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 1), + overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 2), + overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 3), + overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 4), + overworld_frame(gObjectEventPic_AnimatedBall, 2, 4, 5), }; -static const struct SpriteFrameImage sPicTable_HoOh[] = { - overworld_frame(gObjectEventPic_HoOh, 4, 4, 0), - overworld_frame(gObjectEventPic_HoOh, 4, 4, 0), - overworld_frame(gObjectEventPic_HoOh, 4, 4, 0), - overworld_frame(gObjectEventPic_HoOh, 4, 4, 0), - overworld_frame(gObjectEventPic_HoOh, 4, 4, 1), - overworld_frame(gObjectEventPic_HoOh, 4, 4, 0), - overworld_frame(gObjectEventPic_HoOh, 4, 4, 1), - overworld_frame(gObjectEventPic_HoOh, 4, 4, 0), - overworld_frame(gObjectEventPic_HoOh, 4, 4, 1), +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_Pikachu[] = { + overworld_frame(gObjectEventPic_Pikachu, 4, 4, 0), + overworld_frame(gObjectEventPic_Pikachu, 4, 4, 1), + overworld_frame(gObjectEventPic_Pikachu, 4, 4, 2), + overworld_frame(gObjectEventPic_Pikachu, 4, 4, 3), + overworld_frame(gObjectEventPic_Pikachu, 4, 4, 4), + overworld_frame(gObjectEventPic_Pikachu, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_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), +}; +static const struct SpriteFrameImage sPicTable_Mew[] = { + overworld_frame(gObjectEventPic_Mew, 4, 4, 0), + overworld_frame(gObjectEventPic_Mew, 4, 4, 1), + overworld_frame(gObjectEventPic_Mew, 4, 4, 2), + overworld_frame(gObjectEventPic_Mew, 4, 4, 3), + overworld_frame(gObjectEventPic_Mew, 4, 4, 4), + overworld_frame(gObjectEventPic_Mew, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Chikorita[] = { + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 0), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 1), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 2), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 3), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 4), + overworld_frame(gObjectEventPic_Chikorita, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Bayleef[] = { + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 0), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 1), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 2), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 3), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 4), + overworld_frame(gObjectEventPic_Bayleef, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Meganium[] = { + overworld_frame(gObjectEventPic_Meganium, 4, 4, 0), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 1), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 2), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 3), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 4), + overworld_frame(gObjectEventPic_Meganium, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Cyndaquil[] = { + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 0), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 1), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 2), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 3), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 4), + overworld_frame(gObjectEventPic_Cyndaquil, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Quilava[] = { + overworld_frame(gObjectEventPic_Quilava, 4, 4, 0), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 1), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 2), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 3), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 4), + overworld_frame(gObjectEventPic_Quilava, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Typhlosion[] = { + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 0), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 1), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 2), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 3), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 4), + overworld_frame(gObjectEventPic_Typhlosion, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Totodile[] = { + overworld_frame(gObjectEventPic_Totodile, 4, 4, 0), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 1), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 2), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 3), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 4), + overworld_frame(gObjectEventPic_Totodile, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Croconaw[] = { + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 0), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 1), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 2), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 3), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 4), + overworld_frame(gObjectEventPic_Croconaw, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Feraligatr[] = { + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 0), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 1), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 2), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 3), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 4), + overworld_frame(gObjectEventPic_Feraligatr, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sentret[] = { + overworld_frame(gObjectEventPic_Sentret, 4, 4, 0), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 1), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 2), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 3), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 4), + overworld_frame(gObjectEventPic_Sentret, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Furret[] = { + overworld_frame(gObjectEventPic_Furret, 4, 4, 0), + overworld_frame(gObjectEventPic_Furret, 4, 4, 1), + overworld_frame(gObjectEventPic_Furret, 4, 4, 2), + overworld_frame(gObjectEventPic_Furret, 4, 4, 3), + overworld_frame(gObjectEventPic_Furret, 4, 4, 4), + overworld_frame(gObjectEventPic_Furret, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Hoothoot[] = { + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 0), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 1), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 2), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 3), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 4), + overworld_frame(gObjectEventPic_Hoothoot, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Noctowl[] = { + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 0), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 1), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 2), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 3), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 4), + overworld_frame(gObjectEventPic_Noctowl, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ledyba[] = { + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 0), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 1), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 2), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 3), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 4), + overworld_frame(gObjectEventPic_Ledyba, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ledian[] = { + overworld_frame(gObjectEventPic_Ledian, 4, 4, 0), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 1), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 2), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 3), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 4), + overworld_frame(gObjectEventPic_Ledian, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Spinarak[] = { + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 0), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 1), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 2), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 3), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 4), + overworld_frame(gObjectEventPic_Spinarak, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ariados[] = { + overworld_frame(gObjectEventPic_Ariados, 4, 4, 0), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 1), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 2), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 3), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 4), + overworld_frame(gObjectEventPic_Ariados, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Crobat[] = { + overworld_frame(gObjectEventPic_Crobat, 4, 4, 0), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 1), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 2), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 3), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 4), + overworld_frame(gObjectEventPic_Crobat, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Chinchou[] = { + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 0), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 1), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 2), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 3), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 4), + overworld_frame(gObjectEventPic_Chinchou, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Lanturn[] = { + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 0), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 1), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 2), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 3), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 4), + overworld_frame(gObjectEventPic_Lanturn, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Pichu[] = { + overworld_frame(gObjectEventPic_Pichu, 4, 4, 0), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 1), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 2), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 3), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 4), + overworld_frame(gObjectEventPic_Pichu, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Cleffa[] = { + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 0), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 1), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 2), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 3), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 4), + overworld_frame(gObjectEventPic_Cleffa, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Igglybuff[] = { + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 0), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 1), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 2), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 3), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 4), + overworld_frame(gObjectEventPic_Igglybuff, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Togepi[] = { + overworld_frame(gObjectEventPic_Togepi, 4, 4, 0), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 1), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 2), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 3), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 4), + overworld_frame(gObjectEventPic_Togepi, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Togetic[] = { + overworld_frame(gObjectEventPic_Togetic, 4, 4, 0), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 1), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 2), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 3), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 4), + overworld_frame(gObjectEventPic_Togetic, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Natu[] = { + overworld_frame(gObjectEventPic_Natu, 4, 4, 0), + overworld_frame(gObjectEventPic_Natu, 4, 4, 1), + overworld_frame(gObjectEventPic_Natu, 4, 4, 2), + overworld_frame(gObjectEventPic_Natu, 4, 4, 3), + overworld_frame(gObjectEventPic_Natu, 4, 4, 4), + overworld_frame(gObjectEventPic_Natu, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Xatu[] = { + overworld_frame(gObjectEventPic_Xatu, 4, 4, 0), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 1), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 2), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 3), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 4), + overworld_frame(gObjectEventPic_Xatu, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Mareep[] = { + overworld_frame(gObjectEventPic_Mareep, 4, 4, 0), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 1), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 2), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 3), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 4), + overworld_frame(gObjectEventPic_Mareep, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Flaaffy[] = { + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 0), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 1), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 2), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 3), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 4), + overworld_frame(gObjectEventPic_Flaaffy, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ampharos[] = { + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 0), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 1), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 2), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 3), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 4), + overworld_frame(gObjectEventPic_Ampharos, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Bellossom[] = { + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 0), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 1), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 2), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 3), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 4), + overworld_frame(gObjectEventPic_Bellossom, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Marill[] = { + overworld_frame(gObjectEventPic_Marill, 4, 4, 0), + overworld_frame(gObjectEventPic_Marill, 4, 4, 1), + overworld_frame(gObjectEventPic_Marill, 4, 4, 2), + overworld_frame(gObjectEventPic_Marill, 4, 4, 3), + overworld_frame(gObjectEventPic_Marill, 4, 4, 4), + overworld_frame(gObjectEventPic_Marill, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Azumarill[] = { + overworld_frame(gObjectEventPic_Azumarill, 4, 4, 0), + overworld_frame(gObjectEventPic_Azumarill, 4, 4, 1), + overworld_frame(gObjectEventPic_Azumarill, 4, 4, 2), + overworld_frame(gObjectEventPic_Azumarill, 4, 4, 3), + overworld_frame(gObjectEventPic_Azumarill, 4, 4, 4), + overworld_frame(gObjectEventPic_Azumarill, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sudowoodo[] = { + overworld_frame(gObjectEventPic_Sudowoodo, 4, 4, 0), + overworld_frame(gObjectEventPic_Sudowoodo, 4, 4, 1), + overworld_frame(gObjectEventPic_Sudowoodo, 4, 4, 2), + overworld_frame(gObjectEventPic_Sudowoodo, 4, 4, 3), + overworld_frame(gObjectEventPic_Sudowoodo, 4, 4, 4), + overworld_frame(gObjectEventPic_Sudowoodo, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Politoed[] = { + overworld_frame(gObjectEventPic_Politoed, 4, 4, 0), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 1), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 2), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 3), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 4), + overworld_frame(gObjectEventPic_Politoed, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Hoppip[] = { + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 0), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 1), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 2), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 3), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 4), + overworld_frame(gObjectEventPic_Hoppip, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Skiploom[] = { + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 0), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 1), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 2), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 3), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 4), + overworld_frame(gObjectEventPic_Skiploom, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Jumpluff[] = { + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 0), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 1), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 2), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 3), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 4), + overworld_frame(gObjectEventPic_Jumpluff, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Aipom[] = { + overworld_frame(gObjectEventPic_Aipom, 4, 4, 0), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 1), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 2), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 3), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 4), + overworld_frame(gObjectEventPic_Aipom, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sunkern[] = { + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 0), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 1), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 2), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 3), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 4), + overworld_frame(gObjectEventPic_Sunkern, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sunflora[] = { + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 0), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 1), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 2), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 3), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 4), + overworld_frame(gObjectEventPic_Sunflora, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Yanma[] = { + overworld_frame(gObjectEventPic_Yanma, 4, 4, 0), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 1), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 2), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 3), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 4), + overworld_frame(gObjectEventPic_Yanma, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Wooper[] = { + overworld_frame(gObjectEventPic_Wooper, 4, 4, 0), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 1), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 2), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 3), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 4), + overworld_frame(gObjectEventPic_Wooper, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Quagsire[] = { + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 0), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 1), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 2), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 3), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 4), + overworld_frame(gObjectEventPic_Quagsire, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Espeon[] = { + overworld_frame(gObjectEventPic_Espeon, 4, 4, 0), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 1), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 2), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 3), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 4), + overworld_frame(gObjectEventPic_Espeon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Umbreon[] = { + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 0), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 1), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 2), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 3), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 4), + overworld_frame(gObjectEventPic_Umbreon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Murkrow[] = { + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 0), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 1), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 2), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 3), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 4), + overworld_frame(gObjectEventPic_Murkrow, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Slowking[] = { + overworld_frame(gObjectEventPic_Slowking, 4, 4, 0), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 1), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 2), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 3), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 4), + overworld_frame(gObjectEventPic_Slowking, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Misdreavus[] = { + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 0), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 1), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 2), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 3), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 4), + overworld_frame(gObjectEventPic_Misdreavus, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_A[] = { + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_A, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_B[] = { + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_B, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_C[] = { + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_C, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_D[] = { + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_D, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_E[] = { + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_E, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_F[] = { + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_F, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_G[] = { + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_G, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_H[] = { + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_H, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_I[] = { + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_I, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_J[] = { + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_J, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_K[] = { + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_K, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_L[] = { + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_L, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_M[] = { + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_M, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_N[] = { + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_N, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_O[] = { + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_O, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_P[] = { + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_P, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_Q[] = { + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Q, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_R[] = { + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_R, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_S[] = { + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_S, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_T[] = { + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_T, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_U[] = { + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_U, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_V[] = { + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_V, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_W[] = { + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_W, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_X[] = { + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_X, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_Y[] = { + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Y, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_Z[] = { + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Z, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_Exclamation[] = { + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Exclamation, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Unown_Question[] = { + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 0), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 1), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 2), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 3), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 4), + overworld_frame(gObjectEventPic_Unown_Question, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Wobbuffet[] = { + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 0), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 1), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 2), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 3), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 4), + overworld_frame(gObjectEventPic_Wobbuffet, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Girafarig[] = { + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 0), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 1), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 2), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 3), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 4), + overworld_frame(gObjectEventPic_Girafarig, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Pineco[] = { + overworld_frame(gObjectEventPic_Pineco, 4, 4, 0), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 1), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 2), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 3), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 4), + overworld_frame(gObjectEventPic_Pineco, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Forretress[] = { + overworld_frame(gObjectEventPic_Forretress, 4, 4, 0), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 1), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 2), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 3), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 4), + overworld_frame(gObjectEventPic_Forretress, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Dunsparce[] = { + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 0), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 1), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 2), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 3), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 4), + overworld_frame(gObjectEventPic_Dunsparce, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Gligar[] = { + overworld_frame(gObjectEventPic_Gligar, 4, 4, 0), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 1), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 2), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 3), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 4), + overworld_frame(gObjectEventPic_Gligar, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Steelix[] = { + overworld_frame(gObjectEventPic_Steelix, 4, 4, 0), + overworld_frame(gObjectEventPic_Steelix, 4, 4, 1), + overworld_frame(gObjectEventPic_Steelix, 4, 4, 2), + overworld_frame(gObjectEventPic_Steelix, 4, 4, 3), + overworld_frame(gObjectEventPic_Steelix, 4, 4, 4), + overworld_frame(gObjectEventPic_Steelix, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Snubbull[] = { + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 0), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 1), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 2), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 3), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 4), + overworld_frame(gObjectEventPic_Snubbull, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Granbull[] = { + overworld_frame(gObjectEventPic_Granbull, 4, 4, 0), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 1), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 2), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 3), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 4), + overworld_frame(gObjectEventPic_Granbull, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Qwilfish[] = { + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 0), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 1), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 2), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 3), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 4), + overworld_frame(gObjectEventPic_Qwilfish, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Scizor[] = { + overworld_frame(gObjectEventPic_Scizor, 4, 4, 0), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 1), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 2), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 3), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 4), + overworld_frame(gObjectEventPic_Scizor, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Shuckle[] = { + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 0), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 1), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 2), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 3), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 4), + overworld_frame(gObjectEventPic_Shuckle, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Heracross[] = { + overworld_frame(gObjectEventPic_Heracross, 4, 4, 0), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 1), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 2), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 3), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 4), + overworld_frame(gObjectEventPic_Heracross, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sneasel[] = { + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 0), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 1), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 2), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 3), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 4), + overworld_frame(gObjectEventPic_Sneasel, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Teddiursa[] = { + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 0), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 1), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 2), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 3), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 4), + overworld_frame(gObjectEventPic_Teddiursa, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ursaring[] = { + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 0), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 1), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 2), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 3), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 4), + overworld_frame(gObjectEventPic_Ursaring, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Slugma[] = { + overworld_frame(gObjectEventPic_Slugma, 4, 4, 0), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 1), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 2), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 3), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 4), + overworld_frame(gObjectEventPic_Slugma, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Magcargo[] = { + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 0), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 1), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 2), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 3), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 4), + overworld_frame(gObjectEventPic_Magcargo, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Swinub[] = { + overworld_frame(gObjectEventPic_Swinub, 4, 4, 0), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 1), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 2), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 3), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 4), + overworld_frame(gObjectEventPic_Swinub, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Piloswine[] = { + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 0), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 1), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 2), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 3), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 4), + overworld_frame(gObjectEventPic_Piloswine, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Corsola[] = { + overworld_frame(gObjectEventPic_Corsola, 4, 4, 0), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 1), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 2), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 3), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 4), + overworld_frame(gObjectEventPic_Corsola, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Remoraid[] = { + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 0), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 1), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 2), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 3), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 4), + overworld_frame(gObjectEventPic_Remoraid, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Octillery[] = { + overworld_frame(gObjectEventPic_Octillery, 4, 4, 0), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 1), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 2), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 3), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 4), + overworld_frame(gObjectEventPic_Octillery, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Delibird[] = { + overworld_frame(gObjectEventPic_Delibird, 4, 4, 0), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 1), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 2), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 3), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 4), + overworld_frame(gObjectEventPic_Delibird, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Mantine[] = { + overworld_frame(gObjectEventPic_Mantine, 4, 4, 0), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 1), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 2), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 3), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 4), + overworld_frame(gObjectEventPic_Mantine, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Skarmory[] = { + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 0), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 1), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 2), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 3), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 4), + overworld_frame(gObjectEventPic_Skarmory, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Houndour[] = { + overworld_frame(gObjectEventPic_Houndour, 4, 4, 0), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 1), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 2), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 3), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 4), + overworld_frame(gObjectEventPic_Houndour, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Houndoom[] = { + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 0), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 1), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 2), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 3), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 4), + overworld_frame(gObjectEventPic_Houndoom, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Kingdra[] = { + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 0), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 1), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 2), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 3), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 4), + overworld_frame(gObjectEventPic_Kingdra, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Phanpy[] = { + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 0), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 1), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 2), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 3), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 4), + overworld_frame(gObjectEventPic_Phanpy, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Donphan[] = { + overworld_frame(gObjectEventPic_Donphan, 4, 4, 0), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 1), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 2), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 3), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 4), + overworld_frame(gObjectEventPic_Donphan, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Porygon2[] = { + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 0), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 1), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 2), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 3), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 4), + overworld_frame(gObjectEventPic_Porygon2, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Stantler[] = { + overworld_frame(gObjectEventPic_Stantler, 4, 4, 0), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 1), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 2), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 3), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 4), + overworld_frame(gObjectEventPic_Stantler, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Smeargle[] = { + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 0), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 1), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 2), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 3), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 4), + overworld_frame(gObjectEventPic_Smeargle, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Tyrogue[] = { + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 0), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 1), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 2), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 3), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 4), + overworld_frame(gObjectEventPic_Tyrogue, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Hitmontop[] = { + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 0), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 1), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 2), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 3), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 4), + overworld_frame(gObjectEventPic_Hitmontop, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Smoochum[] = { + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 0), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 1), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 2), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 3), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 4), + overworld_frame(gObjectEventPic_Smoochum, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Elekid[] = { + overworld_frame(gObjectEventPic_Elekid, 4, 4, 0), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 1), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 2), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 3), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 4), + overworld_frame(gObjectEventPic_Elekid, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Magby[] = { + overworld_frame(gObjectEventPic_Magby, 4, 4, 0), + overworld_frame(gObjectEventPic_Magby, 4, 4, 1), + overworld_frame(gObjectEventPic_Magby, 4, 4, 2), + overworld_frame(gObjectEventPic_Magby, 4, 4, 3), + overworld_frame(gObjectEventPic_Magby, 4, 4, 4), + overworld_frame(gObjectEventPic_Magby, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Miltank[] = { + overworld_frame(gObjectEventPic_Miltank, 4, 4, 0), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 1), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 2), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 3), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 4), + overworld_frame(gObjectEventPic_Miltank, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Blissey[] = { + overworld_frame(gObjectEventPic_Blissey, 4, 4, 0), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 1), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 2), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 3), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 4), + overworld_frame(gObjectEventPic_Blissey, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Raikou[] = { + overworld_frame(gObjectEventPic_Raikou, 4, 4, 0), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 1), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 2), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 3), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 4), + overworld_frame(gObjectEventPic_Raikou, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Entei[] = { + overworld_frame(gObjectEventPic_Entei, 4, 4, 0), + overworld_frame(gObjectEventPic_Entei, 4, 4, 1), + overworld_frame(gObjectEventPic_Entei, 4, 4, 2), + overworld_frame(gObjectEventPic_Entei, 4, 4, 3), + overworld_frame(gObjectEventPic_Entei, 4, 4, 4), + overworld_frame(gObjectEventPic_Entei, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Suicune[] = { + overworld_frame(gObjectEventPic_Suicune, 4, 4, 0), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 1), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 2), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 3), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 4), + overworld_frame(gObjectEventPic_Suicune, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Larvitar[] = { + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 0), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 1), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 2), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 3), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 4), + overworld_frame(gObjectEventPic_Larvitar, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Pupitar[] = { + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 0), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 1), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 2), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 3), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 4), + overworld_frame(gObjectEventPic_Pupitar, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Tyranitar[] = { + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 0), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 1), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 2), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 3), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 4), + overworld_frame(gObjectEventPic_Tyranitar, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Lugia[] = { + overworld_frame(gObjectEventPic_Lugia, 4, 4, 0), + overworld_frame(gObjectEventPic_Lugia, 4, 4, 1), + overworld_frame(gObjectEventPic_Lugia, 4, 4, 2), + overworld_frame(gObjectEventPic_Lugia, 4, 4, 3), + overworld_frame(gObjectEventPic_Lugia, 4, 4, 4), + overworld_frame(gObjectEventPic_Lugia, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ho_oh[] = { + overworld_frame(gObjectEventPic_Ho_oh, 4, 4, 0), + overworld_frame(gObjectEventPic_Ho_oh, 4, 4, 1), + overworld_frame(gObjectEventPic_Ho_oh, 4, 4, 2), + overworld_frame(gObjectEventPic_Ho_oh, 4, 4, 3), + overworld_frame(gObjectEventPic_Ho_oh, 4, 4, 4), + overworld_frame(gObjectEventPic_Ho_oh, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Celebi[] = { + overworld_frame(gObjectEventPic_Celebi, 4, 4, 0), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 1), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 2), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 3), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 4), + overworld_frame(gObjectEventPic_Celebi, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Treecko[] = { + overworld_frame(gObjectEventPic_Treecko, 4, 4, 0), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 1), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 2), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 3), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 4), + overworld_frame(gObjectEventPic_Treecko, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Grovyle[] = { + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 0), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 1), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 2), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 3), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 4), + overworld_frame(gObjectEventPic_Grovyle, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sceptile[] = { + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 0), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 1), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 2), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 3), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 4), + overworld_frame(gObjectEventPic_Sceptile, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Torchic[] = { + overworld_frame(gObjectEventPic_Torchic, 4, 4, 0), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 1), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 2), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 3), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 4), + overworld_frame(gObjectEventPic_Torchic, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Combusken[] = { + overworld_frame(gObjectEventPic_Combusken, 4, 4, 0), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 1), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 2), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 3), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 4), + overworld_frame(gObjectEventPic_Combusken, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Blaziken[] = { + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 0), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 1), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 2), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 3), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 4), + overworld_frame(gObjectEventPic_Blaziken, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Mudkip[] = { + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 0), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 1), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 2), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 3), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 4), + overworld_frame(gObjectEventPic_Mudkip, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Marshtomp[] = { + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 0), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 1), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 2), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 3), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 4), + overworld_frame(gObjectEventPic_Marshtomp, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Swampert[] = { + overworld_frame(gObjectEventPic_Swampert, 4, 4, 0), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 1), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 2), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 3), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 4), + overworld_frame(gObjectEventPic_Swampert, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Poochyena[] = { + overworld_frame(gObjectEventPic_Poochyena, 4, 4, 0), + overworld_frame(gObjectEventPic_Poochyena, 4, 4, 1), + overworld_frame(gObjectEventPic_Poochyena, 4, 4, 2), + overworld_frame(gObjectEventPic_Poochyena, 4, 4, 3), + overworld_frame(gObjectEventPic_Poochyena, 4, 4, 4), + overworld_frame(gObjectEventPic_Poochyena, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Mightyena[] = { + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 0), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 1), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 2), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 3), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 4), + overworld_frame(gObjectEventPic_Mightyena, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Zigzagoon[] = { + overworld_frame(gObjectEventPic_Zigzagoon, 4, 4, 0), + overworld_frame(gObjectEventPic_Zigzagoon, 4, 4, 1), + overworld_frame(gObjectEventPic_Zigzagoon, 4, 4, 2), + overworld_frame(gObjectEventPic_Zigzagoon, 4, 4, 3), + overworld_frame(gObjectEventPic_Zigzagoon, 4, 4, 4), + overworld_frame(gObjectEventPic_Zigzagoon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Linoone[] = { + overworld_frame(gObjectEventPic_Linoone, 4, 4, 0), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 1), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 2), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 3), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 4), + overworld_frame(gObjectEventPic_Linoone, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Wurmple[] = { + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 0), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 1), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 2), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 3), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 4), + overworld_frame(gObjectEventPic_Wurmple, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Silcoon[] = { + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 0), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 1), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 2), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 3), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 4), + overworld_frame(gObjectEventPic_Silcoon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Beautifly[] = { + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 0), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 1), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 2), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 3), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 4), + overworld_frame(gObjectEventPic_Beautifly, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Cascoon[] = { + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 0), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 1), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 2), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 3), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 4), + overworld_frame(gObjectEventPic_Cascoon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Dustox[] = { + overworld_frame(gObjectEventPic_Dustox, 4, 4, 0), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 1), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 2), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 3), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 4), + overworld_frame(gObjectEventPic_Dustox, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Lotad[] = { + overworld_frame(gObjectEventPic_Lotad, 4, 4, 0), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 1), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 2), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 3), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 4), + overworld_frame(gObjectEventPic_Lotad, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Lombre[] = { + overworld_frame(gObjectEventPic_Lombre, 4, 4, 0), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 1), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 2), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 3), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 4), + overworld_frame(gObjectEventPic_Lombre, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ludicolo[] = { + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 0), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 1), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 2), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 3), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 4), + overworld_frame(gObjectEventPic_Ludicolo, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Seedot[] = { + overworld_frame(gObjectEventPic_Seedot, 4, 4, 0), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 1), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 2), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 3), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 4), + overworld_frame(gObjectEventPic_Seedot, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Nuzleaf[] = { + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 0), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 1), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 2), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 3), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 4), + overworld_frame(gObjectEventPic_Nuzleaf, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Shiftry[] = { + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 0), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 1), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 2), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 3), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 4), + overworld_frame(gObjectEventPic_Shiftry, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Taillow[] = { + overworld_frame(gObjectEventPic_Taillow, 4, 4, 0), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 1), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 2), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 3), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 4), + overworld_frame(gObjectEventPic_Taillow, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Swellow[] = { + overworld_frame(gObjectEventPic_Swellow, 4, 4, 0), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 1), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 2), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 3), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 4), + overworld_frame(gObjectEventPic_Swellow, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Wingull[] = { + overworld_frame(gObjectEventPic_Wingull, 4, 4, 0), + overworld_frame(gObjectEventPic_Wingull, 4, 4, 1), + overworld_frame(gObjectEventPic_Wingull, 4, 4, 2), + overworld_frame(gObjectEventPic_Wingull, 4, 4, 3), + overworld_frame(gObjectEventPic_Wingull, 4, 4, 4), + overworld_frame(gObjectEventPic_Wingull, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Pelipper[] = { + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 0), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 1), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 2), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 3), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 4), + overworld_frame(gObjectEventPic_Pelipper, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ralts[] = { + overworld_frame(gObjectEventPic_Ralts, 4, 4, 0), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 1), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 2), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 3), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 4), + overworld_frame(gObjectEventPic_Ralts, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Kirlia[] = { + overworld_frame(gObjectEventPic_Kirlia, 4, 4, 0), + overworld_frame(gObjectEventPic_Kirlia, 4, 4, 1), + overworld_frame(gObjectEventPic_Kirlia, 4, 4, 2), + overworld_frame(gObjectEventPic_Kirlia, 4, 4, 3), + overworld_frame(gObjectEventPic_Kirlia, 4, 4, 4), + overworld_frame(gObjectEventPic_Kirlia, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Gardevoir[] = { + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 0), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 1), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 2), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 3), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 4), + overworld_frame(gObjectEventPic_Gardevoir, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Surskit[] = { + overworld_frame(gObjectEventPic_Surskit, 4, 4, 0), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 1), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 2), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 3), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 4), + overworld_frame(gObjectEventPic_Surskit, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Masquerain[] = { + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 0), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 1), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 2), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 3), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 4), + overworld_frame(gObjectEventPic_Masquerain, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Shroomish[] = { + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 0), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 1), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 2), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 3), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 4), + overworld_frame(gObjectEventPic_Shroomish, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Breloom[] = { + overworld_frame(gObjectEventPic_Breloom, 4, 4, 0), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 1), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 2), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 3), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 4), + overworld_frame(gObjectEventPic_Breloom, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Slakoth[] = { + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 0), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 1), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 2), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 3), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 4), + overworld_frame(gObjectEventPic_Slakoth, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Vigoroth[] = { + overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 0), + overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 1), + overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 2), + overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 3), + overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4), + overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Slaking[] = { + overworld_frame(gObjectEventPic_Slaking, 4, 4, 0), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 1), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 2), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 3), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 4), + overworld_frame(gObjectEventPic_Slaking, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Nincada[] = { + overworld_frame(gObjectEventPic_Nincada, 4, 4, 0), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 1), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 2), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 3), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 4), + overworld_frame(gObjectEventPic_Nincada, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Ninjask[] = { + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 0), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 1), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 2), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 3), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 4), + overworld_frame(gObjectEventPic_Ninjask, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Shedinja[] = { + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 0), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 1), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 2), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 3), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 4), + overworld_frame(gObjectEventPic_Shedinja, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Whismur[] = { + overworld_frame(gObjectEventPic_Whismur, 4, 4, 0), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 1), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 2), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 3), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 4), + overworld_frame(gObjectEventPic_Whismur, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Loudred[] = { + overworld_frame(gObjectEventPic_Loudred, 4, 4, 0), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 1), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 2), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 3), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 4), + overworld_frame(gObjectEventPic_Loudred, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Exploud[] = { + overworld_frame(gObjectEventPic_Exploud, 4, 4, 0), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 1), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 2), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 3), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 4), + overworld_frame(gObjectEventPic_Exploud, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Makuhita[] = { + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 0), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 1), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 2), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 3), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 4), + overworld_frame(gObjectEventPic_Makuhita, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Hariyama[] = { + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 0), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 1), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 2), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 3), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 4), + overworld_frame(gObjectEventPic_Hariyama, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Azurill[] = { + overworld_frame(gObjectEventPic_Azurill, 4, 4, 0), + overworld_frame(gObjectEventPic_Azurill, 4, 4, 1), + overworld_frame(gObjectEventPic_Azurill, 4, 4, 2), + overworld_frame(gObjectEventPic_Azurill, 4, 4, 3), + overworld_frame(gObjectEventPic_Azurill, 4, 4, 4), + overworld_frame(gObjectEventPic_Azurill, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Nosepass[] = { + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 0), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 1), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 2), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 3), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 4), + overworld_frame(gObjectEventPic_Nosepass, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Skitty[] = { + overworld_frame(gObjectEventPic_Skitty, 4, 4, 0), + overworld_frame(gObjectEventPic_Skitty, 4, 4, 1), + overworld_frame(gObjectEventPic_Skitty, 4, 4, 2), + overworld_frame(gObjectEventPic_Skitty, 4, 4, 3), + overworld_frame(gObjectEventPic_Skitty, 4, 4, 4), + overworld_frame(gObjectEventPic_Skitty, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Delcatty[] = { + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 0), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 1), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 2), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 3), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 4), + overworld_frame(gObjectEventPic_Delcatty, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sableye[] = { + overworld_frame(gObjectEventPic_Sableye, 4, 4, 0), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 1), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 2), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 3), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 4), + overworld_frame(gObjectEventPic_Sableye, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Mawile[] = { + overworld_frame(gObjectEventPic_Mawile, 4, 4, 0), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 1), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 2), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 3), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 4), + overworld_frame(gObjectEventPic_Mawile, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Aron[] = { + overworld_frame(gObjectEventPic_Aron, 4, 4, 0), + overworld_frame(gObjectEventPic_Aron, 4, 4, 1), + overworld_frame(gObjectEventPic_Aron, 4, 4, 2), + overworld_frame(gObjectEventPic_Aron, 4, 4, 3), + overworld_frame(gObjectEventPic_Aron, 4, 4, 4), + overworld_frame(gObjectEventPic_Aron, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Lairon[] = { + overworld_frame(gObjectEventPic_Lairon, 4, 4, 0), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 1), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 2), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 3), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 4), + overworld_frame(gObjectEventPic_Lairon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Aggron[] = { + overworld_frame(gObjectEventPic_Aggron, 4, 4, 0), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 1), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 2), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 3), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 4), + overworld_frame(gObjectEventPic_Aggron, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Meditite[] = { + overworld_frame(gObjectEventPic_Meditite, 4, 4, 0), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 1), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 2), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 3), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 4), + overworld_frame(gObjectEventPic_Meditite, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Medicham[] = { + overworld_frame(gObjectEventPic_Medicham, 4, 4, 0), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 1), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 2), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 3), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 4), + overworld_frame(gObjectEventPic_Medicham, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Electrike[] = { + overworld_frame(gObjectEventPic_Electrike, 4, 4, 0), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 1), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 2), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 3), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 4), + overworld_frame(gObjectEventPic_Electrike, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Manectric[] = { + overworld_frame(gObjectEventPic_Manectric, 4, 4, 0), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 1), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 2), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 3), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 4), + overworld_frame(gObjectEventPic_Manectric, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Plusle[] = { + overworld_frame(gObjectEventPic_Plusle, 4, 4, 0), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 1), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 2), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 3), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 4), + overworld_frame(gObjectEventPic_Plusle, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Minun[] = { + overworld_frame(gObjectEventPic_Minun, 4, 4, 0), + overworld_frame(gObjectEventPic_Minun, 4, 4, 1), + overworld_frame(gObjectEventPic_Minun, 4, 4, 2), + overworld_frame(gObjectEventPic_Minun, 4, 4, 3), + overworld_frame(gObjectEventPic_Minun, 4, 4, 4), + overworld_frame(gObjectEventPic_Minun, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Volbeat[] = { + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 0), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 1), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 2), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 3), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 4), + overworld_frame(gObjectEventPic_Volbeat, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Illumise[] = { + overworld_frame(gObjectEventPic_Illumise, 4, 4, 0), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 1), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 2), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 3), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 4), + overworld_frame(gObjectEventPic_Illumise, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Roselia[] = { + overworld_frame(gObjectEventPic_Roselia, 4, 4, 0), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 1), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 2), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 3), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 4), + overworld_frame(gObjectEventPic_Roselia, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Gulpin[] = { + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 0), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 1), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 2), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 3), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 4), + overworld_frame(gObjectEventPic_Gulpin, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Swalot[] = { + overworld_frame(gObjectEventPic_Swalot, 4, 4, 0), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 1), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 2), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 3), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 4), + overworld_frame(gObjectEventPic_Swalot, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Carvanha[] = { + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 0), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 1), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 2), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 3), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 4), + overworld_frame(gObjectEventPic_Carvanha, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sharpedo[] = { + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 0), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 1), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 2), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 3), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 4), + overworld_frame(gObjectEventPic_Sharpedo, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Wailmer[] = { + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 0), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 1), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 2), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 3), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 4), + overworld_frame(gObjectEventPic_Wailmer, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Wailord[] = { + overworld_frame(gObjectEventPic_Wailord, 4, 4, 0), + overworld_frame(gObjectEventPic_Wailord, 4, 4, 1), + overworld_frame(gObjectEventPic_Wailord, 4, 4, 2), + overworld_frame(gObjectEventPic_Wailord, 4, 4, 3), + overworld_frame(gObjectEventPic_Wailord, 4, 4, 4), + overworld_frame(gObjectEventPic_Wailord, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Numel[] = { + overworld_frame(gObjectEventPic_Numel, 4, 4, 0), + overworld_frame(gObjectEventPic_Numel, 4, 4, 1), + overworld_frame(gObjectEventPic_Numel, 4, 4, 2), + overworld_frame(gObjectEventPic_Numel, 4, 4, 3), + overworld_frame(gObjectEventPic_Numel, 4, 4, 4), + overworld_frame(gObjectEventPic_Numel, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Camerupt[] = { + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 0), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 1), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 2), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 3), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 4), + overworld_frame(gObjectEventPic_Camerupt, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Torkoal[] = { + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 0), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 1), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 2), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 3), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 4), + overworld_frame(gObjectEventPic_Torkoal, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Spoink[] = { + overworld_frame(gObjectEventPic_Spoink, 4, 4, 0), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 1), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 2), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 3), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 4), + overworld_frame(gObjectEventPic_Spoink, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Grumpig[] = { + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 0), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 1), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 2), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 3), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 4), + overworld_frame(gObjectEventPic_Grumpig, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Spinda[] = { + overworld_frame(gObjectEventPic_Spinda, 4, 4, 0), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 1), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 2), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 3), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 4), + overworld_frame(gObjectEventPic_Spinda, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Trapinch[] = { + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 0), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 1), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 2), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 3), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 4), + overworld_frame(gObjectEventPic_Trapinch, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Vibrava[] = { + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 0), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 1), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 2), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 3), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 4), + overworld_frame(gObjectEventPic_Vibrava, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Flygon[] = { + overworld_frame(gObjectEventPic_Flygon, 4, 4, 0), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 1), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 2), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 3), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 4), + overworld_frame(gObjectEventPic_Flygon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Cacnea[] = { + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 0), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 1), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 2), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 3), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 4), + overworld_frame(gObjectEventPic_Cacnea, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Cacturne[] = { + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 0), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 1), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 2), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 3), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 4), + overworld_frame(gObjectEventPic_Cacturne, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Swablu[] = { + overworld_frame(gObjectEventPic_Swablu, 4, 4, 0), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 1), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 2), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 3), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 4), + overworld_frame(gObjectEventPic_Swablu, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Altaria[] = { + overworld_frame(gObjectEventPic_Altaria, 4, 4, 0), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 1), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 2), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 3), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 4), + overworld_frame(gObjectEventPic_Altaria, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Zangoose[] = { + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 0), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 1), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 2), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 3), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 4), + overworld_frame(gObjectEventPic_Zangoose, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Seviper[] = { + overworld_frame(gObjectEventPic_Seviper, 4, 4, 0), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 1), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 2), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 3), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 4), + overworld_frame(gObjectEventPic_Seviper, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Lunatone[] = { + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 0), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 1), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 2), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 3), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 4), + overworld_frame(gObjectEventPic_Lunatone, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Solrock[] = { + overworld_frame(gObjectEventPic_Solrock, 4, 4, 0), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 1), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 2), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 3), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 4), + overworld_frame(gObjectEventPic_Solrock, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Barboach[] = { + overworld_frame(gObjectEventPic_Barboach, 4, 4, 0), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 1), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 2), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 3), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 4), + overworld_frame(gObjectEventPic_Barboach, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Whiscash[] = { + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 0), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 1), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 2), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 3), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 4), + overworld_frame(gObjectEventPic_Whiscash, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Corphish[] = { + overworld_frame(gObjectEventPic_Corphish, 4, 4, 0), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 1), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 2), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 3), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 4), + overworld_frame(gObjectEventPic_Corphish, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Crawdaunt[] = { + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 0), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 1), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 2), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 3), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 4), + overworld_frame(gObjectEventPic_Crawdaunt, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Baltoy[] = { + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 0), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 1), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 2), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 3), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 4), + overworld_frame(gObjectEventPic_Baltoy, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Claydol[] = { + overworld_frame(gObjectEventPic_Claydol, 4, 4, 0), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 1), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 2), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 3), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 4), + overworld_frame(gObjectEventPic_Claydol, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Lileep[] = { + overworld_frame(gObjectEventPic_Lileep, 4, 4, 0), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 1), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 2), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 3), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 4), + overworld_frame(gObjectEventPic_Lileep, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Cradily[] = { + overworld_frame(gObjectEventPic_Cradily, 4, 4, 0), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 1), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 2), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 3), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 4), + overworld_frame(gObjectEventPic_Cradily, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Anorith[] = { + overworld_frame(gObjectEventPic_Anorith, 4, 4, 0), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 1), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 2), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 3), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 4), + overworld_frame(gObjectEventPic_Anorith, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Armaldo[] = { + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 0), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 1), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 2), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 3), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 4), + overworld_frame(gObjectEventPic_Armaldo, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Feebas[] = { + overworld_frame(gObjectEventPic_Feebas, 4, 4, 0), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 1), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 2), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 3), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 4), + overworld_frame(gObjectEventPic_Feebas, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Milotic[] = { + overworld_frame(gObjectEventPic_Milotic, 4, 4, 0), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 1), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 2), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 3), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 4), + overworld_frame(gObjectEventPic_Milotic, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Castform[] = { + overworld_frame(gObjectEventPic_Castform, 4, 4, 0), + overworld_frame(gObjectEventPic_Castform, 4, 4, 1), + overworld_frame(gObjectEventPic_Castform, 4, 4, 2), + overworld_frame(gObjectEventPic_Castform, 4, 4, 3), + overworld_frame(gObjectEventPic_Castform, 4, 4, 4), + overworld_frame(gObjectEventPic_Castform, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_CastformSunny[] = { + overworld_frame(gObjectEventPic_CastformSunny, 4, 4, 0), + overworld_frame(gObjectEventPic_CastformSunny, 4, 4, 1), + overworld_frame(gObjectEventPic_CastformSunny, 4, 4, 2), + overworld_frame(gObjectEventPic_CastformSunny, 4, 4, 3), + overworld_frame(gObjectEventPic_CastformSunny, 4, 4, 4), + overworld_frame(gObjectEventPic_CastformSunny, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_CastformRainy[] = { + overworld_frame(gObjectEventPic_CastformRainy, 4, 4, 0), + overworld_frame(gObjectEventPic_CastformRainy, 4, 4, 1), + overworld_frame(gObjectEventPic_CastformRainy, 4, 4, 2), + overworld_frame(gObjectEventPic_CastformRainy, 4, 4, 3), + overworld_frame(gObjectEventPic_CastformRainy, 4, 4, 4), + overworld_frame(gObjectEventPic_CastformRainy, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_CastformSnowy[] = { + overworld_frame(gObjectEventPic_CastformSnowy, 4, 4, 0), + overworld_frame(gObjectEventPic_CastformSnowy, 4, 4, 1), + overworld_frame(gObjectEventPic_CastformSnowy, 4, 4, 2), + overworld_frame(gObjectEventPic_CastformSnowy, 4, 4, 3), + overworld_frame(gObjectEventPic_CastformSnowy, 4, 4, 4), + overworld_frame(gObjectEventPic_CastformSnowy, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Kecleon[] = { + overworld_frame(gObjectEventPic_Kecleon, 4, 4, 0), + overworld_frame(gObjectEventPic_Kecleon, 4, 4, 1), + overworld_frame(gObjectEventPic_Kecleon, 4, 4, 2), + overworld_frame(gObjectEventPic_Kecleon, 4, 4, 3), + overworld_frame(gObjectEventPic_Kecleon, 4, 4, 4), + overworld_frame(gObjectEventPic_Kecleon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Shuppet[] = { + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 0), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 1), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 2), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 3), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 4), + overworld_frame(gObjectEventPic_Shuppet, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Banette[] = { + overworld_frame(gObjectEventPic_Banette, 4, 4, 0), + overworld_frame(gObjectEventPic_Banette, 4, 4, 1), + overworld_frame(gObjectEventPic_Banette, 4, 4, 2), + overworld_frame(gObjectEventPic_Banette, 4, 4, 3), + overworld_frame(gObjectEventPic_Banette, 4, 4, 4), + overworld_frame(gObjectEventPic_Banette, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Duskull[] = { + overworld_frame(gObjectEventPic_Duskull, 4, 4, 0), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 1), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 2), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 3), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 4), + overworld_frame(gObjectEventPic_Duskull, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Dusclops[] = { + overworld_frame(gObjectEventPic_Dusclops, 4, 4, 0), + overworld_frame(gObjectEventPic_Dusclops, 4, 4, 1), + overworld_frame(gObjectEventPic_Dusclops, 4, 4, 2), + overworld_frame(gObjectEventPic_Dusclops, 4, 4, 3), + overworld_frame(gObjectEventPic_Dusclops, 4, 4, 4), + overworld_frame(gObjectEventPic_Dusclops, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Tropius[] = { + overworld_frame(gObjectEventPic_Tropius, 4, 4, 0), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 1), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 2), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 3), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 4), + overworld_frame(gObjectEventPic_Tropius, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Chimecho[] = { + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 0), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 1), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 2), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 3), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 4), + overworld_frame(gObjectEventPic_Chimecho, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Absol[] = { + overworld_frame(gObjectEventPic_Absol, 4, 4, 0), + overworld_frame(gObjectEventPic_Absol, 4, 4, 1), + overworld_frame(gObjectEventPic_Absol, 4, 4, 2), + overworld_frame(gObjectEventPic_Absol, 4, 4, 3), + overworld_frame(gObjectEventPic_Absol, 4, 4, 4), + overworld_frame(gObjectEventPic_Absol, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Wynaut[] = { + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 0), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 1), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 2), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 3), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 4), + overworld_frame(gObjectEventPic_Wynaut, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Snorunt[] = { + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 0), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 1), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 2), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 3), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 4), + overworld_frame(gObjectEventPic_Snorunt, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Glalie[] = { + overworld_frame(gObjectEventPic_Glalie, 4, 4, 0), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 1), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 2), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 3), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 4), + overworld_frame(gObjectEventPic_Glalie, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Spheal[] = { + overworld_frame(gObjectEventPic_Spheal, 4, 4, 0), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 1), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 2), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 3), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 4), + overworld_frame(gObjectEventPic_Spheal, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Sealeo[] = { + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 0), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 1), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 2), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 3), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 4), + overworld_frame(gObjectEventPic_Sealeo, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Walrein[] = { + overworld_frame(gObjectEventPic_Walrein, 4, 4, 0), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 1), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 2), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 3), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 4), + overworld_frame(gObjectEventPic_Walrein, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Clamperl[] = { + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 0), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 1), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 2), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 3), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 4), + overworld_frame(gObjectEventPic_Clamperl, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Huntail[] = { + overworld_frame(gObjectEventPic_Huntail, 4, 4, 0), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 1), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 2), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 3), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 4), + overworld_frame(gObjectEventPic_Huntail, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Gorebyss[] = { + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 0), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 1), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 2), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 3), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 4), + overworld_frame(gObjectEventPic_Gorebyss, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Relicanth[] = { + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 0), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 1), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 2), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 3), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 4), + overworld_frame(gObjectEventPic_Relicanth, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Luvdisc[] = { + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 0), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 1), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 2), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 3), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 4), + overworld_frame(gObjectEventPic_Luvdisc, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Bagon[] = { + overworld_frame(gObjectEventPic_Bagon, 4, 4, 0), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 1), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 2), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 3), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 4), + overworld_frame(gObjectEventPic_Bagon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Shelgon[] = { + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 0), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 1), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 2), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 3), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 4), + overworld_frame(gObjectEventPic_Shelgon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Salamence[] = { + overworld_frame(gObjectEventPic_Salamence, 4, 4, 0), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 1), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 2), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 3), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 4), + overworld_frame(gObjectEventPic_Salamence, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Beldum[] = { + overworld_frame(gObjectEventPic_Beldum, 4, 4, 0), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 1), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 2), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 3), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 4), + overworld_frame(gObjectEventPic_Beldum, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Metang[] = { + overworld_frame(gObjectEventPic_Metang, 4, 4, 0), + overworld_frame(gObjectEventPic_Metang, 4, 4, 1), + overworld_frame(gObjectEventPic_Metang, 4, 4, 2), + overworld_frame(gObjectEventPic_Metang, 4, 4, 3), + overworld_frame(gObjectEventPic_Metang, 4, 4, 4), + overworld_frame(gObjectEventPic_Metang, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Metagross[] = { + overworld_frame(gObjectEventPic_Metagross, 4, 4, 0), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 1), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 2), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 3), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 4), + overworld_frame(gObjectEventPic_Metagross, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Regirock[] = { + overworld_frame(gObjectEventPic_Regirock, 4, 4, 0), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 1), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 2), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 3), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 4), + overworld_frame(gObjectEventPic_Regirock, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Regice[] = { + overworld_frame(gObjectEventPic_Regice, 4, 4, 0), + overworld_frame(gObjectEventPic_Regice, 4, 4, 1), + overworld_frame(gObjectEventPic_Regice, 4, 4, 2), + overworld_frame(gObjectEventPic_Regice, 4, 4, 3), + overworld_frame(gObjectEventPic_Regice, 4, 4, 4), + overworld_frame(gObjectEventPic_Regice, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Registeel[] = { + overworld_frame(gObjectEventPic_Registeel, 4, 4, 0), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 1), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 2), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 3), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 4), + overworld_frame(gObjectEventPic_Registeel, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Latias[] = { + overworld_frame(gObjectEventPic_Latias, 4, 4, 0), + overworld_frame(gObjectEventPic_Latias, 4, 4, 1), + overworld_frame(gObjectEventPic_Latias, 4, 4, 2), + overworld_frame(gObjectEventPic_Latias, 4, 4, 3), + overworld_frame(gObjectEventPic_Latias, 4, 4, 4), + overworld_frame(gObjectEventPic_Latias, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Latios[] = { + overworld_frame(gObjectEventPic_Latios, 4, 4, 0), + overworld_frame(gObjectEventPic_Latios, 4, 4, 1), + overworld_frame(gObjectEventPic_Latios, 4, 4, 2), + overworld_frame(gObjectEventPic_Latios, 4, 4, 3), + overworld_frame(gObjectEventPic_Latios, 4, 4, 4), + overworld_frame(gObjectEventPic_Latios, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Kyogre[] = { + overworld_frame(gObjectEventPic_Kyogre, 4, 4, 0), + overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1), + overworld_frame(gObjectEventPic_Kyogre, 4, 4, 2), + overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3), + overworld_frame(gObjectEventPic_Kyogre, 4, 4, 4), + overworld_frame(gObjectEventPic_Kyogre, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Groudon[] = { + overworld_frame(gObjectEventPic_Groudon, 4, 4, 0), + overworld_frame(gObjectEventPic_Groudon, 4, 4, 1), + overworld_frame(gObjectEventPic_Groudon, 4, 4, 2), + overworld_frame(gObjectEventPic_Groudon, 4, 4, 3), + overworld_frame(gObjectEventPic_Groudon, 4, 4, 4), + overworld_frame(gObjectEventPic_Groudon, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Rayquaza[] = { + overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 0), + overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 1), + overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 2), + overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 3), + overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 4), + overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Jirachi[] = { + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 0), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 1), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 2), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 3), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 4), + overworld_frame(gObjectEventPic_Jirachi, 4, 4, 5), +}; +static const struct SpriteFrameImage sPicTable_Deoxys[] = { + overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0), + overworld_frame(gObjectEventPic_Deoxys, 4, 4, 1), + overworld_frame(gObjectEventPic_Deoxys, 4, 4, 2), + overworld_frame(gObjectEventPic_Deoxys, 4, 4, 3), + overworld_frame(gObjectEventPic_Deoxys, 4, 4, 4), + overworld_frame(gObjectEventPic_Deoxys, 4, 4, 5), +}; + +static const struct SpriteFrameImage sPicTable_DeoxysOld[] = { + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0), + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0), + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0), + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0), + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 1), + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0), + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 1), + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0), + overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0), +}; + +static const struct SpriteFrameImage sPicTable_MewOld[] = { + overworld_frame(gObjectEventPic_MewOld, 2, 4, 0), + overworld_frame(gObjectEventPic_MewOld, 2, 4, 1), + overworld_frame(gObjectEventPic_MewOld, 2, 4, 2), + overworld_frame(gObjectEventPic_MewOld, 2, 4, 3), + overworld_frame(gObjectEventPic_MewOld, 2, 4, 4), + overworld_frame(gObjectEventPic_MewOld, 2, 4, 5), + overworld_frame(gObjectEventPic_MewOld, 2, 4, 6), + overworld_frame(gObjectEventPic_MewOld, 2, 4, 7), + overworld_frame(gObjectEventPic_MewOld, 2, 4, 8), +}; + +static const struct SpriteFrameImage sPicTable_DusclopsOld[] = { + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 0), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 1), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 2), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 3), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 4), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 5), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 6), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 7), + overworld_frame(gObjectEventPic_DusclopsOld, 2, 4, 8), +}; + +static const struct SpriteFrameImage sPicTable_AzurillOld[] = { + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 0), + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 1), + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 2), + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 0), + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 0), + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 1), + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 1), + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 2), + overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 2), +}; + +static const struct SpriteFrameImage sPicTable_KecleonOld[] = { + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 0), + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 1), + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 2), + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 0), + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 0), + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 1), + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 1), + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 2), + overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 2), +}; + +static const struct SpriteFrameImage sPicTable_WingullOld[] = { + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 0), + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 2), + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 4), + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 1), + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 1), + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 3), + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 3), + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 5), + overworld_frame(gObjectEventPic_WingullOld, 2, 2, 5), +}; + +static const struct SpriteFrameImage sPicTable_AzumarillOld[] = { + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 0), + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 1), + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 2), + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 0), + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 0), + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 1), + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 1), + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 2), + overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 2), +}; + +static const struct SpriteFrameImage sPicTable_PikachuOld[] = { + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 0), + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 1), + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 2), + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 0), + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 0), + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 1), + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 1), + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 2), + overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 2), +}; + +static const struct SpriteFrameImage sPicTable_ZigzagoonOld[] = { + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 0), + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 1), + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 2), + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 0), + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 0), + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 1), + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 1), + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 2), + overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 2), +}; + +static const struct SpriteFrameImage sPicTable_SkittyOld[] = { + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 0), + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 1), + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 2), + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 0), + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 0), + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 1), + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 1), + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 2), + overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 2), +}; + +static const struct SpriteFrameImage sPicTable_PoochyenaOld[] = { + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 0), + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 1), + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 2), + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 3), + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 4), + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 5), + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 6), + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 7), + overworld_frame(gObjectEventPic_PoochyenaOld, 4, 4, 8), +}; + +static const struct SpriteFrameImage sPicTable_LugiaOld[] = { + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0), + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0), + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0), + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0), + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 1), + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0), + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 1), + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0), + overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 1), +}; + +static const struct SpriteFrameImage sPicTable_HoOhOld[] = { + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0), + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0), + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0), + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0), + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 1), + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0), + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 1), + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0), + overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 1), }; static const struct SpriteFrameImage sPicTable_RubySapphireBrendan[] = { @@ -2161,6 +5487,18 @@ static const struct SpriteFrameImage sPicTable_RubySapphireBrendan[] = { overworld_frame(gObjectEventPic_RubySapphireBrendanNormal, 2, 4, 8), }; +static const struct SpriteFrameImage sPicTable_KirliaOld[] = { + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 0), + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 1), + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 2), + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 3), + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 4), + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 5), + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 6), + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 7), + overworld_frame(gObjectEventPic_KirliaOld, 2, 4, 8), +}; + static const struct SpriteFrameImage sPicTable_RubySapphireMay[] = { overworld_frame(gObjectEventPic_RubySapphireMayNormal, 2, 4, 0), overworld_frame(gObjectEventPic_RubySapphireMayNormal, 2, 4, 1), diff --git a/src/data/text/follower_messages.h b/src/data/text/follower_messages.h new file mode 100644 index 0000000000..3fbec109cc --- /dev/null +++ b/src/data/text/follower_messages.h @@ -0,0 +1,301 @@ +extern const u8 EventScript_FollowerIsShivering[]; +extern const u8 EventScript_FollowerNostalgia[]; +extern const u8 EventScript_FollowerHopping[]; +extern const u8 EventScript_FollowerJumpOnPlayer[]; +extern const u8 EventScript_FollowerCuddling[]; +extern const u8 EventScript_FollowerShiverCuddling[]; +extern const u8 EventScript_FollowerGetCloser[]; +extern const u8 EventScript_FollowerPokingPlayer[]; +extern const u8 EventScript_FollowerLookAround[]; +extern const u8 EventScript_FollowerLookAway[]; +extern const u8 EventScript_FollowerLookAwayBark[]; +extern const u8 EventScript_FollowerLookAwayPoke[]; +extern const u8 EventScript_FollowerPokeGround[]; +extern const u8 EventScript_FollowerStartled[]; +extern const u8 EventScript_FollowerFastHopping[]; +extern const u8 EventScript_FollowerDizzy[]; +extern const u8 EventScript_FollowerLookAroundScared[]; +extern const u8 EventScript_FollowerDance[]; +extern const u8 EventScript_FollowerLookUp[]; + +// 'Generic', unconditional happy messages +static const u8 sHappyMsg00[] = _("{STR_VAR_1} began poking you in the\nstomach."); +static const u8 sHappyMsg01[] = _("{STR_VAR_1} is happy but shy."); +static const u8 sHappyMsg02[] = _("{STR_VAR_1} is coming along happily."); +static const u8 sHappyMsg03[] = _("{STR_VAR_1} is composed."); +static const u8 sHappyMsg04[] = _("{STR_VAR_1} seems to be feeling\ngreat about walking with you!"); +static const u8 sHappyMsg05[] = _("{STR_VAR_1} is glowing with health."); +static const u8 sHappyMsg06[] = _("{STR_VAR_1} looks very happy."); +static const u8 sHappyMsg07[] = _("{STR_VAR_1} put in extra effort."); +static const u8 sHappyMsg08[] = _("{STR_VAR_1} is smelling the scents\nof the surrounding air."); +static const u8 sHappyMsg09[] = _("{STR_VAR_1} is jumping for joy!"); +static const u8 sHappyMsg10[] = _("{STR_VAR_1} is still feeling great!"); +static const u8 sHappyMsg11[] = _("Your POKéMON has caught the scent of\nsmoke."); +static const u8 sHappyMsg12[] = _("{STR_VAR_1} is poking at your belly."); +static const u8 sHappyMsg13[] = _("Your POKéMON stretched out its body\nand is relaxing."); +static const u8 sHappyMsg14[] = _("{STR_VAR_1} looks like it wants to\nlead!"); +static const u8 sHappyMsg15[] = _("{STR_VAR_1} is doing it's best to\nkeep up with you."); +static const u8 sHappyMsg16[] = _("{STR_VAR_1} is happily cuddling up\nto you!"); +static const u8 sHappyMsg17[] = _("{STR_VAR_1} is full of life!"); +static const u8 sHappyMsg18[] = _("{STR_VAR_1} seems to be very happy!"); +static const u8 sHappyMsg19[] = _("{STR_VAR_1} is so happy that it\ncan't stand still!"); +static const u8 sHappyMsg20[] = _("{STR_VAR_1} nodded slowly."); +static const u8 sHappyMsg21[] = _("{STR_VAR_1} is very eager!"); +static const u8 sHappyMsg22[] = _("{STR_VAR_1} is wandering around and\nlistening to the different sounds."); +static const u8 sHappyMsg23[] = _("{STR_VAR_1} looks very interested."); +static const u8 sHappyMsg24[] = _("{STR_VAR_1} is somehow forcing\nitself to keep going."); +static const u8 sHappyMsg25[] = _("{STR_VAR_1} gave you a sunny look!"); +static const u8 sHappyMsg26[] = _("{STR_VAR_1} gives you a happy look\nand a smile."); +static const u8 sHappyMsg27[] = _("Your POKéMON is smelling the scent\nof flowers."); +static const u8 sHappyMsg28[] = _("{STR_VAR_1} seems very happy to see\nyou!"); +static const u8 sHappyMsg29[] = _("{STR_VAR_1} faced this way and\ngrinned."); +static const u8 sHappyMsg30[] = _("{STR_VAR_1} happily cuddled up to\nyou!"); + // Conditional messages begin here, index 31 +static const u8 sHappyMsg31[] = _("Your POKéMON seems happy about the\ngreat weather."); +static const u8 sHappyMsg32[] = _("{STR_VAR_1} is very composed and\nsure of itself!"); + +const struct FollowerMsgInfo gFollowerHappyMessages[] = { + {sHappyMsg00, EventScript_FollowerPokingPlayer}, + {sHappyMsg01}, {sHappyMsg02}, {sHappyMsg03}, {sHappyMsg04}, {sHappyMsg05}, {sHappyMsg06}, {sHappyMsg07}, + {sHappyMsg08, EventScript_FollowerLookAround}, + {sHappyMsg09, EventScript_FollowerHopping}, + {sHappyMsg10}, {sHappyMsg11}, + {sHappyMsg12, EventScript_FollowerPokingPlayer}, + {sHappyMsg13, EventScript_FollowerLookAround}, + {sHappyMsg14}, {sHappyMsg15}, + {sHappyMsg16, EventScript_FollowerCuddling}, + {sHappyMsg17}, {sHappyMsg18}, + {sHappyMsg19, EventScript_FollowerFastHopping}, + {sHappyMsg20}, {sHappyMsg21}, {sHappyMsg22}, {sHappyMsg23}, {sHappyMsg24}, {sHappyMsg25}, {sHappyMsg26}, {sHappyMsg27}, {sHappyMsg28}, {sHappyMsg29}, + {sHappyMsg30, EventScript_FollowerCuddling}, + {sHappyMsg31}, {sHappyMsg32}, +}; + +// Unconditional neutral messages +static const u8 sNeutralMsg00[] = _("{STR_VAR_1} is steadily poking at\nthe ground."); +static const u8 sNeutralMsg01[] = _("{STR_VAR_1} is standing guard."); +static const u8 sNeutralMsg02[] = _("{STR_VAR_1} is staring patiently at\nnothing at all."); +static const u8 sNeutralMsg03[] = _("{STR_VAR_1} is wandering around."); +static const u8 sNeutralMsg04[] = _("Your POKéMON yawned loudly!"); +static const u8 sNeutralMsg05[] = _("Your POKéMON is looking around\nrestlessly."); +static const u8 sNeutralMsg06[] = _("{STR_VAR_1} is looking this way and\nsmiling."); +static const u8 sNeutralMsg07[] = _("{STR_VAR_1} is gazing around\nrestlessly."); +static const u8 sNeutralMsg08[] = _("{STR_VAR_1} let out a battle cry."); +static const u8 sNeutralMsg09[] = _("{STR_VAR_1} danced a wonderful\ndance!"); +static const u8 sNeutralMsg10[] = _("{STR_VAR_1} is very eager."); +static const u8 sNeutralMsg11[] = _("{STR_VAR_1} is staring intently into\nthe distance."); +static const u8 sNeutralMsg12[] = _("{STR_VAR_1} is on the lookout!"); +static const u8 sNeutralMsg13[] = _("{STR_VAR_1} looked off into the\ndistance and barked!"); + +const struct FollowerMsgInfo gFollowerNeutralMessages[] = { + {sNeutralMsg00, EventScript_FollowerPokeGround}, + {sNeutralMsg01}, + {sNeutralMsg02, EventScript_FollowerLookAway}, + {sNeutralMsg03, EventScript_FollowerLookAround}, + {sNeutralMsg04}, + {sNeutralMsg05, EventScript_FollowerLookAround}, + {sNeutralMsg06}, {sNeutralMsg07}, {sNeutralMsg08}, + {sNeutralMsg09, EventScript_FollowerDance}, + {sNeutralMsg10}, + {sNeutralMsg11, EventScript_FollowerLookAway}, + {sNeutralMsg12}, + {sNeutralMsg13, EventScript_FollowerLookAwayBark}, +}; + +// Unconditional sad messages +static const u8 sSadMsg00[] = _("{STR_VAR_1} is dizzy."); +static const u8 sSadMsg01[] = _("{STR_VAR_1} is stepping on your\nfeet!"); +static const u8 sSadMsg02[] = _("{STR_VAR_1} seems a little tired."); + // Conditional messages begin, index 3 +static const u8 sSadMsg03[] = _("{STR_VAR_1} is not happy."); +static const u8 sSadMsg04[] = _("{STR_VAR_1} is going to fall down!\n"); +static const u8 sSadMsg05[] = _("{STR_VAR_1} seems to be about to\nfall over!"); +static const u8 sSadMsg06[] = _("{STR_VAR_1} is trying very hard to\nkeep up with you…"); +static const u8 sSadMsg07[] = _("{STR_VAR_1} is nervous."); + +const struct FollowerMsgInfo gFollowerSadMessages[] = { + {sSadMsg00, EventScript_FollowerDizzy}, + {sSadMsg01}, {sSadMsg02}, + {sSadMsg03}, {sSadMsg04}, {sSadMsg05}, {sSadMsg06}, {sSadMsg07}, +}; + +// Unconditional upset messages +static const u8 sUpsetMsg00[] = _("{STR_VAR_1} seems unhappy somehow…"); +static const u8 sUpsetMsg01[] = _("{STR_VAR_1} is making an unhappy\nface."); +static const u8 sUpsetMsg02[] = _("…Your POKéMON seems a little\ncold."); + // Conditional messages, index 3 +static const u8 sUpsetMsg03[] = _("{STR_VAR_1} is taking shelter in the\ngrass from the rain."); + +const struct FollowerMsgInfo gFollowerUpsetMessages[] = { + {sUpsetMsg00}, {sUpsetMsg01}, + {sUpsetMsg02, EventScript_FollowerIsShivering}, + {sUpsetMsg03}, +}; + +// Unconditional angry messages +static const u8 sAngryMsg00[] = _("{STR_VAR_1} let out a roar!"); +static const u8 sAngryMsg01[] = _("{STR_VAR_1} is making a face like\nits angry!"); +static const u8 sAngryMsg02[] = _("{STR_VAR_1} seems to be angry for\nsome reason."); +static const u8 sAngryMsg03[] = _("Your POKéMON turned to face the\nother way, showing a defiant face."); +static const u8 sAngryMsg04[] = _("{STR_VAR_1} cried out."); + +const struct FollowerMsgInfo gFollowerAngryMessages[] = { + {sAngryMsg00}, {sAngryMsg01}, {sAngryMsg02}, + {sAngryMsg03, EventScript_FollowerLookAway}, + {sAngryMsg04}, +}; + +// Unconditional pensive messages +static const u8 sPensiveMsg00[] = _("{STR_VAR_1} is looking down\nsteadily."); +static const u8 sPensiveMsg01[] = _("{STR_VAR_1} is surveying the area."); +static const u8 sPensiveMsg02[] = _("{STR_VAR_1} is peering down."); +static const u8 sPensiveMsg03[] = _("{STR_VAR_1} is somehow fighting off\nsleep…"); +static const u8 sPensiveMsg04[] = _("{STR_VAR_1} seems to be wandering\naround."); +static const u8 sPensiveMsg05[] = _("{STR_VAR_1} is looking around\nabsentmindedly."); +static const u8 sPensiveMsg06[] = _("{STR_VAR_1} yawned very loudly!"); +static const u8 sPensiveMsg07[] = _("{STR_VAR_1} is relaxing comfortably."); +static const u8 sPensiveMsg08[] = _("{STR_VAR_1} is staring steadfastly\nat your face."); +static const u8 sPensiveMsg09[] = _("{STR_VAR_1} is staring intently at\nyour face."); +static const u8 sPensiveMsg10[] = _("{STR_VAR_1} is focusing its\nattention on you."); +static const u8 sPensiveMsg11[] = _("{STR_VAR_1} is staring into the\ndepths."); +static const u8 sPensiveMsg12[] = _("{STR_VAR_1} is sniffing at the\nground."); +static const u8 sPensiveMsg13[] = _("Your POKéMON is staring intently at\nnothing."); +static const u8 sPensiveMsg14[] = _("{STR_VAR_1} focused with a sharp\ngaze!"); +static const u8 sPensiveMsg15[] = _("{STR_VAR_1} is concentrating."); +static const u8 sPensiveMsg16[] = _("{STR_VAR_1} faced this way and\nnodded."); +static const u8 sPensiveMsg17[] = _("{STR_VAR_1} seems a bit nervous…"); +static const u8 sPensiveMsg18[] = _("{STR_VAR_1} is looking at your\nfootprints."); +static const u8 sPensiveMsg19[] = _("{STR_VAR_1} is staring straight into\nyour eyes."); + +const struct FollowerMsgInfo gFollowerPensiveMessages[] = { + {sPensiveMsg00}, + {sPensiveMsg01, EventScript_FollowerLookAround}, + {sPensiveMsg02}, {sPensiveMsg03}, {sPensiveMsg04}, + {sPensiveMsg05, EventScript_FollowerLookAround}, + {sPensiveMsg06}, {sPensiveMsg07}, {sPensiveMsg08}, {sPensiveMsg09}, {sPensiveMsg10}, + {sPensiveMsg11, EventScript_FollowerLookAway}, + {sPensiveMsg12, EventScript_FollowerPokeGround}, + {sPensiveMsg13, EventScript_FollowerLookAway}, + {sPensiveMsg14}, {sPensiveMsg15}, {sPensiveMsg16}, {sPensiveMsg17}, {sPensiveMsg18}, {sPensiveMsg19}, +}; + +// All 'love' messages are unconditional +static const u8 sLoveMsg00[] = _("{STR_VAR_1} suddenly started walking\ncloser!"); +static const u8 sLoveMsg01[] = _("{STR_VAR_1} cheeks are becoming\nrosy!"); +static const u8 sLoveMsg02[] = _("Woah! {STR_VAR_1} suddenly hugged\nyou!"); +static const u8 sLoveMsg03[] = _("Woah! {STR_VAR_1} is suddenly\nplayful!"); +static const u8 sLoveMsg04[] = _("{STR_VAR_1} is rubbing against your\nlegs!"); +static const u8 sLoveMsg05[] = _("{STR_VAR_1} blushes."); +static const u8 sLoveMsg06[] = _("Ah! {STR_VAR_1} cuddles you!"); +static const u8 sLoveMsg07[] = _("{STR_VAR_1} is regarding you with\nadoration!"); +static const u8 sLoveMsg08[] = _("{STR_VAR_1} got closer to you."); +static const u8 sLoveMsg09[] = _("{STR_VAR_1} is keeping close to your\nfeet."); + +const struct FollowerMsgInfo gFollowerLoveMessages[] = { + {sLoveMsg00, EventScript_FollowerGetCloser}, + {sLoveMsg01}, + {sLoveMsg02, EventScript_FollowerCuddling}, + {sLoveMsg03}, + {sLoveMsg04, EventScript_FollowerCuddling}, + {sLoveMsg05}, + {sLoveMsg06, EventScript_FollowerCuddling}, + {sLoveMsg07}, + {sLoveMsg08, EventScript_FollowerGetCloser}, + {sLoveMsg09}, +}; + +// Unconditional surprised messages +static const u8 sSurpriseMsg00[] = _("{STR_VAR_1} is in danger of falling\nover!"); +static const u8 sSurpriseMsg01[] = _("{STR_VAR_1} bumped into you!"); +static const u8 sSurpriseMsg02[] = _("{STR_VAR_1} doesn't seem to be used\nto its own name yet."); +static const u8 sSurpriseMsg03[] = _("{STR_VAR_1} is peering down."); +static const u8 sSurpriseMsg04[] = _("Your POKéMON stumbled and nearly\nfell!"); +static const u8 sSurpriseMsg05[] = _("{STR_VAR_1} feels something and is\nhowling!"); +static const u8 sSurpriseMsg06[] = _("{STR_VAR_1} seems refreshed!"); +static const u8 sSurpriseMsg07[] = _("{STR_VAR_1} suddenly turned around\nand started barking!"); +static const u8 sSurpriseMsg08[] = _("{STR_VAR_1} suddenly turned around!"); +static const u8 sSurpriseMsg09[] = _("Your POKéMON was surprised that you\nsuddenly spoke to it!"); +static const u8 sSurpriseMsg10[] = _("Sniff sniff, something smells really\ngood!"); +static const u8 sSurpriseMsg11[] = _("{STR_VAR_1} feels refreshed."); +static const u8 sSurpriseMsg12[] = _("{STR_VAR_1} is wobbling and seems\nabout to fall over."); +static const u8 sSurpriseMsg13[] = _("{STR_VAR_1} is in danger of falling\nover."); +static const u8 sSurpriseMsg14[] = _("{STR_VAR_1} is walking along\ncautiously."); +static const u8 sSurpriseMsg15[] = _("{STR_VAR_1} is getting tense with\nnervous energy."); +static const u8 sSurpriseMsg16[] = _("{STR_VAR_1} sensed something strange\nand was surprised!"); +static const u8 sSurpriseMsg17[] = _("{STR_VAR_1} is scared and snuggled\nup to you!"); +static const u8 sSurpriseMsg18[] = _("{STR_VAR_1} is feeling an unusual\npresence…"); +static const u8 sSurpriseMsg19[] = _("{STR_VAR_1} is getting tense with\nnervous energy."); + // Conditional messages, index 20 +static const u8 sSurpriseMsg20[] = _("{STR_VAR_1} seems to be very\nsurprised that it is raining!"); + +const struct FollowerMsgInfo gFollowerSurpriseMessages[] = { + {sSurpriseMsg00}, + {sSurpriseMsg01, EventScript_FollowerPokingPlayer}, + {sSurpriseMsg02}, {sSurpriseMsg03}, {sSurpriseMsg04}, {sSurpriseMsg05}, {sSurpriseMsg06}, + {sSurpriseMsg07, EventScript_FollowerLookAwayBark}, + {sSurpriseMsg08, EventScript_FollowerLookAway}, + {sSurpriseMsg09}, + {sSurpriseMsg10, EventScript_FollowerLookAround}, + {sSurpriseMsg11}, {sSurpriseMsg12}, {sSurpriseMsg13}, {sSurpriseMsg14}, {sSurpriseMsg15}, {sSurpriseMsg16}, + {sSurpriseMsg17, EventScript_FollowerCuddling}, + {sSurpriseMsg18}, + {sSurpriseMsg19, EventScript_FollowerLookAround}, + {sSurpriseMsg20}, +}; + +// Unconditional curious messages +static const u8 sCuriousMsg00[] = _("Your POKéMON is looking around\nrestlessly for something."); +static const u8 sCuriousMsg01[] = _("Your POKéMON wasn't watching where\nit was going and ran into you!"); +static const u8 sCuriousMsg02[] = _("Sniff, sniff! Is there something\nnearby?"); +static const u8 sCuriousMsg03[] = _("{STR_VAR_1} is rolling a pebble\naround playfully."); +static const u8 sCuriousMsg04[] = _("{STR_VAR_1} is wandering around and\nsearching for something."); +static const u8 sCuriousMsg05[] = _("{STR_VAR_1} is sniffing at you."); +static const u8 sCuriousMsg06[] = _("{STR_VAR_1} seems to be a little\nhesitant…"); + +const struct FollowerMsgInfo gFollowerCuriousMessages[] = { + {sCuriousMsg00, EventScript_FollowerLookAround}, + {sCuriousMsg01, EventScript_FollowerPokingPlayer}, + {sCuriousMsg02}, {sCuriousMsg03}, + {sCuriousMsg04, EventScript_FollowerLookAround}, + {sCuriousMsg05}, {sCuriousMsg06}, +}; + +// Unconditional music messages +static const u8 sMusicMsg00[] = _("{STR_VAR_1} is showing off its\nagility!"); +static const u8 sMusicMsg01[] = _("{STR_VAR_1} is moving around\nhappily!"); +static const u8 sMusicMsg02[] = _("Woah! {STR_VAR_1} suddenly started\ndancing in happiness!"); +static const u8 sMusicMsg03[] = _("{STR_VAR_1} is steadily keeping up\nwith you!"); +static const u8 sMusicMsg04[] = _("{STR_VAR_1} seems to want to play\nwith you."); +static const u8 sMusicMsg05[] = _("{STR_VAR_1} is happy skipping about."); +static const u8 sMusicMsg06[] = _("{STR_VAR_1} is singing and humming."); +static const u8 sMusicMsg07[] = _("{STR_VAR_1} is nipping at your feet!"); +static const u8 sMusicMsg08[] = _("{STR_VAR_1} turns around and looks\nat you."); +static const u8 sMusicMsg09[] = _("{STR_VAR_1} is working hard to show\noff its mighty power!"); +static const u8 sMusicMsg10[] = _("Whoa! {STR_VAR_1} suddenly danced in\nhappiness!"); +static const u8 sMusicMsg11[] = _("{STR_VAR_1} is cheerful!"); +static const u8 sMusicMsg12[] = _("{STR_VAR_1} is jumping around in a\ncarefree way!"); +static const u8 sMusicMsg13[] = _("Your POKéMON seems to be smelling a\nnostalgically familiar scent…"); +// Conditional music messages, index 14 +static const u8 sMusicMsg14[] = _("{STR_VAR_1} is very happy about the\nrain."); + +const struct FollowerMsgInfo gFollowerMusicMessages[] = { + {sMusicMsg00, EventScript_FollowerLookAround}, + {sMusicMsg01}, + {sMusicMsg02, EventScript_FollowerDance}, + {sMusicMsg03}, + {sMusicMsg04, EventScript_FollowerHopping}, + {sMusicMsg05, EventScript_FollowerHopping}, + {sMusicMsg06}, {sMusicMsg07}, {sMusicMsg08}, {sMusicMsg09}, + {sMusicMsg10, EventScript_FollowerDance}, + {sMusicMsg11}, + {sMusicMsg12, EventScript_FollowerHopping}, + {sMusicMsg13, EventScript_FollowerNostalgia}, + {sMusicMsg14} +}; + + +static const u8 sPoisonedMsg00[] = _("{STR_VAR_1} is shivering with the\neffects of being poisoned."); + +const struct FollowerMsgInfo gFollowerPoisonedMessages[] = { + {sPoisonedMsg00, EventScript_FollowerIsShivering}, +}; diff --git a/src/data/trainer_graphics/back_pic_anims.h b/src/data/trainer_graphics/back_pic_anims.h index ed12e0cb41..fa55ed7197 100644 --- a/src/data/trainer_graphics/back_pic_anims.h +++ b/src/data/trainer_graphics/back_pic_anims.h @@ -18,6 +18,16 @@ static const union AnimCmd sAnimCmd_May_Steven_1[] = ANIMCMD_END, }; +static const union AnimCmd sAnimCmd_Point_HGSS[] = +{ + ANIMCMD_FRAME(3, 9), + ANIMCMD_FRAME(0, 9), + ANIMCMD_FRAME(2, 24), + ANIMCMD_FRAME(2, 24), + ANIMCMD_FRAME(3, 50), + ANIMCMD_END, +}; + static const union AnimCmd sAnimCmd_Wally_1[] = { ANIMCMD_FRAME(0, 24), @@ -48,6 +58,16 @@ static const union AnimCmd sAnimCmd_Leaf_1[] = ANIMCMD_END, }; +static const union AnimCmd sAnimCmd_Point_HGSS_Red_Leaf[] = +{ + ANIMCMD_FRAME(0, 9), + ANIMCMD_FRAME(1, 9), + ANIMCMD_FRAME(3, 24), + ANIMCMD_FRAME(3, 24), + ANIMCMD_FRAME(0, 50), + ANIMCMD_END, +}; + static const union AnimCmd sAnimCmd_RubySapphireBrendan_1[] = { ANIMCMD_FRAME(0, 24), @@ -72,48 +92,56 @@ static const union AnimCmd *const sBackAnims_Brendan[] = { sAnim_GeneralFrame3, sAnimCmd_Brendan_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_May[] = { sAnim_GeneralFrame3, sAnimCmd_May_Steven_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_Red[] = { sAnim_GeneralFrame0, sAnimCmd_Red_1, + sAnimCmd_Point_HGSS_Red_Leaf, }; static const union AnimCmd *const sBackAnims_Leaf[] = { sAnim_GeneralFrame0, sAnimCmd_Leaf_1, + sAnimCmd_Point_HGSS_Red_Leaf, }; static const union AnimCmd *const sBackAnims_RubySapphireBrendan[] = { sAnim_GeneralFrame3, sAnimCmd_RubySapphireBrendan_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_RubySapphireMay[] = { sAnim_GeneralFrame3, sAnimCmd_RubySapphireMay_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_Wally[] = { sAnim_GeneralFrame3, sAnimCmd_Wally_1, + sAnimCmd_Point_HGSS, }; static const union AnimCmd *const sBackAnims_Steven[] = { sAnim_GeneralFrame3, sAnimCmd_May_Steven_1, + sAnimCmd_Point_HGSS, }; const union AnimCmd *const *const gTrainerBackAnimsPtrTable[] = diff --git a/src/data/wild_encounters.json b/src/data/wild_encounters.json index 0b30c0f65b..463dadd0b6 100755 --- a/src/data/wild_encounters.json +++ b/src/data/wild_encounters.json @@ -7,30 +7,71 @@ { "type": "land_mons", "encounter_rates": [ - 20, 20, 10, 10, 10, 10, 5, 5, 4, 4, 1, 1 + 20, + 20, + 10, + 10, + 10, + 10, + 5, + 5, + 4, + 4, + 1, + 1 ] }, { "type": "water_mons", "encounter_rates": [ - 60, 30, 5, 4, 1 + 60, + 30, + 5, + 4, + 1 ] }, { "type": "rock_smash_mons", "encounter_rates": [ - 60, 30, 5, 4, 1 + 60, + 30, + 5, + 4, + 1 ] }, { "type": "fishing_mons", "encounter_rates": [ - 70, 30, 60, 20, 20, 40, 40, 15, 4, 1 + 70, + 30, + 60, + 20, + 20, + 40, + 40, + 15, + 4, + 1 ], "groups": { - "old_rod": [0, 1], - "good_rod": [2, 3, 4], - "super_rod": [5, 6, 7, 8, 9] + "good_rod": [ + 2, + 3, + 4 + ], + "old_rod": [ + 0, + 1 + ], + "super_rod": [ + 5, + 6, + 7, + 8, + 9 + ] } } ], @@ -107,6 +148,61 @@ { "map": "MAP_ROUTE102", "base_label": "gRoute102", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_CORPHISH" + } + ] + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -201,7 +297,11 @@ "species": "SPECIES_GOLDEEN" } ] - }, + } + }, + { + "map": "MAP_ROUTE103", + "base_label": "gRoute103", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -213,7 +313,7 @@ { "min_level": 5, "max_level": 10, - "species": "SPECIES_GOLDEEN" + "species": "SPECIES_TENTACOOL" }, { "min_level": 10, @@ -223,44 +323,40 @@ { "min_level": 10, "max_level": 30, - "species": "SPECIES_GOLDEEN" + "species": "SPECIES_TENTACOOL" }, { "min_level": 10, "max_level": 30, - "species": "SPECIES_CORPHISH" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_WAILMER" }, { "min_level": 30, "max_level": 35, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_SHARPEDO" }, { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_CORPHISH" + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_WAILMER" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ROUTE103", - "base_label": "gRoute103", + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -355,7 +451,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE104", + "base_label": "gRoute104", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -367,7 +467,7 @@ { "min_level": 5, "max_level": 10, - "species": "SPECIES_TENTACOOL" + "species": "SPECIES_MAGIKARP" }, { "min_level": 10, @@ -377,44 +477,40 @@ { "min_level": 10, "max_level": 30, - "species": "SPECIES_TENTACOOL" + "species": "SPECIES_MAGIKARP" }, { "min_level": 10, "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_SHARPEDO" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" + "species": "SPECIES_MAGIKARP" }, { "min_level": 25, "max_level": 30, - "species": "SPECIES_WAILMER" + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_MAGIKARP" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_WAILMER" + "species": "SPECIES_MAGIKARP" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_WAILMER" + "species": "SPECIES_MAGIKARP" } ] - } - }, - { - "map": "MAP_ROUTE104", - "base_label": "gRoute104", + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -509,7 +605,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE105", + "base_label": "gRoute105", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -521,7 +621,7 @@ { "min_level": 5, "max_level": 10, - "species": "SPECIES_MAGIKARP" + "species": "SPECIES_TENTACOOL" }, { "min_level": 10, @@ -531,44 +631,40 @@ { "min_level": 10, "max_level": 30, - "species": "SPECIES_MAGIKARP" + "species": "SPECIES_TENTACOOL" }, { "min_level": 10, "max_level": 30, - "species": "SPECIES_MAGIKARP" + "species": "SPECIES_WAILMER" }, { "min_level": 25, "max_level": 30, - "species": "SPECIES_MAGIKARP" + "species": "SPECIES_WAILMER" }, { "min_level": 30, "max_level": 35, - "species": "SPECIES_MAGIKARP" + "species": "SPECIES_WAILMER" }, { "min_level": 20, "max_level": 25, - "species": "SPECIES_MAGIKARP" + "species": "SPECIES_WAILMER" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_MAGIKARP" + "species": "SPECIES_WAILMER" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_MAGIKARP" + "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ROUTE105", - "base_label": "gRoute105", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -598,7 +694,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE110", + "base_label": "gRoute110", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -653,11 +753,7 @@ "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ROUTE110", - "base_label": "gRoute110", + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -752,7 +848,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE111", + "base_label": "gRoute111", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -764,7 +864,7 @@ { "min_level": 5, "max_level": 10, - "species": "SPECIES_TENTACOOL" + "species": "SPECIES_GOLDEEN" }, { "min_level": 10, @@ -774,44 +874,40 @@ { "min_level": 10, "max_level": 30, - "species": "SPECIES_TENTACOOL" + "species": "SPECIES_GOLDEEN" }, { "min_level": 10, "max_level": 30, - "species": "SPECIES_WAILMER" + "species": "SPECIES_BARBOACH" }, { "min_level": 25, "max_level": 30, - "species": "SPECIES_WAILMER" + "species": "SPECIES_BARBOACH" }, { "min_level": 30, "max_level": 35, - "species": "SPECIES_WAILMER" + "species": "SPECIES_BARBOACH" }, { "min_level": 20, "max_level": 25, - "species": "SPECIES_WAILMER" + "species": "SPECIES_BARBOACH" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_WAILMER" + "species": "SPECIES_BARBOACH" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_WAILMER" + "species": "SPECIES_BARBOACH" } ] - } - }, - { - "map": "MAP_ROUTE111", - "base_label": "gRoute111", + }, "land_mons": { "encounter_rate": 10, "mons": [ @@ -877,36 +973,6 @@ } ] }, - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 20, - "max_level": 30, - "species": "SPECIES_MARILL" - }, - { - "min_level": 10, - "max_level": 20, - "species": "SPECIES_MARILL" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_MARILL" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MARILL" - }, - { - "min_level": 20, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - } - ] - }, "rock_smash_mons": { "encounter_rate": 20, "mons": [ @@ -937,58 +1003,33 @@ } ] }, - "fishing_mons": { - "encounter_rate": 30, + "water_mons": { + "encounter_rate": 4, "mons": [ { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_GOLDEEN" + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" }, { "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_BARBOACH" + "max_level": 20, + "species": "SPECIES_MARILL" }, { "min_level": 30, "max_level": 35, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" }, { "min_level": 20, - "max_level": 25, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_BARBOACH" + "max_level": 30, + "species": "SPECIES_GOLDEEN" } ] } @@ -1134,6 +1175,61 @@ { "map": "MAP_ROUTE114", "base_label": "gRoute114", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_BARBOACH" + } + ] + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -1199,36 +1295,6 @@ } ] }, - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 20, - "max_level": 30, - "species": "SPECIES_MARILL" - }, - { - "min_level": 10, - "max_level": 20, - "species": "SPECIES_MARILL" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_MARILL" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MARILL" - }, - { - "min_level": 20, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - } - ] - }, "rock_smash_mons": { "encounter_rate": 20, "mons": [ @@ -1259,58 +1325,33 @@ } ] }, - "fishing_mons": { - "encounter_rate": 30, + "water_mons": { + "encounter_rate": 4, "mons": [ { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_GOLDEEN" + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" }, { "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_BARBOACH" + "max_level": 20, + "species": "SPECIES_MARILL" }, { "min_level": 30, "max_level": 35, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" }, { "min_level": 20, - "max_level": 25, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_BARBOACH" + "max_level": 30, + "species": "SPECIES_GOLDEEN" } ] } @@ -1387,6 +1428,61 @@ { "map": "MAP_ROUTE117", "base_label": "gRoute117", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_CORPHISH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_CORPHISH" + } + ] + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -1481,7 +1577,11 @@ "species": "SPECIES_GOLDEEN" } ] - }, + } + }, + { + "map": "MAP_ROUTE118", + "base_label": "gRoute118", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -1493,7 +1593,7 @@ { "min_level": 5, "max_level": 10, - "species": "SPECIES_GOLDEEN" + "species": "SPECIES_TENTACOOL" }, { "min_level": 10, @@ -1503,44 +1603,40 @@ { "min_level": 10, "max_level": 30, - "species": "SPECIES_GOLDEEN" + "species": "SPECIES_TENTACOOL" }, { "min_level": 10, "max_level": 30, - "species": "SPECIES_CORPHISH" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_CARVANHA" }, { "min_level": 30, "max_level": 35, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CARVANHA" }, { "min_level": 20, "max_level": 25, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_CARVANHA" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_CARVANHA" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_CORPHISH" + "species": "SPECIES_CARVANHA" } ] - } - }, - { - "map": "MAP_ROUTE118", - "base_label": "gRoute118", + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -1635,7 +1731,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE124", + "base_label": "gRoute124", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -1662,7 +1762,7 @@ { "min_level": 10, "max_level": 30, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_WAILMER" }, { "min_level": 30, @@ -1672,29 +1772,25 @@ { "min_level": 30, "max_level": 35, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_WAILMER" }, { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_CARVANHA" + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_WAILMER" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ROUTE124", - "base_label": "gRoute124", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -1724,61 +1820,6 @@ "species": "SPECIES_PELIPPER" } ] - }, - "fishing_mons": { - "encounter_rate": 30, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_SHARPEDO" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { @@ -2301,36 +2342,6 @@ { "map": "MAP_ABANDONED_SHIP_ROOMS_B1F", "base_label": "gAbandonedShip_Rooms_B1F", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_TENTACRUEL" - } - ] - }, "fishing_mons": { "encounter_rate": 20, "mons": [ @@ -2385,6 +2396,36 @@ "species": "SPECIES_TENTACRUEL" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_TENTACRUEL" + } + ] } }, { @@ -2558,6 +2599,61 @@ { "map": "MAP_METEOR_FALLS_B1F_2R", "base_label": "gMeteorFalls_B1F_2R", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WHISCASH" + } + ] + }, "land_mons": { "encounter_rate": 10, "mons": [ @@ -2652,61 +2748,6 @@ "species": "SPECIES_SOLROCK" } ] - }, - "fishing_mons": { - "encounter_rate": 30, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WHISCASH" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WHISCASH" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WHISCASH" - } - ] } }, { @@ -2781,36 +2822,6 @@ { "map": "MAP_ROUTE106", "base_label": "gRoute106", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -2865,41 +2876,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE107", "base_label": "gRoute107", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -2954,41 +2965,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE108", "base_label": "gRoute108", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -3043,41 +3054,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE109", "base_label": "gRoute109", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -3132,11 +3143,96 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE115", "base_label": "gRoute115", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -3231,61 +3327,6 @@ "species": "SPECIES_PELIPPER" } ] - }, - "fishing_mons": { - "encounter_rate": 30, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { @@ -3360,6 +3401,61 @@ { "map": "MAP_ROUTE119", "base_label": "gRoute119", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_CARVANHA" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_CARVANHA" + } + ] + }, "land_mons": { "encounter_rate": 15, "mons": [ @@ -3454,7 +3550,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE120", + "base_label": "gRoute120", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -3466,7 +3566,7 @@ { "min_level": 5, "max_level": 10, - "species": "SPECIES_TENTACOOL" + "species": "SPECIES_GOLDEEN" }, { "min_level": 10, @@ -3476,44 +3576,40 @@ { "min_level": 10, "max_level": 30, - "species": "SPECIES_TENTACOOL" + "species": "SPECIES_GOLDEEN" }, { "min_level": 10, "max_level": 30, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_BARBOACH" }, { "min_level": 25, "max_level": 30, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_BARBOACH" }, { "min_level": 30, "max_level": 35, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_BARBOACH" }, { "min_level": 20, "max_level": 25, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_BARBOACH" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_BARBOACH" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_CARVANHA" + "species": "SPECIES_BARBOACH" } ] - } - }, - { - "map": "MAP_ROUTE120", - "base_label": "gRoute120", + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -3608,7 +3704,11 @@ "species": "SPECIES_GOLDEEN" } ] - }, + } + }, + { + "map": "MAP_ROUTE121", + "base_label": "gRoute121", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -3620,7 +3720,7 @@ { "min_level": 5, "max_level": 10, - "species": "SPECIES_GOLDEEN" + "species": "SPECIES_TENTACOOL" }, { "min_level": 10, @@ -3630,44 +3730,40 @@ { "min_level": 10, "max_level": 30, - "species": "SPECIES_GOLDEEN" + "species": "SPECIES_TENTACOOL" }, { "min_level": 10, "max_level": 30, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_WAILMER" }, { "min_level": 25, "max_level": 30, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_WAILMER" }, { "min_level": 30, "max_level": 35, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_WAILMER" }, { "min_level": 20, "max_level": 25, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_WAILMER" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_WAILMER" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ROUTE121", - "base_label": "gRoute121", + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -3762,96 +3858,11 @@ "species": "SPECIES_PELIPPER" } ] - }, - "fishing_mons": { - "encounter_rate": 30, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { "map": "MAP_ROUTE122", "base_label": "gRoute122", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -3906,11 +3917,96 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE123", "base_label": "gRoute123", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -4005,61 +4101,6 @@ "species": "SPECIES_PELIPPER" } ] - }, - "fishing_mons": { - "encounter_rate": 30, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { @@ -4617,36 +4658,6 @@ { "map": "MAP_ROUTE125", "base_label": "gRoute125", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -4701,41 +4712,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE126", "base_label": "gRoute126", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -4790,41 +4801,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE127", "base_label": "gRoute127", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -4879,11 +4890,7 @@ "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ROUTE128", - "base_label": "gRoute128", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -4913,7 +4920,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE128", + "base_label": "gRoute128", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -4968,11 +4979,7 @@ "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ROUTE129", - "base_label": "gRoute129", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -4999,10 +5006,14 @@ { "min_level": 25, "max_level": 30, - "species": "SPECIES_WAILORD" + "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE129", + "base_label": "gRoute129", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -5057,11 +5068,96 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILORD" + } + ] } }, { "map": "MAP_ROUTE130", "base_label": "gRoute130", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SHARPEDO" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + }, "land_mons": { "encounter_rate": 20, "mons": [ @@ -5156,7 +5252,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ROUTE131", + "base_label": "gRoute131", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -5211,11 +5311,7 @@ "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ROUTE131", - "base_label": "gRoute131", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -5245,96 +5341,11 @@ "species": "SPECIES_PELIPPER" } ] - }, - "fishing_mons": { - "encounter_rate": 30, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_SHARPEDO" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { "map": "MAP_ROUTE132", "base_label": "gRoute132", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -5389,41 +5400,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE133", "base_label": "gRoute133", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -5478,41 +5489,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_ROUTE134", "base_label": "gRoute134", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -5567,11 +5578,7 @@ "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS", - "base_label": "gAbandonedShip_HiddenFloorCorridors", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -5581,27 +5588,31 @@ "species": "SPECIES_TENTACOOL" }, { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" }, { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" }, { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" }, { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_TENTACRUEL" + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS", + "base_label": "gAbandonedShip_HiddenFloorCorridors", "fishing_mons": { "encounter_rate": 20, "mons": [ @@ -5656,6 +5667,36 @@ "species": "SPECIES_TENTACRUEL" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_TENTACRUEL" + } + ] } }, { @@ -6006,6 +6047,61 @@ { "map": "MAP_SEAFLOOR_CAVERN_ROOM6", "base_label": "gSeafloorCavern_Room6", + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + }, "land_mons": { "encounter_rate": 4, "mons": [ @@ -6100,66 +6196,66 @@ "species": "SPECIES_GOLBAT" } ] - }, - "fishing_mons": { - "encounter_rate": 10, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { "map": "MAP_SEAFLOOR_CAVERN_ROOM7", "base_label": "gSeafloorCavern_Room7", + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + }, "land_mons": { "encounter_rate": 4, "mons": [ @@ -6254,61 +6350,6 @@ "species": "SPECIES_GOLBAT" } ] - }, - "fishing_mons": { - "encounter_rate": 10, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { @@ -6383,36 +6424,6 @@ { "map": "MAP_SEAFLOOR_CAVERN_ENTRANCE", "base_label": "gSeafloorCavern_Entrance", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_ZUBAT" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_ZUBAT" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_GOLBAT" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_GOLBAT" - } - ] - }, "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -6467,6 +6478,36 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_ZUBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLBAT" + } + ] } }, { @@ -6886,6 +6927,61 @@ { "map": "MAP_SAFARI_ZONE_SOUTHWEST", "base_label": "gSafariZone_Southwest", + "fishing_mons": { + "encounter_rate": 35, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 25, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SEAKING" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_SEAKING" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SEAKING" + } + ] + }, "land_mons": { "encounter_rate": 25, "mons": [ @@ -6980,61 +7076,6 @@ "species": "SPECIES_PSYDUCK" } ] - }, - "fishing_mons": { - "encounter_rate": 35, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 25, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_SEAKING" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_SEAKING" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_SEAKING" - } - ] } }, { @@ -7139,6 +7180,61 @@ { "map": "MAP_SAFARI_ZONE_NORTHWEST", "base_label": "gSafariZone_Northwest", + "fishing_mons": { + "encounter_rate": 35, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 25, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_SEAKING" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_SEAKING" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_SEAKING" + } + ] + }, "land_mons": { "encounter_rate": 25, "mons": [ @@ -7233,61 +7329,6 @@ "species": "SPECIES_GOLDUCK" } ] - }, - "fishing_mons": { - "encounter_rate": 35, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 25, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_SEAKING" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_SEAKING" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_SEAKING" - } - ] } }, { @@ -7392,6 +7433,61 @@ { "map": "MAP_VICTORY_ROAD_B2F", "base_label": "gVictoryRoad_B2F", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WHISCASH" + } + ] + }, "land_mons": { "encounter_rate": 10, "mons": [ @@ -7486,7 +7582,11 @@ "species": "SPECIES_GOLBAT" } ] - }, + } + }, + { + "map": "MAP_METEOR_FALLS_1F_1R", + "base_label": "gMeteorFalls_1F_1R", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -7526,26 +7626,22 @@ "species": "SPECIES_BARBOACH" }, { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WHISCASH" + "min_level": 20, + "max_level": 25, + "species": "SPECIES_BARBOACH" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_WHISCASH" + "species": "SPECIES_BARBOACH" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_WHISCASH" + "species": "SPECIES_BARBOACH" } ] - } - }, - { - "map": "MAP_METEOR_FALLS_1F_1R", - "base_label": "gMeteorFalls_1F_1R", + }, "land_mons": { "encounter_rate": 10, "mons": [ @@ -7640,7 +7736,11 @@ "species": "SPECIES_SOLROCK" } ] - }, + } + }, + { + "map": "MAP_METEOR_FALLS_1F_2R", + "base_label": "gMeteorFalls_1F_2R", "fishing_mons": { "encounter_rate": 30, "mons": [ @@ -7680,26 +7780,22 @@ "species": "SPECIES_BARBOACH" }, { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_BARBOACH" + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WHISCASH" }, { "min_level": 35, "max_level": 40, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_WHISCASH" }, { "min_level": 40, "max_level": 45, - "species": "SPECIES_BARBOACH" + "species": "SPECIES_WHISCASH" } ] - } - }, - { - "map": "MAP_METEOR_FALLS_1F_2R", - "base_label": "gMeteorFalls_1F_2R", + }, "land_mons": { "encounter_rate": 10, "mons": [ @@ -7794,66 +7890,66 @@ "species": "SPECIES_SOLROCK" } ] - }, - "fishing_mons": { - "encounter_rate": 30, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WHISCASH" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WHISCASH" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WHISCASH" - } - ] } }, { "map": "MAP_METEOR_FALLS_B1F_1R", "base_label": "gMeteorFalls_B1F_1R", + "fishing_mons": { + "encounter_rate": 30, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_BARBOACH" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WHISCASH" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WHISCASH" + } + ] + }, "land_mons": { "encounter_rate": 10, "mons": [ @@ -7948,61 +8044,6 @@ "species": "SPECIES_SOLROCK" } ] - }, - "fishing_mons": { - "encounter_rate": 30, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_BARBOACH" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WHISCASH" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WHISCASH" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WHISCASH" - } - ] } }, { @@ -8146,6 +8187,61 @@ { "map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", "base_label": "gShoalCave_LowTideInnerRoom", + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + }, "land_mons": { "encounter_rate": 10, "mons": [ @@ -8240,66 +8336,66 @@ "species": "SPECIES_SPHEAL" } ] - }, - "fishing_mons": { - "encounter_rate": 10, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { "map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM", "base_label": "gShoalCave_LowTideEntranceRoom", + "fishing_mons": { + "encounter_rate": 10, + "mons": [ + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 20, + "max_level": 25, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_WAILMER" + }, + { + "min_level": 40, + "max_level": 45, + "species": "SPECIES_WAILMER" + } + ] + }, "land_mons": { "encounter_rate": 10, "mons": [ @@ -8394,96 +8490,11 @@ "species": "SPECIES_SPHEAL" } ] - }, - "fishing_mons": { - "encounter_rate": 10, - "mons": [ - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 20, - "max_level": 25, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_WAILMER" - }, - { - "min_level": 40, - "max_level": 45, - "species": "SPECIES_WAILMER" - } - ] } }, { "map": "MAP_LILYCOVE_CITY", "base_label": "gLilycoveCity", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -8538,11 +8549,7 @@ "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_DEWFORD_TOWN", - "base_label": "gDewfordTown", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -8572,7 +8579,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_DEWFORD_TOWN", + "base_label": "gDewfordTown", "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -8627,41 +8638,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_SLATEPORT_CITY", "base_label": "gSlateportCity", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -8716,11 +8727,7 @@ "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_MOSSDEEP_CITY", - "base_label": "gMossdeepCity", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -8750,7 +8757,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_MOSSDEEP_CITY", + "base_label": "gMossdeepCity", "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -8805,41 +8816,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_PACIFIDLOG_TOWN", "base_label": "gPacifidlogTown", - "water_mons": { - "encounter_rate": 4, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_TENTACOOL" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_WINGULL" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_PELIPPER" - } - ] - }, "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -8894,11 +8905,7 @@ "species": "SPECIES_WAILMER" } ] - } - }, - { - "map": "MAP_EVER_GRANDE_CITY", - "base_label": "gEverGrandeCity", + }, "water_mons": { "encounter_rate": 4, "mons": [ @@ -8928,7 +8935,11 @@ "species": "SPECIES_PELIPPER" } ] - }, + } + }, + { + "map": "MAP_EVER_GRANDE_CITY", + "base_label": "gEverGrandeCity", "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -8983,41 +8994,41 @@ "species": "SPECIES_WAILMER" } ] + }, + "water_mons": { + "encounter_rate": 4, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_TENTACOOL" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_WINGULL" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_PELIPPER" + } + ] } }, { "map": "MAP_PETALBURG_CITY", "base_label": "gPetalburgCity", - "water_mons": { - "encounter_rate": 1, - "mons": [ - { - "min_level": 20, - "max_level": 30, - "species": "SPECIES_MARILL" - }, - { - "min_level": 10, - "max_level": 20, - "species": "SPECIES_MARILL" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_MARILL" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MARILL" - }, - { - "min_level": 5, - "max_level": 10, - "species": "SPECIES_MARILL" - } - ] - }, "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -9072,6 +9083,36 @@ "species": "SPECIES_CORPHISH" } ] + }, + "water_mons": { + "encounter_rate": 1, + "mons": [ + { + "min_level": 20, + "max_level": 30, + "species": "SPECIES_MARILL" + }, + { + "min_level": 10, + "max_level": 20, + "species": "SPECIES_MARILL" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + }, + { + "min_level": 5, + "max_level": 10, + "species": "SPECIES_MARILL" + } + ] } }, { @@ -9249,36 +9290,6 @@ { "map": "MAP_SOOTOPOLIS_CITY", "base_label": "gSootopolisCity", - "water_mons": { - "encounter_rate": 1, - "mons": [ - { - "min_level": 5, - "max_level": 35, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 10, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 15, - "max_level": 25, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - } - ] - }, "fishing_mons": { "encounter_rate": 10, "mons": [ @@ -9333,6 +9344,36 @@ "species": "SPECIES_GYARADOS" } ] + }, + "water_mons": { + "encounter_rate": 1, + "mons": [ + { + "min_level": 5, + "max_level": 35, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 10, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 15, + "max_level": 25, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + } + ] } }, { @@ -9476,6 +9517,61 @@ { "map": "MAP_SAFARI_ZONE_SOUTHEAST", "base_label": "gSafariZone_Southeast", + "fishing_mons": { + "encounter_rate": 35, + "mons": [ + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_MAGIKARP" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_REMORAID" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_GOLDEEN" + }, + { + "min_level": 25, + "max_level": 30, + "species": "SPECIES_REMORAID" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_REMORAID" + }, + { + "min_level": 30, + "max_level": 35, + "species": "SPECIES_REMORAID" + }, + { + "min_level": 35, + "max_level": 40, + "species": "SPECIES_OCTILLERY" + } + ] + }, "land_mons": { "encounter_rate": 25, "mons": [ @@ -9570,61 +9666,6 @@ "species": "SPECIES_QUAGSIRE" } ] - }, - "fishing_mons": { - "encounter_rate": 35, - "mons": [ - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_MAGIKARP" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_REMORAID" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_GOLDEEN" - }, - { - "min_level": 25, - "max_level": 30, - "species": "SPECIES_REMORAID" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_REMORAID" - }, - { - "min_level": 30, - "max_level": 35, - "species": "SPECIES_REMORAID" - }, - { - "min_level": 35, - "max_level": 40, - "species": "SPECIES_OCTILLERY" - } - ] } }, { @@ -11454,8 +11495,6 @@ ] }, { - "label": "gBattlePyramidWildMonHeaders", - "for_maps": false, "encounters": [ { "base_label": "gBattlePyramid_1", @@ -11463,63 +11502,63 @@ "encounter_rate": 4, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BULBASAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BULBASAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BULBASAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BULBASAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_IVYSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_IVYSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" } ] @@ -11531,63 +11570,63 @@ "encounter_rate": 4, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_IVYSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_IVYSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_IVYSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_IVYSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" } ] @@ -11599,63 +11638,63 @@ "encounter_rate": 4, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_VENUSAUR" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" } ] @@ -11667,63 +11706,63 @@ "encounter_rate": 4, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMANDER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" } ] @@ -11735,63 +11774,63 @@ "encounter_rate": 4, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" } ] @@ -11803,63 +11842,63 @@ "encounter_rate": 4, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" } ] @@ -11871,73 +11910,73 @@ "encounter_rate": 8, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WARTORTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SQUIRTLE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARIZARD" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_CHARMELEON" } ] } } - ] + ], + "for_maps": false, + "label": "gBattlePyramidWildMonHeaders" }, { - "label": "gBattlePikeWildMonHeaders", - "for_maps": false, "encounters": [ { "base_label": "gBattlePike_1", @@ -11945,63 +11984,63 @@ "encounter_rate": 10, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_DUSCLOPS" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_DUSCLOPS" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_DUSCLOPS" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_DUSCLOPS" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_DUSCLOPS" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_DUSCLOPS" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" } ] @@ -12013,63 +12052,63 @@ "encounter_rate": 10, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_ELECTRODE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_ELECTRODE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_ELECTRODE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_ELECTRODE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_ELECTRODE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_ELECTRODE" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" } ] @@ -12081,63 +12120,63 @@ "encounter_rate": 10, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BRELOOM" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BRELOOM" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BRELOOM" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BRELOOM" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BRELOOM" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_BRELOOM" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" } ] @@ -12149,69 +12188,71 @@ "encounter_rate": 10, "mons": [ { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WOBBUFFET" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WOBBUFFET" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WOBBUFFET" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WOBBUFFET" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WOBBUFFET" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_WOBBUFFET" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_SEVIPER" }, { - "min_level": 5, "max_level": 5, + "min_level": 5, "species": "SPECIES_MILOTIC" } ] } } - ] + ], + "for_maps": false, + "label": "gBattlePikeWildMonHeaders" } ] } diff --git a/src/daycare.c b/src/daycare.c index 9a1e98d988..74039a733b 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -28,7 +28,7 @@ extern const struct Evolution gEvolutionTable[][EVOS_PER_MON]; -#define IS_DITTO(species) (gBaseStats[species].eggGroup1 == EGG_GROUP_DITTO || gBaseStats[species].eggGroup2 == EGG_GROUP_DITTO) +#define IS_DITTO(species) (gSpeciesInfo[species].eggGroups[0] == EGG_GROUP_DITTO || gSpeciesInfo[species].eggGroups[1] == EGG_GROUP_DITTO) static void ClearDaycareMonMail(struct DaycareMail *mail); static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare); @@ -1296,7 +1296,9 @@ static u8 GetDaycareCompatibilityScore(struct DayCare *daycare) static u8 GetDaycareCompatibilityScoreFromSave(void) { - return GetDaycareCompatibilityScore(&gSaveBlock1Ptr->daycare); + // Changed to also store result for scripts + gSpecialVar_Result = GetDaycareCompatibilityScore(&gSaveBlock1Ptr->daycare); + return gSpecialVar_Result; } void SetDaycareCompatibilityString(void) diff --git a/src/decoration.c b/src/decoration.c index 27ef85de9e..94b65d669e 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -41,7 +41,7 @@ #define PLACE_DECORATION_SELECTOR_TAG 0xbe5 #define PLACE_DECORATION_PLAYER_TAG 0x008 -#define NUM_DECORATION_FLAGS (FLAG_DECORATION_14 - FLAG_DECORATION_1 + 1) +#define NUM_DECORATION_FLAGS (FLAG_DECORATION_13 - FLAG_DECORATION_1 + 1) #define tCursorX data[0] #define tCursorY data[1] @@ -1360,6 +1360,7 @@ static void Task_PlaceDecoration(u8 taskId) } break; case 1: + RemoveFollowingPokemon(); gPaletteFade.bufferTransferDisabled = TRUE; ConfigureCameraObjectForPlacingDecoration(&sPlaceDecorationGraphicsDataBuffer, gCurDecorationItems[gCurDecorationIndex]); SetUpDecorationShape(taskId); @@ -1615,6 +1616,14 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration) } break; } + + // If sprite(like), check if there is an available object event slot for it + if (decoration->permission == DECORPERM_SPRITE) { + for (i = 0; i < NUM_DECORATION_FLAGS; i++) + if (FlagGet(FLAG_DECORATION_1 + i) == TRUE) + return TRUE; + return FALSE; + } return TRUE; } @@ -2316,6 +2325,7 @@ static void Task_ContinuePuttingAwayDecorations(u8 taskId) } break; case 1: + RemoveFollowingPokemon(); SetUpPuttingAwayDecorationPlayerAvatar(); FadeInFromBlack(); tState = 2; diff --git a/src/event_data.c b/src/event_data.c index 50f6f68da4..bf8a6c27ab 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -201,7 +201,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_lock.c b/src/event_object_lock.c index 29575111fb..8d32a8ce42 100644 --- a/src/event_object_lock.c +++ b/src/event_object_lock.c @@ -151,6 +151,7 @@ static void Task_FreezeObjectAndPlayer(u8 taskId) void FreezeForApproachingTrainers(void) { u8 trainerObjectId1, trainerObjectId2, taskId; + struct ObjectEvent *followerObj = GetFollowerObject(); trainerObjectId1 = GetChosenApproachingTrainerObjectEventId(0); if (gNoOfApproachingTrainers == 2) @@ -188,6 +189,8 @@ void FreezeForApproachingTrainers(void) gTasks[taskId].tObjectFrozen = TRUE; } } + if (followerObj) // Unfreeze follower so it can move behind player + UnfreezeObjectEvent(followerObj); } bool8 IsFreezeObjectAndPlayerFinished(void) diff --git a/src/event_object_movement.c b/src/event_object_movement.c index f75597a9f7..14afcf1215 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1,9 +1,12 @@ #include "global.h" #include "malloc.h" #include "battle_pyramid.h" +#include "battle_util.h" #include "berry.h" +#include "data.h" #include "debug.h" #include "decoration.h" +#include "decompress.h" #include "event_data.h" #include "event_object_movement.h" #include "event_scripts.h" @@ -12,24 +15,40 @@ #include "field_effect.h" #include "field_effect_helpers.h" #include "field_player_avatar.h" +#include "field_weather.h" #include "fieldmap.h" +#include "follower_helper.h" +#include "gpu_regs.h" #include "mauville_old_man.h" #include "metatile_behavior.h" #include "overworld.h" #include "palette.h" +#include "pokemon.h" #include "random.h" +#include "region_map.h" +#include "script.h" +#include "sound.h" #include "sprite.h" #include "task.h" #include "trainer_see.h" #include "trainer_hill.h" #include "util.h" +#include "wild_encounter.h" #include "constants/event_object_movement.h" +#include "constants/abilities.h" +#include "constants/battle.h" #include "constants/event_objects.h" #include "constants/field_effects.h" #include "constants/items.h" +#include "constants/map_types.h" #include "constants/mauville_old_man.h" +#include "constants/rgb.h" +#include "constants/region_map_sections.h" +#include "constants/songs.h" +#include "constants/species.h" #include "constants/trainer_types.h" #include "constants/union_room.h" +#include "constants/weather.h" // this file was known as evobjmv.c in Game Freak's original source @@ -115,7 +134,10 @@ static void InitObjectPriorityByElevation(struct Sprite *, u8); static void ObjectEventUpdateSubpriority(struct ObjectEvent *, struct Sprite *); static void DoTracksGroundEffect_None(struct ObjectEvent *, struct Sprite *, u8); static void DoTracksGroundEffect_Footprints(struct ObjectEvent *, struct Sprite *, u8); +static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent*, struct Sprite*, u8); +static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent*, struct Sprite*, u8); static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *, struct Sprite *, u8); +static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent*, struct Sprite*, u8); static void DoRippleFieldEffect(struct ObjectEvent *, struct Sprite *); static void DoGroundEffects_OnSpawn(struct ObjectEvent *, struct Sprite *); static void DoGroundEffects_OnBeginStep(struct ObjectEvent *, struct Sprite *); @@ -135,10 +157,10 @@ static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *); static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **); static void GetObjectEventMovingCameraOffset(s16 *, s16 *); static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8); -static void LoadObjectEventPalette(u16); static void RemoveObjectEventIfOutsideView(struct ObjectEvent *); static void SpawnObjectEventOnReturnToField(u8, s16, s16); static void SetPlayerAvatarObjectEventIdAndObjectId(u8, u8); +static u8 UpdateSpritePalette(const struct SpritePalette * spritePalette, struct Sprite * sprite); static void ResetObjectEventFldEffData(struct ObjectEvent *); static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *); static u8 FindObjectEventPaletteIndexByTag(u16); @@ -149,11 +171,13 @@ static void CameraObject_0(struct Sprite *); static void CameraObject_1(struct Sprite *); static void CameraObject_2(struct Sprite *); static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, const struct ObjectEventTemplate *, u8); -static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *); static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8); static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8); static void InitSpriteForFigure8Anim(struct Sprite *); static bool8 AnimateSpriteInFigure8(struct Sprite *); +u8 GetDirectionToFace(s16 x1, s16 y1, s16 x2, s16 y2); +static void FollowerSetGraphics(struct ObjectEvent *, u16, u8, bool8); +static void ObjectEventSetGraphics(struct ObjectEvent *, const struct ObjectEventGraphicsInfo *); static void SpriteCB_VirtualObject(struct Sprite *); static void DoShadowFieldEffect(struct ObjectEvent *); static void SetJumpSpriteData(struct Sprite *, u8, u8, u8); @@ -163,9 +187,14 @@ static u8 DoJumpSpriteMovement(struct Sprite *); static u8 DoJumpSpecialSpriteMovement(struct Sprite *); static void CreateLevitateMovementTask(struct ObjectEvent *); static void DestroyLevitateMovementTask(u8); +static bool8 GetFollowerInfo(u16 *species, u8 *form, u8 *shiny); +static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool8 shiny); +static const struct ObjectEventGraphicsInfo * SpeciesToGraphicsInfo(u16 species, u8 form); static bool8 NpcTakeStep(struct Sprite *); static bool8 IsElevationMismatchAt(u8, s16, s16); static bool8 AreElevationsCompatible(u8, u8); +static u16 PackGraphicsId(const struct ObjectEventTemplate *template); +static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphicsId, u16 movementType, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables); static const struct SpriteFrameImage sPicTable_PechaBerryTree[]; @@ -286,6 +315,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_FOLLOW_PLAYER] = MovementType_FollowPlayer, }; static const bool8 sMovementTypeHasRange[NUM_MOVEMENT_TYPES] = { @@ -452,7 +482,9 @@ 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_NONE 0x11FF +#define OBJ_EVENT_PAL_TAG_DYNAMIC 0x1124 +#define OBJ_EVENT_PAL_TAG_EMOTES 0x8002 +#define OBJ_EVENT_PAL_TAG_NONE 0x11FF #include "data/object_events/object_event_graphics_info_pointers.h" #include "data/field_effects/field_effect_object_template_pointers.h" @@ -461,6 +493,7 @@ const u8 gInitialMovementTypeFacingDirections[] = { #include "data/object_events/base_oam.h" #include "data/object_events/object_event_subsprites.h" #include "data/object_events/object_event_graphics_info.h" +#include "data/object_events/object_event_graphics_info_followers.h" static const struct SpritePalette sObjectEventSpritePalettes[] = { {gObjectEventPal_Npc1, OBJ_EVENT_PAL_TAG_NPC_1}, @@ -498,6 +531,7 @@ 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}, + {gObjectEventPaletteEmotes, OBJ_EVENT_PAL_TAG_EMOTES}, #ifdef BUGFIX {NULL, OBJ_EVENT_PAL_TAG_NONE}, #else @@ -1217,7 +1251,7 @@ u8 GetFirstInactiveObjectEventId(void) u8 GetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId) { - if (localId < OBJ_EVENT_ID_PLAYER) + if (localId < OBJ_EVENT_ID_FOLLOWER) return GetObjectEventIdByLocalIdAndMapInternal(localId, mapNum, mapGroupId); return GetObjectEventIdByLocalId(localId); @@ -1283,7 +1317,14 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem y = template->y + MAP_OFFSET; objectEvent->active = TRUE; objectEvent->triggerGroundEffectsOnMove = TRUE; - objectEvent->graphicsId = template->graphicsId; + objectEvent->graphicsId = PackGraphicsId(template); + SetObjectEventDynamicGraphicsId(objectEvent); + if (objectEvent->graphicsId >= OBJ_EVENT_GFX_MON_BASE) { + if (template->script && template->script[0] == 0x7d) + objectEvent->shiny = T1_READ_16(&template->script[2]) >> 15; + else if (template->trainerRange_berryTreeId) + objectEvent->shiny = VarGet(template->trainerRange_berryTreeId) >> 5; + } objectEvent->movementType = template->movementType; objectEvent->localId = template->localId; objectEvent->mapNum = mapNum; @@ -1303,7 +1344,6 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId; objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType]; SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection); - SetObjectEventDynamicGraphicsId(objectEvent); if (sMovementTypeHasRange[objectEvent->movementType]) { if (objectEvent->rangeX == 0) @@ -1368,6 +1408,8 @@ static void RemoveObjectEvent(struct ObjectEvent *objectEvent) { objectEvent->active = FALSE; RemoveObjectEventInternal(objectEvent); + // zero potential species info + objectEvent->graphicsId = objectEvent->shiny = 0; } void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) @@ -1382,10 +1424,21 @@ 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 = ℑ - DestroySprite(&gSprites[objectEvent->spriteId]); + paletteNum = gSprites[objectEvent->spriteId].oam.paletteNum; + // It's possible that this function is called while the sprite pointed to `== sDummySprite`, i.e during map resume; + // In this case, don't free the palette as `paletteNum` is likely blank dummy data + if (!gSprites[objectEvent->spriteId].inUse && + !gSprites[objectEvent->spriteId].oam.paletteNum && + gSprites[objectEvent->spriteId].callback == SpriteCallbackDummy) { + DestroySprite(&gSprites[objectEvent->spriteId]); + } else { + DestroySprite(&gSprites[objectEvent->spriteId]); + FieldEffectFreePaletteIfUnused(paletteNum); + } } void RemoveAllObjectEventsExceptPlayer(void) @@ -1402,7 +1455,6 @@ void RemoveAllObjectEventsExceptPlayer(void) static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { u8 spriteId; - u8 paletteSlot; u8 objectEventId; struct Sprite *sprite; struct ObjectEvent *objectEvent; @@ -1414,25 +1466,13 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven objectEvent = &gObjectEvents[objectEventId]; graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - paletteSlot = graphicsInfo->paletteSlot; - if (paletteSlot == PALSLOT_PLAYER) - { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteSlot); - } - else if (paletteSlot == PALSLOT_NPC_SPECIAL) - { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteSlot); - } - else if (paletteSlot >= 16) - { - paletteSlot -= 16; - _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot); + if (spriteTemplate->paletteTag != TAG_NONE && spriteTemplate->paletteTag != OBJ_EVENT_PAL_TAG_DYNAMIC) { + 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) { @@ -1441,12 +1481,15 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven } sprite = &gSprites[spriteId]; + // Use palette from species palette table + if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { + sprite->oam.paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); + } GetMapCoordsFromSpritePos(objectEvent->currentCoords.x + cameraX, objectEvent->currentCoords.y + cameraY, &sprite->x, &sprite->y); sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); 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; @@ -1459,27 +1502,50 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven return objectEventId; } -static u8 TrySpawnObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) -{ - u8 objectEventId; - struct SpriteTemplate spriteTemplate; - struct SpriteFrameImage spriteFrameImage; - const struct ObjectEventGraphicsInfo *graphicsInfo; - const struct SubspriteTable *subspriteTables = NULL; +// Pack pokemon form info into a graphicsId, from a template's script +static u16 PackGraphicsId(const struct ObjectEventTemplate *template) { + u16 graphicsId = template->graphicsId; + u32 form = 0; + // set form based on template's script, + // if first command is bufferspeciesname + if (graphicsId >= OBJ_EVENT_GFX_MON_BASE) { + if (template->script && template->script[0] == 0x7d) { + form = T1_READ_16(&template->script[2]); + form = (form >> 10) & 0x1F; + } else if (template->trainerRange_berryTreeId) { + form = template->trainerRange_berryTreeId & 0x1F; + } + graphicsId |= form << OBJ_EVENT_GFX_SPECIES_BITS; + } + return graphicsId; +} - graphicsInfo = GetObjectEventGraphicsInfo(objectEventTemplate->graphicsId); - MakeSpriteTemplateFromObjectEventTemplate(objectEventTemplate, &spriteTemplate, &subspriteTables); - spriteFrameImage.size = graphicsInfo->size; - spriteTemplate.images = &spriteFrameImage; - objectEventId = TrySetupObjectEventSprite(objectEventTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY); - if (objectEventId == OBJECT_EVENTS_COUNT) - return OBJECT_EVENTS_COUNT; +static u8 +TrySpawnObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, + u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY) { + u8 objectEventId; + u16 graphicsId = PackGraphicsId(objectEventTemplate); + struct SpriteTemplate spriteTemplate; + struct SpriteFrameImage spriteFrameImage; + const struct ObjectEventGraphicsInfo *graphicsInfo; + const struct SubspriteTable *subspriteTables = NULL; + u16 species; + u8 form = 0; + bool8 shiny = FALSE; - gSprites[gObjectEvents[objectEventId].spriteId].images = graphicsInfo->images; - if (subspriteTables) - SetSubspriteTables(&gSprites[gObjectEvents[objectEventId].spriteId], subspriteTables); + graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); + CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(graphicsId, objectEventTemplate->movementType, &spriteTemplate, &subspriteTables); + spriteFrameImage.size = graphicsInfo->size; + spriteTemplate.images = &spriteFrameImage; + objectEventId = TrySetupObjectEventSprite(objectEventTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY); + if (objectEventId == OBJECT_EVENTS_COUNT) + return OBJECT_EVENTS_COUNT; - return objectEventId; + gSprites[gObjectEvents[objectEventId].spriteId].images = graphicsInfo->images; + if (subspriteTables) + SetSubspriteTables(&gSprites[gObjectEvents[objectEventId].spriteId], subspriteTables); + + return objectEventId; } u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *objectEventTemplate) @@ -1491,7 +1557,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 elevation) +u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation) { struct ObjectEventTemplate objectEventTemplate; @@ -1499,7 +1565,7 @@ u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 l y -= MAP_OFFSET; objectEventTemplate.localId = localId; objectEventTemplate.graphicsId = graphicsId; - objectEventTemplate.kind = OBJ_KIND_NORMAL; + // objectEventTemplate.kind = OBJ_KIND_NORMAL; objectEventTemplate.x = x; objectEventTemplate.y = y; objectEventTemplate.elevation = elevation; @@ -1548,6 +1614,18 @@ static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTe CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables); } +// Loads information from graphicsId, with shininess separate +// also can write palette tag to the template +static u8 LoadDynamicFollowerPaletteFromGraphicsId(u16 graphicsId, bool8 shiny, struct SpriteTemplate *template) { + u16 species = ((graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE); + u8 form = (graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS); + const struct CompressedSpritePalette *spritePalette = &(shiny ? gMonShinyPaletteTable : gMonPaletteTable)[species]; + u8 paletteNum = LoadDynamicFollowerPalette(species, form, shiny); + if (template) + template->paletteTag = spritePalette->tag; + return paletteNum; +} + // Used to create a sprite using a graphicsId associated with object events. u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) { @@ -1555,10 +1633,17 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), const struct SubspriteTable *subspriteTables; struct Sprite *sprite; u8 spriteId; + u32 paletteNum; spriteTemplate = Alloc(sizeof(struct SpriteTemplate)); CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables); - if (spriteTemplate->paletteTag != TAG_NONE) + + if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { + struct ObjectEvent *obj = GetFollowerObject(); + // Use shininess info from follower object + // in future this should be passed in + paletteNum = LoadDynamicFollowerPaletteFromGraphicsId(graphicsId, obj ? obj->shiny : FALSE, spriteTemplate); + } else if (spriteTemplate->paletteTag != TAG_NONE) LoadObjectEventPalette(spriteTemplate->paletteTag); spriteId = CreateSprite(spriteTemplate, x, y, subpriority); @@ -1581,7 +1666,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 elevation, u8 direction) +u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction) { u8 spriteId; struct Sprite *sprite; @@ -1591,10 +1676,12 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, SpriteCB_VirtualObject, &spriteTemplate, &subspriteTables); - *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; x += MAP_OFFSET; y += MAP_OFFSET; SetSpritePosToOffsetMapCoords(&x, &y, 8, 16); + if (spriteTemplate.paletteTag != TAG_NONE) + LoadObjectEventPalette(spriteTemplate.paletteTag); + spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0); if (spriteId != MAX_SPRITES) { @@ -1602,17 +1689,10 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); sprite->y += sprite->centerToCornerVecY; - sprite->oam.paletteNum = graphicsInfo->paletteSlot; - if (sprite->oam.paletteNum >= 16) - sprite->oam.paletteNum -= 16; sprite->coordOffsetEnabled = TRUE; sprite->sVirtualObjId = virtualObjId; sprite->sVirtualObjElev = elevation; - if (graphicsInfo->paletteSlot == PALSLOT_NPC_SPECIAL) - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); - else if (graphicsInfo->paletteSlot >= 16) - _PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot | 0xf0); if (subspriteTables != NULL) { @@ -1626,6 +1706,462 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio return spriteId; } +struct Pokemon * GetFirstLiveMon(void) { // Return address of first conscious party mon or NULL + u8 i; + for (i=0; i 0 && !(gPlayerParty[i].box.isEgg || gPlayerParty[i].box.isBadEgg)) + return &gPlayerParty[i]; + } + return NULL; +} + +struct ObjectEvent * GetFollowerObject(void) { // Return follower ObjectEvent or NULL + u8 i; + for (i=0; i < OBJECT_EVENTS_COUNT; i++) { + if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER && gObjectEvents[i].active) + return &gObjectEvents[i]; + } + return NULL; +} + +// Return graphicsInfo for a pokemon species & form +static const struct ObjectEventGraphicsInfo * SpeciesToGraphicsInfo(u16 species, u8 form) { + const struct ObjectEventGraphicsInfo *graphicsInfo; + switch (species) { + case SPECIES_UNOWN: // Letters >A are defined as species >= NUM_SPECIES, so are not contiguous with A + form %= NUM_UNOWN_FORMS; + graphicsInfo = &gPokemonObjectGraphics[form ? SPECIES_UNOWN_B + form - 1 : species]; + break; + case SPECIES_CASTFORM: // Sunny, rainy, snowy forms stored separately + graphicsInfo = &gCastformObjectGraphics[form % NUM_CASTFORM_FORMS]; + break; + default: + graphicsInfo = &gPokemonObjectGraphics[species]; + break; + } + return graphicsInfo->tileTag == TAG_NONE ? graphicsInfo : &gPokemonObjectGraphics[SPECIES_PORYGON]; // avoid OOB access +} + +// Find, or load, the palette for the specified pokemon info +static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool8 shiny) { + u8 paletteNum; + // Note that the shiny palette tag is `species + SPECIES_SHINY_TAG`, which must be increased with more pokemon + // so that palette tags do not overlap + const struct CompressedSpritePalette *spritePalette = &(shiny ? gMonShinyPaletteTable : gMonPaletteTable)[species]; + if ((paletteNum = IndexOfSpritePaletteTag(spritePalette->tag)) == 0xFF) { // Load compressed palette + LoadCompressedSpritePalette(spritePalette); + paletteNum = IndexOfSpritePaletteTag(spritePalette->tag); // Tag is always present + if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL) // don't want to weather blend in fog + UpdateSpritePaletteWithWeather(paletteNum); + } + return paletteNum; +} + +// Set graphics & sprite for a follower object event by species & shininess. +static void FollowerSetGraphics(struct ObjectEvent *objEvent, u16 species, u8 form, bool8 shiny) { + const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form); + ObjectEventSetGraphics(objEvent, graphicsInfo); + objEvent->graphicsId = (OBJ_EVENT_GFX_MON_BASE + species) & OBJ_EVENT_GFX_SPECIES_MASK; + objEvent->graphicsId |= form << OBJ_EVENT_GFX_SPECIES_BITS; + objEvent->shiny = shiny; + if (graphicsInfo->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { // Use palette from species palette table + struct Sprite *sprite = &gSprites[objEvent->spriteId]; + // Free palette if otherwise unused + sprite->inUse = FALSE; + FieldEffectFreePaletteIfUnused(sprite->oam.paletteNum); + sprite->inUse = TRUE; + sprite->oam.paletteNum = LoadDynamicFollowerPalette(species, form, shiny); + } else if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL) // don't want to weather blend in fog + UpdateSpritePaletteWithWeather(gSprites[objEvent->spriteId].oam.paletteNum); +} + +// Like FollowerSetGraphics, but does not reposition sprite; intended to be used for mid-movement form changes, etc. +// TODO: Reposition sprite if size changes +static void RefreshFollowerGraphics(struct ObjectEvent *objEvent) { + u16 species = OW_SPECIES(objEvent); + u8 form = OW_FORM(objEvent); + u8 shiny = objEvent->shiny; + const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form); + struct Sprite *sprite = &gSprites[objEvent->spriteId]; + u8 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag); + + sprite->oam.shape = graphicsInfo->oam->shape; + sprite->oam.size = graphicsInfo->oam->size; + sprite->images = graphicsInfo->images; + sprite->anims = graphicsInfo->anims; + sprite->subspriteTables = graphicsInfo->subspriteTables; + objEvent->inanimate = graphicsInfo->inanimate; + sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); + sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); + + if (graphicsInfo->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) { + sprite->inUse = FALSE; + FieldEffectFreePaletteIfUnused(sprite->oam.paletteNum); + sprite->inUse = TRUE; + sprite->oam.paletteNum = LoadDynamicFollowerPalette(species, form, shiny); + } else if (i != 0xFF) { + UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite); + if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL) // don't want to weather blend in fog + UpdateSpritePaletteWithWeather(sprite->oam.paletteNum); + } +} + +// Like CastformDataTypeChange, but for overworld weather +static u8 GetOverworldCastformForm(void) { + switch (GetCurrentWeather()) + { + case WEATHER_SUNNY_CLOUDS: + case WEATHER_DROUGHT: + return CASTFORM_FIRE; + case WEATHER_RAIN: + case WEATHER_RAIN_THUNDERSTORM: + case WEATHER_DOWNPOUR: + return CASTFORM_WATER; + case WEATHER_SNOW: + return CASTFORM_ICE; + } + return CASTFORM_NORMAL; +} + +static bool8 GetMonInfo(struct Pokemon * mon, u16 *species, u8 *form, u8 *shiny) { + if (!mon) { + *species = SPECIES_NONE; + *form = 0; + *shiny = 0; + return FALSE; + } + *species = GetMonData(mon, MON_DATA_SPECIES); + *shiny = IsMonShiny(mon); + *form = 0; // default + switch (*species) + { + case SPECIES_UNOWN: + *form = GET_UNOWN_LETTER(mon->box.personality); + break; + case SPECIES_CASTFORM: // form is based on overworld weather + *form = GetOverworldCastformForm(); + break; + } + return TRUE; +} + +// Retrieve graphic information about the following pokemon, if any +static bool8 GetFollowerInfo(u16 *species, u8 *form, u8 *shiny) { + return GetMonInfo(GetFirstLiveMon(), species, form, shiny); +} + +void UpdateFollowingPokemon(void) { // Update following pokemon if any + struct ObjectEvent *objEvent = GetFollowerObject(); + struct Sprite *sprite; + u16 species; + bool8 shiny; + u8 form; + // Avoid spawning large (64x64) follower pokemon inside buildings + if (GetFollowerInfo(&species, &form, &shiny) && !(gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, 0)->height == 64) && !FlagGet(FLAG_TEMP_HIDE_FOLLOWER)) { + if (objEvent == NULL) { // Spawn follower + struct ObjectEventTemplate template = { + .localId = OBJ_EVENT_ID_FOLLOWER, + .graphicsId = OBJ_EVENT_GFX_MON_BASE + species, + .flagId = 0, + .x = gSaveBlock1Ptr->pos.x, + .y = gSaveBlock1Ptr->pos.y, + // If player active, copy player elevation + .elevation = gObjectEvents[gPlayerAvatar.objectEventId].active ? gObjectEvents[gPlayerAvatar.objectEventId].currentElevation : 3, + .movementType = MOVEMENT_TYPE_FOLLOW_PLAYER, + // store form info in template + .trainerRange_berryTreeId = (form & 0x1F) | (shiny << 5), + }; + objEvent = &gObjectEvents[SpawnSpecialObjectEvent(&template)]; + objEvent->invisible = TRUE; + } + sprite = &gSprites[objEvent->spriteId]; + // Follower appearance changed; move to player and set invisible + if (species != OW_SPECIES(objEvent) || shiny != objEvent->shiny || form != OW_FORM(objEvent)) { + MoveObjectEventToMapCoords(objEvent, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y); + FollowerSetGraphics(objEvent, species, form, shiny); + objEvent->invisible = TRUE; + } + sprite->data[6] = 0; // set animation data + } else { + RemoveFollowingPokemon(); + } +} + +void RemoveFollowingPokemon(void) { // Remove follower object. Idempotent. + struct ObjectEvent *objectEvent = GetFollowerObject(); + if (objectEvent == NULL) + return; + RemoveObjectEvent(objectEvent); +} + +static bool8 IsFollowerVisible(void) { // Determine whether follower *should* be visible + return + !(TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE) + || MetatileBehavior_IsSurfableWaterOrUnderwater(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) + || MetatileBehavior_IsSurfableWaterOrUnderwater(gObjectEvents[gPlayerAvatar.objectEventId].previousMetatileBehavior) + || MetatileBehavior_IsForcedMovementTile(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior) + || MetatileBehavior_IsForcedMovementTile(gObjectEvents[gPlayerAvatar.objectEventId].previousMetatileBehavior) + || gWeatherPtr->currWeather == WEATHER_UNDERWATER + || gWeatherPtr->currWeather == WEATHER_UNDERWATER_BUBBLES); +} + +static bool8 SpeciesHasType(u16 species, u8 type) { + return gSpeciesInfo[species].types[0] == type || gSpeciesInfo[species].types[1] == type; +} + +// Returns a random index according to a list of weights +static u8 RandomWeightedIndex(u8 *weights, u8 length) { + u8 i; + u16 random_value; + u16 cum_weight = 0; + for (i = 0; i < length; i++) + cum_weight += weights[i]; + random_value = Random() % cum_weight; + cum_weight = 0; + for (i = 0; i < length; i++) { + cum_weight += weights[i]; + if (random_value <= cum_weight) + return i; + } +} + +// Pool of "unconditional" follower messages TODO: Should this be elsewhere ? +static const struct FollowerMessagePool followerBasicMessages[] = { + [FOLLOWER_EMOTION_HAPPY] = {gFollowerHappyMessages, EventScript_FollowerGeneric, N_FOLLOWER_HAPPY_MESSAGES}, + [FOLLOWER_EMOTION_NEUTRAL] = {gFollowerNeutralMessages, EventScript_FollowerGeneric, N_FOLLOWER_NEUTRAL_MESSAGES}, + [FOLLOWER_EMOTION_SAD] = {gFollowerSadMessages, EventScript_FollowerGeneric, N_FOLLOWER_SAD_MESSAGES}, + [FOLLOWER_EMOTION_UPSET] = {gFollowerUpsetMessages, EventScript_FollowerGeneric, N_FOLLOWER_UPSET_MESSAGES}, + [FOLLOWER_EMOTION_ANGRY] = {gFollowerAngryMessages, EventScript_FollowerGeneric, N_FOLLOWER_ANGRY_MESSAGES}, + [FOLLOWER_EMOTION_PENSIVE] = {gFollowerPensiveMessages, EventScript_FollowerGeneric, N_FOLLOWER_PENSIVE_MESSAGES}, + [FOLLOWER_EMOTION_LOVE] = {gFollowerLoveMessages, EventScript_FollowerGeneric, N_FOLLOWER_LOVE_MESSAGES}, + [FOLLOWER_EMOTION_SURPRISE] = {gFollowerSurpriseMessages, EventScript_FollowerGeneric, N_FOLLOWER_SURPRISE_MESSAGES}, + [FOLLOWER_EMOTION_CURIOUS] = {gFollowerCuriousMessages, EventScript_FollowerGeneric, N_FOLLOWER_CURIOUS_MESSAGES}, + [FOLLOWER_EMOTION_MUSIC] = {gFollowerMusicMessages, EventScript_FollowerGeneric, N_FOLLOWER_MUSIC_MESSAGES}, + [FOLLOWER_EMOTION_POISONED] = {gFollowerPoisonedMessages, EventScript_FollowerGeneric, N_FOLLOWER_POISONED_MESSAGES}, +}; + +// Display an emote above an object event +// Note that this is not a movement action +static void ObjectEventEmote(struct ObjectEvent *objEvent, u8 emotion) { + emotion %= FOLLOWER_EMOTION_LENGTH; + ObjectEventGetLocalIdAndMap(objEvent, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); + gFieldEffectArguments[7] = emotion; + FieldEffectStart(FLDEFF_EMOTE); +} + +// Script-accessible version of the above +bool8 ScrFunc_emote(struct ScriptContext *ctx) { + u8 localId = ScriptReadByte(ctx); + u8 emotion = ScriptReadByte(ctx) % FOLLOWER_EMOTION_LENGTH; + u8 i = GetObjectEventIdByLocalId(localId); + if (i < OBJECT_EVENTS_COUNT) + ObjectEventEmote(&gObjectEvents[i], emotion); + return FALSE; +} + +struct SpecialEmote { // Used for storing conditional emotes + u16 index; + u8 emotion; +}; + +// Find and return direction of metatile behavior within distance +static u32 FindMetatileBehaviorWithinRange(s32 x, s32 y, u32 mb, u8 distance) { + s32 i; + for (i = y+1; i <= y + distance; i++) + if (MapGridGetMetatileBehaviorAt(x, i) == mb) + return DIR_SOUTH; + for (i = y-1; i >= y - distance; i--) + if (MapGridGetMetatileBehaviorAt(x, i) == mb) + return DIR_NORTH; + for (i = x+1; i <= x + distance; i++) + if (MapGridGetMetatileBehaviorAt(i, y) == mb) + return DIR_EAST; + for (i = x-1; i >= x - distance; i--) + if (MapGridGetMetatileBehaviorAt(i, y) == mb) + return DIR_WEST; + + return DIR_NONE; +} + +// Call an applicable follower message script +bool8 ScrFunc_getfolloweraction(struct ScriptContext *ctx) // Essentially a big switch for follower messages +{ + u16 species; + s32 multi, multi2; + struct SpecialEmote cond_emotes[16] = {0}; + u8 emotion, n_choices = 0; + struct ObjectEvent *objEvent = GetFollowerObject(); + struct Pokemon *mon = GetFirstLiveMon(); + u8 emotion_weight[FOLLOWER_EMOTION_LENGTH] = { + [FOLLOWER_EMOTION_HAPPY] = 10, + [FOLLOWER_EMOTION_NEUTRAL] = 15, + [FOLLOWER_EMOTION_SAD] = 5, + [FOLLOWER_EMOTION_UPSET] = 15, + [FOLLOWER_EMOTION_ANGRY] = 15, + [FOLLOWER_EMOTION_PENSIVE] = 15, + [FOLLOWER_EMOTION_SURPRISE] = 10, // TODO: Scale this with how long the follower has been out? + [FOLLOWER_EMOTION_CURIOUS] = 10, // TODO: Increase this if there is an item nearby? + [FOLLOWER_EMOTION_MUSIC] = 15, + }; + u32 i, j; + bool32 pickedCondition = FALSE; + if (mon == NULL) { + ScriptCall(ctx, EventScript_FollowerLovesYou); + return FALSE; + } + // If map is not flyable, set the script to jump past the fly check TODO: Should followers ask to fly? + if (TRUE || !Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType)) + ScriptJump(ctx, EventScript_FollowerEnd); + species = GetMonData(mon, MON_DATA_SPECIES); + multi = GetMonData(mon, MON_DATA_FRIENDSHIP); + if (multi > 80) { + emotion_weight[FOLLOWER_EMOTION_HAPPY] = 20; + emotion_weight[FOLLOWER_EMOTION_UPSET] = 5; + emotion_weight[FOLLOWER_EMOTION_ANGRY] = 5; + emotion_weight[FOLLOWER_EMOTION_LOVE] = 20; + emotion_weight[FOLLOWER_EMOTION_MUSIC] = 20; + } + if (multi > 170) { + emotion_weight[FOLLOWER_EMOTION_HAPPY] = 30; + emotion_weight[FOLLOWER_EMOTION_LOVE] = 30; + } + // Conditional messages follow + // Weather-related + if (GetCurrentWeather() == WEATHER_SUNNY_CLOUDS) + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_HAPPY, .index=31}; + // Health & status-related + multi = mon->hp * 100 / mon->maxHP; + if (multi < 20) { + emotion_weight[FOLLOWER_EMOTION_SAD] = 30; + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_SAD, .index=4}; + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_SAD, .index=5}; + } + if (multi < 50 || mon->status & STATUS1_PARALYSIS) { + emotion_weight[FOLLOWER_EMOTION_SAD] = 30; + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_SAD, .index=6}; + } + // Gym type advantage/disadvantage scripts + if (GetCurrentMapMusic() == MUS_GYM || GetCurrentMapMusic() == MUS_RG_GYM) { + switch (gMapHeader.regionMapSectionId) + { + case MAPSEC_RUSTBORO_CITY: + case MAPSEC_PEWTER_CITY: + multi = TYPE_ROCK; + break; + case MAPSEC_DEWFORD_TOWN: + multi = TYPE_FIGHTING; + break; + case MAPSEC_MAUVILLE_CITY: + case MAPSEC_VERMILION_CITY: + multi = TYPE_ELECTRIC; + break; + case MAPSEC_LAVARIDGE_TOWN: + case MAPSEC_CINNABAR_ISLAND: + multi = TYPE_FIRE; + break; + case MAPSEC_PETALBURG_CITY: + multi = TYPE_NORMAL; + break; + case MAPSEC_FORTREE_CITY: + multi = TYPE_FLYING; + break; + case MAPSEC_MOSSDEEP_CITY: + case MAPSEC_SAFFRON_CITY: + multi = TYPE_PSYCHIC; + break; + case MAPSEC_SOOTOPOLIS_CITY: + case MAPSEC_CERULEAN_CITY: + multi = TYPE_WATER; + break; + case MAPSEC_CELADON_CITY: + multi = TYPE_GRASS; + break; + case MAPSEC_FUCHSIA_CITY: + multi = TYPE_POISON; + break; + case MAPSEC_VIRIDIAN_CITY: + multi = TYPE_GROUND; + break; + default: + multi = NUMBER_OF_MON_TYPES; + } + if (multi < NUMBER_OF_MON_TYPES) { + multi = GetTypeEffectiveness(mon, multi); + if (multi <= UQ_4_12(0.5)) + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_HAPPY, .index=32}; + else if (multi >= UQ_4_12(2.0)) + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_SAD, .index=7}; + } + } + + emotion = RandomWeightedIndex(emotion_weight, FOLLOWER_EMOTION_LENGTH); + if ((mon->status & STATUS1_PSN_ANY) && GetMonAbility(mon) != ABILITY_POISON_HEAL) + emotion = FOLLOWER_EMOTION_POISONED; + multi = Random() % followerBasicMessages[emotion].length; + // With 50% chance, select special message using reservoir sampling + for (i = (Random() & 1) ? n_choices : 0, j = 1; i < n_choices; i++) { + if (cond_emotes[i].emotion == emotion && (Random() < 0x10000 / (j++))) // Replace item with 1/j chance + multi = cond_emotes[i].index; + } + // Match scripted conditional messages + // With 50% chance, try to match scripted conditional messages + for (i = (Random() & 1) ? COND_MSG_COUNT : 0, j = 1; i < COND_MSG_COUNT; i++) { + const struct FollowerMsgInfoExtended *info = &gFollowerConditionalMessages[i]; + if (info->stFlags == 1 && species != info->st.species) + continue; + if (info->stFlags == 2 && (info->st.types.type2 >= NUMBER_OF_MON_TYPES ? SpeciesHasType(species, info->st.types.type1) : !(SpeciesHasType(species, info->st.types.type1) || SpeciesHasType(species, info->st.types.type2)))) + continue; + if (info->stFlags == 3 && !(mon->status & info->st.status)) + continue; + if (info->mmFlags == 1 && gMapHeader.regionMapSectionId != info->mm.mapSec.mapSec) + continue; + if (info->mmFlags == 2 && !(gSaveBlock1Ptr->location.mapNum == info->mm.map.mapNum && gSaveBlock1Ptr->location.mapGroup == info->mm.map.mapGroup)) + continue; + if (info->mmFlags == 3 && !(objEvent->currentMetatileBehavior == info->mm.mb.behavior1 || objEvent->currentMetatileBehavior == info->mm.mb.behavior2)) + continue; + if (info->wtFlags == 1 && !(GetCurrentWeather() == info->wt.weather.weather1 || GetCurrentWeather() == info->wt.weather.weather2)) + continue; + if (info->wtFlags == 2 && GetCurrentMapMusic() != info->wt.song) + continue; + if (info->nearFlags == 1) { + if ((multi2 = FindMetatileBehaviorWithinRange(objEvent->currentCoords.x, objEvent->currentCoords.y, info->near.mb.behavior, info->near.mb.distance))) + gSpecialVar_Result = multi2; + else + continue; + } + + // replace choice with weight/j chance + if (Random() < (0x10000 / (j++)) * (info->weight ? info->weight : 1)) { + multi = i; + pickedCondition = TRUE; + } + } + if (pickedCondition) { // conditional message was chosen + emotion = gFollowerConditionalMessages[multi].emotion; + ObjectEventEmote(objEvent, emotion); + ctx->data[0] = (u32) gFollowerConditionalMessages[multi].text; + // text choices are spread across array; pick a random one + if (gFollowerConditionalMessages[multi].textSpread) { + for (i = 0; i < 4; i++) + if (!((u32*)gFollowerConditionalMessages[multi].text)[i]) + break; + ctx->data[0] = i ? ((u32*)gFollowerConditionalMessages[multi].text)[Random() % i] : 0; + } + ScriptCall(ctx, gFollowerConditionalMessages[multi].script ? gFollowerConditionalMessages[multi].script : followerBasicMessages[emotion].script); + return FALSE; + } + ObjectEventEmote(objEvent, emotion); + ctx->data[0] = (u32) followerBasicMessages[emotion].messages[multi].text; // Load message text + ScriptCall(ctx, followerBasicMessages[emotion].messages[multi].script ? + followerBasicMessages[emotion].messages[multi].script : followerBasicMessages[emotion].script); + return FALSE; +} + +bool8 ScrFunc_followerfly(struct ScriptContext *ctx) { + SetMainCallback2(CB2_OpenFlyMap); + return FALSE; +} + void TrySpawnObjectEvents(s16 cameraX, s16 cameraY) { u8 i; @@ -1674,7 +2210,9 @@ void RemoveObjectEventsOutsideView(void) { struct ObjectEvent *objectEvent = &gObjectEvents[i]; - if (objectEvent->active && !objectEvent->isPlayer) + // Followers should not go OOB, or their sprites may be freed early during a cross-map scripting event, + // such as Wally's Ralts catch sequence + if (objectEvent->active && !objectEvent->isPlayer && objectEvent->localId != OBJ_EVENT_ID_FOLLOWER) RemoveObjectEventIfOutsideView(objectEvent); } } @@ -1712,7 +2250,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; @@ -1732,28 +2269,16 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) spriteFrameImage.size = graphicsInfo->size; CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables); spriteTemplate.images = &spriteFrameImage; - - *(u16 *)&spriteTemplate.paletteTag = TAG_NONE; - paletteSlot = graphicsInfo->paletteSlot; - if (paletteSlot == PALSLOT_PLAYER) - { - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); + if (spriteTemplate.paletteTag != TAG_NONE && spriteTemplate.paletteTag != OBJ_EVENT_PAL_TAG_DYNAMIC) { + LoadObjectEventPalette(spriteTemplate.paletteTag); } - else if (paletteSlot == PALSLOT_NPC_SPECIAL) - { - 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) { sprite = &gSprites[i]; + // Use palette from species palette table + if (spriteTemplate.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) + sprite->oam.paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); GetMapCoordsFromSpritePos(x + objectEvent->currentCoords.x, y + objectEvent->currentCoords.y, &sprite->x, &sprite->y); sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); @@ -1765,10 +2290,9 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y) SetPlayerAvatarObjectEventIdAndObjectId(objectEventId, i); objectEvent->warpArrowSpriteId = CreateWarpArrowSprite(); } - if (subspriteTables != NULL) + if (subspriteTables != NULL) { SetSubspriteTables(sprite, subspriteTables); - - sprite->oam.paletteNum = paletteSlot; + } sprite->coordOffsetEnabled = TRUE; sprite->sObjEventId = objectEventId; objectEvent->spriteId = i; @@ -1801,46 +2325,55 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_CONTROLLABLE); } -void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId) -{ - const struct ObjectEventGraphicsInfo *graphicsInfo; - struct Sprite *sprite; - u8 paletteSlot; - - graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); - sprite = &gSprites[objectEvent->spriteId]; - paletteSlot = graphicsInfo->paletteSlot; - if (paletteSlot == PALSLOT_PLAYER) - { - PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); - } - else if (paletteSlot == PALSLOT_NPC_SPECIAL) - { - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot); - } - else if (paletteSlot >= 16) - { - paletteSlot -= 16; - _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot); - } - sprite->oam.shape = graphicsInfo->oam->shape; - sprite->oam.size = graphicsInfo->oam->size; - sprite->images = graphicsInfo->images; - sprite->anims = graphicsInfo->anims; - sprite->subspriteTables = graphicsInfo->subspriteTables; - sprite->oam.paletteNum = paletteSlot; - objectEvent->inanimate = graphicsInfo->inanimate; - objectEvent->graphicsId = graphicsId; - SetSpritePosToMapCoords(objectEvent->currentCoords.x, objectEvent->currentCoords.y, &sprite->x, &sprite->y); - sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); - sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); - sprite->x += 8; - sprite->y += 16 + sprite->centerToCornerVecY; - if (objectEvent->trackedByCamera) - CameraObjectReset1(); +// Update sprite's palette, freeing old palette if necessary +static u8 UpdateSpritePalette(const struct SpritePalette * spritePalette, struct Sprite * sprite) { + // Free palette if otherwise unused + sprite->inUse = FALSE; + FieldEffectFreePaletteIfUnused(sprite->oam.paletteNum); + sprite->inUse = TRUE; + return sprite->oam.paletteNum = LoadSpritePalette(spritePalette); } -void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId) +// Find and update based on template's paletteTag +// TODO: Add a better way to associate tags -> palettes besides listing them in sObjectEventSpritePalettes +u8 UpdateSpritePaletteByTemplate(const struct SpriteTemplate * template, struct Sprite * sprite) { + u8 i = FindObjectEventPaletteIndexByTag(template->paletteTag); + if (i == 0xFF) + return i; + return UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite); +} + +// Set graphics *by info* +static void ObjectEventSetGraphics(struct ObjectEvent *objectEvent, const struct ObjectEventGraphicsInfo *graphicsInfo) { + struct Sprite *sprite = &gSprites[objectEvent->spriteId]; + u8 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag); + if (i != 0xFF) + UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite); + sprite->oam.shape = graphicsInfo->oam->shape; + sprite->oam.size = graphicsInfo->oam->size; + sprite->images = graphicsInfo->images; + sprite->anims = graphicsInfo->anims; + sprite->subspriteTables = graphicsInfo->subspriteTables; + objectEvent->inanimate = graphicsInfo->inanimate; + SetSpritePosToMapCoords(objectEvent->currentCoords.x, objectEvent->currentCoords.y, &sprite->x, &sprite->y); + sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); + sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); + sprite->x += 8; + sprite->y += 16 + sprite->centerToCornerVecY; + if (objectEvent->trackedByCamera) + { + CameraObjectReset1(); + } +} + +void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u16 graphicsId) +{ + objectEvent->graphicsId = graphicsId; + ObjectEventSetGraphics(objectEvent, GetObjectEventGraphicsInfo(graphicsId)); + objectEvent->graphicsId = graphicsId; +} + +void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u16 graphicsId) { u8 objectEventId; @@ -1871,7 +2404,30 @@ void PlayerObjectTurn(struct PlayerAvatar *playerAvatar, u8 direction) ObjectEventTurn(&gObjectEvents[playerAvatar->objectEventId], direction); } -static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite *sprite) +static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, u8 berryId, u8 berryStage) { + const u16 graphicsId = gBerryTreeObjectEventGraphicsIdTablePointers[berryId][berryStage]; + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); + struct Sprite *sprite = &gSprites[objectEvent->spriteId]; + UpdateSpritePalette(&sObjectEventSpritePalettes[gBerryTreePaletteSlotTablePointers[berryId][berryStage]-2], sprite); + sprite->oam.shape = graphicsInfo->oam->shape; + sprite->oam.size = graphicsInfo->oam->size; + sprite->images = gBerryTreePicTablePointers[berryId]; + sprite->anims = graphicsInfo->anims; + sprite->subspriteTables = graphicsInfo->subspriteTables; + objectEvent->inanimate = graphicsInfo->inanimate; + objectEvent->graphicsId = graphicsId; + SetSpritePosToMapCoords(objectEvent->currentCoords.x, objectEvent->currentCoords.y, &sprite->x, &sprite->y); + sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); + sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); + sprite->x += 8; + sprite->y += 16 + sprite->centerToCornerVecY; + if (objectEvent->trackedByCamera) + { + CameraObjectReset1(); + } +} + +static void get_berry_tree_graphics(struct ObjectEvent *objectEvent, struct Sprite *sprite) { u8 berryStage; u8 berryId; @@ -1888,26 +2444,31 @@ static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite if (berryId > ITEM_TO_BERRY(LAST_BERRY_INDEX)) berryId = 0; - ObjectEventSetGraphicsId(objectEvent, gBerryTreeObjectEventGraphicsIdTablePointers[berryId][berryStage]); - sprite->images = gBerryTreePicTablePointers[berryId]; - sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[berryId][berryStage]; + SetBerryTreeGraphics(objectEvent, berryId, berryStage); StartSpriteAnim(sprite, berryStage); } } -const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId) +const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId) { - u8 bard; + u32 form = 0; - if (graphicsId >= OBJ_EVENT_GFX_VARS) + if (graphicsId >= OBJ_EVENT_GFX_VARS && graphicsId <= OBJ_EVENT_GFX_VAR_F) graphicsId = VarGetObjectEventGraphicsId(graphicsId - OBJ_EVENT_GFX_VARS); - if (graphicsId == OBJ_EVENT_GFX_BARD) - { - bard = GetCurrentMauvilleOldMan(); - return gMauvilleOldManGraphicsInfoPointers[bard]; + // graphicsId may contain mon form info + if (graphicsId > OBJ_EVENT_GFX_SPECIES_MASK) { + form = graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS; + graphicsId = graphicsId & OBJ_EVENT_GFX_SPECIES_MASK; } + if (graphicsId == OBJ_EVENT_GFX_BARD) { + return gMauvilleOldManGraphicsInfoPointers[GetCurrentMauvilleOldMan()]; + } + + if (graphicsId >= OBJ_EVENT_GFX_MON_BASE) + return SpeciesToGraphicsInfo(graphicsId - OBJ_EVENT_GFX_MON_BASE, form); + if (graphicsId >= NUM_OBJ_EVENT_GFX) graphicsId = OBJ_EVENT_GFX_NINJA_BOY; @@ -1916,7 +2477,7 @@ const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId) static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *objectEvent) { - if (objectEvent->graphicsId >= OBJ_EVENT_GFX_VARS) + if (objectEvent->graphicsId >= OBJ_EVENT_GFX_VARS && objectEvent->graphicsId <= OBJ_EVENT_GFX_VAR_F) objectEvent->graphicsId = VarGetObjectEventGraphicsId(objectEvent->graphicsId - OBJ_EVENT_GFX_VARS); } @@ -1995,17 +2556,12 @@ void FreeAndReserveObjectSpritePalettes(void) gReservedSpritePaletteCount = OBJ_PALSLOT_COUNT; } -static void LoadObjectEventPalette(u16 paletteTag) +u8 LoadObjectEventPalette(u16 paletteTag) { u16 i = FindObjectEventPaletteIndexByTag(paletteTag); - -// FindObjectEventPaletteIndexByTag returns 0xFF on failure, not OBJ_EVENT_PAL_TAG_NONE. -#ifdef BUGFIX - if (i != 0xFF) -#else - if (i != OBJ_EVENT_PAL_TAG_NONE) -#endif - LoadSpritePaletteIfTagExists(&sObjectEventSpritePalettes[i]); + if (i == 0xFF) + return i; + return LoadSpritePaletteIfTagExists(&sObjectEventSpritePalettes[i]); } // Unused @@ -2019,10 +2575,11 @@ static void LoadObjectEventPaletteSet(u16 *paletteTags) static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *spritePalette) { - if (IndexOfSpritePaletteTag(spritePalette->tag) != 0xFF) - return 0xFF; - - return LoadSpritePalette(spritePalette); + u8 paletteNum = IndexOfSpritePaletteTag(spritePalette->tag); + if (paletteNum != 0xFF) // don't load twice; return + return paletteNum; + paletteNum = LoadSpritePalette(spritePalette); + return paletteNum; } void PatchObjectPalette(u16 paletteTag, u8 paletteSlot) @@ -2365,6 +2922,9 @@ void SetObjectEventDirection(struct ObjectEvent *objectEvent, u8 direction) static const u8 *GetObjectEventScriptPointerByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup) { + if (localId == OBJ_EVENT_ID_FOLLOWER) { + return EventScript_Follower; + } return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->script; } @@ -3074,7 +3634,7 @@ void MovementType_BerryTreeGrowth(struct Sprite *sprite) objectEvent = &gObjectEvents[sprite->sObjEventId]; if (!(sprite->sBerryTreeFlags & BERRY_FLAG_SET_GFX)) { - SetBerryTreeGraphics(objectEvent, sprite); + get_berry_tree_graphics(objectEvent, sprite); sprite->sBerryTreeFlags |= BERRY_FLAG_SET_GFX; } UpdateObjectEventCurrentMovement(objectEvent, sprite, ObjectEventCB2_BerryTree); @@ -3113,7 +3673,7 @@ bool8 MovementType_BerryTreeGrowth_Normal(struct ObjectEvent *objectEvent, struc sprite->sTypeFuncId = BERRYTREEFUNC_SPARKLE_START; return TRUE; } - SetBerryTreeGraphics(objectEvent, sprite); + get_berry_tree_graphics(objectEvent, sprite); ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); sprite->sTypeFuncId = BERRYTREEFUNC_MOVE; return TRUE; @@ -3153,7 +3713,7 @@ bool8 MovementType_BerryTreeGrowth_Sparkle(struct ObjectEvent *objectEvent, stru sprite->animPaused = TRUE; if (sprite->sTimer > 64) { - SetBerryTreeGraphics(objectEvent, sprite); + get_berry_tree_graphics(objectEvent, sprite); sprite->sTypeFuncId = BERRYTREEFUNC_SPARKLE_END; sprite->sTimer = 0; return TRUE; @@ -4336,6 +4896,330 @@ bool8 CopyablePlayerMovement_Jump2(struct ObjectEvent *objectEvent, struct Sprit return TRUE; } +static bool8 EndFollowerTransformEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + if (!sprite) + return FALSE; + SetGpuReg(REG_OFFSET_MOSAIC, 0); + if (!sprite->data[7]) + return FALSE; + sprite->oam.mosaic = FALSE; + sprite->data[7] = 0; + return FALSE; +} + +static bool8 TryStartFollowerTransformEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + u32 multi; + if (OW_SPECIES(objectEvent) == SPECIES_CASTFORM && OW_FORM(objectEvent) != (multi = GetOverworldCastformForm())) { + sprite->data[7] = TRANSFORM_TYPE_PERMANENT << 8; + objectEvent->graphicsId &= OBJ_EVENT_GFX_SPECIES_MASK; + objectEvent->graphicsId |= multi << OBJ_EVENT_GFX_SPECIES_BITS; + return TRUE; + } else if ((gRngValue >> 16) < 18 && GetLocalWildMon(FALSE) + && (OW_SPECIES(objectEvent) == SPECIES_MEW || OW_SPECIES(objectEvent) == SPECIES_DITTO)) { + sprite->data[7] = TRANSFORM_TYPE_RANDOM_WILD << 8; + PlaySE(SE_M_MINIMIZE); + return TRUE; + } + return FALSE; +} + +static bool8 UpdateFollowerTransformEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + u8 type = sprite->data[7] >> 8; + u8 frames = sprite->data[7] & 0xFF; + u8 stretch; + u32 multi; + if (!type) + return TryStartFollowerTransformEffect(objectEvent, sprite); + sprite->oam.mosaic = TRUE; + if (frames < 8) + stretch = frames >> 1; + else if (frames < 16) + stretch = (16 - frames) >> 1; + else { + return EndFollowerTransformEffect(objectEvent, sprite); + } + if (frames == 8) { + switch (type) + { + case TRANSFORM_TYPE_PERMANENT: + RefreshFollowerGraphics(objectEvent); + break; + case TRANSFORM_TYPE_RANDOM_WILD: + multi = objectEvent->graphicsId; + objectEvent->graphicsId = GetLocalWildMon(FALSE); + if (!objectEvent->graphicsId) { + objectEvent->graphicsId = multi; + break; + } + objectEvent->graphicsId += OBJ_EVENT_GFX_MON_BASE; + RefreshFollowerGraphics(objectEvent); + objectEvent->graphicsId = multi; + break; + } + } + + SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 12) | (stretch << 8)); + frames++; + sprite->data[7] = (sprite->data[7] & 0xFF00) | frames; + return TRUE; +} + +movement_type_def(MovementType_FollowPlayer, gMovementTypeFuncs_FollowPlayer) + +bool8 MovementType_FollowPlayer_Shadow(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + ClearObjectEventMovement(objectEvent, sprite); + if (!IsFollowerVisible()) { // Shadow player's position + objectEvent->invisible = TRUE; + MoveObjectEventToMapCoords(objectEvent, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y); + objectEvent->triggerGroundEffectsOnMove = FALSE; // Stop endless reflection spawning + return FALSE; + } + // Move follower to player, in case we end up in the shadowing state for only 1 frame + // This way the player cannot talk to the invisible follower before it appears + if (objectEvent->invisible) { + MoveObjectEventToMapCoords(objectEvent, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x, gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y); + objectEvent->triggerGroundEffectsOnMove = FALSE; // Stop endless reflection spawning + } + sprite->sTypeFuncId = 1; // Enter active state; if the player moves the follower will appear + return TRUE; +} + +bool8 MovementType_FollowPlayer_Active(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (gPlayerAvatar.tileTransitionState == T_NOT_MOVING && !gObjectEvents[gPlayerAvatar.objectEventId].heldMovementActive ) { // do nothing if player is stationary + return FALSE; + } else if (!IsFollowerVisible()) { + if (objectEvent->invisible) { // Return to shadowing state + sprite->sTypeFuncId = 0; + return FALSE; + } + // Animate entering pokeball + ClearObjectEventMovement(objectEvent, sprite); + ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_ENTER_POKEBALL); + objectEvent->singleMovementActive = 1; + sprite->sTypeFuncId = 2; // movement action sets state to 0 + return TRUE; + } + // TODO: Remove dependence on PlayerGetCopyableMovement + return gFollowPlayerMovementFuncs[PlayerGetCopyableMovement()](objectEvent, sprite, GetPlayerMovementDirection(), NULL); +} + +bool8 MovementType_FollowPlayer_Moving(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + #ifdef MB_SIDEWAYS_STAIRS_RIGHT_SIDE + // Copied from ObjectEventExecSingleMovementAction + if (gMovementActionFuncs[objectEvent->movementActionId][sprite->sActionFuncId](objectEvent, sprite)) { + objectEvent->movementActionId = MOVEMENT_ACTION_NONE; + sprite->sActionFuncId = 0; + #else + if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { + #endif + objectEvent->singleMovementActive = 0; + if (sprite->sTypeFuncId) { // restore nonzero state + sprite->sTypeFuncId = 1; + } + } else if (objectEvent->movementActionId != MOVEMENT_ACTION_EXIT_POKEBALL) { + UpdateFollowerTransformEffect(objectEvent, sprite); + } + return FALSE; +} + +bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +{ + u8 direction; + if (!objectEvent->singleMovementActive) { // walk in place + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection)); + sprite->sTypeFuncId = 1; + objectEvent->singleMovementActive = 1; + return TRUE; + } else if (ObjectEventExecSingleMovementAction(objectEvent, sprite)) { // finish movement action + objectEvent->singleMovementActive = 0; + } + UpdateFollowerTransformEffect(objectEvent, sprite); + return FALSE; +} + +bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +{ + u32 direction; + s16 x; + s16 y; + s16 targetX; + s16 targetY; + #ifdef MB_SIDEWAYS_STAIRS_RIGHT_SIDE + u8 playerAction = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId; + #endif + + targetX = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x; + targetY = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y; + x = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x; + y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y; + + if ((x == targetX && y == targetY) || !IsFollowerVisible()) { // don't move on player collision or if not visible + return FALSE; + } + x = objectEvent->currentCoords.x; + y = objectEvent->currentCoords.y; + ClearObjectEventMovement(objectEvent, sprite); + + if (objectEvent->invisible) { // Animate exiting pokeball + // Player is jumping, but follower is invisible + if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2) { + sprite->sTypeFuncId = 0; // return to shadowing state + return FALSE; + } + MoveObjectEventToMapCoords(objectEvent, targetX, targetY); + ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_EXIT_POKEBALL); + objectEvent->singleMovementActive = 1; + sprite->sTypeFuncId = 2; + return TRUE; + } else if (x == targetX && y == targetY) { // don't move if already in the player's last position + return FALSE; + } + + // Follow player + direction = GetDirectionToFace(x, y, targetX, targetY); + MoveCoords(direction, &x, &y); + #ifdef MB_SIDEWAYS_STAIRS_RIGHT_SIDE // https://github.com/ghoulslash/pokeemerald/tree/sideways_stairs + GetCollisionAtCoords(objectEvent, x, y, direction); // Sets directionOverwrite for stairs + if (GetLedgeJumpDirection(x, y, direction) != DIR_NONE) // InitJumpRegular will set the proper speed + ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction)); + else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) { // Set follow speed according to player's speed + if (playerAction >= MOVEMENT_ACTION_RUN_DOWN_SLOW && playerAction <= MOVEMENT_ACTION_RUN_RIGHT_SLOW) + objectEvent->movementActionId = GetWalkNormalMovementAction(direction); + else + objectEvent->movementActionId = GetWalkFastMovementAction(direction); + + } else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2) { + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction)); + } else { + if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_RIGHT) + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction)); + else + objectEvent->movementActionId = GetWalkNormalMovementAction(direction); + } + sprite->sActionFuncId = 0; + #else + if (GetLedgeJumpDirection(x, y, direction) != DIR_NONE) // InitJumpRegular will set the proper speed + ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction)); + else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) // Set follow speed according to player's speed + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFastMovementAction(direction)); + // If *player* jumps, make step take twice as long + else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2) + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction)); + else + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(direction)); + #endif + objectEvent->singleMovementActive = 1; + sprite->sTypeFuncId = 2; + return TRUE; +} + +bool8 FollowablePlayerMovement_GoSpeed1(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +{ + u32 direction; + s16 x; + s16 y; + + direction = playerDirection; + direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + ObjectEventMoveDestCoords(objectEvent, direction, &x, &y); + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFastMovementAction(direction)); + if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y)))) + { + ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction)); + } + objectEvent->singleMovementActive = TRUE; + sprite->sTypeFuncId = 2; + return TRUE; +} + +bool8 FollowablePlayerMovement_GoSpeed2(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +{ + u32 direction; + s16 x; + s16 y; + + direction = playerDirection; + direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + ObjectEventMoveDestCoords(objectEvent, direction, &x, &y); + ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFasterMovementAction(direction)); + if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y)))) + { + ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction)); + } + objectEvent->singleMovementActive = TRUE; + sprite->sTypeFuncId = 2; + return TRUE; +} + +bool8 FollowablePlayerMovement_Slide(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +{ + u32 direction; + s16 x; + s16 y; + + direction = playerDirection; + direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + ObjectEventMoveDestCoords(objectEvent, direction, &x, &y); + ObjectEventSetSingleMovement(objectEvent, sprite, GetSlideMovementAction(direction)); + if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y)))) + { + ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction)); + } + objectEvent->singleMovementActive = TRUE; + sprite->sTypeFuncId = 2; + return TRUE; +} + +bool8 fph_IM_DIFFERENT(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +{ + u32 direction; + + direction = playerDirection; + direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + ObjectEventSetSingleMovement(objectEvent, sprite, GetJumpInPlaceMovementAction(direction)); + objectEvent->singleMovementActive = TRUE; + sprite->sTypeFuncId = 2; + return TRUE; +} + +bool8 FollowablePlayerMovement_GoSpeed4(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +{ + u32 direction; + s16 x; + s16 y; + + direction = playerDirection; + direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction); + ObjectEventMoveDestCoords(objectEvent, direction, &x, &y); + ObjectEventSetSingleMovement(objectEvent, sprite, GetJumpMovementAction(direction)); + if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y)))) + { + ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction)); + } + objectEvent->singleMovementActive = TRUE; + sprite->sTypeFuncId = 2; + return TRUE; +} + +bool8 FollowablePlayerMovement_Jump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8)) +{ + u32 direction; + s16 x; + s16 y; + + direction = playerDirection; + x = objectEvent->currentCoords.x; + y = objectEvent->currentCoords.y; + MoveCoordsInDirection(direction, &x, &y, 2, 2); + ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction)); + objectEvent->singleMovementActive = TRUE; + sprite->sTypeFuncId = 2; + return TRUE; +} + movement_type_def(MovementType_CopyPlayerInGrass, gMovementTypeFuncs_CopyPlayerInGrass) bool8 MovementType_CopyPlayerInGrass_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) @@ -4478,7 +5362,7 @@ bool8 MovementType_Invisible_Step2(struct ObjectEvent *objectEvent, struct Sprit return FALSE; } -static void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite) +void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite) { objectEvent->singleMovementActive = FALSE; objectEvent->heldMovementActive = FALSE; @@ -4628,6 +5512,41 @@ u8 GetDirectionToFace(s16 x, s16 y, s16 targetX, s16 targetY) return DIR_SOUTH; } +// Uses the above, but script accessible, and uses localIds +bool8 ScrFunc_GetDirectionToFace(struct ScriptContext *ctx) { + u16 *var = GetVarPointer(ScriptReadHalfword(ctx)); + u8 id0 = GetObjectEventIdByLocalId(ScriptReadByte(ctx)); // source + u8 id1 = GetObjectEventIdByLocalId(ScriptReadByte(ctx)); // target + if (var == NULL) + return FALSE; + if (id0 >= OBJECT_EVENTS_COUNT || id1 >= OBJECT_EVENTS_COUNT) + *var = DIR_NONE; + else + *var = GetDirectionToFace( + gObjectEvents[id0].currentCoords.x, + gObjectEvents[id0].currentCoords.y, + gObjectEvents[id1].currentCoords.x, + gObjectEvents[id1].currentCoords.y); + return FALSE; +} + +// Whether following pokemon is also the user of the field move +// Intended to be called before the field effect itself +bool8 ScrFunc_IsFollowerFieldMoveUser(struct ScriptContext *ctx) { + u16 *var = GetVarPointer(ScriptReadHalfword(ctx)); + u16 userIndex = gFieldEffectArguments[0]; // field move user index + struct Pokemon *follower = GetFirstLiveMon(); + struct ObjectEvent *obj = GetFollowerObject(); + if (var == NULL) + return FALSE; + *var = FALSE; + if (follower && obj && !obj->invisible) { + u16 followIndex = ((u32)follower - (u32)gPlayerParty) / sizeof(struct Pokemon); + *var = userIndex == followIndex; + } else + return FALSE; +} + void SetTrainerMovementType(struct ObjectEvent *objectEvent, u8 movementType) { objectEvent->movementType = movementType; @@ -4727,10 +5646,13 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16 u8 i; struct ObjectEvent *curObject; + if (objectEvent->localId == OBJ_EVENT_ID_FOLLOWER) + return FALSE; // follower cannot collide with other objects, but they can collide with it + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { curObject = &gObjectEvents[i]; - if (curObject->active && curObject != objectEvent) + if (curObject->active && (curObject->movementType != MOVEMENT_TYPE_FOLLOW_PLAYER || objectEvent != &gObjectEvents[gPlayerAvatar.objectEventId]) && curObject != objectEvent) { if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y)) { @@ -5424,6 +6346,8 @@ enum { JUMP_TYPE_HIGH, JUMP_TYPE_LOW, JUMP_TYPE_NORMAL, + JUMP_TYPE_FAST, + JUMP_TYPE_FASTER, }; static void InitJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 distance, u8 type) @@ -5447,6 +6371,13 @@ static void InitJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 static void InitJumpRegular(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 distance, u8 type) { + // For follower only, match the anim duration of the player's movement, whether dashing, walking or jumping + if (objectEvent->localId == OBJ_EVENT_ID_FOLLOWER + && type == JUMP_TYPE_HIGH + && distance == JUMP_DISTANCE_FAR + // In some areas (i.e Meteor Falls), the player can jump as the follower jumps, so preserve type in this case + && PlayerGetCopyableMovement() != COPY_MOVE_JUMP2) + type = TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) ? JUMP_TYPE_FASTER : JUMP_TYPE_FAST; InitJump(objectEvent, sprite, direction, distance, type); SetStepAnimHandleAlternation(objectEvent, sprite, GetMoveDirectionAnimNum(objectEvent->facingDirection)); DoShadowFieldEffect(objectEvent); @@ -5737,6 +6668,150 @@ bool8 MovementAction_WalkInPlaceSlowDown_Step0(struct ObjectEvent *objectEvent, return MovementAction_WalkInPlaceSlow_Step1(objectEvent, sprite); } +// Copy and load objectEvent's palette, but set all opaque colors to white +static u8 LoadWhiteFlashPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + u16 paletteData[16]; + struct SpritePalette dynamicPalette = {.tag = OBJ_EVENT_PAL_TAG_NONE-1, .data = paletteData}; // TODO: Use a proper palette tag here + CpuFill16(RGB_WHITE, paletteData, 32); + return UpdateSpritePalette(&dynamicPalette, sprite); +} + +bool8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + u8 direction = gObjectEvents[gPlayerAvatar.objectEventId].facingDirection; + u16 graphicsId = objectEvent->graphicsId; + objectEvent->invisible = FALSE; + if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH)) { // If player is dashing, the pokemon must come out faster + StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFastestAnimNum(direction) + 4); + sprite->data[3] = 8; // duration + sprite->data[6] = 0; // fast speed + } else { + StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFastestAnimNum(direction)); + sprite->data[3] = 16; // duration + sprite->data[6] = 1; // slow speed + } + sprite->data[6] |= (direction == DIR_EAST ? 1 : 0) << 4; + ObjectEventSetGraphicsId(objectEvent, OBJ_EVENT_GFX_ANIMATED_BALL); + objectEvent->graphicsId = graphicsId; + objectEvent->inanimate = FALSE; + return MovementAction_ExitPokeball_Step1(objectEvent, sprite); +} + +static const union AffineAnimCmd sAffineAnim_PokeballExit[] = +{ + AFFINEANIMCMD_FRAME(0x40, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x80, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xC0, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sAffineAnim_PokeballExitEast[] = // sprite is h-flipped when east +{ + AFFINEANIMCMD_FRAME(0xFFC0, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFF80, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFF40, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sAffineAnim_PokeballEnter[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xC0, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x80, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0x40, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sAffineAnim_PokeballEnterEast[] = // sprtie is h-flipped when east +{ + AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFF40, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFF80, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFC0, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const sAffineAnims_PokeballFollower[] = +{ + sAffineAnim_PokeballExit, + sAffineAnim_PokeballExitEast, + sAffineAnim_PokeballEnter, + sAffineAnim_PokeballEnterEast, +}; + +bool8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + u8 duration = sprite->data[6] & 0xF; + sprite->data[3]--; + if (sprite->data[3] == 0) + { + sprite->sActionFuncId = 2; + sprite->animCmdIndex = 0; + sprite->animPaused = TRUE; + return TRUE; + // Set graphics, palette, and affine animation + } else if ((duration == 0 && sprite->data[3] == 3) || (duration == 1 && sprite->data[3] == 7)) { + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); + LoadWhiteFlashPalette(objectEvent, sprite); + // Initialize affine animation + sprite->affineAnims = sAffineAnims_PokeballFollower; + sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, sprite->data[6] >> 4); + // Restore original palette & disable affine + } else if ((duration == 0 && sprite->data[3] == 1) || (duration == 1 && sprite->data[3] == 3)) { + sprite->affineAnimEnded = TRUE; + FreeSpriteOamMatrix(sprite); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); + } + return FALSE; +} + +bool8 MovementAction_EnterPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + u8 direction = objectEvent->facingDirection; + StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFasterAnimNum(direction)); + sprite->data[3] = 16; // duration + sprite->data[6] = direction == DIR_EAST ? 3 : 2; // affine animation number + EndFollowerTransformEffect(objectEvent, sprite); + return MovementAction_EnterPokeball_Step1(objectEvent, sprite); +} + +bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + u16 graphicsId = objectEvent->graphicsId; + sprite->data[3]--; + if (sprite->data[3] == 0) { + sprite->data[2] = 2; + return FALSE; + } else if (sprite->data[3] == 11) { // Set palette to white & start affine + LoadWhiteFlashPalette(objectEvent, sprite); + sprite->affineAnims = sAffineAnims_PokeballFollower; + sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, sprite->data[6]); + } else if (sprite->data[3] == 7) { // Free white palette and change to pokeball, disable affine + sprite->affineAnimEnded = TRUE; + FreeSpriteOamMatrix(sprite); + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + ObjectEventSetGraphicsId(objectEvent, OBJ_EVENT_GFX_ANIMATED_BALL); + objectEvent->graphicsId = graphicsId; + objectEvent->inanimate = FALSE; + } + return FALSE; +} + +bool8 MovementAction_EnterPokeball_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny); + objectEvent->invisible = TRUE; + sprite->data[1] = 0; + sprite->data[6] = 0; + sprite->animPaused = TRUE; + return TRUE; +} + bool8 MovementAction_WalkInPlaceSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { InitMoveInPlace(objectEvent, sprite, DIR_NORTH, GetMoveDirectionAnimNum(DIR_NORTH), 32); @@ -6489,6 +7564,7 @@ bool8 MovementAction_EmoteExclamationMark_Step0(struct ObjectEvent *objectEvent, bool8 MovementAction_EmoteQuestionMark_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { ObjectEventGetLocalIdAndMap(objectEvent, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]); + gFieldEffectArguments[7] = -1; FieldEffectStart(FLDEFF_QUESTION_MARK_ICON); sprite->sActionFuncId = 1; return TRUE; @@ -7872,18 +8948,21 @@ static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, st [TRACKS_NONE] = DoTracksGroundEffect_None, [TRACKS_FOOT] = DoTracksGroundEffect_Footprints, [TRACKS_BIKE_TIRE] = DoTracksGroundEffect_BikeTireTracks, + [TRACKS_SLITHER] = DoTracksGroundEffect_SlitherTracks, + [TRACKS_SPOT] = DoTracksGroundEffect_FootprintsC, + [TRACKS_BUG] = DoTracksGroundEffect_FootprintsB, }; void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); - sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, FALSE); + sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, FALSE); } void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite) { const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId); - sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, TRUE); + sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, TRUE); } static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) @@ -7906,6 +8985,40 @@ static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct FieldEffectStart(sandFootprints_FieldEffectData[isDeepSand]); } +static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +{ + // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) + u16 otherFootprintsA_FieldEffectData[2] = { + FLDEFF_TRACKS_SPOT, + FLDEFF_TRACKS_SPOT + }; + + gFieldEffectArguments[0] = objEvent->previousCoords.x; + gFieldEffectArguments[1] = objEvent->previousCoords.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = objEvent->facingDirection; + gFieldEffectArguments[5] = objEvent->previousMetatileBehavior; + FieldEffectStart(otherFootprintsA_FieldEffectData[a]); +} + +static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +{ + // First half-word is a Field Effect script id. (gFieldEffectScriptPointers) + u16 otherFootprintsB_FieldEffectData[2] = { + FLDEFF_TRACKS_BUG, + FLDEFF_TRACKS_BUG + }; + + gFieldEffectArguments[0] = objEvent->previousCoords.x; + gFieldEffectArguments[1] = objEvent->previousCoords.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = objEvent->facingDirection; + gFieldEffectArguments[5] = objEvent->previousMetatileBehavior; + FieldEffectStart(otherFootprintsB_FieldEffectData[a]); +} + static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand) { // Specifies which bike track shape to show next. @@ -7933,6 +9046,34 @@ static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, st } } +static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, u8 a) +{ + // Specifies which bike track shape to show next. + // For example, when the bike turns from up to right, it will show + // a track that curves to the right. + // Each 4-byte row corresponds to the initial direction of the bike, and + // each byte in that row is for the next direction of the bike in the order + // of down, up, left, right. + static const u8 slitherTracks_Transitions[4][4] = { + 1, 2, 7, 8, + 1, 2, 6, 5, + 5, 8, 3, 4, + 6, 7, 3, 4, + }; + + if (objEvent->currentCoords.x != objEvent->previousCoords.x || objEvent->currentCoords.y != objEvent->previousCoords.y) + { + gFieldEffectArguments[0] = objEvent->previousCoords.x; + gFieldEffectArguments[1] = objEvent->previousCoords.y; + gFieldEffectArguments[2] = 149; + gFieldEffectArguments[3] = 2; + gFieldEffectArguments[4] = + slitherTracks_Transitions[objEvent->previousMovementDirection][objEvent->facingDirection - 5]; + gFieldEffectArguments[5] = objEvent->previousMetatileBehavior; + FieldEffectStart(FLDEFF_TRACKS_SLITHER); + } +} + void GroundEffect_Ripple(struct ObjectEvent *objEvent, struct Sprite *sprite) { DoRippleFieldEffect(objEvent, sprite); @@ -8045,6 +9186,10 @@ static void (*const sGroundEffectFuncs[])(struct ObjectEvent *objEvent, struct S GroundEffect_Seaweed // GROUND_EFFECT_FLAG_SEAWEED }; +static void GroundEffect_Shadow(struct ObjectEvent *objEvent, struct Sprite *sprite) { + SetUpShadow(objEvent, sprite); +} + static void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags) { u8 i; @@ -8468,7 +9613,16 @@ static u8 DoJumpSpriteMovement(struct Sprite *sprite) if (sprite->sDistance != JUMP_DISTANCE_IN_PLACE) Step1(sprite, sprite->sDirection); - sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], sprite->sJumpType); + if (sprite->sJumpType == JUMP_TYPE_FASTER) { + Step3(sprite, sprite->sDirection); + sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], JUMP_TYPE_NORMAL); + sprite->sTimer += 3; + } else if (sprite->sJumpType == JUMP_TYPE_FAST) { + Step1(sprite, sprite->sDirection); + sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], JUMP_TYPE_NORMAL); + sprite->sTimer++; + } else + sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], sprite->sJumpType); sprite->sTimer++; @@ -8621,7 +9775,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); @@ -8630,10 +9784,12 @@ void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId) struct Sprite *sprite = &gSprites[spriteId]; const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId); u16 tileNum = sprite->oam.tileNum; + u8 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag); + if (i != 0xFF) + UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite); sprite->oam = *graphicsInfo->oam; sprite->oam.tileNum = tileNum; - sprite->oam.paletteNum = graphicsInfo->paletteSlot; sprite->images = graphicsInfo->images; if (graphicsInfo->subspriteTables == NULL) @@ -8762,7 +9918,7 @@ static void DoShadowFieldEffect(struct ObjectEvent *objectEvent) { if (!objectEvent->hasShadow) { - objectEvent->hasShadow = TRUE; + objectEvent->hasShadow = 1; StartFieldEffectForObjectEvent(FLDEFF_SHADOW, objectEvent); } } @@ -8972,3 +10128,25 @@ u8 MovementAction_Fly_Finish(struct ObjectEvent *objectEvent, struct Sprite *spr { return TRUE; } + +// Get gfx data from daycare pokemon and store it in vars +bool8 ScrFunc_getdaycaregfx(struct ScriptContext *ctx) { + u16 varGfx[] = {ScriptReadHalfword(ctx), ScriptReadHalfword(ctx)}; + u16 varForm[] = {ScriptReadHalfword(ctx), ScriptReadHalfword(ctx)}; + u16 specGfx; + u8 form; + u8 shiny; + s32 i; + for (i = 0; i < 2; i++) { + GetMonInfo((struct Pokemon *) &gSaveBlock1Ptr->daycare.mons[i].mon, &specGfx, &form, &shiny); + if (specGfx == SPECIES_NONE) + break; + // Assemble gfx ID like FollowerSetGraphics + specGfx = (OBJ_EVENT_GFX_MON_BASE + specGfx) & OBJ_EVENT_GFX_SPECIES_MASK; + specGfx |= form << OBJ_EVENT_GFX_SPECIES_BITS; + VarSet(varGfx[i], specGfx); + VarSet(varForm[i], form | (shiny << 5)); + } + gSpecialVar_Result = i; + return FALSE; +} diff --git a/src/field_effect.c b/src/field_effect.c index b8e3cecc66..4f0fe79a41 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -27,6 +27,7 @@ #include "trig.h" #include "util.h" #include "constants/field_effects.h" +#include "constants/event_objects.h" #include "constants/event_object_movement.h" #include "constants/metatile_behaviors.h" #include "constants/rgb.h" @@ -66,7 +67,6 @@ static void PokeballGlowEffect_WaitForSound(struct Sprite *); static void PokeballGlowEffect_Idle(struct Sprite *); static void SpriteCB_PokeballGlow(struct Sprite *); -static void FieldCallback_UseFly(void); static void Task_UseFly(u8); static void FieldCallback_FlyIntoMap(void); static void Task_FlyIntoMap(u8); @@ -936,12 +936,14 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 otId, u32 personality, s16 x, s16 void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId) { + u8 paletteNum = sprite->oam.paletteNum; ResetPreservedPalettesInWeather(); if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF) { FreeOamMatrix(sprite->oam.matrixNum); } - FreeAndDestroyMonPicSprite(spriteId); + FreeAndDestroyMonPicSpriteNoPalette(spriteId); + FieldEffectFreePaletteIfUnused(paletteNum); // Clear palette only if unused, in case follower is using it } // r, g, b are between 0 and 16 @@ -1339,10 +1341,10 @@ static void SpriteCB_HallOfFameMonitor(struct Sprite *sprite) void ReturnToFieldFromFlyMapSelect(void) { SetMainCallback2(CB2_ReturnToField); - gFieldCallback = FieldCallback_UseFly; + gFieldCallback = FieldCallback_Fly; } -static void FieldCallback_UseFly(void) +void FieldCallback_Fly(void) { FadeInFromBlack(); CreateTask(Task_UseFly, 0); @@ -1559,6 +1561,14 @@ static bool8 FallWarpEffect_End(struct Task *task) #define tState data[0] #define tGoingUp data[1] +static void HideFollowerForFieldEffect(void) { + struct ObjectEvent *followerObj = GetFollowerObject(); + if (!followerObj || followerObj->invisible) + return; + ClearObjectEventMovement(followerObj, &gSprites[followerObj->spriteId]); + ObjectEventSetHeldMovement(followerObj, MOVEMENT_ACTION_ENTER_POKEBALL); +} + void StartEscalatorWarp(u8 metatileBehavior, u8 priority) { u8 taskId; @@ -1582,6 +1592,7 @@ static bool8 EscalatorWarpOut_Init(struct Task *task) FreezeObjectEvents(); CameraObjectReset2(); StartEscalator(task->tGoingUp); + HideFollowerForFieldEffect(); // Hide follower before warping task->tState++; return FALSE; } @@ -1964,6 +1975,8 @@ static bool8 LavaridgeGymB1FWarpEffect_Init(struct Task *task, struct ObjectEven objectEvent->fixedPriority = 1; task->data[1] = 1; task->data[0]++; + if (objectEvent->localId == OBJ_EVENT_ID_PLAYER) // Hide follower before warping + HideFollowerForFieldEffect(); return TRUE; } @@ -2155,6 +2168,8 @@ static bool8 LavaridgeGym1FWarpEffect_Init(struct Task *task, struct ObjectEvent gPlayerAvatar.preventStep = TRUE; objectEvent->fixedPriority = 1; task->data[0]++; + if (objectEvent->localId == OBJ_EVENT_ID_PLAYER) // Hide follower before warping + HideFollowerForFieldEffect(); return FALSE; } @@ -2240,6 +2255,7 @@ void StartEscapeRopeFieldEffect(void) { LockPlayerFieldControls(); FreezeObjectEvents(); + HideFollowerForFieldEffect(); // hide follower before warping CreateTask(Task_EscapeRopeWarpOut, 80); } @@ -3004,6 +3020,8 @@ static void SurfFieldEffect_Init(struct Task *task) { LockPlayerFieldControls(); FreezeObjectEvents(); + // Put follower into pokeball before using Surf + HideFollowerForFieldEffect(); gPlayerAvatar.preventStep = TRUE; SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING); PlayerGetDestCoords(&task->tDestX, &task->tDestY); @@ -3054,13 +3072,15 @@ static void SurfFieldEffect_JumpOnSurfBlob(struct Task *task) static void SurfFieldEffect_End(struct Task *task) { - struct ObjectEvent *objectEvent; - objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + struct ObjectEvent *followerObject = GetFollowerObject(); if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { gPlayerAvatar.preventStep = FALSE; gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_CONTROLLABLE; ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection)); + if (followerObject) + ObjectEventClearHeldMovementIfFinished(followerObject); SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_PLAYER_AND_MON); UnfreezeObjectEvents(); UnlockPlayerFieldControls(); @@ -3081,7 +3101,7 @@ u8 FldEff_RayquazaSpotlight(void) struct Sprite *sprite = &gSprites[spriteId]; sprite->oam.priority = 1; - sprite->oam.paletteNum = 4; + sprite->oam.paletteNum = 4; // TODO: What (dynamic) palette should this Raquaza use? sprite->data[0] = 0; sprite->data[1] = 0; sprite->data[2] = 0; @@ -3116,10 +3136,10 @@ u8 FldEff_NPCFlyOut(void) u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0x78, 0, 1); struct Sprite *sprite = &gSprites[spriteId]; - sprite->oam.paletteNum = 0; sprite->oam.priority = 1; sprite->callback = SpriteCB_NPCFlyOut; sprite->data[1] = gFieldEffectArguments[0]; + sprite->oam.paletteNum = LoadObjectEventPalette(gSaveBlock2Ptr->playerGender ? FLDEFF_PAL_TAG_MAY : FLDEFF_PAL_TAG_BRENDAN); PlaySE(SE_M_FLY); return spriteId; } @@ -3298,9 +3318,9 @@ static u8 CreateFlyBirdSprite(void) struct Sprite *sprite; spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0xff, 0xb4, 0x1); sprite = &gSprites[spriteId]; - sprite->oam.paletteNum = 0; sprite->oam.priority = 1; sprite->callback = SpriteCB_FlyBirdLeaveBall; + sprite->oam.paletteNum = LoadObjectEventPalette(gSaveBlock2Ptr->playerGender ? FLDEFF_PAL_TAG_MAY : FLDEFF_PAL_TAG_BRENDAN); return spriteId; } diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 9421aaf27a..968cc3c789 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -7,18 +7,23 @@ #include "fieldmap.h" #include "gpu_regs.h" #include "metatile_behavior.h" +#include "palette.h" #include "sound.h" #include "sprite.h" #include "trig.h" +#include "constants/event_objects.h" #include "constants/field_effects.h" #include "constants/songs.h" #define OBJ_EVENT_PAL_TAG_NONE 0x11FF // duplicate of define in event_object_movement.c +#define PAL_TAG_REFLECTION_OFFSET 0x2000 // reflection tag value is paletteTag + 0x2000 +#define PAL_RAW_REFLECTION_OFFSET 0x4000 // raw reflection tag is paletteNum + 0x4000 static void UpdateObjectReflectionSprite(struct Sprite *); static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite); -static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *, u8); -static void LoadObjectRegularReflectionPalette(struct ObjectEvent *, u8); +static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *, struct Sprite *sprite); +static void LoadObjectRegularReflectionPalette(struct ObjectEvent *, struct Sprite *); + static void UpdateGrassFieldEffectSubpriority(struct Sprite *, u8, u8); static void FadeFootprintsTireTracks_Step0(struct Sprite *); static void FadeFootprintsTireTracks_Step1(struct Sprite *); @@ -31,6 +36,7 @@ static void SynchroniseSurfPosition(struct ObjectEvent *, struct Sprite *); static void UpdateBobbingEffect(struct ObjectEvent *, struct Sprite *, struct Sprite *); static void SpriteCB_UnderwaterSurfBlob(struct Sprite *); static u32 ShowDisguiseFieldEffect(u8, u8, u8); +u32 FldEff_Shadow(void); // Used by several field effects to determine which of a group it is #define sFldEff data[1] @@ -40,6 +46,13 @@ static u32 ShowDisguiseFieldEffect(u8, u8, u8); #define sReflectionVerticalOffset data[2] #define sIsStillReflection data[7] +void SetUpShadow(struct ObjectEvent *objectEvent, struct Sprite *sprite) { + gFieldEffectArguments[0] = objectEvent->localId; + gFieldEffectArguments[1] = gSaveBlock1Ptr->location.mapNum; + gFieldEffectArguments[2] = gSaveBlock1Ptr->location.mapGroup; + FldEff_Shadow(); +} + void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, bool8 stillReflection) { struct Sprite *reflectionSprite; @@ -47,7 +60,6 @@ void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, boo reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->x, sprite->y, 0x98)]; reflectionSprite->callback = UpdateObjectReflectionSprite; reflectionSprite->oam.priority = 3; - reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[reflectionSprite->oam.paletteNum]; reflectionSprite->usingSheet = TRUE; reflectionSprite->anims = gDummySpriteAnimTable; StartSpriteAnim(reflectionSprite, 0); @@ -81,87 +93,153 @@ static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct && ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior)) || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior)))) { - reflectionSprite->sReflectionVerticalOffset = bridgeReflectionVerticalOffsets[bridgeType - 1]; - LoadObjectHighBridgeReflectionPalette(objectEvent, reflectionSprite->oam.paletteNum); + reflectionSprite->data[2] = bridgeReflectionVerticalOffsets[bridgeType - 1]; + LoadObjectHighBridgeReflectionPalette(objectEvent, reflectionSprite); } else { - LoadObjectRegularReflectionPalette(objectEvent, reflectionSprite->oam.paletteNum); + LoadObjectRegularReflectionPalette(objectEvent, reflectionSprite); } } -static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteIndex) +// Apply a blue tint effect to a palette +static void ApplyPondFilter(u8 paletteNum, u16 *dest) { + u8 i, val, r, g, b; + // CpuCopy16(gPlttBufferUnfaded + 0x100 + paletteNum * 16, dest, 32); + u16 *src = gPlttBufferUnfaded + 0x100 + paletteNum * 16; + for (i = 0; i < 16; i++) { + r = src[i] & 0x1F; + g = (src[i] >> 5) & 0x1F; + b = (src[i] >> 10) & 0x1F; + b += 10; + if (b > 31) + b = 31; + *dest++ = (b << 10) | (g << 5) | r; + } +} + +// Apply a ice tint effect to a palette +static void ApplyIceFilter(u8 paletteNum, u16 *dest) { + u8 i, val, r, g, b; + // CpuCopy16(gPlttBufferUnfaded + 0x100 + paletteNum * 16, dest, 32); + u16 *src = gPlttBufferUnfaded + 0x100 + paletteNum * 16; + for (i = 0; i < 16; i++) { + r = src[i] & 0x1F; + r -= 5; + if (r > 31) + r = 0; + g = (src[i] >> 5) & 0x1F; + g += 3; + if (g > 31) + g = 31; + b = (src[i] >> 10) & 0x1F; + b += 16; + if (b > 31) + b = 31; + *dest++ = (b << 10) | (g << 5) | r; + } +} + +static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - const struct ObjectEventGraphicsInfo *graphicsInfo; - - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) - { - if (graphicsInfo->paletteSlot == PALSLOT_PLAYER) - LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); - else if (graphicsInfo->paletteSlot == PALSLOT_NPC_SPECIAL) - LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); - else - PatchObjectPalette(GetObjectPaletteTag(paletteIndex), paletteIndex); - UpdateSpritePaletteWithWeather(paletteIndex); + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + const struct Sprite *mainSprite = &gSprites[objectEvent->spriteId]; + u16 baseTag = GetSpritePaletteTagByPaletteNum(mainSprite->oam.paletteNum); + u16 paletteTag = baseTag == 0xFFFF ? mainSprite->oam.paletteNum + PAL_RAW_REFLECTION_OFFSET : baseTag + PAL_TAG_REFLECTION_OFFSET; + u8 paletteNum = IndexOfSpritePaletteTag(paletteTag); + if (paletteNum == 0xFF) { // Load filtered palette + u16 filteredData[16] = {0}; + struct SpritePalette filteredPalette = {.tag = paletteTag, .data = filteredData}; + if (sprite->data[7] == FALSE) { + ApplyPondFilter(mainSprite->oam.paletteNum, filteredData); + } else { + ApplyIceFilter(mainSprite->oam.paletteNum, filteredData); + } + paletteNum = LoadSpritePalette(&filteredPalette); + UpdateSpritePaletteWithWeather(paletteNum); } + sprite->oam.paletteNum = paletteNum; + sprite->oam.objMode = 1; // Alpha blending } +#define HIGH_BRIDGE_PAL_TAG 0x4010 + // When walking on a bridge high above water (Route 120), the reflection is a solid dark blue color. // This is so the sprite blends in with the dark water metatile underneath the bridge. -static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteNum) +static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - const struct ObjectEventGraphicsInfo *graphicsInfo; - - graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); - if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE) - { - PatchObjectPalette(graphicsInfo->reflectionPaletteTag, paletteNum); - UpdateSpritePaletteWithWeather(paletteNum); + u16 blueData[16] = {0}; + struct SpritePalette bluePalette = {.tag = HIGH_BRIDGE_PAL_TAG, .data = blueData}; + u8 i; + for (i = 1; i < 16; i++) { + blueData[i] = 0x55c9; } + sprite->oam.paletteNum = LoadSpritePalette(&bluePalette); + UpdateSpritePaletteWithWeather(sprite->oam.paletteNum); } static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) { - struct ObjectEvent *objectEvent; - struct Sprite *mainSprite; + struct ObjectEvent *objectEvent = &gObjectEvents[reflectionSprite->data[0]]; + struct Sprite *mainSprite = &gSprites[objectEvent->spriteId]; - objectEvent = &gObjectEvents[reflectionSprite->sReflectionObjEventId]; - mainSprite = &gSprites[objectEvent->spriteId]; - if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->sReflectionObjEventLocalId) + if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->data[1]) { reflectionSprite->inUse = FALSE; + FieldEffectFreePaletteIfUnused(reflectionSprite->oam.paletteNum); + return; } - else - { - reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[mainSprite->oam.paletteNum]; - reflectionSprite->oam.shape = mainSprite->oam.shape; - reflectionSprite->oam.size = mainSprite->oam.size; - reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | ST_OAM_VFLIP; - reflectionSprite->oam.tileNum = mainSprite->oam.tileNum; - reflectionSprite->subspriteTables = mainSprite->subspriteTables; - reflectionSprite->subspriteTableNum = mainSprite->subspriteTableNum; - reflectionSprite->invisible = mainSprite->invisible; - reflectionSprite->x = mainSprite->x; - reflectionSprite->y = mainSprite->y + GetReflectionVerticalOffset(objectEvent) + reflectionSprite->sReflectionVerticalOffset; - reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX; - reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY; - reflectionSprite->x2 = mainSprite->x2; - reflectionSprite->y2 = -mainSprite->y2; - reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled; - if (objectEvent->hideReflection == TRUE) - reflectionSprite->invisible = TRUE; - - if (reflectionSprite->sIsStillReflection == FALSE) - { - // Sets the reflection sprite's rot/scale matrix to the appropriate - // matrix based on whether or not the main sprite is horizontally flipped. - // If the sprite is facing to the east, then it is flipped, and its matrixNum is 8. - reflectionSprite->oam.matrixNum = 0; - if (mainSprite->oam.matrixNum & ST_OAM_HFLIP) - reflectionSprite->oam.matrixNum = 1; + // Only filter palette if not using the high bridge blue palette + if (IndexOfSpritePaletteTag(HIGH_BRIDGE_PAL_TAG) != reflectionSprite->oam.paletteNum) { + u16 baseTag = GetSpritePaletteTagByPaletteNum(mainSprite->oam.paletteNum); + u16 paletteTag = baseTag == 0xFFFF ? mainSprite->oam.paletteNum + PAL_RAW_REFLECTION_OFFSET : baseTag + PAL_TAG_REFLECTION_OFFSET; + u8 paletteNum = IndexOfSpritePaletteTag(paletteTag); + if (paletteNum == 0xFF) { // Build filtered palette + u16 filteredData[16] = {0}; + struct SpritePalette filteredPalette = {.tag = paletteTag, .data = filteredData}; + // Free palette if unused + reflectionSprite->inUse = FALSE; + FieldEffectFreePaletteIfUnused(reflectionSprite->oam.paletteNum); + reflectionSprite->inUse = TRUE; + if (reflectionSprite->data[7] == FALSE) { + ApplyPondFilter(mainSprite->oam.paletteNum, filteredData); + } else { + ApplyIceFilter(mainSprite->oam.paletteNum, filteredData); } + paletteNum = LoadSpritePalette(&filteredPalette); + UpdateSpritePaletteWithWeather(paletteNum); + } + reflectionSprite->oam.paletteNum = paletteNum; + } + reflectionSprite->oam.shape = mainSprite->oam.shape; + reflectionSprite->oam.size = mainSprite->oam.size; + reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | ST_OAM_VFLIP; + reflectionSprite->oam.tileNum = mainSprite->oam.tileNum; + reflectionSprite->subspriteTables = mainSprite->subspriteTables; + reflectionSprite->subspriteTableNum = mainSprite->subspriteTableNum; + reflectionSprite->invisible = mainSprite->invisible; + reflectionSprite->x = mainSprite->x; + // reflectionSprite->data[2] holds an additional vertical offset, used by the high bridges on Route 120 + reflectionSprite->y = mainSprite->y + GetReflectionVerticalOffset(objectEvent) + reflectionSprite->data[2]; + reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX; + reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY; + reflectionSprite->x2 = mainSprite->x2; + reflectionSprite->y2 = -mainSprite->y2; + reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled; + + if (objectEvent->hideReflection == TRUE) + reflectionSprite->invisible = TRUE; + + // Check if the reflection is not still. + if (reflectionSprite->data[7] == FALSE) + { + // Sets the reflection sprite's rot/scale matrix to the appropriate + // matrix based on whether or not the main sprite is horizontally flipped. + // If the sprite is facing to the east, then it is flipped, and its matrixNum is 8. + reflectionSprite->oam.matrixNum = 0; + if (mainSprite->oam.matrixNum & ST_OAM_HFLIP) + reflectionSprite->oam.matrixNum = 1; } } @@ -181,6 +259,8 @@ u8 CreateWarpArrowSprite(void) if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; + // Can use either gender's palette, so try to use the one that should be loaded + sprite->oam.paletteNum = LoadObjectEventPalette(gSaveBlock2Ptr->playerGender ? FLDEFF_PAL_TAG_MAY : FLDEFF_PAL_TAG_BRENDAN); sprite->oam.priority = 1; sprite->coordOffsetEnabled = TRUE; sprite->invisible = TRUE; @@ -232,12 +312,21 @@ u32 FldEff_Shadow(void) u8 objectEventId; const struct ObjectEventGraphicsInfo *graphicsInfo; u8 spriteId; - + u8 i; + for (i = 0; i < MAX_SPRITES; i++) { + // Return early if a shadow sprite already exists + if (gSprites[i].data[0] == gFieldEffectArguments[0] && gSprites[i].callback == UpdateShadowFieldEffect) + return 0; + } objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId); + if (graphicsInfo->shadowSize == SHADOW_SIZE_NONE) // don't create a shadow at all + return 0; spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94); if (spriteId != MAX_SPRITES) { + // SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 12)); + gSprites[spriteId].oam.objMode = 1; // BLEND gSprites[spriteId].coordOffsetEnabled = TRUE; gSprites[spriteId].data[0] = gFieldEffectArguments[0]; gSprites[spriteId].data[1] = gFieldEffectArguments[1]; @@ -264,12 +353,11 @@ void UpdateShadowFieldEffect(struct Sprite *sprite) sprite->oam.priority = linkedSprite->oam.priority; sprite->x = linkedSprite->x; sprite->y = linkedSprite->y + sprite->data[3]; + sprite->invisible = linkedSprite->invisible; if (!objectEvent->active || !objectEvent->hasShadow || MetatileBehavior_IsPokeGrass(objectEvent->currentMetatileBehavior) || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->currentMetatileBehavior) - || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->previousMetatileBehavior) - || MetatileBehavior_IsReflective(objectEvent->currentMetatileBehavior) - || MetatileBehavior_IsReflective(objectEvent->previousMetatileBehavior)) + || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->previousMetatileBehavior)) { FieldEffectStop(sprite, FLDEFF_SHADOW); } @@ -597,6 +685,42 @@ u32 FldEff_DeepSandFootprints(void) return spriteId; } +u32 FldEff_TracksBug(void) +{ + u8 spriteId; + struct Sprite *sprite; + + SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_BUG], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectArguments[3]; + sprite->data[7] = FLDEFF_TRACKS_BUG; + StartSpriteAnim(sprite, gFieldEffectArguments[4]); + } + return 0; +} + +u32 FldEff_TracksSpot(void) +{ + u8 spriteId; + struct Sprite *sprite; + + SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_SPOT], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectArguments[3]; + sprite->data[7] = FLDEFF_TRACKS_SPOT; + StartSpriteAnim(sprite, gFieldEffectArguments[4]); + } + return 0; +} + u32 FldEff_BikeTireTracks(void) { u8 spriteId; @@ -615,6 +739,24 @@ u32 FldEff_BikeTireTracks(void) return spriteId; } +u32 FldEff_TracksSlither(void) +{ + u8 spriteId; + struct Sprite *sprite; + + SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_SLITHER], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectArguments[3]; + sprite->data[7] = FLDEFF_TRACKS_SLITHER; + StartSpriteAnim(sprite, gFieldEffectArguments[4]); + } + return spriteId; +} + void (*const gFadeFootprintsTireTracksFuncs[])(struct Sprite *) = { FadeFootprintsTireTracks_Step0, FadeFootprintsTireTracks_Step1 @@ -1014,8 +1156,9 @@ u32 FldEff_SurfBlob(void) { sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; - sprite->oam.paletteNum = 0; sprite->tPlayerObjId = gFieldEffectArguments[2]; + // Can use either gender's palette, so try to use the one that should be loaded + sprite->oam.paletteNum = LoadObjectEventPalette(gSaveBlock2Ptr->playerGender ? FLDEFF_PAL_TAG_MAY : FLDEFF_PAL_TAG_BRENDAN); sprite->data[3] = -1; sprite->data[6] = -1; sprite->data[7] = -1; @@ -1297,7 +1440,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void) sprite = &gSprites[spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gFieldEffectArguments[3]; - sprite->oam.paletteNum = 5; + UpdateSpritePaletteByTemplate(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], sprite); sprite->data[0] = FLDEFF_BERRY_TREE_GROWTH_SPARKLE; } return 0; @@ -1339,8 +1482,8 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum) if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; + UpdateSpritePaletteByTemplate(gFieldEffectObjectTemplatePointers[fldEffObj], sprite); sprite->coordOffsetEnabled ++; - sprite->oam.paletteNum = paletteNum; sprite->sFldEff = fldEff; sprite->sLocalId = gFieldEffectArguments[0]; sprite->sMapNum = gFieldEffectArguments[1]; diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index 0f087799e3..54e43a5387 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1212,50 +1212,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) -{ - switch (gfxId) - { - case OBJ_EVENT_GFX_RIVAL_MAY_NORMAL: - case OBJ_EVENT_GFX_RIVAL_MAY_MACH_BIKE: - case OBJ_EVENT_GFX_RIVAL_MAY_ACRO_BIKE: - case OBJ_EVENT_GFX_RIVAL_MAY_SURFING: - case OBJ_EVENT_GFX_RIVAL_MAY_FIELD_MOVE: - case OBJ_EVENT_GFX_MAY_UNDERWATER: - case OBJ_EVENT_GFX_MAY_FISHING: - case OBJ_EVENT_GFX_MAY_WATERING: - return FEMALE; - default: - return MALE; - } -} - -u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId) +u16 GetPlayerAvatarGenderByGraphicsId(u16 gfxId) { switch (gfxId) { @@ -1324,7 +1306,7 @@ void SetPlayerAvatarStateMask(u8 flags) gPlayerAvatar.flags |= flags; } -static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender) +static u8 GetPlayerAvatarStateTransitionByGraphicsId(u16 graphicsId, u8 gender) { u8 i; @@ -1336,7 +1318,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; @@ -1349,7 +1331,7 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void) return 0; } -void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 transitionFlag) +void SetPlayerAvatarExtraStateTransition(u16 graphicsId, u8 transitionFlag) { u8 stateFlag = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender); diff --git a/src/field_poison.c b/src/field_poison.c index 202be30e20..4a55ecb5be 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -3,6 +3,7 @@ #include "battle_pike.h" #include "battle_pyramid.h" #include "event_data.h" +#include "event_object_movement.h" #include "field_message_box.h" #include "field_poison.h" #include "fldeff_misc.h" @@ -104,6 +105,7 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId) else { gSpecialVar_Result = FLDPSN_NO_WHITEOUT; + UpdateFollowingPokemon(); } ScriptContext_Enable(); DestroyTask(taskId); diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 616444116c..c04884d5ae 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -679,6 +679,7 @@ static void Task_DoDoorWarp(u8 taskId) struct Task *task = &gTasks[taskId]; s16 *x = &task->data[2]; s16 *y = &task->data[3]; + struct ObjectEvent *followerObject = GetFollowerObject(); switch (task->tState) { @@ -686,6 +687,10 @@ static void Task_DoDoorWarp(u8 taskId) FreezeObjectEvents(); PlayerGetDestCoords(x, y); PlaySE(GetDoorSoundEffect(*x, *y - 1)); + if (followerObject) { // Put follower into pokeball + ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]); + ObjectEventSetHeldMovement(followerObject, MOVEMENT_ACTION_ENTER_POKEBALL); + } task->data[1] = FieldAnimateDoorOpen(*x, *y - 1); task->tState = 1; break; @@ -1162,6 +1167,9 @@ static void Task_OrbEffect(u8 taskId) tState = 4; break; case 4: + // If the caller script is delayed after starting the orb effect, a `waitstate` might be reached *after* + // we enable the ScriptContext in case 2; enabling it here as well avoids softlocks in this scenario + ScriptContext_Enable(); if (--tShakeDelay == 0) { s32 panning; diff --git a/src/field_specials.c b/src/field_specials.c index 6fdec2a5f0..aabce117e3 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -101,7 +101,7 @@ void SetPlayerGotFirstFans(void); u16 GetNumFansOfPlayerInTrainerFanClub(void); static void RecordCyclingRoadResults(u32, u8); -static void LoadLinkPartnerObjectEventSpritePalette(u8, u8, u8); +static void LoadLinkPartnerObjectEventSpritePalette(u16, u8, u8); static void Task_PetalburgGymSlideOpenRoomDoors(u8); static void PetalburgGymSetDoorMetatiles(u8, u16); static void Task_PCTurnOnEffect(u8); @@ -574,7 +574,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. @@ -3056,7 +3056,8 @@ static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused) case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2: case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR: case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR: - DestroySpriteAndFreeResources(&gSprites[sScrollableMultichoice_ItemSpriteId]); + // This makes sure deleting the icon will not clear palettes in use by object events + FieldEffectFreeGraphicsResources(&gSprites[sScrollableMultichoice_ItemSpriteId]); break; } sScrollableMultichoice_ItemSpriteId = MAX_SPRITES; diff --git a/src/field_weather.c b/src/field_weather.c index 73aef3746d..046a282a9e 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -133,15 +133,15 @@ static const u8 sBasePaletteColorMapTypes[32] = // sprite palettes COLOR_MAP_CONTRAST, COLOR_MAP_DARK_CONTRAST, - COLOR_MAP_CONTRAST, - COLOR_MAP_CONTRAST, - COLOR_MAP_CONTRAST, - COLOR_MAP_CONTRAST, COLOR_MAP_DARK_CONTRAST, COLOR_MAP_DARK_CONTRAST, COLOR_MAP_DARK_CONTRAST, COLOR_MAP_DARK_CONTRAST, - COLOR_MAP_CONTRAST, + COLOR_MAP_DARK_CONTRAST, + COLOR_MAP_DARK_CONTRAST, + COLOR_MAP_DARK_CONTRAST, + COLOR_MAP_DARK_CONTRAST, + COLOR_MAP_DARK_CONTRAST, COLOR_MAP_DARK_CONTRAST, COLOR_MAP_DARK_CONTRAST, COLOR_MAP_DARK_CONTRAST, @@ -249,6 +249,7 @@ static void Task_WeatherMain(u8 taskId) static void None_Init(void) { + Weather_SetBlendCoeffs(8, 12); // Indoor shadows gWeatherPtr->targetColorMapIndex = 0; gWeatherPtr->colorMapStepDelay = 0; } diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 05eae421e0..566e48e36f 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -154,6 +154,7 @@ void Sunny_InitVars(void) { gWeatherPtr->targetColorMapIndex = 0; gWeatherPtr->colorMapStepDelay = 20; + Weather_SetBlendCoeffs(8, 12); } void Sunny_InitAll(void) @@ -2633,5 +2634,3 @@ static void UpdateRainCounter(u8 newWeather, u8 oldWeather) && (newWeather == WEATHER_RAIN || newWeather == WEATHER_RAIN_THUNDERSTORM)) IncrementGameStat(GAME_STAT_GOT_RAINED_ON); } - - diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index c01e88b512..0b254b6af3 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -1024,7 +1024,7 @@ void DoSecretBaseGlitterMatSparkle(void) { gSprites[spriteId].coordOffsetEnabled = TRUE; gSprites[spriteId].oam.priority = 1; - gSprites[spriteId].oam.paletteNum = 5; + UpdateSpritePaletteByTemplate(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], &gSprites[spriteId]); gSprites[spriteId].callback = SpriteCB_GlitterMatSparkle; gSprites[spriteId].data[0] = 0; } diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 27689b02e3..39f64adb87 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -27,7 +27,7 @@ static void Task_DoFieldMove_RunFunc(u8 taskId); static void FieldCallback_RockSmash(void); static void FieldMove_RockSmash(void); -bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) +bool8 CheckObjectGraphicsInFrontOfPlayer(u16 graphicsId) { u8 objEventId; @@ -61,9 +61,11 @@ static void Task_DoFieldMove_Init(u8 taskId) if (!ObjectEventIsMovementOverridden(&gObjectEvents[objEventId]) || ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId])) { - if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) + if (gMapHeader.mapType == MAP_TYPE_UNDERWATER || gFieldEffectArguments[3]) { - // Skip field move pose underwater + // Skip field move pose underwater, or if arg3 is nonzero + if (gFieldEffectArguments[3]) + gFieldEffectArguments[3] = 0; FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); gTasks[taskId].func = Task_DoFieldMove_WaitForMon; } diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index 3f087e5dab..c17dc9360b 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -14,7 +14,7 @@ bool8 SetUpFieldMove_Teleport(void) { if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE) { - gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gFieldCallback2 = FieldCallback_PrepareFadeInForTeleport; gPostMenuFieldCallback = FieldCallback_Teleport; return TRUE; } diff --git a/src/follower_helper.c b/src/follower_helper.c new file mode 100644 index 0000000000..328bd8aab0 --- /dev/null +++ b/src/follower_helper.c @@ -0,0 +1,297 @@ +#include "global.h" +#include "data.h" +#include "event_scripts.h" +#include "follower_helper.h" +#include "constants/battle.h" +#include "constants/metatile_behaviors.h" +#include "constants/pokemon.h" +#include "constants/region_map_sections.h" +#include "constants/songs.h" +#include "constants/weather.h" + +#define TYPE_NOT_TYPE1 NUMBER_OF_MON_TYPES + +// difficult conditional messages follow +static const u8 sCondMsg00[] = _("{STR_VAR_1} danced happily."); +static const u8 sCondMsg01[] = _("{STR_VAR_1} danced beautifully."); +static const u8* const sCelebiTexts[] = {sCondMsg00, sCondMsg01, NULL}; +static const u8 sCondMsg02[] = _("{STR_VAR_1} emitted fire and shouted."); +static const u8 sCondMsg03[] = _("{STR_VAR_1} is vigorously producing\nfire!"); +static const u8 sCondMsg04[] = _("{STR_VAR_1} spat fire!"); +static const u8 sCondMsg05[] = _("{STR_VAR_1} is vigorously breathing\nfire!"); +static const u8* const sFireTexts[] = {sCondMsg02, sCondMsg03, sCondMsg04, sCondMsg05, NULL}; +static const u8 sCondMsg06[] = _("{STR_VAR_1} is staring straight at\nthe POKéMON LEAGUE."); +static const u8 sCondMsg07[] = _("Your POKéMON is staring intently at\nthe mountain peak."); +static const u8 sCondMsg08[] = _("Sniff sniff, something smells good!"); +static const u8 sCondMsg09[] = _("Your POKéMON is surveying the\nshelves restlessly."); +static const u8 sCondMsg10[] = _("{STR_VAR_1} is staring intently at\nthe shelves."); +static const u8* const sShopTexts[] = {sCondMsg09, sCondMsg10, NULL}; +static const u8 sCondMsg11[] = _("{STR_VAR_1} focused with a sharp\ngaze!"); +static const u8 sCondMsg12[] = _("{STR_VAR_1} seems very interested in\nthe bicycles."); +static const u8 sCondMsg13[] = _("{STR_VAR_1} seems to want to touch\nthe machines!"); +static const u8 sCondMsg14[] = _("{STR_VAR_1} is swaying with the\nboat!"); +static const u8 sCondMsg15[] = _("{STR_VAR_1} is dancing along with\nthe rolling of the ship."); +static const u8 sCondMsg16[] = _("{STR_VAR_1} doesn't want to get off\nthe boat yet!"); +static const u8* const sBoatTexts[] = {sCondMsg14, sCondMsg15, sCondMsg16, NULL}; +static const u8 sCondMsg17[] = _("{STR_VAR_1} is listening to the\nsound of the machines."); +static const u8* const sMachineTexts[] = {sCondMsg13, sCondMsg17, NULL}; +static const u8 sCondMsg18[] = _("Waah! your POKéMON suddenly splashed\nwater!"); +static const u8 sCondMsg19[] = _("Your POKéMON is blowing sand in the\nair!"); +static const u8 sCondMsg20[] = _("{STR_VAR_1} is playing around,\nplucking bits of grass."); +static const u8 sCondMsg21[] = _("Your POKéMON is happily looking at\nyour footprints!"); +static const u8 sCondMsg22[] = _("{STR_VAR_1} is feeling nervous and a\ntouch claustrophobic."); +static const u8 sCondMsg23[] = _("{STR_VAR_1} is cautious about the\nconfined area!"); +static const u8* const sElevatorTexts[] = {sCondMsg22, sCondMsg23, NULL}; +static const u8 sCondMsg24[] = _("A cold wind suddenly blew by!"); +static const u8 sCondMsg25[] = _("Your POKéMON almost slipped and fell\nover!"); +static const u8 sCondMsg26[] = _("Your POKéMON seems surprised to\ntouch ice."); +static const u8* const sColdTexts[] = {sCondMsg24, sCondMsg25, sCondMsg26, NULL}; +static const u8 sCondMsg27[] = _("Your POKéMON has a flower petal on\nits face!"); +static const u8 sCondMsg28[] = _("{STR_VAR_1} is growling softly."); +static const u8 sCondMsg29[] = _("{STR_VAR_1} is trembling with fear."); +static const u8 sCondMsg30[] = _("{STR_VAR_1} seems somehow sad…"); +static const u8* const sFearTexts[] = {sCondMsg29, sCondMsg30, NULL}; +static const u8 sCondMsg31[] = _("{STR_VAR_1} is taking shelter in the\ngrass from the rain."); +static const u8 sCondMsg32[] = _("{STR_VAR_1} seems very cold."); +static const u8 sCondMsg33[] = _("{STR_VAR_1} is staring at the sea."); +static const u8 sCondMsg34[] = _("Your pokemon is staring intently at\nthe sea!"); +static const u8 sCondMsg35[] = _("{STR_VAR_1} is looking at the\nsurging sea."); +static const u8* const sSeaTexts[] = {sCondMsg33, sCondMsg34, sCondMsg35, NULL}; +static const u8 sCondMsg36[] = _("{STR_VAR_1} is listening to the\nsound of the waterfall."); +static const u8 sCondMsg37[] = _("{STR_VAR_1} seems to be happy about\nthe rain!"); +static const u8 sCondMsg38[] = _("{STR_VAR_1} is staring at its\nreflection in the water."); +static const u8 sCondMsg39[] = _("{STR_VAR_1} seems to relax as it\nhears the sound of rustling leaves…"); +static const u8 sCondMsg40[] = _("{STR_VAR_1} is gnawing at the ice."); +static const u8 sCondMsg41[] = _("{STR_VAR_1} is touching the ice."); +static const u8* const sIceTexts[] = {sCondMsg26, sCondMsg40, sCondMsg41, NULL}; +static const u8 sCondMsg42[] = _("{STR_VAR_1}'s burn looks painful!"); + +// See the struct definition in follower_helper.h for more info +const struct FollowerMsgInfoExtended gFollowerConditionalMessages[COND_MSG_COUNT] = { + [COND_MSG_CELEBI] = + { + .text = (u8*)sCelebiTexts, + .textSpread = 1, + .script = EventScript_FollowerDance, + .st = {.species = SPECIES_CELEBI}, + .stFlags = ST_FLAGS_SPECIES, + .emotion = FOLLOWER_EMOTION_NEUTRAL, + }, + [COND_MSG_FIRE] = + { + .text = (u8*)sFireTexts, + .st = {.types = {.type1 = TYPE_FIRE, .type2 = TYPE_FIRE}}, + .stFlags = ST_FLAGS_TYPE, + .emotion = FOLLOWER_EMOTION_NEUTRAL, + .textSpread = 1, + }, + [COND_MSG_EVER_GRANDE] = + { + .text = sCondMsg06, + .script = EventScript_FollowerFaceUp, + .mm = {.map = {.mapNum = MAP_NUM(EVER_GRANDE_CITY), .mapGroup = MAP_GROUP(EVER_GRANDE_CITY)}}, + .mmFlags = MM_FLAGS_MAP, + .emotion = FOLLOWER_EMOTION_HAPPY, + }, + [COND_MSG_ROUTE_112] = + { + .text = sCondMsg07, + .mm = {.map = {.mapNum = MAP_NUM(ROUTE112), .mapGroup = MAP_GROUP(ROUTE112)}}, + .mmFlags = MM_FLAGS_MAP, + .emotion = FOLLOWER_EMOTION_HAPPY, + }, + [COND_MSG_DAY_CARE] = + { + .text = sCondMsg08, + .script = EventScript_FollowerNostalgia, + .mm = {.map = {.mapNum = MAP_NUM(ROUTE117_POKEMON_DAY_CARE), .mapGroup = MAP_GROUP(ROUTE117_POKEMON_DAY_CARE)}}, + .mmFlags = MM_FLAGS_MAP, + .emotion = FOLLOWER_EMOTION_NEUTRAL, + }, + [COND_MSG_MART] = + { + .text = (u8*)sShopTexts, + .textSpread = 1, + .script = EventScript_FollowerLookAround, + .wt = {.song = MUS_POKE_MART}, + .wtFlags = WT_FLAGS_MUSIC, + .emotion = FOLLOWER_EMOTION_NEUTRAL, + }, + [COND_MSG_VICTORY_ROAD] = + { + .text = sCondMsg11, + .wt = {.song = MUS_VICTORY_ROAD}, + .wtFlags = WT_FLAGS_MUSIC, + .emotion = FOLLOWER_EMOTION_PENSIVE, + }, + [COND_MSG_BIKE_SHOP] = + { + .text = sCondMsg12, + .mm = {.map = {.mapNum = MAP_NUM(MAUVILLE_CITY_BIKE_SHOP), .mapGroup = MAP_GROUP(MAUVILLE_CITY_BIKE_SHOP)}}, + .mmFlags = MM_FLAGS_MAP, + .emotion = FOLLOWER_EMOTION_PENSIVE, + }, + [COND_MSG_MACHINES] = + { + .text = (u8*)sMachineTexts, + .mm = {.map = {.mapNum = MAP_NUM(NEW_MAUVILLE_INSIDE), .mapGroup = MAP_GROUP(NEW_MAUVILLE_INSIDE)}}, + .mmFlags = MM_FLAGS_MAP, + .emotion = FOLLOWER_EMOTION_MUSIC, + .textSpread = 1, + }, + [COND_MSG_SAILING] = + { + .text = (u8*)sBoatTexts, + .script = EventScript_FollowerLookAround, + .wt = {.song = MUS_SAILING}, + .wtFlags = WT_FLAGS_MUSIC, + .emotion = FOLLOWER_EMOTION_MUSIC, + .textSpread = 1, + }, + [COND_MSG_PUDDLE] = + { + .text = sCondMsg18, + .script = EventScript_FollowerHopping, + .mm = {.mb = {.behavior1 = MB_SHALLOW_WATER, .behavior2 = MB_PUDDLE}}, + .mmFlags = MM_FLAGS_MB, + .emotion = FOLLOWER_EMOTION_MUSIC, + }, + [COND_MSG_SAND] = + { + .text = sCondMsg19, + .mm = {.mb = {.behavior1 = MB_SAND, .behavior2 = MB_DEEP_SAND}}, + .mmFlags = MM_FLAGS_MB, + .emotion = FOLLOWER_EMOTION_MUSIC, + }, + [COND_MSG_GRASS] = + { + .text = sCondMsg20, + .mm = {.mb = {.behavior1 = MB_TALL_GRASS, .behavior2 = MB_LONG_GRASS}}, + .mmFlags = MM_FLAGS_MB, + .emotion = FOLLOWER_EMOTION_MUSIC, + }, + [COND_MSG_FOOTPRINTS] = + { + .text = sCondMsg21, + .mm = {.mb = {.behavior1 = MB_SAND, .behavior2 = MB_FOOTPRINTS}}, + .mmFlags = MM_FLAGS_MB, + .emotion = FOLLOWER_EMOTION_MUSIC, + }, + [COND_MSG_ELEVATOR] = + { + .text = (u8*)sElevatorTexts, + .textSpread = 1, + .mm = {.map = {.mapNum = MAP_NUM(LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR), .mapGroup = MAP_GROUP(LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR)}}, + .mmFlags = MM_FLAGS_MAP, + .emotion = FOLLOWER_EMOTION_SURPRISE, + }, + [COND_MSG_ICE_ROOM] = + { + .text = (u8*)sColdTexts, + .textSpread = 1, + .mm = {.map = {.mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ICE_ROOM), .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ICE_ROOM)}}, + .mmFlags = MM_FLAGS_MAP, + .emotion = FOLLOWER_EMOTION_SURPRISE, + }, + [COND_MSG_ROUTE_117] = + { + .text = sCondMsg27, + .mm = {.map = {.mapNum = MAP_NUM(ROUTE117), .mapGroup = MAP_GROUP(ROUTE117)}}, + .mmFlags = MM_FLAGS_MAP, + .emotion = FOLLOWER_EMOTION_SURPRISE, + }, + [COND_MSG_DRAGON_GROWL] = + { + .text = sCondMsg28, + .st = {.types = {.type1 = TYPE_DRAGON, .type2 = TYPE_DRAGON}}, + .stFlags = ST_FLAGS_TYPE, + .mm = {.mapSec = {.mapSec = MAPSEC_SKY_PILLAR}}, + .mmFlags = MM_FLAGS_MAPSEC, + .emotion = FOLLOWER_EMOTION_UPSET, + }, + [COND_MSG_FEAR] = + { + .text = (u8*)sFearTexts, + .textSpread = 1, + .st = {.types = {.type1 = TYPE_GHOST, .type2 = TYPE_NOT_TYPE1}}, + .stFlags = ST_FLAGS_TYPE, + .mm = {.mapSec = {.mapSec = MAPSEC_MT_PYRE}}, + .mmFlags = MM_FLAGS_MAPSEC, + .wt = {.song = MUS_MT_PYRE}, + .wtFlags = WT_FLAGS_MUSIC, + .emotion = FOLLOWER_EMOTION_UPSET, + }, + [COND_MSG_FIRE_RAIN] = + { + .text = sCondMsg31, + .st = {.types = {.type1 = TYPE_FIRE, .type2 = TYPE_FIRE}}, + .stFlags = ST_FLAGS_TYPE, + .wt = {.weather = {.weather1 = WEATHER_RAIN, .weather2 = WEATHER_RAIN_THUNDERSTORM}}, + .wtFlags = WT_FLAGS_WEATHER, + .emotion = FOLLOWER_EMOTION_UPSET, + }, + [COND_MSG_FROZEN] = + { + .text = sCondMsg32, + .st = {.status = STATUS1_FREEZE}, + .stFlags = ST_FLAGS_STATUS, + .emotion = FOLLOWER_EMOTION_UPSET, + }, + [COND_MSG_SEASIDE] = + { + .text = (u8*)sSeaTexts, + .textSpread = 1, + .script = EventScript_FollowerFaceResult, + .near = {.mb = {.behavior = MB_OCEAN_WATER, .distance = 5}}, + .nearFlags = NEAR_FLAGS_MB, + .emotion = FOLLOWER_EMOTION_MUSIC, + }, + [COND_MSG_WATERFALL] = + { + .text = sCondMsg36, + .script = EventScript_FollowerFaceResult, + .near = {.mb = {.behavior = MB_WATERFALL, .distance = 5}}, + .nearFlags = NEAR_FLAGS_MB, + .emotion = FOLLOWER_EMOTION_MUSIC, + }, + [COND_MSG_RAIN] = + { + .text = sCondMsg37, + .st = {.types = {.type1 = TYPE_FIRE, .type2 = TYPE_NOT_TYPE1}}, + .stFlags = ST_FLAGS_TYPE, + .wt = {.weather = {.weather1 = WEATHER_RAIN, .weather2 = WEATHER_RAIN_THUNDERSTORM}}, + .wtFlags = WT_FLAGS_WEATHER, + .emotion = FOLLOWER_EMOTION_MUSIC, + }, + [COND_MSG_REFLECTION] = + { + .text = sCondMsg38, + .script = EventScript_FollowerFaceResult, + .near = {.mb = {.behavior = MB_POND_WATER, .distance = 1}}, + .nearFlags = NEAR_FLAGS_MB, + .emotion = FOLLOWER_EMOTION_PENSIVE, + }, + [COND_MSG_LEAVES] = + { + .text = sCondMsg39, + .mm = {.mapSec = {.mapSec = MAPSEC_PETALBURG_WOODS}}, + .mmFlags = MM_FLAGS_MAPSEC, + .emotion = FOLLOWER_EMOTION_PENSIVE, + }, + [COND_MSG_ICE] = + { + .text = (u8*)sIceTexts, + .textSpread = 1, + .script = EventScript_FollowerFaceResult, + .near = {.mb = {.behavior = MB_ICE, .distance = 1}}, + .nearFlags = NEAR_FLAGS_MB, + .emotion = FOLLOWER_EMOTION_PENSIVE, + }, + [COND_MSG_BURN] = + { + .text = sCondMsg42, + .st = {.status STATUS1_BURN}, + .stFlags = ST_FLAGS_STATUS, + .emotion = FOLLOWER_EMOTION_SAD, + }, +}; diff --git a/src/load_save.c b/src/load_save.c index 44e08b5e9c..f071cdb827 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -13,6 +13,7 @@ #include "gba/flash_internal.h" #include "decoration_inventory.h" #include "agb_flash.h" +#include "constants/event_objects.h" static void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey); @@ -180,17 +181,43 @@ void LoadPlayerParty(void) void SaveObjectEvents(void) { int i; + u16 graphicsId; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { gSaveBlock1Ptr->objectEvents[i] = gObjectEvents[i]; + // Swap graphicsId bytes when saving and loading + // This keeps compatibility with vanilla, + // since the lower graphicsIds will be in the same place as vanilla + graphicsId = gObjectEvents[i].graphicsId; + gSaveBlock1Ptr->objectEvents[i].graphicsId = (graphicsId >> 8) | (graphicsId << 8); + gSaveBlock1Ptr->objectEvents[i].spriteId = 127; // magic number + // To avoid crash on vanilla, save follower as inactive + if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER) + gSaveBlock1Ptr->objectEvents[i].active = FALSE; + } } void LoadObjectEvents(void) { int i; + u16 graphicsId; - for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { gObjectEvents[i] = gSaveBlock1Ptr->objectEvents[i]; + // Swap graphicsId bytes when saving and loading + // This keeps compatibility with vanilla, + // since the lower graphicsIds will be in the same place as vanilla + graphicsId = gObjectEvents[i].graphicsId; + gObjectEvents[i].graphicsId = (graphicsId >> 8) | (graphicsId << 8); + if (gObjectEvents[i].spriteId != 127) + gObjectEvents[i].graphicsId &= 0xFF; + gObjectEvents[i].spriteId = 0; + // Try to restore saved inactive follower + if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER && + !gObjectEvents[i].active && + gObjectEvents[i].graphicsId >= OBJ_EVENT_GFX_MON_BASE) + gObjectEvents[i].active = TRUE; + } } void CopyPartyAndObjectsToSave(void) diff --git a/src/main.c b/src/main.c index 69c6c7a16b..b320d676ec 100644 --- a/src/main.c +++ b/src/main.c @@ -447,3 +447,13 @@ void ClearPokemonCrySongs(void) { CpuFill16(0, gPokemonCrySongs, MAX_POKEMON_CRIES * sizeof(struct PokemonCrySong)); } + +// TODO: Needs to be updated if compiling for a different processor than the GBA's +bool8 IsAccurateGBA(void) { // tests to see whether running on either an accurate emulator in >=2020, or real hardware + u32 code[5] = {0xFF1EE12F, 0xE1DF00B0, 0xE12FFF1E, 0xAAAABBBB, 0xCCCCDDDD}; // ARM: _;ldrh r0, [pc];bx lr + u32 func = (u32) &code[0]; + if (func & 3) // not word aligned; safer to just return false here + return FALSE; + func = (func & ~3) | 0x2; // misalign PC to test PC-relative loading + return ((u32 (*)(void)) func)() == code[3] >> 16; +} diff --git a/src/mirage_tower.c b/src/mirage_tower.c index f9806e7768..2c580f2b1c 100644 --- a/src/mirage_tower.c +++ b/src/mirage_tower.c @@ -4,6 +4,7 @@ #include "event_data.h" #include "event_object_movement.h" #include "field_camera.h" +#include "field_effect.h" #include "fieldmap.h" #include "gpu_regs.h" #include "menu.h" @@ -151,10 +152,13 @@ static const union AnimCmd *const sAnims_FallingFossil[] = sAnim_FallingFossil, }; +// Duplicate of event_object_movement +#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103 + static const struct SpriteTemplate sSpriteTemplate_FallingFossil = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1, .oam = &sOamData_FallingFossil, .anims = sAnims_FallingFossil, .images = NULL, @@ -690,6 +694,7 @@ static void Task_FossilFallAndSink(u8 taskId) { struct SpriteTemplate fossilTemplate = sSpriteTemplate_FallingFossil; fossilTemplate.images = sFallingFossil->frameImage; + LoadObjectEventPalette(sSpriteTemplate_FallingFossil.paletteTag); sFallingFossil->spriteId = CreateSprite(&fossilTemplate, 128, -16, 1); gSprites[sFallingFossil->spriteId].centerToCornerVecX = 0; gSprites[sFallingFossil->spriteId].data[0] = gSprites[sFallingFossil->spriteId].x; @@ -715,6 +720,9 @@ static void Task_FossilFallAndSink(u8 taskId) // Wait for fossil to finish falling / disintegrating if (gSprites[sFallingFossil->spriteId].callback != SpriteCallbackDummy) return; + gSprites[sFallingFossil->spriteId].inUse = FALSE; + FieldEffectFreePaletteIfUnused(gSprites[sFallingFossil->spriteId].oam.paletteNum); + gSprites[sFallingFossil->spriteId].inUse = TRUE; DestroySprite(&gSprites[sFallingFossil->spriteId]); FREE_AND_SET_NULL(sFallingFossil->disintegrateRand);; FREE_AND_SET_NULL(sFallingFossil->frameImage); diff --git a/src/naming_screen.c b/src/naming_screen.c index 3962f141ab..945691a7ee 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1395,7 +1395,7 @@ static void NamingScreen_NoIcon(void) static void NamingScreen_CreatePlayerIcon(void) { - u8 rivalGfxId; + u16 rivalGfxId; u8 spriteId; rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, sNamingScreen->monSpecies); @@ -2584,5 +2584,3 @@ static const struct SpritePalette sSpritePalettes[] = {gNamingScreenMenu_Pal[4], PALTAG_OK_BUTTON}, {} }; - - diff --git a/src/overworld.c b/src/overworld.c index bb1b98611b..2d88efa42a 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -42,6 +42,7 @@ #include "random.h" #include "roamer.h" #include "rotating_gate.h" +#include "rtc.h" #include "safari_zone.h" #include "save.h" #include "save_location.h" @@ -192,6 +193,8 @@ bool8 (*gFieldCallback2)(void); u8 gLocalLinkPlayerId; // This is our player id in a multiplayer mode. u8 gFieldLinkPlayerCount; + +// EWRAM vars EWRAM_DATA static u8 sObjectEventLoadFlag = 0; EWRAM_DATA struct WarpData gLastUsedWarp = {0}; EWRAM_DATA static struct WarpData sWarpDestination = {0}; // new warp position @@ -203,6 +206,7 @@ EWRAM_DATA static u16 sAmbientCrySpecies = 0; EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; EWRAM_DATA struct LinkPlayerObjectEvent gLinkPlayerObjectEvents[4] = {0}; + static const struct WarpData sDummyWarpData = { .mapGroup = MAP_GROUP(UNDEFINED), @@ -1514,8 +1518,10 @@ void CB2_Overworld(void) if (fading) SetVBlankCallback(NULL); OverworldBasic(); - if (fading) - SetFieldVBlankCallback(); + if (fading) { + SetFieldVBlankCallback(); + return; + } } void SetMainCallback1(MainCallback cb) @@ -1994,6 +2000,10 @@ static bool32 ReturnToFieldLocal(u8 *state) ResetScreenForMapLoad(); ResumeMap(FALSE); InitObjectEventsReturnToField(); + if (gFieldCallback == FieldCallback_Fly) + RemoveFollowingPokemon(); + else + UpdateFollowingPokemon(); SetCameraToTrackPlayer(); (*state)++; break; @@ -2009,7 +2019,6 @@ static bool32 ReturnToFieldLocal(u8 *state) case 3: return TRUE; } - return FALSE; } @@ -2164,10 +2173,7 @@ static void ResumeMap(bool32 a1) ResetAllPicSprites(); ResetCameraUpdateInfo(); InstallCameraPanAheadCallback(); - if (!a1) - InitObjectEventPalettes(0); - else - InitObjectEventPalettes(1); + FreeAllSpritePalettes(); FieldEffectActiveListClear(); StartWeather(); @@ -2201,6 +2207,7 @@ static void InitObjectEventsLocal(void) SetPlayerAvatarTransitionFlags(player->transitionFlags); ResetInitialPlayerAvatarState(); TrySpawnObjectEvents(0, 0); + UpdateFollowingPokemon(); TryRunOnWarpIntoMapScript(); } diff --git a/src/palette.c b/src/palette.c index 6ce47a4933..ec76e4be97 100644 --- a/src/palette.c +++ b/src/palette.c @@ -11,6 +11,7 @@ enum NORMAL_FADE, FAST_FADE, HARDWARE_FADE, + TIME_OF_DAY_FADE, }; // These are structs for some unused palette system. @@ -52,6 +53,7 @@ static u8 UpdateNormalPaletteFade(void); static void BeginFastPaletteFadeInternal(u8); static u8 UpdateFastPaletteFade(void); static u8 UpdateHardwarePaletteFade(void); +static u8 UpdateTimeOfDayPaletteFade(void); static void UpdateBlendRegisters(void); static bool8 IsSoftwarePaletteFadeFinishing(void); static void Task_BlendPalettesGradually(u8 taskId); @@ -125,6 +127,8 @@ u8 UpdatePaletteFade(void) result = UpdateNormalPaletteFade(); else if (gPaletteFade.mode == FAST_FADE) result = UpdateFastPaletteFade(); + else if (gPaletteFade.mode == TIME_OF_DAY_FADE) + result = UpdateTimeOfDayPaletteFade(); else result = UpdateHardwarePaletteFade(); @@ -407,6 +411,94 @@ static u8 PaletteStruct_GetPalNum(u16 id) return NUM_PALETTE_STRUCTS; } +// Like normal palette fade, but respects sprite/tile palettes immune to time of day fading +static u8 UpdateTimeOfDayPaletteFade(void) // Like normal, but respects sprite palettes immune to fading +{ + u8 paletteNum; + u16 paletteOffset; + u16 selectedPalettes; + + if (!gPaletteFade.active) + return PALETTE_FADE_STATUS_DONE; + + if (IsSoftwarePaletteFadeFinishing()) + return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; + + if (!gPaletteFade.objPaletteToggle) + { + if (gPaletteFade.delayCounter < gPaletteFade_delay) + { + gPaletteFade.delayCounter++; + return 2; + } + gPaletteFade.delayCounter = 0; + } + + paletteOffset = 0; + + if (!gPaletteFade.objPaletteToggle) + { + selectedPalettes = gPaletteFade_selectedPalettes; + } + else + { + selectedPalettes = gPaletteFade_selectedPalettes >> 16; + paletteOffset = 256; + } + + for (paletteNum = 0; paletteNum < 16; paletteNum++, selectedPalettes >>= 1, paletteOffset += 16) { + if (selectedPalettes & 1) { + if (gPaletteFade.yDec) { + if (gPaletteFade.objPaletteToggle) { // sprite palettes + if (gPaletteFade.y >= gPaletteFade.targetY || GetSpritePaletteTagByPaletteNum(paletteNum) & 0x8000) + BlendPalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor); + // tile palettes + } else if (gPaletteFade.y >= gPaletteFade.targetY || (paletteNum >= 13 && paletteNum <= 15)) { + BlendPalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor); + } + } else { + BlendPalette(paletteOffset, 16, gPaletteFade.y, gPaletteFade.blendColor); + } + } + } + + gPaletteFade.objPaletteToggle ^= 1; + + if (!gPaletteFade.objPaletteToggle) + { + if ((gPaletteFade.yDec && gPaletteFade.y == 0) || (!gPaletteFade.yDec && gPaletteFade.y == gPaletteFade.targetY)) + { + gPaletteFade_selectedPalettes = 0; + gPaletteFade.softwareFadeFinishing = 1; + } + else + { + s8 val; + + if (!gPaletteFade.yDec) + { + val = gPaletteFade.y; + val += gPaletteFade.deltaY; + if (val > gPaletteFade.targetY) + val = gPaletteFade.targetY; + gPaletteFade.y = val; + } + else + { + val = gPaletteFade.y; + val -= gPaletteFade.deltaY; + if (val < 0) + val = 0; + gPaletteFade.y = val; + } + } + } + + // gPaletteFade.active cannot change since the last time it was checked. So this + // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;` + return PALETTE_FADE_STATUS_ACTIVE; +} + static u8 UpdateNormalPaletteFade(void) { u16 paletteOffset; @@ -589,7 +681,6 @@ static u8 UpdateFastPaletteFade(void) if (IsSoftwarePaletteFadeFinishing()) return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; - if (gPaletteFade.objPaletteToggle) { paletteOffsetStart = OBJ_PLTT_OFFSET; @@ -723,7 +814,6 @@ static u8 UpdateFastPaletteFade(void) gPaletteFade.mode = NORMAL_FADE; gPaletteFade.softwareFadeFinishing = TRUE; } - // gPaletteFade.active cannot change since the last time it was checked. So this // is equivalent to `return PALETTE_FADE_STATUS_ACTIVE;` return gPaletteFade.active ? PALETTE_FADE_STATUS_ACTIVE : PALETTE_FADE_STATUS_DONE; diff --git a/src/party_menu.c b/src/party_menu.c index 68d7b058e2..ab79034ed1 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -14,6 +14,7 @@ #include "decompress.h" #include "easy_chat.h" #include "event_data.h" +#include "event_object_movement.h" #include "evolution_scene.h" #include "field_control_avatar.h" #include "field_effect.h" @@ -3839,6 +3840,11 @@ bool8 FieldCallback_PrepareFadeInFromMenu(void) return TRUE; } +bool8 FieldCallback_PrepareFadeInForTeleport(void) { // same as above, but removes follower pokemon + RemoveFollowingPokemon(); + return FieldCallback_PrepareFadeInFromMenu(); +} + static void Task_FieldMoveWaitForFade(u8 taskId) { if (IsWeatherNotFadingIn() == TRUE) diff --git a/src/pokeball.c b/src/pokeball.c index 9147ce16ba..9dbcea3227 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -566,6 +566,11 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) switch (throwCaseId) { + case POKEBALL_PLAYER_SLIDEIN: // don't actually send out, trigger the slide-in animation + gBattlerTarget = battlerId; + gSprites[ballSpriteId].callback = HandleBallAnimEnd; + gSprites[ballSpriteId].invisible = TRUE; + break; case POKEBALL_PLAYER_SENDOUT: gBattlerTarget = battlerId; gSprites[ballSpriteId].x = 24; @@ -1037,6 +1042,12 @@ static void HandleBallAnimEnd(struct Sprite *sprite) bool8 affineAnimEnded = FALSE; u8 battlerId = sprite->sBattler; + if (sprite->data[7] == POKEBALL_PLAYER_SLIDEIN) { + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCB_PlayerMonSlideIn; + AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000; + } + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; if (sprite->animEnded) sprite->invisible = TRUE; diff --git a/src/pokemon.c b/src/pokemon.c index c02802be2c..1c89dbe42c 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5031,6 +5031,9 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) | (substruct3->worldRibbon << 26); } break; + case MON_DATA_NATURE: + return boxMon->personality % 25; + break; default: break; } @@ -5083,6 +5086,10 @@ void SetMonData(struct Pokemon *mon, s32 field, const void *dataArg) break; case MON_DATA_SPECIES_OR_EGG: break; + case MON_DATA_NATURE: // Calculate stats after settings + SetBoxMonData(&mon->box, field, data); + CalculateMonStats(mon); + break; default: SetBoxMonData(&mon->box, field, data); break; @@ -5349,6 +5356,81 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg) substruct3->spDefenseIV = (ivs >> 25) & MAX_IV_MASK; break; } + case MON_DATA_NATURE: + { + u32 pid = boxMon->personality; + u32 otId = boxMon->otId; + s8 diff = (data[0] % 25) - (pid % 25); // difference between new nature and current nature, [-24,24] + bool8 preserveShiny = FALSE; + bool8 preserveLetter = FALSE; + u16 shinyValue = HIHALF(pid) ^ LOHALF(pid); + s32 tweak; + u32 pidTemp; + // See https://bulbapedia.bulbagarden.net/wiki/Personality_value#Nature + // Goal here is to preserve as much of the PID as possible + // To preserve gender & substruct order, we add/subtract multiples of 5376 that is 0 % 256, 0 % 24, 1 % 25 + // i.e, to increase the nature by n % 25, we add n*5376 % 19200 (LCM of 24, 25, 256) to the pid + // Ability number is determined by parity and so adding multiples of 5376 preserves it + // TODO: For genderless pokemon, 576/600 can be used instead of 5376/19200 + if (diff == 0) // No change + break; + else if (diff < 0) + diff = 25+diff; + tweak = (diff*5376) % 19200; + pidTemp = pid + tweak; + // If the pokemon is shiny or if changing the PID would make it shiny, preserve its shiny value + if (IsShinyOtIdPersonality(otId, pid) || IsShinyOtIdPersonality(otId, pidTemp)) + preserveShiny = TRUE; + if (substruct0->species == SPECIES_UNOWN) // Preserve Unown letter + preserveLetter = TRUE; + if (preserveShiny && preserveLetter) { // honestly though, how many shiny Unown are out there ? + while (pidTemp > pid) { + if ((HIHALF(pidTemp) ^ LOHALF(pidTemp) ^ shinyValue) < SHINY_ODDS) + if (GET_UNOWN_LETTER(pidTemp) == GET_UNOWN_LETTER(pid)) + break; + pidTemp += 19200; + } + } else if (preserveShiny) { + while (pidTemp > pid) { + if ((HIHALF(pidTemp) ^ LOHALF(pidTemp) ^ shinyValue) < SHINY_ODDS) + break; + pidTemp += 19200; + } + } else if (preserveLetter) { + while (pidTemp > pid) { + if (GET_UNOWN_LETTER(pidTemp) == GET_UNOWN_LETTER(pid)) + break; + pidTemp += 19200; + } + } + if (pidTemp < pid) { // overflow; search backwards + tweak -= 19200; + pidTemp = pid + tweak; + if (preserveShiny && preserveLetter) { + while (pidTemp < pid) { + if ((HIHALF(pidTemp) ^ LOHALF(pidTemp) ^ shinyValue) < SHINY_ODDS) + if (GET_UNOWN_LETTER(pidTemp) == GET_UNOWN_LETTER(pid)) + break; + pidTemp -= 19200; + } + } else if (preserveShiny) { + while (pidTemp < pid) { + if ((HIHALF(pidTemp) ^ LOHALF(pidTemp) ^ shinyValue) < SHINY_ODDS) + break; + pidTemp -= 19200; + } + } else if (preserveLetter) { + while (pidTemp < pid) { + if (GET_UNOWN_LETTER(pidTemp) == GET_UNOWN_LETTER(pid)) + break; + pidTemp -= 19200; + } + } + } + if (pid % 24 == pidTemp % 24 || pid % 256 == pidTemp % 256) + boxMon->personality = pidTemp; + break; + } default: break; } diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index f7106b8752..d677baab05 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -3463,23 +3463,36 @@ static void PrintRibbonCount(void) PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_RIBBON_COUNT), text, x, 1, 0, 0); } +// Based on https://www.pokecommunity.com/showpost.php?p=10024409&postcount=21 +static void BufferStat(u8 *dst, s8 natureMod, u32 stat, u32 strId, u32 n) { + static const u8 textNatureMinus[] = _("{COLOR_HIGHLIGHT_SHADOW}{BLUE}{TRANSPARENT}{07}"); // Blue + static const u8 textNaturePlus[] = _("{COLOR_HIGHLIGHT_SHADOW}{05}{TRANSPARENT}{06}"); // Red + static const u8 textNatureNone[] = _("{COLOR_HIGHLIGHT_SHADOW}{01}{TRANSPARENT}{DARK_GRAY}"); // Black + u8 *txtPtr; + if (natureMod == 0) + txtPtr = StringCopy(dst, textNatureNone); + else if (natureMod > 0) + txtPtr = StringCopy(dst, textNaturePlus); + else + txtPtr = StringCopy(dst, textNatureMinus); + + ConvertIntToDecimalStringN(txtPtr, stat, STR_CONV_MODE_RIGHT_ALIGN, n); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(strId, dst); +} + static void BufferLeftColumnStats(void) { - u8 *currentHPString = Alloc(8); - u8 *maxHPString = Alloc(8); - u8 *attackString = Alloc(8); - u8 *defenseString = Alloc(8); - - ConvertIntToDecimalStringN(currentHPString, sMonSummaryScreen->summary.currentHP, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(maxHPString, sMonSummaryScreen->summary.maxHP, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(attackString, sMonSummaryScreen->summary.atk, STR_CONV_MODE_RIGHT_ALIGN, 7); - ConvertIntToDecimalStringN(defenseString, sMonSummaryScreen->summary.def, STR_CONV_MODE_RIGHT_ALIGN, 7); + u8 *currentHPString = Alloc(20); + u8 *maxHPString = Alloc(20); + u8 *attackString = Alloc(20); + u8 *defenseString = Alloc(20); + const s8 *natureMod = gNatureStatTable[sMonSummaryScreen->summary.nature]; DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, currentHPString); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, maxHPString); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, attackString); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, defenseString); + BufferStat(currentHPString, 0, sMonSummaryScreen->summary.currentHP, 0, 3); + BufferStat(maxHPString, 0, sMonSummaryScreen->summary.maxHP, 1, 3); + BufferStat(attackString, natureMod[STAT_ATK - 1], sMonSummaryScreen->summary.atk, 2, 7); + BufferStat(defenseString, natureMod[STAT_DEF - 1], sMonSummaryScreen->summary.def, 3, 7); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, sStatsLeftColumnLayout); Free(currentHPString); @@ -3495,14 +3508,12 @@ static void PrintLeftColumnStats(void) static void BufferRightColumnStats(void) { - ConvertIntToDecimalStringN(gStringVar1, sMonSummaryScreen->summary.spatk, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(gStringVar2, sMonSummaryScreen->summary.spdef, STR_CONV_MODE_RIGHT_ALIGN, 3); - ConvertIntToDecimalStringN(gStringVar3, sMonSummaryScreen->summary.speed, STR_CONV_MODE_RIGHT_ALIGN, 3); + const s8 *natureMod = gNatureStatTable[sMonSummaryScreen->summary.nature]; DynamicPlaceholderTextUtil_Reset(); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gStringVar2); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gStringVar3); + BufferStat(gStringVar1, natureMod[STAT_SPATK - 1], sMonSummaryScreen->summary.spatk, 0, 3); + BufferStat(gStringVar2, natureMod[STAT_SPDEF - 1], sMonSummaryScreen->summary.spdef, 1, 3); + BufferStat(gStringVar3, natureMod[STAT_SPEED - 1], sMonSummaryScreen->summary.speed, 2, 3); DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, sStatsRightColumnLayout); } diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c index c984dfec8a..38d0dbd75f 100644 --- a/src/rayquaza_scene.c +++ b/src/rayquaza_scene.c @@ -1,5 +1,6 @@ #include "global.h" #include "rayquaza_scene.h" +#include "event_object_movement.h" #include "sprite.h" #include "task.h" #include "graphics.h" @@ -15,6 +16,7 @@ #include "sound.h" #include "constants/songs.h" #include "constants/rgb.h" +#include "constants/event_objects.h" #include "random.h" /* @@ -1294,9 +1296,13 @@ void DoRayquazaScene(u8 animId, bool8 endEarly, void (*exitCallback)(void)) static void CB2_InitRayquazaScene(void) { + u32 i; SetVBlankHBlankCallbacksToNull(); ClearScheduledBgCopiesToVram(); ScanlineEffect_Stop(); + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + if (gObjectEvents[i].graphicsId == OBJ_EVENT_GFX_RAYQUAZA) + gObjectEvents[i].invisible = FALSE; FreeAllSpritePalettes(); ResetPaletteFade(); ResetSpriteData(); diff --git a/src/rotating_gate.c b/src/rotating_gate.c index f9e732eb74..738bc8cdae 100644 --- a/src/rotating_gate.c +++ b/src/rotating_gate.c @@ -456,11 +456,12 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] = sSpriteAffineAnim_RotatingClockwise270to360Faster, }; +#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103 static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = { .tileTag = ROTATING_GATE_TILE_TAG, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1, .oam = &sOamData_RotatingGateLarge, .anims = sSpriteAnimTable_RotatingGateLarge, .images = NULL, @@ -471,7 +472,7 @@ static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = { .tileTag = ROTATING_GATE_TILE_TAG, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1, .oam = &sOamData_RotatingGateRegular, .anims = sSpriteAnimTable_RotatingGateRegular, .images = NULL, @@ -737,7 +738,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) template.tileTag = gate->shape + ROTATING_GATE_TILE_TAG; - spriteId = CreateSprite(&template, 0, 0, 0x94); + spriteId = CreateSprite(&template, 0, 0, 0x93); if (spriteId == MAX_SPRITES) return MAX_SPRITES; @@ -745,6 +746,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY) y = gate->y + MAP_OFFSET; sprite = &gSprites[spriteId]; + UpdateSpritePaletteByTemplate(&template, sprite); sprite->data[0] = gateId; sprite->coordOffsetEnabled = 1; diff --git a/src/scrcmd.c b/src/scrcmd.c index 98c20ef4e3..6a19d7d4af 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -15,6 +15,7 @@ #include "field_effect.h" #include "event_object_lock.h" #include "event_object_movement.h" +#include "event_scripts.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" @@ -104,6 +105,7 @@ bool8 ScrCmd_nop1(struct ScriptContext *ctx) bool8 ScrCmd_end(struct ScriptContext *ctx) { + FlagClear(FLAG_SAFE_FOLLOWER_MOVEMENT); StopScript(ctx); return FALSE; } @@ -134,12 +136,17 @@ bool8 ScrCmd_specialvar(struct ScriptContext *ctx) bool8 ScrCmd_callnative(struct ScriptContext *ctx) { - NativeFunc func = (NativeFunc)ScriptReadWord(ctx); - - func(); + u32 func = ScriptReadWord(ctx); + ((NativeFunc) func)(); return FALSE; } +bool8 ScrCmd_callfunc(struct ScriptContext *ctx) +{ + u32 func = ScriptReadWord(ctx); + return ((ScrCmdFunc) func)(ctx); +} + bool8 ScrCmd_waitstate(struct ScriptContext *ctx) { ScriptContext_Stop(); @@ -289,6 +296,7 @@ bool8 ScrCmd_returnram(struct ScriptContext *ctx) bool8 ScrCmd_endram(struct ScriptContext *ctx) { + FlagClear(FLAG_SAFE_FOLLOWER_MOVEMENT); ClearRamScript(); StopScript(ctx); return TRUE; @@ -994,9 +1002,23 @@ bool8 ScrCmd_applymovement(struct ScriptContext *ctx) { u16 localId = VarGet(ScriptReadHalfword(ctx)); const void *movementScript = (const void *)ScriptReadWord(ctx); + struct ObjectEvent *objEvent; + // When applying script movements to follower, it may have frozen animation that must be cleared + if (localId == OBJ_EVENT_ID_FOLLOWER && (objEvent = GetFollowerObject()) && objEvent->frozen) { + ClearObjectEventMovement(objEvent, &gSprites[objEvent->spriteId]); + gSprites[objEvent->spriteId].animCmdIndex = 0; // Needed to set start frame of animation + } ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript); sMovingNpcId = localId; + if (localId != OBJ_EVENT_ID_FOLLOWER && !FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT)) { // Force follower into pokeball + objEvent = GetFollowerObject(); + // return early if no follower or in shadowing state + if (objEvent == NULL || gSprites[objEvent->spriteId].data[1] == 0) + return FALSE; + ClearObjectEventMovement(objEvent, &gSprites[objEvent->spriteId]); + ScriptMovement_StartObjectMovementScript(OBJ_EVENT_ID_FOLLOWER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, EnterPokeballMovement); + } return FALSE; } @@ -1014,7 +1036,15 @@ bool8 ScrCmd_applymovementat(struct ScriptContext *ctx) static bool8 WaitForMovementFinish(void) { - return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapNum, sMovingNpcMapGroup); + if (ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapNum, sMovingNpcMapGroup)) { + struct ObjectEvent *objEvent = GetFollowerObject(); + // If the follower is still entering the pokeball, wait for it to finish too + // This prevents a `release` after this script command from getting the follower stuck in an intermediate state + if (sMovingNpcId != OBJ_EVENT_ID_FOLLOWER && objEvent && ObjectEventGetHeldMovementActionId(objEvent) == MOVEMENT_ACTION_ENTER_POKEBALL) + return ScriptMovement_IsObjectMovementFinished(objEvent->localId, objEvent->mapNum, objEvent->mapGroup); + return TRUE; + } + return FALSE; } bool8 ScrCmd_waitmovement(struct ScriptContext *ctx) @@ -1177,7 +1207,7 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx) bool8 ScrCmd_createvobject(struct ScriptContext *ctx) { - u8 graphicsId = ScriptReadByte(ctx); + u16 graphicsId = ScriptReadByte(ctx); // Support u16 in createvobject u8 virtualObjId = ScriptReadByte(ctx); u16 x = VarGet(ScriptReadHalfword(ctx)); u32 y = VarGet(ScriptReadHalfword(ctx)); @@ -1240,6 +1270,10 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx) bool8 ScrCmd_releaseall(struct ScriptContext *ctx) { u8 playerObjectId; + struct ObjectEvent *followerObject = GetFollowerObject(); + // Release follower from movement iff it exists and is in the shadowing state + if (followerObject && gSprites[followerObject->spriteId].data[1] == 0) + ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]); HideFieldMessageBox(); playerObjectId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0); @@ -1252,6 +1286,10 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx) bool8 ScrCmd_release(struct ScriptContext *ctx) { u8 playerObjectId; + struct ObjectEvent *followerObject = GetFollowerObject(); + // Release follower from movement iff it exists and is in the shadowing state + if (followerObject && gSprites[followerObject->spriteId].data[1] == 0) + ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]); HideFieldMessageBox(); if (gObjectEvents[gSelectedObjectEvent].active) @@ -1550,7 +1588,7 @@ bool8 ScrCmd_vmessage(struct ScriptContext *ctx) bool8 ScrCmd_bufferspeciesname(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); - u16 species = VarGet(ScriptReadHalfword(ctx)); + u16 species = VarGet(ScriptReadHalfword(ctx)) & ((1 << 10) - 1); // ignore possible shiny / form bits StringCopy(sScriptStringVars[stringVarIndex], gSpeciesNames[species]); return FALSE; @@ -1567,6 +1605,15 @@ bool8 ScrCmd_bufferleadmonspeciesname(struct ScriptContext *ctx) return FALSE; } +bool8 ScrFunc_bufferlivemonnickname(struct ScriptContext *ctx) +{ + u8 stringVarIndex = ScriptReadByte(ctx); + + GetMonData(GetFirstLiveMon(), MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]); + StringGet_Nickname(sScriptStringVars[stringVarIndex]); + return FALSE; +} + bool8 ScrCmd_bufferpartymonnick(struct ScriptContext *ctx) { u8 stringVarIndex = ScriptReadByte(ctx); @@ -2044,6 +2091,13 @@ bool8 ScrCmd_playmoncry(struct ScriptContext *ctx) return FALSE; } +bool8 ScrFunc_playfirstmoncry(struct ScriptContext *ctx) +{ + u16 species = GetMonData(GetFirstLiveMon(), MON_DATA_SPECIES); + PlayCry_Script(species, 0); + return FALSE; +} + bool8 ScrCmd_waitmoncry(struct ScriptContext *ctx) { SetupNativeScript(ctx, IsCryFinished); diff --git a/src/secret_base.c b/src/secret_base.c index 1a4a0ac9cd..836cf1b3d0 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -157,7 +157,7 @@ static const struct YesNoFuncTable sDeleteRegistryYesNoFuncs = .noFunc = DeleteRegistry_No, }; -static const u8 sSecretBaseOwnerGfxIds[10] = +static const u16 sSecretBaseOwnerGfxIds[10] = { // Male OBJ_EVENT_GFX_YOUNGSTER, diff --git a/src/shop.c b/src/shop.c index b4978f063e..bab2c5faec 100644 --- a/src/shop.c +++ b/src/shop.c @@ -34,6 +34,7 @@ #include "text_window.h" #include "tv.h" #include "constants/decorations.h" +#include "constants/event_objects.h" #include "constants/items.h" #include "constants/metatile_behaviors.h" #include "constants/rgb.h" @@ -868,7 +869,8 @@ static void BuyMenuCollectObjectEventData(void) { u8 objEventId = GetObjectEventIdByXY(facingX - 4 + x, facingY - 2 + y); - if (objEventId != OBJECT_EVENTS_COUNT) + // skip if invalid or an overworld pokemon that is not following the player + if (objEventId != OBJECT_EVENTS_COUNT && !(gObjectEvents[objEventId].active && gObjectEvents[objEventId].graphicsId >= OBJ_EVENT_GFX_MON_BASE && gObjectEvents[objEventId].localId != OBJ_EVENT_ID_FOLLOWER)) { sShopData->viewportObjects[numObjects][OBJ_EVENT_ID] = objEventId; sShopData->viewportObjects[numObjects][X_COORD] = x; @@ -902,7 +904,12 @@ static void BuyMenuDrawObjectEvents(void) u8 i; u8 spriteId; const struct ObjectEventGraphicsInfo *graphicsInfo; + u8 weatherTemp = gWeatherPtr->palProcessingState; + // This function runs during fadeout, so the weather palette processing state must be temporarily changed, + // so that time-blending will work properly + if (weatherTemp == WEATHER_PAL_STATE_SCREEN_FADING_OUT) + gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE; for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { if (sShopData->viewportObjects[i][OBJ_EVENT_ID] == OBJECT_EVENTS_COUNT) @@ -925,6 +932,9 @@ static void BuyMenuDrawObjectEvents(void) StartSpriteAnim(&gSprites[spriteId], sShopData->viewportObjects[i][ANIM_NUM]); } + + gWeatherPtr->palProcessingState = weatherTemp; // restore weather state + CpuFastCopy(gPlttBufferFaded + 16*16, gPlttBufferUnfaded + 16*16, PLTT_BUFFER_SIZE); } static bool8 BuyMenuCheckIfObjectEventOverlapsMenuBg(s16 *object) diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c index 14849c19e5..d4ff7c0e8f 100644 --- a/src/trainer_pokemon_sprites.c +++ b/src/trainer_pokemon_sprites.c @@ -257,7 +257,7 @@ u16 CreateMonPicSprite_Affine(u16 species, u32 otId, u32 personality, u8 flags, return spriteId; } -static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId) +static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId, bool8 clearPalette) { u8 i; u8 *framePics; @@ -273,7 +273,7 @@ static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId) framePics = sSpritePics[i].frames; images = sSpritePics[i].images; - if (sSpritePics[i].paletteTag != TAG_NONE) + if (clearPalette && sSpritePics[i].paletteTag != TAG_NONE) FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum)); DestroySprite(&gSprites[spriteId]); Free(framePics); @@ -313,7 +313,12 @@ u16 CreateMonPicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 FreeAndDestroyMonPicSprite(u16 spriteId) { - return FreeAndDestroyPicSpriteInternal(spriteId); + return FreeAndDestroyPicSpriteInternal(spriteId, TRUE); +} + +u16 FreeAndDestroyMonPicSpriteNoPalette(u16 spriteId) +{ + return FreeAndDestroyPicSpriteInternal(spriteId, FALSE); } // Unused @@ -335,7 +340,7 @@ u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 palet u16 FreeAndDestroyTrainerPicSprite(u16 spriteId) { - return FreeAndDestroyPicSpriteInternal(spriteId); + return FreeAndDestroyPicSpriteInternal(spriteId, TRUE); } // Unused diff --git a/src/trainer_see.c b/src/trainer_see.c index 8d34506288..46f01c7148 100644 --- a/src/trainer_see.c +++ b/src/trainer_see.c @@ -62,6 +62,9 @@ EWRAM_DATA u8 gApproachingTrainerId = 0; static const u8 sEmotion_ExclamationMarkGfx[] = INCBIN_U8("graphics/field_effects/pics/emotion_exclamation.4bpp"); static const u8 sEmotion_QuestionMarkGfx[] = INCBIN_U8("graphics/field_effects/pics/emotion_question.4bpp"); static const u8 sEmotion_HeartGfx[] = INCBIN_U8("graphics/field_effects/pics/emotion_heart.4bpp"); +// TODO: Credit https://www.spriters-resource.com/ds_dsi/pokemonheartgoldsoulsilver/sheet/30497/ +static const u8 sEmotion_Gfx[] = INCBIN_U8("graphics/misc/emotes.4bpp"); + static u8 (*const sDirectionalApproachDistanceFuncs[])(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y) = { @@ -147,6 +150,109 @@ static const struct SpriteFrameImage sSpriteImageTable_HeartIcon[] = } }; +static const struct SpriteFrameImage sSpriteImageTable_Emotes[] = +{ + { .data = (u8 *)sEmotion_Gfx+0*0x80, .size = 0x80}, // FOLLOWER_EMOTION_HAPPY + { .data = (u8 *)sEmotion_Gfx+1*0x80, .size = 0x80}, // FOLLOWER_EMOTION_HAPPY + { .data = (u8 *)sEmotion_Gfx+2*0x80, .size = 0x80}, // FOLLOWER_EMOTION_NEUTRAL + { .data = (u8 *)sEmotion_Gfx+3*0x80, .size = 0x80}, // FOLLOWER_EMOTION_NEUTRAL + { .data = (u8 *)sEmotion_Gfx+4*0x80, .size = 0x80}, // FOLLOWER_EMOTION_SAD + { .data = (u8 *)sEmotion_Gfx+5*0x80, .size = 0x80}, // FOLLOWER_EMOTION_SAD + { .data = (u8 *)sEmotion_Gfx+6*0x80, .size = 0x80}, // FOLLOWER_EMOTION_UPSET + { .data = (u8 *)sEmotion_Gfx+7*0x80, .size = 0x80}, // FOLLOWER_EMOTION_UPSET + { .data = (u8 *)sEmotion_Gfx+8*0x80, .size = 0x80}, // FOLLOWER_EMOTION_ANGRY + { .data = (u8 *)sEmotion_Gfx+9*0x80, .size = 0x80}, // FOLLOWER_EMOTION_ANGRY + { .data = (u8 *)sEmotion_Gfx+10*0x80, .size = 0x80}, // FOLLOWER_EMOTION_PENSIVE + { .data = (u8 *)sEmotion_Gfx+11*0x80, .size = 0x80}, // FOLLOWER_EMOTION_PENSIVE + { .data = (u8 *)sEmotion_Gfx+12*0x80, .size = 0x80}, // FOLLOWER_EMOTION_LOVE + { .data = (u8 *)sEmotion_Gfx+13*0x80, .size = 0x80}, // FOLLOWER_EMOTION_LOVE + { .data = (u8 *)sEmotion_Gfx+14*0x80, .size = 0x80}, // FOLLOWER_EMOTION_SURPRISE + { .data = (u8 *)sEmotion_Gfx+15*0x80, .size = 0x80}, // FOLLOWER_EMOTION_SURPRISE + { .data = (u8 *)sEmotion_Gfx+16*0x80, .size = 0x80}, // FOLLOWER_EMOTION_CURIOUS + { .data = (u8 *)sEmotion_Gfx+17*0x80, .size = 0x80}, // FOLLOWER_EMOTION_CURIOUS + { .data = (u8 *)sEmotion_Gfx+18*0x80, .size = 0x80}, // FOLLOWER_EMOTION_MUSIC + { .data = (u8 *)sEmotion_Gfx+19*0x80, .size = 0x80}, // FOLLOWER_EMOTION_MUSIC + { .data = (u8 *)sEmotion_Gfx+20*0x80, .size = 0x80}, // FOLLOWER_EMOTION_POISONED + { .data = (u8 *)sEmotion_Gfx+21*0x80, .size = 0x80}, // FOLLOWER_EMOTION_POISONED +}; + +static const union AnimCmd sSpriteAnim_Emotes0[] = { + ANIMCMD_FRAME(0*2, 30), + ANIMCMD_FRAME(0*2+1, 25), + ANIMCMD_FRAME(0*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes1[] = { + ANIMCMD_FRAME(1*2, 30), + ANIMCMD_FRAME(1*2+1, 25), + ANIMCMD_FRAME(1*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes2[] = { + ANIMCMD_FRAME(2*2, 30), + ANIMCMD_FRAME(2*2+1, 25), + ANIMCMD_FRAME(2*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes3[] = { + ANIMCMD_FRAME(3*2, 30), + ANIMCMD_FRAME(3*2+1, 25), + ANIMCMD_FRAME(3*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes4[] = { + ANIMCMD_FRAME(4*2, 30), + ANIMCMD_FRAME(4*2+1, 25), + ANIMCMD_FRAME(4*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes5[] = { + ANIMCMD_FRAME(5*2, 30), + ANIMCMD_FRAME(5*2+1, 25), + ANIMCMD_FRAME(5*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes6[] = { + ANIMCMD_FRAME(6*2, 30), + ANIMCMD_FRAME(6*2+1, 25), + ANIMCMD_FRAME(6*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes7[] = { + ANIMCMD_FRAME(7*2, 30), + ANIMCMD_FRAME(7*2+1, 25), + ANIMCMD_FRAME(7*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes8[] = { + ANIMCMD_FRAME(8*2, 30), + ANIMCMD_FRAME(8*2+1, 25), + ANIMCMD_FRAME(8*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes9[] = { + ANIMCMD_FRAME(9*2, 30), + ANIMCMD_FRAME(9*2+1, 25), + ANIMCMD_FRAME(9*2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_Emotes10[] = { + ANIMCMD_FRAME(10*2, 30), + ANIMCMD_FRAME(10*2+1, 25), + ANIMCMD_FRAME(10*2, 30), + ANIMCMD_END +}; + static const union AnimCmd sSpriteAnim_Icons1[] = { ANIMCMD_FRAME(0, 60), @@ -165,10 +271,28 @@ static const union AnimCmd *const sSpriteAnimTable_Icons[] = sSpriteAnim_Icons2 }; +static const union AnimCmd *const sSpriteAnimTable_Emotes[] = { + sSpriteAnim_Emotes0, + sSpriteAnim_Emotes1, + sSpriteAnim_Emotes2, + sSpriteAnim_Emotes3, + sSpriteAnim_Emotes4, + sSpriteAnim_Emotes5, + sSpriteAnim_Emotes6, + sSpriteAnim_Emotes7, + sSpriteAnim_Emotes8, + sSpriteAnim_Emotes9, + sSpriteAnim_Emotes10, +}; + +// TODO: Move these declarations into even_object_movement.h +#define OBJ_EVENT_PAL_TAG_MAY 0x1110 +#define OBJ_EVENT_PAL_TAG_EMOTES 0x8002 + static const struct SpriteTemplate sSpriteTemplate_ExclamationQuestionMark = { .tileTag = TAG_NONE, - .paletteTag = TAG_NONE, + .paletteTag = OBJ_EVENT_PAL_TAG_MAY, .oam = &sOamData_Icons, .anims = sSpriteAnimTable_Icons, .images = sSpriteImageTable_ExclamationQuestionMark, @@ -179,7 +303,7 @@ static const struct SpriteTemplate sSpriteTemplate_ExclamationQuestionMark = static const struct SpriteTemplate sSpriteTemplate_HeartIcon = { .tileTag = TAG_NONE, - .paletteTag = FLDEFF_PAL_TAG_GENERAL_0, + .paletteTag = FLDEFF_PAL_TAG_NPC_1, .oam = &sOamData_Icons, .anims = sSpriteAnimTable_Icons, .images = sSpriteImageTable_HeartIcon, @@ -187,6 +311,16 @@ static const struct SpriteTemplate sSpriteTemplate_HeartIcon = .callback = SpriteCB_TrainerIcons }; +static const struct SpriteTemplate sSpriteTemplate_Emote = { + .tileTag = 0xffff, + .paletteTag = OBJ_EVENT_PAL_TAG_EMOTES, + .oam = &sOamData_Icons, + .anims = sSpriteAnimTable_Emotes, + .images = sSpriteImageTable_Emotes, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TrainerIcons +}; + // code bool8 CheckForTrainersWantingBattle(void) { @@ -467,7 +601,7 @@ static bool8 TrainerExclamationMark(u8 taskId, struct Task *task, struct ObjectE FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON); direction = GetFaceDirectionMovementAction(trainerObj->facingDirection); ObjectEventSetHeldMovement(trainerObj, direction); - task->tFuncId++; // TRSEE_EXCLAMATION_WAIT + task->tFuncId++; return TRUE; } @@ -700,18 +834,32 @@ u8 FldEff_ExclamationMarkIcon(void) { u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_ExclamationQuestionMark, 0, 0, 0x53); - if (spriteId != MAX_SPRITES) - SetIconSpriteData(&gSprites[spriteId], FLDEFF_EXCLAMATION_MARK_ICON, 0); + if (spriteId != MAX_SPRITES) { + SetIconSpriteData(&gSprites[spriteId], FLDEFF_EXCLAMATION_MARK_ICON, 0); + UpdateSpritePaletteByTemplate(&sSpriteTemplate_ExclamationQuestionMark, &gSprites[spriteId]); + } return 0; } u8 FldEff_QuestionMarkIcon(void) { - u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_ExclamationQuestionMark, 0, 0, 0x52); + u8 spriteId; + if (gFieldEffectArguments[7] >= 0) { // Use follower emotes + u8 emotion = gFieldEffectArguments[7]; + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_Emote, 0, 0, 0x52); + if (spriteId == MAX_SPRITES) + return 0; + SetIconSpriteData(&gSprites[spriteId], FLDEFF_EMOTE, emotion); // Set animation based on emotion + UpdateSpritePaletteByTemplate(&sSpriteTemplate_Emote, &gSprites[spriteId]); + return 0; + } + spriteId = CreateSpriteAtEnd(&sSpriteTemplate_ExclamationQuestionMark, 0, 0, 0x52); - if (spriteId != MAX_SPRITES) - SetIconSpriteData(&gSprites[spriteId], FLDEFF_QUESTION_MARK_ICON, 1); + if (spriteId != MAX_SPRITES) { + SetIconSpriteData(&gSprites[spriteId], FLDEFF_QUESTION_MARK_ICON, 1); + UpdateSpritePaletteByTemplate(&sSpriteTemplate_ExclamationQuestionMark, &gSprites[spriteId]); + } return 0; } @@ -719,13 +867,12 @@ u8 FldEff_QuestionMarkIcon(void) u8 FldEff_HeartIcon(void) { u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_HeartIcon, 0, 0, 0x52); - if (spriteId != MAX_SPRITES) { struct Sprite *sprite = &gSprites[spriteId]; SetIconSpriteData(sprite, FLDEFF_HEART_ICON, 0); - sprite->oam.paletteNum = 2; + UpdateSpritePaletteByTemplate(&sSpriteTemplate_HeartIcon, sprite); } return 0; diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c index 31f535310d..6a2d6081c1 100644 --- a/src/union_room_player_avatar.c +++ b/src/union_room_player_avatar.c @@ -23,9 +23,8 @@ static u8 CreateTask_AnimateUnionRoomPlayers(void); static u32 IsUnionRoomPlayerInvisible(u32, u32); static void SetUnionRoomObjectFacingDirection(s32, s32, u8); -// + 2 is just to match, those elements are empty and never read // Graphics ids should correspond with the classes in gUnionRoomFacilityClasses -static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][NUM_UNION_ROOM_CLASSES + 2] = { +static const u16 sUnionRoomObjGfxIds[GENDER_COUNT][NUM_UNION_ROOM_CLASSES] = { [MALE] = { OBJ_EVENT_GFX_MAN_3, OBJ_EVENT_GFX_BLACK_BELT, @@ -131,7 +130,7 @@ static bool32 IsPlayerStandingStill(void) } // Gender and trainer id are used to determine which sprite a player appears as -static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id) +static u16 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id) { return sUnionRoomObjGfxIds[gender][id % NUM_UNION_ROOM_CLASSES]; } @@ -442,7 +441,7 @@ static bool32 IsUnionRoomPlayerInvisible(u32 leaderId, u32 memberId) return IsVirtualObjectInvisible(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID); } -static void SpawnGroupMember(u32 leaderId, u32 memberId, u8 graphicsId, struct RfuGameData * gameData) +static void SpawnGroupMember(u32 leaderId, u32 memberId, u16 graphicsId, struct RfuGameData * gameData) { s32 x, y; s32 id = UR_PLAYER_SPRITE_ID(leaderId, memberId);