diff options
-rw-r--r-- | data/scripts/berry_tree.inc | 99 | ||||
-rw-r--r-- | include/event_object_movement.h | 25 | ||||
-rw-r--r-- | include/field_effect.h | 5 | ||||
-rw-r--r-- | include/field_effect_helpers.h | 42 | ||||
-rw-r--r-- | include/global.fieldmap.h | 4 | ||||
-rw-r--r-- | include/item_menu.h | 9 | ||||
-rw-r--r-- | include/item_use.h | 7 | ||||
-rw-r--r-- | include/party_menu.h | 2 | ||||
-rw-r--r-- | src/berry_tag_screen.c | 2 | ||||
-rw-r--r-- | src/data/field_event_obj/field_effect_object_template_pointers.h | 4 | ||||
-rw-r--r-- | src/data/field_event_obj/field_effect_objects.h | 106 | ||||
-rw-r--r-- | src/event_object_movement.c | 208 | ||||
-rw-r--r-- | src/field_effect.c | 42 | ||||
-rw-r--r-- | src/field_effect_helpers.c | 298 | ||||
-rw-r--r-- | src/field_player_avatar.c | 6 | ||||
-rw-r--r-- | src/field_tasks.c | 33 | ||||
-rw-r--r-- | src/hof_pc.c | 1 | ||||
-rw-r--r-- | src/item_menu.c | 13 | ||||
-rw-r--r-- | src/item_use.c | 167 | ||||
-rw-r--r-- | src/overworld.c | 6 | ||||
-rw-r--r-- | src/party_menu.c | 4 | ||||
-rw-r--r-- | src/player_pc.c | 4 | ||||
-rw-r--r-- | src/pokemon_menu.c | 24 | ||||
-rw-r--r-- | src/secret_base.c | 1 | ||||
-rw-r--r-- | src/sprite.c | 1 |
25 files changed, 575 insertions, 538 deletions
diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc index c78c4ab9e..10734411f 100644 --- a/data/scripts/berry_tree.inc +++ b/data/scripts/berry_tree.inc @@ -1,16 +1,16 @@ S_BerryTree:: @ 81A14DD special EventObjectInteractionGetBerryTreeData switch VAR_SPECIAL_4 - case 255, Route102_EventScript_1A1533 - case 0, Route102_EventScript_1A153D - case 1, Route102_EventScript_1A1595 - case 2, Route102_EventScript_1A15A2 - case 3, Route102_EventScript_1A15AF - case 4, Route102_EventScript_1A15BC - case 5, Route102_EventScript_1A15F9 + case 255, BerryTree_EventScript_1A1533 + case 0, BerryTree_EventScript_1A153D + case 1, BerryTree_EventScript_1A1595 + case 2, BerryTree_EventScript_1A15A2 + case 3, BerryTree_EventScript_1A15AF + case 4, BerryTree_EventScript_1A15BC + case 5, BerryTree_EventScript_1A15F9 end -Route102_EventScript_1A1533:: @ 81A1533 +BerryTree_EventScript_1A1533:: @ 81A1533 lockall message Route102_Text_1A1946 waitmessage @@ -18,99 +18,98 @@ Route102_EventScript_1A1533:: @ 81A1533 releaseall end -Route102_EventScript_1A153D:: @ 81A153D +BerryTree_EventScript_1A153D:: @ 81A153D lock faceplayer specialvar RESULT, PlayerHasBerries compare RESULT, 1 - goto_if_eq Route102_EventScript_1A1558 + goto_if_eq BerryTree_EventScript_1A1558 message Route102_Text_1A16B6 waitmessage waitbuttonpress release end -Route102_EventScript_1A1558:: @ 81A1558 +BerryTree_EventScript_1A1558:: @ 81A1558 msgbox Route102_Text_1A16CD, MSGBOX_YESNO compare RESULT, YES - goto_if_eq Route102_EventScript_1A1577 + goto_if_eq BerryTree_EventScript_1A1577 compare RESULT, NO - goto_if_eq Route102_EventScript_1A1593 + goto_if_eq BerryTree_EventScript_1A1593 end -Route102_EventScript_1A1577:: @ 81A1577 +BerryTree_EventScript_1A1577:: @ 81A1577 fadescreen 1 closemessage special Berry_FadeAndGoToBerryBagMenu waitstate compare ITEM_ID, 0 - goto_if_eq Route102_EventScript_1A1593 + goto_if_eq BerryTree_EventScript_1A1593 takeitem ITEM_ID, 1 - call Route102_EventScript_1A16A9 - -Route102_EventScript_1A1593:: @ 81A1593 + call S_PlantBerryTree +BerryTree_EventScript_1A1593:: @ 81A1593 release end -Route102_EventScript_1A1595:: @ 81A1595 +BerryTree_EventScript_1A1595:: @ 81A1595 lockall message Route102_Text_1A172C waitmessage waitbuttonpress - goto Route102_EventScript_1A165F + goto BerryTree_EventScript_1A165F -Route102_EventScript_1A15A2:: @ 81A15A2 +BerryTree_EventScript_1A15A2:: @ 81A15A2 lockall message Route102_Text_1A174B waitmessage waitbuttonpress - goto Route102_EventScript_1A165F + goto BerryTree_EventScript_1A165F -Route102_EventScript_1A15AF:: @ 81A15AF +BerryTree_EventScript_1A15AF:: @ 81A15AF lockall message Route102_Text_1A175C waitmessage waitbuttonpress - goto Route102_EventScript_1A165F + goto BerryTree_EventScript_1A165F -Route102_EventScript_1A15BC:: @ 81A15BC - call Route102_EventScript_1A15CE +BerryTree_EventScript_1A15BC:: @ 81A15BC + call BerryTree_EventScript_1A15CE lockall message Route102_Text_1A177D waitmessage waitbuttonpress - goto Route102_EventScript_1A165F + goto BerryTree_EventScript_1A165F -Route102_EventScript_1A15CE:: @ 81A15CE +BerryTree_EventScript_1A15CE:: @ 81A15CE compare VAR_SPECIAL_5, 0 - goto_if_eq Route102_EventScript_1A15F2 + goto_if_eq BerryTree_EventScript_1A15F2 compare VAR_SPECIAL_5, 4 - goto_if_eq Route102_EventScript_1A15EB + goto_if_eq BerryTree_EventScript_1A15EB bufferstring 1, Route102_Text_1A17B7 return -Route102_EventScript_1A15EB:: @ 81A15EB +BerryTree_EventScript_1A15EB:: @ 81A15EB bufferstring 1, Route102_Text_1A179F return -Route102_EventScript_1A15F2:: @ 81A15F2 +BerryTree_EventScript_1A15F2:: @ 81A15F2 bufferstring 1, Route102_Text_1A17B0 return -Route102_EventScript_1A15F9:: @ 81A15F9 +BerryTree_EventScript_1A15F9:: @ 81A15F9 buffernumberstring 1, VAR_SPECIAL_6 lock faceplayer msgbox Route102_Text_1A17C0, MSGBOX_YESNO compare RESULT, YES - goto_if_eq Route102_EventScript_1A161D + goto_if_eq BerryTree_EventScript_1A161D compare RESULT, NO - goto_if_eq Route102_EventScript_1A164B + goto_if_eq BerryTree_EventScript_1A164B -Route102_EventScript_1A161D:: @ 81A161D +BerryTree_EventScript_1A161D:: @ 81A161D special EventObjectInteractionPickBerryTree compare VAR_SPECIAL_4, 0 - goto_if_eq Route102_EventScript_1A1642 + goto_if_eq BerryTree_EventScript_1A1642 special EventObjectInteractionRemoveBerryTree message Route102_Text_1A17FD playfanfare MUS_ME_KINOMI @@ -123,46 +122,44 @@ Route102_EventScript_1A161D:: @ 81A161D release end -Route102_EventScript_1A1642:: @ 81A1642 +BerryTree_EventScript_1A1642:: @ 81A1642 message Route102_Text_1A1881 waitmessage waitbuttonpress release end -Route102_EventScript_1A164B:: @ 81A164B +BerryTree_EventScript_1A164B:: @ 81A164B message Route102_Text_1A18C5 waitmessage waitbuttonpress release end -gUnknown_081A1654:: @ 81A1654 +S_PlantBerryTreeFromBag:: @ 81A1654 lockall special EventObjectInteractionGetBerryTreeData - call Route102_EventScript_1A16A9 + call S_PlantBerryTree releaseall end -Route102_EventScript_1A165F:: @ 81A165F +BerryTree_EventScript_1A165F:: @ 81A165F checkitem ITEM_WAILMER_PAIL, 1 compare RESULT, 0 - goto_if_eq Route102_EventScript_1A168D + goto_if_eq BerryTree_EventScript_1A168D msgbox Route102_Text_1A18E6, MSGBOX_YESNO compare RESULT, YES - goto_if_eq Route102_EventScript_1A1693 + goto_if_eq S_WaterBerryTree compare RESULT, NO - goto_if_eq Route102_EventScript_1A168D - -Route102_EventScript_1A168D:: @ 81A168D + goto_if_eq BerryTree_EventScript_1A168D +BerryTree_EventScript_1A168D:: @ 81A168D releaseall end -gUnknown_081A168F:: @ 81A168F +S_WaterBerryTreeFromBag:: @ 81A168F special EventObjectInteractionGetBerryTreeData lockall - -Route102_EventScript_1A1693:: @ 81A1693 +S_WaterBerryTree:: @ 81A1693 message Route102_Text_1A1912 waitmessage special EventObjectInteractionWaterBerryTree @@ -174,7 +171,7 @@ Route102_EventScript_1A1693:: @ 81A1693 releaseall end -Route102_EventScript_1A16A9:: @ 81A16A9 +S_PlantBerryTree:: @ 81A16A9 special EventObjectInteractionPlantBerryTree incrementgamestat GAME_STAT_PLANTED_BERRIES message Route102_Text_1A16FB diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 21e60a60a..e1e7529ca 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -245,7 +245,7 @@ enum { #define GROUND_EFFECT_FLAG_HOT_SPRINGS (1 << 18) #define GROUND_EFFECT_FLAG_SEAWEED (1 << 19) -extern const u8 gUnknown_0830FD14[]; +extern const u8 gReflectionEffectPaletteMap[]; #define movement_type_def(setup, table) \ static u8 setup##_callback(struct EventObject *, struct Sprite *);\ @@ -269,10 +269,10 @@ static u8 setup##_callback(struct EventObject *eventObject, struct Sprite *sprit return 0;\ } -struct PairedPalettes +struct ReflectionPaletteSet { - u16 tag; - const u16 *data; + u16 mainPaletteTag; + const u16 *reflectionPaletteTags; }; extern const u16 gEventObjectPalette19[]; @@ -563,8 +563,7 @@ u8 GetMoveDirectionFastestAnimNum(u8); u32 state_to_direction(u8, u32, u32); -void sub_805AA98(); -void sub_805AAB0(void); +void ResetEventObjects(); u8 GetFirstInactiveEventObjectId(void); u8 GetEventObjectIdByLocalIdAndMap(u8, u8, u8); bool8 TryGetEventObjectIdByLocalIdAndMap(u8, u8, u8, u8 *); @@ -592,13 +591,13 @@ void sub_805BCC0(s16 x, s16 y); void sub_805BCF0(u8, u8, u8, u8); void sub_805BD48(u8, u8, u8); void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y); -void gpu_pal_allocator_reset__manage_upper_four(void); +void FreeAndReserveObjectSpritePalettes(void); void sub_805BDF8(u16); u8 sub_805BE58(const struct SpritePalette *); -void pal_patch_for_npc(u16, u16); +void PatchObjectPalette(u16, u16); u8 FindEventObjectPaletteIndexByTag(u16); -void npc_load_two_palettes__no_record(u16, u8); -void npc_load_two_palettes__and_record(u16, u8); +void LoadPlayerObjectReflectionPalette(u16, u8); +void LoadSpecialObjectReflectionPalette(u16, u8); void ShiftEventObjectCoords(struct EventObject *pObject, s16 x, s16 y); void sub_805C0F8(u8, u8, u8, s16, s16); void ShiftStillEventObjectCoords(struct EventObject *pObject); @@ -613,7 +612,7 @@ struct EventObjectTemplate *GetEventObjectTemplateByLocalIdAndMap(u8, u8, u8); void OverrideTemplateCoordsForEventObject(struct EventObject *pObject); void OverrideMovementTypeForEventObject(struct EventObject *, u8); void TryOverrideTemplateCoordsForEventObject(u8, u8, u8); -void sub_805C7C4(u8 i); +void InitEventObjectPalettes(u8); u8 GetFaceDirectionAnimNum(u8); u8 GetMoveDirectionAnimNum(u8 unk_19); u8 GetAcroWheelieDirectionAnimNum(u8); @@ -671,8 +670,8 @@ u8 GetOppositeDirection(u8); u8 SpawnSpecialEventObjectParametrized(u8, u8, u8, s16, s16, u8); void CameraObjectSetFollowedObjectId(u8); u8 TryInitLocalEventObject(u8); -u8 obj_unfreeze(struct Sprite *, s16, s16, u8); -u16 npc_paltag_by_palslot(u8); +u8 CreateCopySpriteAt(struct Sprite *, s16, s16, u8); +u16 GetObjectPaletteTag(u8); void sub_8060470(s16 *, s16 *, s16, s16); bool8 FreezeEventObject(struct EventObject *); void FreezeEventObjects(void); diff --git a/include/field_effect.h b/include/field_effect.h index 4ca97c898..a1c175eb8 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -120,9 +120,6 @@ bool8 sub_8087774(struct Task *, struct EventObject *, struct Sprite *); bool8 sub_80877AC(struct Task *, struct EventObject *, struct Sprite *); bool8 sub_80877D4(struct Task *, struct EventObject *, struct Sprite *); -void sub_80878F4(struct Task *); -void sub_8087914(struct Task *); - void sub_8087AA4(struct Task *); void sub_8087AC8(struct Task *); @@ -176,7 +173,7 @@ u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority); u8 CreateMonSprite_PicBox(u16, s16, s16, u8); void FreeResourcesAndDestroySprite(struct Sprite *sprite); void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8); -void sub_80878A8(void); +void StartEscapeRopeFieldEffect(void); void CreateTeleportFieldEffectTask(void); void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b); diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index 8d207aded..8462b6ff8 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -5,32 +5,32 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; void sub_812869C(struct EventObject *); bool8 sub_81286C4(struct EventObject *); -void oamc_shadow(struct Sprite *); +void UpdateShadowFieldEffect(struct Sprite *); void sub_8087638(struct Sprite *); void sub_808788C(struct Sprite *); -void sub_8127334(struct Sprite *); -void sub_8127584(struct Sprite *); -void sub_81276B4(struct Sprite *); -void sub_8127A7C(struct Sprite *); -void sub_8127D84(struct Sprite *); -void sub_8127F7C(struct Sprite *); -void sub_81282E0(struct Sprite *); -void sub_8128410(struct Sprite *); -void sub_81285AC(struct Sprite *); -void sub_8128774(struct Sprite *); -void sub_81287C4(struct Sprite *); -void sub_8128800(struct Sprite *); -void unc_grass_normal(struct Sprite *); -void unc_grass_tall(struct Sprite *); -u8 sub_8126B54(void); -void objid_set_invisible(u8); -void sub_8126BC4(u8 unk_1B, u8 r6, s16 x, s16 y); +void UpdateShortGrassFieldEffect(struct Sprite *); +void UpdateFootprintsTireTracksFieldEffect(struct Sprite *); +void UpdateSplashFieldEffect(struct Sprite *); +void UpdateHotSpringsWaterFieldEffect(struct Sprite *); +void UpdateAshFieldEffect(struct Sprite *); +void UpdateSurfBlobFieldEffect(struct Sprite *); +void UpdateSandPileFieldEffect(struct Sprite *); +void UpdateBubblesFieldEffect(struct Sprite *); +void UpdateDisguiseFieldEffect(struct Sprite *); +void UpdateSparkleFieldEffect(struct Sprite *); +void UpdateJumpLandingFieldEffect(struct Sprite *); +void WaitFieldEffectSpriteAnim(struct Sprite *); +void UpdateTallGrassFieldEffect(struct Sprite *); +void UpdateLongGrassFieldEffect(struct Sprite *); +u8 CreateWarpArrowSprite(void); +void SetSpriteInvisible(u8); +void ShowWarpArrowSprite(u8 unk_1B, u8 r6, s16 x, s16 y); void sub_8127ED0(u8, u8); void sub_8127F28(u8, u8, s16); u8 sub_8128124(u8 id); -void ash(s16, s16, u16, s16); -void SetUpReflection(struct EventObject *eventObj, struct Sprite *sprite, u8 a); +void StartAshFieldEffect(s16, s16, u16, s16); +void InitObjectReflectionSprite(struct EventObject *eventObj, struct Sprite *sprite, u8 a); u32 StartFieldEffectForEventObject(u8 fieldEffectId, struct EventObject *eventObject); -u8 sub_8126FF0(u8, u8, u8, s16, s16); +u8 FindTallGrassFieldEffectSpriteId(u8, u8, u8, s16, s16); #endif // GUARD_FIELD_EFFECT_HELPERS_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 799a12a19..f15348689 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -238,8 +238,8 @@ struct EventObject struct EventObjectGraphicsInfo { /*0x00*/ u16 tileTag; - /*0x02*/ u16 paletteTag1; - /*0x04*/ u16 paletteTag2; + /*0x02*/ u16 paletteTag; + /*0x04*/ u16 bridgeReflectionPaletteTag; /*0x06*/ u16 size; /*0x08*/ s16 width; /*0x0A*/ s16 height; diff --git a/include/item_menu.h b/include/item_menu.h index 715d9131a..22ef3892c 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -3,6 +3,15 @@ #include "string_util.h" +enum +{ + ITEM_USE_SINGLE_MON, + ITEM_USE_GIVE_ITEM, + ITEM_USE_UNUSED, + ITEM_USE_GIVE_MAIL, + ITEM_USE_ALL_MONS, +}; + struct PocketScrollState { u8 cursorPos; diff --git a/include/item_use.h b/include/item_use.h index ee7939824..1ba75a0ee 100644 --- a/include/item_use.h +++ b/include/item_use.h @@ -10,6 +10,7 @@ void ItemUseOutOfBattle_Rod(u8); void ItemUseOnFieldCB_Rod(u8); void ItemUseOutOfBattle_Itemfinder(u8); void ItemUseOnFieldCB_Itemfinder(u8); +void ItemUseOutOfBattle_Berry(u8); void RunItemfinderResults(u8); void ExitItemfinder(u8); bool8 ItemfinderCheckForHiddenItems(struct MapEvents *, u8); @@ -22,19 +23,13 @@ void RotatePlayerAndExitItemfinder(u8); void ItemUseOutOfBattle_PokeblockCase(u8); void ItemUseOutOfBattle_CoinCase(u8); void ItemUseOutOfBattle_SSTicket(u8); -void sub_80C9D00(u8); void ItemUseOutOfBattle_WailmerPail(u8); -void sub_80C9D74(u8); void ItemUseOutOfBattle_Medicine(u8); void ItemUseOutOfBattle_SacredAsh(u8); void ItemUseOutOfBattle_PPRecovery(u8); void ItemUseOutOfBattle_PPUp(u8); void ItemUseOutOfBattle_RareCandy(u8); void ItemUseOutOfBattle_TMHM(u8); -void sub_80C9EE4(u8); -void sub_80C9F10(u8); -void sub_80C9F80(u8); -void sub_80C9FC0(u8); void ItemUseOutOfBattle_Repel(u8); void ItemUseOutOfBattle_BlackWhiteFlute(u8); void task08_080A1C44(u8); diff --git a/include/party_menu.h b/include/party_menu.h index 9d2f57d7a..e687f48c4 100644 --- a/include/party_menu.h +++ b/include/party_menu.h @@ -192,7 +192,7 @@ void GetMedicineItemEffectMessage(u16); bool8 ExecuteTableBasedItemEffect__(u8, u16, u8); void UseMedicine(u8, u16, TaskFunc); bool8 IsBlueYellowRedFlute(u16); -void sub_8070048(u8, u16, TaskFunc); +void DoSacredAshItemEffect(u8, u16, TaskFunc); void sub_8070088(u8); void sub_80701DC(u8 taskId); void DoPPRecoveryItemEffect(u8, u16, TaskFunc); diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index 77f80d728..a8f797e28 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -238,7 +238,7 @@ static void sub_814640C(u8 taskId) { SetMainCallback2(sub_80A5B40); sub_80A7DD4(); - gpu_pal_allocator_reset__manage_upper_four(); + FreeAndReserveObjectSpritePalettes(); DestroyTask(taskId); } } diff --git a/src/data/field_event_obj/field_effect_object_template_pointers.h b/src/data/field_event_obj/field_effect_object_template_pointers.h index 320af1ff8..682816ed9 100644 --- a/src/data/field_event_obj/field_effect_object_template_pointers.h +++ b/src/data/field_event_obj/field_effect_object_template_pointers.h @@ -26,7 +26,7 @@ const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown17; const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown18; const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown19; const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown20; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown21; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Reflection; const struct SpriteTemplate gFieldEffectSpriteTemplate_BerryTreeGrowthSparkle; const struct SpriteTemplate gFieldEffectSpriteTemplate_DeepSandFootprints; const struct SpriteTemplate gFieldEffectSpriteTemplate_TreeDisguise; @@ -64,7 +64,7 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { &gFieldEffectSpriteTemplate_Unknown18, &gFieldEffectSpriteTemplate_Unknown19, &gFieldEffectSpriteTemplate_Unknown20, - &gFieldEffectSpriteTemplate_Unknown21, + &gFieldEffectSpriteTemplate_Reflection, &gFieldEffectSpriteTemplate_BerryTreeGrowthSparkle, &gFieldEffectSpriteTemplate_DeepSandFootprints, &gFieldEffectSpriteTemplate_TreeDisguise, diff --git a/src/data/field_event_obj/field_effect_objects.h b/src/data/field_event_obj/field_effect_objects.h index 9d3ae343d..8533b3cdd 100644 --- a/src/data/field_event_obj/field_effect_objects.h +++ b/src/data/field_event_obj/field_effect_objects.h @@ -34,13 +34,13 @@ const struct SpriteFrameImage gFieldEffectPicTable_ShadowExtraLarge[] = { obj_frame_tiles(gFieldEffectPic_ShadowExtraLarge) }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowSmall = {0xFFFF, 0xFFFF, &gFieldOamData_8x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowSmall, gDummySpriteAffineAnimTable, oamc_shadow}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowSmall = {0xFFFF, 0xFFFF, &gFieldOamData_8x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowSmall, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; -const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowMedium = {0xFFFF, 0xFFFF, &gFieldOamData_16x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowMedium, gDummySpriteAffineAnimTable, oamc_shadow}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowMedium = {0xFFFF, 0xFFFF, &gFieldOamData_16x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowMedium, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; -const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowLarge = {0xFFFF, 0xFFFF, &gFieldOamData_32x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowLarge, gDummySpriteAffineAnimTable, oamc_shadow}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowLarge = {0xFFFF, 0xFFFF, &gFieldOamData_32x8, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowLarge, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; -const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowExtraLarge = {0xFFFF, 0xFFFF, &gFieldOamData_64x32, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowExtraLarge, gDummySpriteAffineAnimTable, oamc_shadow}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShadowExtraLarge = {0xFFFF, 0xFFFF, &gFieldOamData_64x32, gFieldEffectAnimTable_Shadow, gFieldEffectPicTable_ShadowExtraLarge, gDummySpriteAffineAnimTable, UpdateShadowFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_TallGrass[] = { obj_frame_tiles(gFieldEffectPic_TallGrass_0), @@ -63,7 +63,7 @@ const union AnimCmd *const gFieldEffectAnimTable_TallGrass[] = { gFieldEffectAnim_83745E8 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_TallGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_TallGrass, gFieldEffectPicTable_TallGrass, gDummySpriteAffineAnimTable, unc_grass_normal}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_TallGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_TallGrass, gFieldEffectPicTable_TallGrass, gDummySpriteAffineAnimTable, UpdateTallGrassFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_Ripple[] = { obj_frame_tiles(gFieldEffectPic_Ripple_0), @@ -89,7 +89,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Ripple[] = { gFieldEffectAnim_8374644 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Ripple = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Ripple, gFieldEffectPicTable_Ripple, gDummySpriteAffineAnimTable, sub_8128800}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Ripple = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Ripple, gFieldEffectPicTable_Ripple, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectPicTable_Ash[] = { obj_frame_tiles(gFieldEffectPic_Ash_0), @@ -112,7 +112,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Ash[] = { gFieldEffectAnim_83746AC }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Ash = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Ash, gFieldEffectPicTable_Ash, gDummySpriteAffineAnimTable, sub_8127D84}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Ash = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Ash, gFieldEffectPicTable_Ash, gDummySpriteAffineAnimTable, UpdateAshFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_SurfBlob[] = { obj_frame_tiles(gFieldEffectPic_SurfBlob_0), @@ -147,7 +147,7 @@ const union AnimCmd *const gFieldEffectAnimTable_SurfBlob[] = { gFieldEffectAnim_8374710 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_SurfBlob = {0xFFFF, 0xFFFF, &gFieldOamData_32x32, gFieldEffectAnimTable_SurfBlob, gFieldEffectPicTable_SurfBlob, gDummySpriteAffineAnimTable, sub_8127F7C}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_SurfBlob = {0xFFFF, 0xFFFF, &gFieldOamData_32x32, gFieldEffectAnimTable_SurfBlob, gFieldEffectPicTable_SurfBlob, gDummySpriteAffineAnimTable, UpdateSurfBlobFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_Arrow[] = { obj_frame_tiles(gFieldEffectPic_Arrow_0), @@ -210,7 +210,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Dust[] = { gFieldEffectAnim_83747F0 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Dust = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_Dust, gFieldEffectPicTable_Dust, gDummySpriteAffineAnimTable, sub_81287C4}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Dust = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_Dust, gFieldEffectPicTable_Dust, gDummySpriteAffineAnimTable, UpdateJumpLandingFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_JumpTallGrass[] = { obj_frame_tiles(gFieldEffectPic_JumpTallGrass_0), @@ -231,7 +231,7 @@ const union AnimCmd *const gFieldEffectAnimTable_JumpTallGrass[] = { gFieldEffectAnim_837483C }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpTallGrass = {0xFFFF, 0x1005, &gFieldOamData_16x8, gFieldEffectAnimTable_JumpTallGrass, gFieldEffectPicTable_JumpTallGrass, gDummySpriteAffineAnimTable, sub_81287C4}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpTallGrass = {0xFFFF, 0x1005, &gFieldOamData_16x8, gFieldEffectAnimTable_JumpTallGrass, gFieldEffectPicTable_JumpTallGrass, gDummySpriteAffineAnimTable, UpdateJumpLandingFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_SandFootprints[] = { obj_frame_tiles(gFieldEffectPic_SandFootprints_0), @@ -266,7 +266,7 @@ const union AnimCmd *const gFieldEffectAnimTable_SandFootprints[] = { gFieldEffectAnim_8374894 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_SandFootprints = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_SandFootprints, gFieldEffectPicTable_SandFootprints, gDummySpriteAffineAnimTable, sub_8127584}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandFootprints = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_SandFootprints, gFieldEffectPicTable_SandFootprints, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_DeepSandFootprints[] = { obj_frame_tiles(gFieldEffectPic_DeepSandFootprints_0), @@ -301,7 +301,7 @@ const union AnimCmd *const gFieldEffectAnimTable_DeepSandFootprints[] = { gFieldEffectAnim_83748F0 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_DeepSandFootprints = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_DeepSandFootprints, gFieldEffectPicTable_DeepSandFootprints, gDummySpriteAffineAnimTable, sub_8127584}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_DeepSandFootprints = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_DeepSandFootprints, gFieldEffectPicTable_DeepSandFootprints, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_BikeTireTracks[] = { obj_frame_tiles(gFieldEffectPic_BikeTireTracks_0), @@ -362,7 +362,7 @@ const union AnimCmd *const gFieldEffectAnimTable_BikeTireTracks[] = { gFieldEffectAnim_837497C }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_BikeTireTracks = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_BikeTireTracks, gFieldEffectPicTable_BikeTireTracks, gDummySpriteAffineAnimTable, sub_8127584}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_BikeTireTracks = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_BikeTireTracks, gFieldEffectPicTable_BikeTireTracks, gDummySpriteAffineAnimTable, UpdateFootprintsTireTracksFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_JumpBigSplash[] = { obj_frame_tiles(gFieldEffectPic_JumpBigSplash_0), @@ -383,7 +383,7 @@ const union AnimCmd *const gFieldEffectAnimTable_JumpBigSplash[] = { gFieldEffectAnim_83749E0 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpBigSplash = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_JumpBigSplash, gFieldEffectPicTable_JumpBigSplash, gDummySpriteAffineAnimTable, sub_81287C4}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpBigSplash = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_JumpBigSplash, gFieldEffectPicTable_JumpBigSplash, gDummySpriteAffineAnimTable, UpdateJumpLandingFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_Splash[] = { obj_frame_tiles(gFieldEffectPic_Splash_0), @@ -413,7 +413,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Splash[] = { gFieldEffectAnim_8374A2C }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Splash = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_Splash, gFieldEffectPicTable_Splash, gDummySpriteAffineAnimTable, sub_81276B4}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Splash = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_Splash, gFieldEffectPicTable_Splash, gDummySpriteAffineAnimTable, UpdateSplashFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_JumpSmallSplash[] = { obj_frame_tiles(gFieldEffectPic_JumpSmallSplash_0), @@ -432,7 +432,7 @@ const union AnimCmd *const gFieldEffectAnimTable_JumpSmallSplash[] = { gFieldEffectAnim_8374A88 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpSmallSplash = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_JumpSmallSplash, gFieldEffectPicTable_JumpSmallSplash, gDummySpriteAffineAnimTable, sub_81287C4}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpSmallSplash = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_JumpSmallSplash, gFieldEffectPicTable_JumpSmallSplash, gDummySpriteAffineAnimTable, UpdateJumpLandingFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_LongGrass[] = { obj_frame_tiles(gFieldEffectPic_LongGrass_0), @@ -456,7 +456,7 @@ const union AnimCmd *const gFieldEffectAnimTable_LongGrass[] = { gFieldEffectAnim_8374AD4 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_LongGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_LongGrass, gFieldEffectPicTable_LongGrass, gDummySpriteAffineAnimTable, unc_grass_tall}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_LongGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_LongGrass, gFieldEffectPicTable_LongGrass, gDummySpriteAffineAnimTable, UpdateLongGrassFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_JumpLongGrass[] = { obj_frame_tiles(gFieldEffectPic_JumpLongGrass_0), @@ -481,7 +481,7 @@ const union AnimCmd *const gFieldEffectAnimTable_JumpLongGrass[] = { gFieldEffectAnim_8374B40 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpLongGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_JumpLongGrass, gFieldEffectPicTable_JumpLongGrass, gDummySpriteAffineAnimTable, sub_81287C4}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_JumpLongGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_JumpLongGrass, gFieldEffectPicTable_JumpLongGrass, gDummySpriteAffineAnimTable, UpdateJumpLandingFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_Unknown17[] = { obj_frame_tiles(gFieldEffectPic_JumpLongGrass_5), @@ -512,7 +512,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Unknown17[] = { gFieldEffectAnim_8374BC0 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown17 = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown17, gFieldEffectPicTable_Unknown17, gDummySpriteAffineAnimTable, sub_8128800}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown17 = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown17, gFieldEffectPicTable_Unknown17, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectPicTable_Unknown18[] = { obj_frame_tiles(gFieldEffectPic_Unknown18_0), @@ -535,7 +535,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Unknown18[] = { gFieldEffectAnim_8374C24 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown18 = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown18, gFieldEffectPicTable_Unknown18, gDummySpriteAffineAnimTable, sub_8128800}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown18 = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown18, gFieldEffectPicTable_Unknown18, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectPicTable_Unknown19[] = { obj_frame_tiles(gFieldEffectPic_Unknown19_0), @@ -556,7 +556,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Unknown19[] = { gFieldEffectAnim_8374C7C }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown19 = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown19, gFieldEffectPicTable_Unknown19, gDummySpriteAffineAnimTable, sub_8128800}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown19 = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown19, gFieldEffectPicTable_Unknown19, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectPicTable_SandPile[] = { obj_frame_tiles(gFieldEffectPic_SandPile_0), @@ -575,7 +575,7 @@ const union AnimCmd *const gFieldEffectAnimTable_SandPile[] = { gFieldEffectAnim_8374CC4 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_SandPile = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_SandPile, gFieldEffectPicTable_SandPile, gDummySpriteAffineAnimTable, sub_81282E0}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandPile = {0xFFFF, 0x1004, &gFieldOamData_16x8, gFieldEffectAnimTable_SandPile, gFieldEffectPicTable_SandPile, gDummySpriteAffineAnimTable, UpdateSandPileFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_Unknown20[] = { obj_frame_tiles(gFieldEffectPic_Unknown20_0), @@ -598,40 +598,40 @@ const union AnimCmd *const gFieldEffectAnimTable_Unknown20[] = { gFieldEffectAnim_8374D10 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown20 = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown20, gFieldEffectPicTable_Unknown20, gDummySpriteAffineAnimTable, sub_8128800}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown20 = {0xFFFF, 0x1004, &gFieldOamData_16x16, gFieldEffectAnimTable_Unknown20, gFieldEffectPicTable_Unknown20, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; -const union AffineAnimCmd gFieldEffectAffineAnim_8374D48[] = { +const union AffineAnimCmd gFieldEffectAffineAnim_WavyReflection[] = { AFFINEANIMCMD_FRAME(0xFF00, 0x100, -128, 0), - AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), - AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), - AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), - AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME( 1, 0, 0, 4), + AFFINEANIMCMD_FRAME( 0, 0, 0, 8), + AFFINEANIMCMD_FRAME(-1, 0, 0, 4), + AFFINEANIMCMD_FRAME( 0, 0, 0, 8), + AFFINEANIMCMD_FRAME(-1, 0, 0, 4), + AFFINEANIMCMD_FRAME( 0, 0, 0, 8), + AFFINEANIMCMD_FRAME( 1, 0, 0, 4), + AFFINEANIMCMD_FRAME( 0, 0, 0, 8), AFFINEANIMCMD_JUMP(1) }; -const union AffineAnimCmd gFieldEffectAffineAnim_8374D98[] = { +const union AffineAnimCmd gFieldEffectAffineAnim_WavyReflectionFlipped[] = { AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0), - AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), - AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), - AFFINEANIMCMD_FRAME(0x1, 0x0, 0, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), - AFFINEANIMCMD_FRAME(0xFFFF, 0x0, 0, 4), - AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8), + AFFINEANIMCMD_FRAME(-1, 0, 0, 4), + AFFINEANIMCMD_FRAME( 0, 0, 0, 8), + AFFINEANIMCMD_FRAME( 1, 0, 0, 4), + AFFINEANIMCMD_FRAME( 0, 0, 0, 8), + AFFINEANIMCMD_FRAME( 1, 0, 0, 4), + AFFINEANIMCMD_FRAME( 0, 0, 0, 8), + AFFINEANIMCMD_FRAME(-1, 0, 0, 4), + AFFINEANIMCMD_FRAME( 0, 0, 0, 8), AFFINEANIMCMD_JUMP(1) }; -const union AffineAnimCmd *const gFieldEffectAffineAnimTable_Unknown21[] = { - gFieldEffectAffineAnim_8374D48, - gFieldEffectAffineAnim_8374D98 +const union AffineAnimCmd *const gFieldEffectAffineAnimTable_Reflection[] = { + gFieldEffectAffineAnim_WavyReflection, + gFieldEffectAffineAnim_WavyReflectionFlipped }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Unknown21 = {0x0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gFieldEffectAffineAnimTable_Unknown21, SpriteCallbackDummy}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Reflection = {0x0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gFieldEffectAffineAnimTable_Reflection, SpriteCallbackDummy}; const struct SpriteFrameImage gFieldEffectPicTable_BerryTreeGrowthSparkle[] = { obj_frame_tiles(gFieldEffectPic_BerryTreeGrowthSparkle_0), @@ -670,7 +670,7 @@ const union AnimCmd *const gFieldEffectAnimTable_BerryTreeGrowthSparkle[] = { gFieldEffectAnim_8374E38 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_BerryTreeGrowthSparkle = {0xFFFF, 0xFFFF, &gFieldOamData_16x16, gFieldEffectAnimTable_BerryTreeGrowthSparkle, gFieldEffectPicTable_BerryTreeGrowthSparkle, gDummySpriteAffineAnimTable, sub_8128800}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_BerryTreeGrowthSparkle = {0xFFFF, 0xFFFF, &gFieldOamData_16x16, gFieldEffectAnimTable_BerryTreeGrowthSparkle, gFieldEffectPicTable_BerryTreeGrowthSparkle, gDummySpriteAffineAnimTable, WaitFieldEffectSpriteAnim}; const struct SpriteFrameImage gFieldEffectPicTable_TreeDisguise[] = { obj_frame_tiles(gFieldEffectPic_TreeDisguise_0), @@ -703,7 +703,7 @@ const union AnimCmd *const gFieldEffectAnimTable_TreeDisguise[] = { gFieldEffectAnim_8374EE8 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_TreeDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_TreeDisguise, gFieldEffectPicTable_TreeDisguise, gDummySpriteAffineAnimTable, sub_81285AC}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_TreeDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_TreeDisguise, gFieldEffectPicTable_TreeDisguise, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_MountainDisguise[] = { obj_frame_tiles(gFieldEffectPic_MountainDisguise_0), @@ -736,7 +736,7 @@ const union AnimCmd *const gFieldEffectAnimTable_MountainDisguise[] = { gFieldEffectAnim_8374F68 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_MountainDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_MountainDisguise, gFieldEffectPicTable_MountainDisguise, gDummySpriteAffineAnimTable, sub_81285AC}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_MountainDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_MountainDisguise, gFieldEffectPicTable_MountainDisguise, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_SandDisguise[] = { obj_frame_tiles(gFieldEffectPic_SandDisguise_0), @@ -748,7 +748,7 @@ const struct SpriteFrameImage gFieldEffectPicTable_SandDisguise[] = { obj_frame_tiles(gFieldEffectPic_SandDisguise_6) }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_SandDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_TreeDisguise, gFieldEffectPicTable_SandDisguise, gDummySpriteAffineAnimTable, sub_81285AC}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_SandDisguise = {0xFFFF, 0xFFFF, &gFieldOamData_16x32, gFieldEffectAnimTable_TreeDisguise, gFieldEffectPicTable_SandDisguise, gDummySpriteAffineAnimTable, UpdateDisguiseFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_Bird[] = { obj_frame_tiles(gFieldEffectPic_Bird) @@ -780,7 +780,7 @@ const union AnimCmd *const gFieldEffectAnimTable_ShortGrass[] = { gFieldEffectAnim_8375034 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_ShortGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_ShortGrass, gFieldEffectPicTable_ShortGrass, gDummySpriteAffineAnimTable, sub_8127334}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_ShortGrass = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_ShortGrass, gFieldEffectPicTable_ShortGrass, gDummySpriteAffineAnimTable, UpdateShortGrassFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_HotSpringsWater[] = { obj_frame_tiles(gFieldEffectPic_HotSpringsWater) @@ -795,7 +795,7 @@ const union AnimCmd *const gFieldEffectAnimTable_HotSpringsWater[] = { gFieldEffectAnim_8375064 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_HotSpringsWater = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_HotSpringsWater, gFieldEffectPicTable_HotSpringsWater, gDummySpriteAffineAnimTable, sub_8127A7C}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_HotSpringsWater = {0xFFFF, 0x1005, &gFieldOamData_16x16, gFieldEffectAnimTable_HotSpringsWater, gFieldEffectPicTable_HotSpringsWater, gDummySpriteAffineAnimTable, UpdateHotSpringsWaterFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_PopOutOfAsh[] = { obj_frame_tiles(gFieldEffectPic_PopOutOfAsh_0), @@ -872,7 +872,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Bubbles[] = { gFieldEffectAnim_8375188 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Bubbles = {0xFFFF, 0x1004, &gFieldOamData_16x32, gFieldEffectAnimTable_Bubbles, gFieldEffectPicTable_Bubbles, gDummySpriteAffineAnimTable, sub_8128410}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Bubbles = {0xFFFF, 0x1004, &gFieldOamData_16x32, gFieldEffectAnimTable_Bubbles, gFieldEffectPicTable_Bubbles, gDummySpriteAffineAnimTable, UpdateBubblesFieldEffect}; const struct SpriteFrameImage gFieldEffectPicTable_Sparkle[] = { obj_frame_tiles(gFieldEffectPic_Sparkle_0), @@ -890,7 +890,7 @@ const union AnimCmd *const gFieldEffectAnimTable_Sparkle[] = { gFieldEffectAnim_83751D8 }; -const struct SpriteTemplate gFieldEffectSpriteTemplate_Sparkle = {0xFFFF, 0x100F, &gFieldOamData_16x16, gFieldEffectAnimTable_Sparkle, gFieldEffectPicTable_Sparkle, gDummySpriteAffineAnimTable, sub_8128774}; +const struct SpriteTemplate gFieldEffectSpriteTemplate_Sparkle = {0xFFFF, 0x100F, &gFieldOamData_16x16, gFieldEffectAnimTable_Sparkle, gFieldEffectPicTable_Sparkle, gDummySpriteAffineAnimTable, UpdateSparkleFieldEffect}; const struct SpritePalette gFieldEffectObjectPaletteInfo3 = {gFieldEffectObjectPalette3, 0x100F}; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 01460539c..5d498c1ff 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -60,8 +60,9 @@ static bool8 EventObjectZCoordIsCompatible(struct EventObject*, u8); static struct EventObjectTemplate *FindEventObjectTemplateByLocalId(u8, struct EventObjectTemplate*, u8); static void UpdateEventObjectSpriteSubpriorityAndVisibility(struct Sprite *); static void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z); +static void CreateReflectionEffectSprites(void); -const u8 gUnknown_0830FD14[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; +const u8 gReflectionEffectPaletteMap[] = {1, 1, 6, 7, 8, 9, 6, 7, 8, 9, 11, 11, 0, 0, 0, 0}; const struct SpriteTemplate gCameraSpriteTemplate = {0, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, ObjectCB_CameraObject}; @@ -324,7 +325,7 @@ const u8 gInitialMovementTypeFacingDirections[] = { #include "data/field_event_obj/event_object_subsprites.h" #include "data/field_event_obj/event_object_graphics_info.h" -const struct SpritePalette gUnknown_0837377C[] = { +const struct SpritePalette sEventObjectSpritePalettes[] = { {gEventObjectPalette0, 0x1103}, {gEventObjectPalette1, 0x1104}, {gEventObjectPalette2, 0x1105}, @@ -355,121 +356,122 @@ const struct SpritePalette gUnknown_0837377C[] = { {NULL, 0x0000} }; -const u16 Palettes_837385C[] = { +const u16 gPlayerReflectionPaletteTags[] = { 0x1101, 0x1101, 0x1101, 0x1101 }; -const u16 Palettes_8373864[] = { +// These were probably intended to be used for the female player's reflection. +const u16 gUnusedPlayerReflectionPaletteTags[] = { 0x1111, 0x1111, 0x1111, 0x1111 }; -const u16 Palettes_837386C[] = { +const u16 gPlayerUnderwaterReflectionPaletteTags[] = { 0x1115, 0x1115, 0x1115, 0x1115 }; -const struct PairedPalettes gUnknown_08373874[] = { - {0x1100, Palettes_837385C}, - {0x1110, Palettes_837385C}, - {0x1115, Palettes_837386C}, +const struct ReflectionPaletteSet gPlayerReflectionPaletteSets[] = { + {0x1100, gPlayerReflectionPaletteTags}, + {0x1110, gPlayerReflectionPaletteTags}, + {0x1115, gPlayerUnderwaterReflectionPaletteTags}, {0x11FF, NULL} }; -const u16 Palettes_8373894[] = { +const u16 gQuintyPlumpReflectionPaletteTags[] = { 0x110C, 0x110C, 0x110C, 0x110C }; -const u16 Palettes_837389C[] = { +const u16 gTruckReflectionPaletteTags[] = { 0x110D, 0x110D, 0x110D, 0x110D }; -const u16 Palettes_83738A4[] = { +const u16 gMachokeMoverReflectionPaletteTags[] = { 0x110E, 0x110E, 0x110E, 0x110E }; -const u16 Palettes_83738AC[] = { +const u16 gMovingBoxReflectionPaletteTags[] = { 0x1112, 0x1112, 0x1112, 0x1112 }; -const u16 Palettes_83738B4[] = { +const u16 gCableCarReflectionPaletteTags[] = { 0x1113, 0x1113, 0x1113, 0x1113 }; -const u16 Palettes_83738BC[] = { +const u16 gSSTidalReflectionPaletteTags[] = { 0x1114, 0x1114, 0x1114, 0x1114 }; -const u16 Palettes_83738C4[] = { +const u16 gSubmarineShadowReflectionPaletteTags[] = { 0x111A, 0x111A, 0x111A, 0x111A }; -const u16 Palettes_83738CC[] = { +const u16 gKyogre2ReflectionPaletteTags[] = { 0x1117, 0x1117, 0x1117, 0x1117 }; -const u16 Palettes_83738D4[] = { +const u16 gGroudon2ReflectionPaletteTags[] = { 0x1119, 0x1119, 0x1119, 0x1119 }; -const u16 Palettes_83738DC[] = { +const u16 gInvisibleKecleonReflectionPaletteTags[] = { 0x1109, 0x1109, 0x1109, 0x1109 }; -const struct PairedPalettes gUnknown_083738E4[] = { - {0x1100, Palettes_837385C}, - {0x1110, Palettes_837385C}, - {0x110B, Palettes_8373894}, - {0x110D, Palettes_837389C}, - {0x110E, Palettes_83738A4}, - {0x1112, Palettes_83738AC}, - {0x1113, Palettes_83738B4}, - {0x1114, Palettes_83738BC}, - {0x1116, Palettes_83738CC}, - {0x1118, Palettes_83738D4}, - {0x1105, Palettes_83738DC}, - {0x111A, Palettes_83738C4}, +const struct ReflectionPaletteSet gSpecialObjectReflectionPaletteSets[] = { + {0x1100, gPlayerReflectionPaletteTags}, + {0x1110, gPlayerReflectionPaletteTags}, + {0x110B, gQuintyPlumpReflectionPaletteTags}, + {0x110D, gTruckReflectionPaletteTags}, + {0x110E, gMachokeMoverReflectionPaletteTags}, + {0x1112, gMovingBoxReflectionPaletteTags}, + {0x1113, gCableCarReflectionPaletteTags}, + {0x1114, gSSTidalReflectionPaletteTags}, + {0x1116, gKyogre2ReflectionPaletteTags}, + {0x1118, gGroudon2ReflectionPaletteTags}, + {0x1105, gInvisibleKecleonReflectionPaletteTags}, + {0x111A, gSubmarineShadowReflectionPaletteTags}, {0x11FF, NULL} }; -const u16 Unknown_837394C[] = { +const u16 gObjectPaletteTags0[] = { 0x1100, 0x1101, 0x1103, @@ -482,7 +484,7 @@ const u16 Unknown_837394C[] = { 0x110A }; -const u16 Unknown_8373960[] = { +const u16 gObjectPaletteTags1[] = { 0x1100, 0x1101, 0x1103, @@ -495,7 +497,7 @@ const u16 Unknown_8373960[] = { 0x110A }; -const u16 Unknown_8373974[] = { +const u16 gObjectPaletteTags2[] = { 0x1100, 0x1101, 0x1103, @@ -508,7 +510,7 @@ const u16 Unknown_8373974[] = { 0x110A }; -const u16 Unknown_8373988[] = { +const u16 gObjectPaletteTags3[] = { 0x1100, 0x1101, 0x1103, @@ -521,11 +523,11 @@ const u16 Unknown_8373988[] = { 0x110A }; -const u16 *const gUnknown_0837399C[] = { - Unknown_837394C, - Unknown_8373960, - Unknown_8373974, - Unknown_8373988 +const u16 *const gObjectPaletteTagSets[] = { + gObjectPaletteTags0, + gObjectPaletteTags1, + gObjectPaletteTags2, + gObjectPaletteTags3 }; #include "data/field_event_obj/berry_tree_graphics_tables.h" @@ -958,8 +960,11 @@ const u8 gUnknown_08375767[][4] = { #include "data/field_event_obj/movement_action_func_tables.h" -static u8 gUnknown_030005A4; -static u16 gUnknown_030005A6; +// There is code supporing multiple sets of player reflection palettes, but +// the data for each is identical. Perhaps non-water/ice reflections were planned. +static u8 sCurrentReflectionType; + +static u16 sCurrentSpecialObjectPaletteTag; extern struct LinkPlayerEventObject gLinkPlayerEventObjects[]; extern u8 gReservedSpritePaletteCount; @@ -989,16 +994,21 @@ static void ClearAllEventObjects(void) #endif } -void sub_805AA98(void) +void ResetEventObjects(void) { ClearLinkPlayerEventObjects(); ClearAllEventObjects(); ClearPlayerAvatarInfo(); - sub_805AAB0(); + CreateReflectionEffectSprites(); } -void sub_805AAB0(void) +static void CreateReflectionEffectSprites(void) { + // The reflection effect when an event object is standing over water or ice + // is driven by these two invisible sprites' callback functions. The callback + // continuously updates OAM rot/scale matrices using affine animations that scale + // the sprite up and down horizontally. The second one is needed to handle the inverted + // effect when the object is facing to the east. (The sprite has h-flip enabled). u8 spriteId = spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[21], 0, 0, 0x1F); gSprites[spriteId].oam.affineMode = 1; InitSpriteAffineAnim(&gSprites[spriteId]); @@ -1223,9 +1233,9 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjTemplate eventObject = &gEventObjects[eventObjectId]; gfxInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); if (gfxInfo->paletteSlot == 0) - npc_load_two_palettes__no_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + LoadPlayerObjectReflectionPalette(gfxInfo->paletteTag, gfxInfo->paletteSlot); else if (gfxInfo->paletteSlot == 10) - npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(gfxInfo->paletteTag, gfxInfo->paletteSlot); if (eventObject->movementType == MOVEMENT_TYPE_INVISIBLE) eventObject->invisible = TRUE; @@ -1330,7 +1340,7 @@ void MakeObjectTemplateFromEventObjectGraphicsInfo(u16 graphicsId, void (*callba const struct EventObjectGraphicsInfo *gfxInfo = GetEventObjectGraphicsInfo(graphicsId); sprTemplate->tileTag = gfxInfo->tileTag; - sprTemplate->paletteTag = gfxInfo->paletteTag1; + sprTemplate->paletteTag = gfxInfo->paletteTag; sprTemplate->oam = gfxInfo->oam; sprTemplate->anims = gfxInfo->anims; sprTemplate->images = gfxInfo->images; @@ -1397,7 +1407,7 @@ u8 sub_805B410(u8 graphicsId, u8 b, s16 x, s16 y, u8 elevation, u8 direction) sprite->data[0] = b; sprite->data[1] = elevation; if (gfxInfo->paletteSlot == 10) - npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(gfxInfo->paletteTag, gfxInfo->paletteSlot); if (subspriteTables != NULL) { SetSubspriteTables(sprite, subspriteTables); @@ -1497,7 +1507,7 @@ void sub_805B710(u16 a, u16 b) #endif } } - sub_805AAB0(); + CreateReflectionEffectSprites(); } extern void SetPlayerAvatarEventObjectIdAndObjectId(u8, u8); @@ -1529,9 +1539,9 @@ void sub_805B75C(u8 eventObjectId, s16 b, s16 c) sp0.images = &sp18; *(u16 *)&sp0.paletteTag = 0xFFFF; if (gfxInfo->paletteSlot == 0) - npc_load_two_palettes__no_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + LoadPlayerObjectReflectionPalette(gfxInfo->paletteTag, gfxInfo->paletteSlot); if (gfxInfo->paletteSlot > 9) - npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(gfxInfo->paletteTag, gfxInfo->paletteSlot); *(u16 *)&sp0.paletteTag = 0xFFFF; spriteId = CreateSprite(&sp0, 0, 0, 0); if (spriteId != 64) @@ -1547,7 +1557,7 @@ void sub_805B75C(u8 eventObjectId, s16 b, s16 c) if (eventObject->movementType == MOVEMENT_TYPE_PLAYER) { SetPlayerAvatarEventObjectIdAndObjectId(eventObjectId, spriteId); - eventObject->warpArrowSpriteId = sub_8126B54(); + eventObject->warpArrowSpriteId = CreateWarpArrowSprite(); } if (subspriteTables != NULL) SetSubspriteTables(sprite, subspriteTables); @@ -1591,9 +1601,9 @@ void sub_805B980(struct EventObject *eventObject, u8 graphicsId) gfxInfo = GetEventObjectGraphicsInfo(graphicsId); sprite = &gSprites[eventObject->spriteId]; if (gfxInfo->paletteSlot == 0) - pal_patch_for_npc(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + PatchObjectPalette(gfxInfo->paletteTag, gfxInfo->paletteSlot); if (gfxInfo->paletteSlot == 10) - npc_load_two_palettes__and_record(gfxInfo->paletteTag1, gfxInfo->paletteSlot); + LoadSpecialObjectReflectionPalette(gfxInfo->paletteTag, gfxInfo->paletteSlot); sprite->oam.shape = gfxInfo->oam->shape; sprite->oam.size = gfxInfo->oam->size; sprite->images = gfxInfo->images; @@ -1749,7 +1759,7 @@ void sub_805BD90(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) } } -void gpu_pal_allocator_reset__manage_upper_four(void) +void FreeAndReserveObjectSpritePalettes(void) { FreeAllSpritePalettes(); gReservedSpritePaletteCount = 12; @@ -1760,7 +1770,7 @@ void sub_805BDF8(u16 tag) u16 paletteIndex = FindEventObjectPaletteIndexByTag(tag); if (paletteIndex != 0x11FF) //always happens. FindEventObjectPaletteIndexByTag returns u8 - sub_805BE58(&gUnknown_0837377C[paletteIndex]); + sub_805BE58(&sEventObjectSpritePalettes[paletteIndex]); } void unref_sub_805BE24(u16 *arr) @@ -1779,58 +1789,58 @@ u8 sub_805BE58(const struct SpritePalette *palette) return LoadSpritePalette(palette); } -void pal_patch_for_npc(u16 paletteTag, u16 paletteIndex) +void PatchObjectPalette(u16 paletteTag, u16 paletteIndex) { u8 index = paletteIndex; u8 tagPaletteIndex = FindEventObjectPaletteIndexByTag(paletteTag); - LoadPalette(gUnknown_0837377C[tagPaletteIndex].data, index * 16 + 0x100, 0x20); + LoadPalette(sEventObjectSpritePalettes[tagPaletteIndex].data, index * 16 + 0x100, 0x20); } -void pal_patch_for_npc_range(const u16 *arr, u8 b, u8 c) +static void PatchObjectPalettes(const u16 *paletteTags, u8 paletteIndex, u8 maxPaletteIndex) { - for (; b < c; arr++, b++) - pal_patch_for_npc(*arr, b); + for (; paletteIndex < maxPaletteIndex; paletteTags++, paletteIndex++) + PatchObjectPalette(*paletteTags, paletteIndex); } u8 FindEventObjectPaletteIndexByTag(u16 tag) { u8 i; - for (i = 0; gUnknown_0837377C[i].tag != 0x11FF; i++) + for (i = 0; sEventObjectSpritePalettes[i].tag != 0x11FF; i++) { - if (gUnknown_0837377C[i].tag == tag) + if (sEventObjectSpritePalettes[i].tag == tag) return i; } return 0xFF; } -void npc_load_two_palettes__no_record(u16 paletteTag, u8 paletteIndex) +void LoadPlayerObjectReflectionPalette(u16 paletteTag, u8 paletteIndex) { u8 i; - pal_patch_for_npc(paletteTag, paletteIndex); - for (i = 0; gUnknown_08373874[i].tag != 0x11FF; i++) + PatchObjectPalette(paletteTag, paletteIndex); + for (i = 0; gPlayerReflectionPaletteSets[i].mainPaletteTag != 0x11FF; i++) { - if (gUnknown_08373874[i].tag == paletteTag) + if (gPlayerReflectionPaletteSets[i].mainPaletteTag == paletteTag) { - pal_patch_for_npc(gUnknown_08373874[i].data[gUnknown_030005A4], gUnknown_0830FD14[paletteIndex]); + PatchObjectPalette(gPlayerReflectionPaletteSets[i].reflectionPaletteTags[sCurrentReflectionType], gReflectionEffectPaletteMap[paletteIndex]); break; } } } -void npc_load_two_palettes__and_record(u16 paletteTag, u8 paletteIndex) +void LoadSpecialObjectReflectionPalette(u16 paletteTag, u8 paletteIndex) { u8 i; - gUnknown_030005A6 = paletteTag; - pal_patch_for_npc(paletteTag, paletteIndex); - for (i = 0; gUnknown_083738E4[i].tag != 0x11FF; i++) + sCurrentSpecialObjectPaletteTag = paletteTag; + PatchObjectPalette(paletteTag, paletteIndex); + for (i = 0; gSpecialObjectReflectionPaletteSets[i].mainPaletteTag != 0x11FF; i++) { - if (gUnknown_083738E4[i].tag == paletteTag) + if (gSpecialObjectReflectionPaletteSets[i].mainPaletteTag == paletteTag) { - pal_patch_for_npc(gUnknown_083738E4[i].data[gUnknown_030005A4], gUnknown_0830FD14[paletteIndex]); + PatchObjectPalette(gSpecialObjectReflectionPaletteSets[i].reflectionPaletteTags[sCurrentReflectionType], gReflectionEffectPaletteMap[paletteIndex]); break; } } @@ -2046,7 +2056,7 @@ u8 unref_sub_805C43C(struct Sprite *src, s16 x, s16 y, u8 subpriority) { u8 i; - for (i = 0; i < 64; i++) + for (i = 0; i < MAX_SPRITES; i++) { if (!gSprites[i].inUse) { @@ -2060,11 +2070,11 @@ u8 unref_sub_805C43C(struct Sprite *src, s16 x, s16 y, u8 subpriority) return i; } -u8 obj_unfreeze(struct Sprite *src, s16 x, s16 y, u8 subpriority) +u8 CreateCopySpriteAt(struct Sprite *src, s16 x, s16 y, u8 subpriority) { s16 i; - for (i = 63; i > -1; i--) + for (i = MAX_SPRITES - 1; i > -1; i--) { if (!gSprites[i].inUse) { @@ -2075,7 +2085,8 @@ u8 obj_unfreeze(struct Sprite *src, s16 x, s16 y, u8 subpriority) return i; } } - return 64; + + return MAX_SPRITES; } void SetEventObjectDirection(struct EventObject *eventObject, u8 direction) @@ -2210,28 +2221,31 @@ void TryOverrideTemplateCoordsForEventObject(u8 localId, u8 mapNum, u8 mapGroup) OverrideTemplateCoordsForEventObject(&gEventObjects[eventObjectId]); } -void sub_805C7C4(u8 a) +void InitEventObjectPalettes(u8 reflectionType) { - gpu_pal_allocator_reset__manage_upper_four(); - gUnknown_030005A6 = 0x11FF; - gUnknown_030005A4 = a; - pal_patch_for_npc_range(gUnknown_0837399C[gUnknown_030005A4], 0, 10); + FreeAndReserveObjectSpritePalettes(); + sCurrentSpecialObjectPaletteTag = 0x11FF; + sCurrentReflectionType = reflectionType; + PatchObjectPalettes(gObjectPaletteTagSets[sCurrentReflectionType], 0, 10); } -u16 npc_paltag_by_palslot(u8 a) +u16 GetObjectPaletteTag(u8 paletteIndex) { u8 i; - if (a < 10) - return gUnknown_0837399C[gUnknown_030005A4][a]; + // Regular objects and the player occupy the first 10 palettes. + if (paletteIndex < 10) + return gObjectPaletteTagSets[sCurrentReflectionType][paletteIndex]; - for (i = 0; gUnknown_083738E4[i].tag != 0x11FF; i++) + // Palette slots 10 and 11 belong to the special object. + for (i = 0; gSpecialObjectReflectionPaletteSets[i].mainPaletteTag != 0x11FF; i++) { - if (gUnknown_083738E4[i].tag == gUnknown_030005A6) + if (gSpecialObjectReflectionPaletteSets[i].mainPaletteTag == sCurrentSpecialObjectPaletteTag) { - return gUnknown_083738E4[i].data[gUnknown_030005A4]; + return gSpecialObjectReflectionPaletteSets[i].reflectionPaletteTags[sCurrentReflectionType]; } } + return 0x11FF; } @@ -7554,12 +7568,12 @@ void GroundEffect_MoveOnLongGrass(struct EventObject *eventObj, struct Sprite *s void GroundEffect_WaterReflection(struct EventObject *eventObj, struct Sprite *sprite) { - SetUpReflection(eventObj, sprite, 0); + InitObjectReflectionSprite(eventObj, sprite, 0); } void GroundEffect_IceReflection(struct EventObject *eventObj, struct Sprite *sprite) { - SetUpReflection(eventObj, sprite, 1); + InitObjectReflectionSprite(eventObj, sprite, 1); } void GroundEffect_FlowingWater(struct EventObject *eventObj, struct Sprite *sprite) @@ -7655,8 +7669,12 @@ void GroundEffect_JumpOnTallGrass(struct EventObject *eventObj, struct Sprite *s gFieldEffectArguments[3] = 2; FieldEffectStart(FLDEFF_JUMP_TALL_GRASS); - spriteId = sub_8126FF0( - eventObj->localId, eventObj->mapNum, eventObj->mapGroup, eventObj->currentCoords.x, eventObj->currentCoords.y); + spriteId = FindTallGrassFieldEffectSpriteId( + eventObj->localId, + eventObj->mapNum, + eventObj->mapGroup, + eventObj->currentCoords.x, + eventObj->currentCoords.y); if (spriteId == MAX_SPRITES) GroundEffect_SpawnOnTallGrass(eventObj, sprite); diff --git a/src/field_effect.c b/src/field_effect.c index b5e2c13c6..90c11b8c3 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -306,9 +306,11 @@ bool8 (*const gUnknown_0839F364[])(struct Task *, struct EventObject *, struct S sub_80877D4 }; -void (*const gUnknown_0839F378[])(struct Task *) = { - sub_80878F4, - sub_8087914 +static void EscapeRopeFieldEffect_Step0(struct Task *); +static void EscapeRopeFieldEffect_Step1(struct Task *); +void (*const gEscapeRopeFieldEffectFuncs[])(struct Task *) = { + EscapeRopeFieldEffect_Step0, + EscapeRopeFieldEffect_Step1 }; static u8 sActiveList[32]; @@ -1935,7 +1937,7 @@ bool8 sub_80877AC(struct Task *task, struct EventObject *eventObject, struct Spr return FALSE; } -void sub_80878C4(u8); +static void DoEscapeRopeFieldEffect(u8); void mapldr_080859D4(void); bool8 sub_80877D4(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite) @@ -1968,34 +1970,42 @@ void sub_808788C(struct Sprite *sprite) } } -void sub_80878A8(void) +void StartEscapeRopeFieldEffect(void) { ScriptContext2_Enable(); FreezeEventObjects(); - CreateTask(sub_80878C4, 0x50); + CreateTask(DoEscapeRopeFieldEffect, 0x50); } -void sub_80878C4(u8 taskId) +static void DoEscapeRopeFieldEffect(u8 taskId) { - gUnknown_0839F378[gTasks[taskId].data[0]](&gTasks[taskId]); + gEscapeRopeFieldEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); } -void sub_80878F4(struct Task *task) +static void EscapeRopeFieldEffect_Step0(struct Task *task) { task->data[0]++; task->data[14] = 64; task->data[15] = GetPlayerFacingDirection(); } -void sub_8087914(struct Task *task) +static void EscapeRopeFieldEffect_Step1(struct Task *task) { struct EventObject *eventObject; - u8 unknown_0839F380[5] = {1, 3, 4, 2, 1}; + u8 clockwiseDirections[5] = { + DIR_SOUTH, + DIR_WEST, + DIR_EAST, + DIR_NORTH, + DIR_SOUTH, + }; + if (task->data[14] != 0 && (--task->data[14]) == 0) { TryFadeOutOldMapMusic(); WarpFadeScreen(); } + eventObject = &gEventObjects[gPlayerAvatar.eventObjectId]; if (!EventObjectIsMovementOverridden(eventObject) || EventObjectClearHeldMovementIfFinished(eventObject)) { @@ -2006,14 +2016,14 @@ void sub_8087914(struct Task *task) WarpIntoMap(); gFieldCallback = mapldr_080859D4; SetMainCallback2(CB2_LoadMap); - DestroyTask(FindTaskIdByFunc(sub_80878C4)); - } else if (task->data[1] == 0 || (--task->data[1]) == 0) + DestroyTask(FindTaskIdByFunc(DoEscapeRopeFieldEffect)); + } + else if (task->data[1] == 0 || (--task->data[1]) == 0) { - EventObjectSetHeldMovement(eventObject, GetFaceDirectionMovementAction(unknown_0839F380[eventObject->facingDirection])); + EventObjectSetHeldMovement(eventObject, GetFaceDirectionMovementAction(clockwiseDirections[eventObject->facingDirection])); if (task->data[2] < 12) - { task->data[2]++; - } + task->data[1] = 8 >> (task->data[2] >> 2); } } diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 73082bdb7..84f340b35 100644 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -11,148 +11,153 @@ #include "constants/field_effects.h" #include "constants/songs.h" -static void sub_81269E0(struct Sprite *); -static void npc_pal_op(struct EventObject *eventObject, struct Sprite *sprite); -static void npc_pal_op_A(struct EventObject *, u8); -static void npc_pal_op_B(struct EventObject *, u8); -static void sub_81275A0(struct Sprite *); -static void sub_81275C4(struct Sprite *); -static void sub_8127DA0(struct Sprite *); -static void sub_8127DD0(struct Sprite *); -static void sub_8127E30(struct Sprite *); +static void UpdateObjectReflectionSprite(struct Sprite *); +static void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite *sprite); +static void LoadObjectHighBridgeReflectionPalette(struct EventObject *, u8); +static void LoadObjectRegularReflectionPalette(struct EventObject *, u8); +static void FadeFootprintsTireTracks_Step0(struct Sprite *); +static void FadeFootprintsTireTracks_Step1(struct Sprite *); +static void UpdateAshFieldEffect_Step0(struct Sprite *); +static void UpdateAshFieldEffect_Step1(struct Sprite *); +static void UpdateAshFieldEffect_Step2(struct Sprite *); static void sub_812882C(struct Sprite *, u8, u8); -static void sub_81278D8(struct Sprite *); +static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *); static void sub_8127FD4(struct EventObject *, struct Sprite *); static void sub_812800C(struct EventObject *, struct Sprite *); static void sub_81280A0(struct EventObject *, struct Sprite *, struct Sprite *); static void sub_8128174(struct Sprite *); static u32 ShowDisguiseFieldEffect(u8, u8, u8); -void SetUpReflection(struct EventObject *eventObject, struct Sprite *sprite, bool8 flag) +void InitObjectReflectionSprite(struct EventObject *eventObject, struct Sprite *sprite, bool8 stillReflection) { - struct Sprite *newSprite; + struct Sprite *reflectionSprite; - newSprite = &gSprites[obj_unfreeze(sprite, sprite->pos1.x, sprite->pos1.y, 0x98)]; - newSprite->callback = sub_81269E0; - newSprite->oam.priority = 3; - newSprite->oam.paletteNum = gUnknown_0830FD14[newSprite->oam.paletteNum]; - newSprite->usingSheet = TRUE; - newSprite->anims = gDummySpriteAnimTable; - StartSpriteAnim(newSprite, 0); - newSprite->affineAnims = gDummySpriteAffineAnimTable; - newSprite->affineAnimBeginning = TRUE; - newSprite->subspriteMode = 0; - newSprite->data[0] = sprite->data[0]; - newSprite->data[1] = eventObject->localId; - newSprite->data[7] = flag; - npc_pal_op(eventObject, newSprite); - if (!flag) - { - newSprite->oam.affineMode = 1; - } + reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->pos1.x, sprite->pos1.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); + reflectionSprite->affineAnims = gDummySpriteAffineAnimTable; + reflectionSprite->affineAnimBeginning = TRUE; + reflectionSprite->subspriteMode = SUBSPRITES_OFF; + reflectionSprite->data[0] = sprite->data[0]; + reflectionSprite->data[1] = eventObject->localId; + reflectionSprite->data[7] = stillReflection; + LoadObjectReflectionPalette(eventObject, reflectionSprite); + + if (!stillReflection) + reflectionSprite->oam.affineMode = ST_OAM_AFFINE_NORMAL; } -static s16 sub_81268D0(struct EventObject *eventObject) +static s16 GetReflectionVerticalOffset(struct EventObject *eventObject) { return GetEventObjectGraphicsInfo(eventObject->graphicsId)->height - 2; } -static void npc_pal_op(struct EventObject *eventObject, struct Sprite *sprite) +static void LoadObjectReflectionPalette(struct EventObject *eventObject, struct Sprite *sprite) { - u8 whichElement; - u16 unk_8041e2c[] = {0x0c, 0x1c, 0x2c}; + u8 bridgeType; + u16 bridgeReflectionVerticalOffsets[] = { 12, 28, 44 }; sprite->data[2] = 0; - if (!GetEventObjectGraphicsInfo(eventObject->graphicsId)->disableReflectionPaletteLoad && ((whichElement = MetatileBehavior_GetBridgeType(eventObject->previousMetatileBehavior)) || (whichElement = MetatileBehavior_GetBridgeType(eventObject->currentMetatileBehavior)))) + if (!GetEventObjectGraphicsInfo(eventObject->graphicsId)->disableReflectionPaletteLoad && ((bridgeType = MetatileBehavior_GetBridgeType(eventObject->previousMetatileBehavior)) || (bridgeType = MetatileBehavior_GetBridgeType(eventObject->currentMetatileBehavior)))) { - sprite->data[2] = unk_8041e2c[whichElement - 1]; - npc_pal_op_A(eventObject, sprite->oam.paletteNum); + sprite->data[2] = bridgeReflectionVerticalOffsets[bridgeType - 1]; + LoadObjectHighBridgeReflectionPalette(eventObject, sprite->oam.paletteNum); } else { - npc_pal_op_B(eventObject, sprite->oam.paletteNum); + LoadObjectRegularReflectionPalette(eventObject, sprite->oam.paletteNum); } } -static void npc_pal_op_B(struct EventObject *eventObject, u8 paletteNum) +static void LoadObjectRegularReflectionPalette(struct EventObject *eventObject, u8 paletteIndex) { const struct EventObjectGraphicsInfo *graphicsInfo; graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); - if (graphicsInfo->paletteTag2 != 0x11ff) + if (graphicsInfo->bridgeReflectionPaletteTag != 0x11ff) { if (graphicsInfo->paletteSlot == 0) { - npc_load_two_palettes__no_record(graphicsInfo->paletteTag1, paletteNum); + LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); } else if (graphicsInfo->paletteSlot == 10) { - npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, paletteNum); + LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex); } else { - pal_patch_for_npc(npc_paltag_by_palslot(paletteNum), paletteNum); + PatchObjectPalette(GetObjectPaletteTag(paletteIndex), paletteIndex); } - UpdateSpritePaletteWithWeather(paletteNum); + UpdateSpritePaletteWithWeather(paletteIndex); } } -static void npc_pal_op_A(struct EventObject *eventObject, u8 paletteNum) +// 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 EventObject *eventObject, u8 paletteNum) { const struct EventObjectGraphicsInfo *graphicsInfo; graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); - if (graphicsInfo->paletteTag2 != 0x11ff) + if (graphicsInfo->bridgeReflectionPaletteTag != 0x11ff) { - pal_patch_for_npc(graphicsInfo->paletteTag2, paletteNum); + PatchObjectPalette(graphicsInfo->bridgeReflectionPaletteTag, paletteNum); UpdateSpritePaletteWithWeather(paletteNum); } } -static void sub_81269E0(struct Sprite *sprite) +static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite) { struct EventObject *eventObject; - struct Sprite *oldSprite; + struct Sprite *mainSprite; - eventObject = &gEventObjects[sprite->data[0]]; - oldSprite = &gSprites[eventObject->spriteId]; - if (!eventObject->active || !eventObject->hasReflection || eventObject->localId != sprite->data[1]) + eventObject = &gEventObjects[reflectionSprite->data[0]]; + mainSprite = &gSprites[eventObject->spriteId]; + if (!eventObject->active || !eventObject->hasReflection || eventObject->localId != reflectionSprite->data[1]) { - sprite->inUse = FALSE; + reflectionSprite->inUse = FALSE; } else { - sprite->oam.paletteNum = gUnknown_0830FD14[oldSprite->oam.paletteNum]; - sprite->oam.shape = oldSprite->oam.shape; - sprite->oam.size = oldSprite->oam.size; - sprite->oam.matrixNum = oldSprite->oam.matrixNum | 0x10; - sprite->oam.tileNum = oldSprite->oam.tileNum; - sprite->subspriteTables = oldSprite->subspriteTables; - sprite->subspriteTableNum = oldSprite->subspriteTableNum; - sprite->invisible = oldSprite->invisible; - sprite->pos1.x = oldSprite->pos1.x; - sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(eventObject) + sprite->data[2]; - sprite->centerToCornerVecX = oldSprite->centerToCornerVecX; - sprite->centerToCornerVecY = oldSprite->centerToCornerVecY; - sprite->pos2.x = oldSprite->pos2.x; - sprite->pos2.y = -oldSprite->pos2.y; - sprite->coordOffsetEnabled = oldSprite->coordOffsetEnabled; - if (sprite->data[7] == FALSE) + 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 | 0x10; + reflectionSprite->oam.tileNum = mainSprite->oam.tileNum; + reflectionSprite->subspriteTables = mainSprite->subspriteTables; + reflectionSprite->subspriteTableNum = mainSprite->subspriteTableNum; + reflectionSprite->invisible = mainSprite->invisible; + reflectionSprite->pos1.x = mainSprite->pos1.x; + // reflectionSprite->data[2] holds an additional vertical offset, used by the high bridges on Route 120 + reflectionSprite->pos1.y = mainSprite->pos1.y + GetReflectionVerticalOffset(eventObject) + reflectionSprite->data[2]; + reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX; + reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY; + reflectionSprite->pos2.x = mainSprite->pos2.x; + reflectionSprite->pos2.y = -mainSprite->pos2.y; + reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled; + + // Check if the reflection is not still. + if (reflectionSprite->data[7] == FALSE) { - sprite->oam.matrixNum = 0; - if (oldSprite->oam.matrixNum & 0x8) - { - sprite->oam.matrixNum = 1; - } + // 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 & 0x8) + reflectionSprite->oam.matrixNum = 1; } } } -u8 sub_8126B54(void) +u8 CreateWarpArrowSprite(void) { u8 spriteId; struct Sprite *sprite; - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8] /*gFieldEffectSpriteTemplate_Arrow*/, 0, 0, 0x52); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8], 0, 0, 0x52); if (spriteId != MAX_SPRITES) { sprite = &gSprites[spriteId]; @@ -163,12 +168,12 @@ u8 sub_8126B54(void) return spriteId; } -void objid_set_invisible(u8 spriteId) +void SetSpriteInvisible(u8 spriteId) { gSprites[spriteId].invisible = TRUE; } -void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) +void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y) { s16 x2; s16 y2; @@ -184,18 +189,18 @@ void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y) sprite->invisible = FALSE; sprite->data[0] = x; sprite->data[1] = y; - StartSpriteAnim(sprite, animNum - 1); + StartSpriteAnim(sprite, direction - 1); } } -const u8 gUnknown_08401E32[] = { +const u8 gShadowEffectTemplateIds[] = { 0, 1, 2, 3 }; -const u16 gUnknown_08401E36[] = { +const u16 gShadowVerticalOffsets[] = { 4, 4, 4, @@ -210,19 +215,19 @@ u32 FldEff_Shadow(void) eventObjectId = GetEventObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]); graphicsInfo = GetEventObjectGraphicsInfo(gEventObjects[eventObjectId].graphicsId); - spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gUnknown_08401E32[graphicsInfo->shadowSize]], 0, 0, 0x94); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94); if (spriteId != MAX_SPRITES) { gSprites[spriteId].coordOffsetEnabled = TRUE; gSprites[spriteId].data[0] = gFieldEffectArguments[0]; gSprites[spriteId].data[1] = gFieldEffectArguments[1]; gSprites[spriteId].data[2] = gFieldEffectArguments[2]; - gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize]; + gSprites[spriteId].data[3] = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize]; } return 0; } -void oamc_shadow(struct Sprite *sprite) +void UpdateShadowFieldEffect(struct Sprite *sprite) { u8 eventObjectId; struct EventObject *eventObject; @@ -239,7 +244,12 @@ void oamc_shadow(struct Sprite *sprite) sprite->oam.priority = linkedSprite->oam.priority; sprite->pos1.x = linkedSprite->pos1.x; sprite->pos1.y = linkedSprite->pos1.y + sprite->data[3]; - if (!eventObject->active || !eventObject->hasShadow || MetatileBehavior_IsPokeGrass(eventObject->currentMetatileBehavior) || MetatileBehavior_IsSurfableWaterOrUnderwater(eventObject->currentMetatileBehavior) || MetatileBehavior_IsSurfableWaterOrUnderwater(eventObject->previousMetatileBehavior) || MetatileBehavior_IsReflective(eventObject->currentMetatileBehavior) || MetatileBehavior_IsReflective(eventObject->previousMetatileBehavior)) + if (!eventObject->active || !eventObject->hasShadow + || MetatileBehavior_IsPokeGrass(eventObject->currentMetatileBehavior) + || MetatileBehavior_IsSurfableWaterOrUnderwater(eventObject->currentMetatileBehavior) + || MetatileBehavior_IsSurfableWaterOrUnderwater(eventObject->previousMetatileBehavior) + || MetatileBehavior_IsReflective(eventObject->currentMetatileBehavior) + || MetatileBehavior_IsReflective(eventObject->previousMetatileBehavior)) { FieldEffectStop(sprite, FLDEFF_SHADOW); } @@ -276,7 +286,7 @@ u32 FldEff_TallGrass(void) return 0; } -void unc_grass_normal(struct Sprite *sprite) +void UpdateTallGrassFieldEffect(struct Sprite *sprite) { u8 mapNum; u8 mapGroup; @@ -305,14 +315,12 @@ void unc_grass_normal(struct Sprite *sprite) { eventObject = &gEventObjects[eventObjectId]; if ((eventObject->currentCoords.x != sprite->data[1] || eventObject->currentCoords.y != sprite->data[2]) && (eventObject->previousCoords.x != sprite->data[1] || eventObject->previousCoords.y != sprite->data[2])) - { sprite->data[7] = TRUE; - } + metatileBehavior = 0; if (sprite->animCmdIndex == 0) - { metatileBehavior = 4; - } + UpdateEventObjectSpriteVisibility(sprite, 0); sub_812882C(sprite, sprite->data[0], metatileBehavior); } @@ -336,7 +344,7 @@ u32 FldEff_JumpTallGrass(void) return 0; } -u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) +u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) { struct Sprite *sprite; u8 i; @@ -346,12 +354,11 @@ u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y) if (gSprites[i].inUse) { sprite = &gSprites[i]; - if (sprite->callback == unc_grass_normal && (x == sprite->data[1] && y == sprite->data[2]) && (localId == (u8)(sprite->data[3] >> 8) && mapNum == (sprite->data[3] & 0xFF) && mapGroup == sprite->data[4])) - { + if (sprite->callback == UpdateTallGrassFieldEffect && (x == sprite->data[1] && y == sprite->data[2]) && (localId == (u8)(sprite->data[3] >> 8) && mapNum == (sprite->data[3] & 0xFF) && mapGroup == sprite->data[4])) return i; - } } } + return MAX_SPRITES; } @@ -385,7 +392,7 @@ u32 FldEff_LongGrass(void) return 0; } -void unc_grass_tall(struct Sprite *sprite) +void UpdateLongGrassFieldEffect(struct Sprite *sprite) { u8 mapNum; u8 mapGroup; @@ -464,7 +471,7 @@ u32 FldEff_ShortGrass(void) return 0; } -void sub_8127334(struct Sprite *sprite) +void UpdateShortGrassFieldEffect(struct Sprite *sprite) { u8 eventObjectId; s16 x; @@ -554,29 +561,29 @@ u32 FldEff_BikeTireTracks(void) return spriteId; } -void (*const gUnknown_08401E40[])(struct Sprite *) = { - sub_81275A0, - sub_81275C4 +void (*const gFadeFootprintsTireTracksFuncs[])(struct Sprite *) = { + FadeFootprintsTireTracks_Step0, + FadeFootprintsTireTracks_Step1 }; -void sub_8127584(struct Sprite *sprite) +void UpdateFootprintsTireTracksFieldEffect(struct Sprite *sprite) { - gUnknown_08401E40[sprite->data[0]](sprite); + gFadeFootprintsTireTracksFuncs[sprite->data[0]](sprite); } -static void sub_81275A0(struct Sprite *sprite) +static void FadeFootprintsTireTracks_Step0(struct Sprite *sprite) { + // Wait 40 frames before the flickering starts. if (++sprite->data[1] > 40) - { sprite->data[0] = 1; - } + UpdateEventObjectSpriteVisibility(sprite, FALSE); } -static void sub_81275C4(struct Sprite *sprite) +static void FadeFootprintsTireTracks_Step1(struct Sprite *sprite) { sprite->invisible ^= 1; - sprite->data[1] ++; + sprite->data[1]++; UpdateEventObjectSpriteVisibility(sprite, sprite->invisible); if (sprite->data[1] > 56) { @@ -612,7 +619,7 @@ u32 FldEff_Splash(void) return 0; } -void sub_81276B4(struct Sprite *sprite) +void UpdateSplashFieldEffect(struct Sprite *sprite) { u8 eventObjectId; @@ -679,7 +686,7 @@ u32 FldEff_FeetInFlowingWater(void) { graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); sprite = &gSprites[spriteId]; - sprite->callback = sub_81278D8; + sprite->callback = UpdateFeetInFlowingWaterFieldEffect; sprite->coordOffsetEnabled = TRUE; sprite->oam.priority = gSprites[eventObject->spriteId].oam.priority; sprite->data[0] = gFieldEffectArguments[0]; @@ -693,7 +700,7 @@ u32 FldEff_FeetInFlowingWater(void) return 0; } -static void sub_81278D8(struct Sprite *sprite) +static void UpdateFeetInFlowingWaterFieldEffect(struct Sprite *sprite) { u8 eventObjectId; struct Sprite *linkedSprite; @@ -763,7 +770,7 @@ u32 FldEff_HotSpringsWater(void) return 0; } -void sub_8127A7C(struct Sprite *sprite) +void UpdateHotSpringsWaterFieldEffect(struct Sprite *sprite) { u8 eventObjectId; const struct EventObjectGraphicsInfo *graphicsInfo; @@ -852,7 +859,7 @@ u32 FldEff_Unknown22(void) return 0; } -void ash(s16 x, s16 y, u16 c, s16 d) +void StartAshFieldEffect(s16 x, s16 y, u16 c, s16 d) { gFieldEffectArguments[0] = x; gFieldEffectArguments[1] = y; @@ -887,28 +894,26 @@ u32 FldEff_Ash(void) return 0; } -void (*const gUnknown_08401E48[])(struct Sprite *) = { - sub_8127DA0, - sub_8127DD0, - sub_8127E30 +void (*const gAshFieldEffectFuncs[])(struct Sprite *) = { + UpdateAshFieldEffect_Step0, + UpdateAshFieldEffect_Step1, + UpdateAshFieldEffect_Step2 }; -void sub_8127D84(struct Sprite *sprite) +void UpdateAshFieldEffect(struct Sprite *sprite) { - gUnknown_08401E48[sprite->data[0]](sprite); + gAshFieldEffectFuncs[sprite->data[0]](sprite); } -static void sub_8127DA0(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step0(struct Sprite *sprite) { sprite->invisible = TRUE; sprite->animPaused = TRUE; if (--sprite->data[4] == 0) - { sprite->data[0] = 1; - } } -static void sub_8127DD0(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step1(struct Sprite *sprite) { sprite->invisible = FALSE; sprite->animPaused = FALSE; @@ -918,13 +923,11 @@ static void sub_8127DD0(struct Sprite *sprite) sprite->data[0] = 2; } -static void sub_8127E30(struct Sprite *sprite) +static void UpdateAshFieldEffect_Step2(struct Sprite *sprite) { UpdateEventObjectSpriteVisibility(sprite, FALSE); if (sprite->animEnded) - { FieldEffectStop(sprite, FLDEFF_ASH); - } } u32 FldEff_SurfBlob(void) @@ -979,7 +982,7 @@ static u8 sub_8127F70(struct Sprite *sprite) return (sprite->data[0] & 0xF00) >> 8; } -void sub_8127F7C(struct Sprite *sprite) +void UpdateSurfBlobFieldEffect(struct Sprite *sprite) { struct EventObject *eventObject; struct Sprite *linkedSprite; @@ -994,11 +997,16 @@ void sub_8127F7C(struct Sprite *sprite) static void sub_8127FD4(struct EventObject *eventObject, struct Sprite *sprite) { - u8 unk_8041E54[] = {0, 0, 1, 2, 3}; + u8 surfBlobDirectionAnims[] = { + 0, // DIR_NONE + 0, // DIR_SOUTH + 1, // DIR_NORTH + 2, // DIR_WEST + 3, // DIR_EAST + }; + if (sub_8127F64(sprite) == 0) - { - StartSpriteAnimIfDifferent(sprite, unk_8041E54[eventObject->movementDirection]); - } + StartSpriteAnimIfDifferent(sprite, surfBlobDirectionAnims[eventObject->movementDirection]); } #ifdef NONMATCHING @@ -1211,7 +1219,7 @@ u32 FldEff_SandPile(void) return 0; } -void sub_81282E0(struct Sprite *sprite) +void UpdateSandPileFieldEffect(struct Sprite *sprite) { u8 eventObjectId; s16 x; @@ -1257,7 +1265,7 @@ u32 FldEff_Bubbles(void) return 0; } -void sub_8128410(struct Sprite *sprite) +void UpdateBubblesFieldEffect(struct Sprite *sprite) { sprite->data[0] += 0x80; sprite->data[0] &= 0x100; @@ -1289,19 +1297,19 @@ u32 FldEff_BerryTreeGrowthSparkle(void) u32 FldEff_TreeDisguise(void) { - return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 0x18, 0x04); + return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 24, 4); } u32 FldEff_MountainDisguise(void) { - return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 0x19, 0x03); + return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 25, 3); } u32 FldEff_SandDisguise(void) { - return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 0x1C, 0x02); + return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 28, 2); } static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) @@ -1328,7 +1336,7 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum) return spriteId; } -void sub_81285AC(struct Sprite *sprite) +void UpdateDisguiseFieldEffect(struct Sprite *sprite) { u8 eventObjectId; const struct EventObjectGraphicsInfo *graphicsInfo; @@ -1406,27 +1414,25 @@ u32 FldEff_Sparkle(void) return 0; } -void sub_8128774(struct Sprite *sprite) +void UpdateSparkleFieldEffect(struct Sprite *sprite) { if (sprite->data[0] == 0) { if (sprite->animEnded) { sprite->invisible = TRUE; - sprite->data[0] ++; + sprite->data[0]++; } + if (sprite->data[0] == 0) - { return; - } } - if (++ sprite->data[1] >= 35) - { + + if (++sprite->data[1] > 34) FieldEffectStop(sprite, FLDEFF_SPARKLE); - } } -void sub_81287C4(struct Sprite *sprite) +void UpdateJumpLandingFieldEffect(struct Sprite *sprite) { if (sprite->animEnded) { @@ -1439,16 +1445,12 @@ void sub_81287C4(struct Sprite *sprite) } } -void sub_8128800(struct Sprite *sprite) +void WaitFieldEffectSpriteAnim(struct Sprite *sprite) { if (sprite->animEnded) - { FieldEffectStop(sprite, sprite->data[0]); - } else - { UpdateEventObjectSpriteVisibility(sprite, FALSE); - } } #ifdef NONMATCHING diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c index dac26ff32..9a4f5f6cd 100644 --- a/src/field_player_avatar.c +++ b/src/field_player_avatar.c @@ -1142,7 +1142,7 @@ void InitPlayerAvatar(s16 x, s16 y, u8 direction, u8 gender) eventObjectId = SpawnSpecialEventObject(&playerEventObjTemplate); eventObject = &gEventObjects[eventObjectId]; eventObject->isPlayer = 1; - eventObject->warpArrowSpriteId = sub_8126B54(); + eventObject->warpArrowSpriteId = CreateWarpArrowSprite(); EventObjectTurn(eventObject, direction); ClearPlayerAvatarInfo(); gPlayerAvatar.runningState = NOT_MOVING; @@ -1199,11 +1199,11 @@ static void sub_8059D60(struct EventObject *eventObject) x = eventObject->currentCoords.x; y = eventObject->currentCoords.y; MoveCoords(direction, &x, &y); - sub_8126BC4(eventObject->warpArrowSpriteId, direction, x, y); + ShowWarpArrowSprite(eventObject->warpArrowSpriteId, direction, x, y); return; } } - objid_set_invisible(eventObject->warpArrowSpriteId); + SetSpriteInvisible(eventObject->warpArrowSpriteId); } /* Strength */ diff --git a/src/field_tasks.c b/src/field_tasks.c index ea2058965..8b736c949 100644 --- a/src/field_tasks.c +++ b/src/field_tasks.c @@ -713,11 +713,11 @@ void PerStepCallback_8069F64(u8 taskId) { if (MapGridGetMetatileIdAt(x, y) == 0x20a) { - ash(x, y, 0x212, 4); + StartAshFieldEffect(x, y, 0x212, 4); } else { - ash(x, y, 0x206, 4); + StartAshFieldEffect(x, y, 0x206, 4); } if (CheckBagHasItem(ITEM_SOOT_SACK, 1)) { @@ -782,24 +782,29 @@ void PerStepCallback_806A07C(u8 taskId) } } -const u16 gUnknown_08376418[] = {0xe8, 0xeb, 0xea, 0xe9}; +static const u16 sMuddySlopeAnimationMetatiles[] = {0xe8, 0xeb, 0xea, 0xe9}; -void sub_806A18C(s16 *data, s16 x, s16 y) +static void SetMuddySlopeAnimatedMetatile(s16 *counter, s16 x, s16 y) { u16 tile; - if ((--data[0]) == 0) - { + if (--(*counter) == 0) tile = 0xe8; - } else - { - tile = gUnknown_08376418[data[0] / 8]; - } + tile = sMuddySlopeAnimationMetatiles[*counter / 8]; + MapGridSetMetatileIdAt(x, y, tile); CurrentMapDrawMetatileAt(x, y); + + // Immediately set the metatile back to the original muddy slope metatile + // but don't actualy draw it on the screen. This is so the underlying metatile + // behvior on the map is not changed. MapGridSetMetatileIdAt(x, y, 0xe8); } +// Checks for the player traversing on muddy slope metatiles. +// When the player walks or slides on one, it executes a short animation to +// make it look like a small mudslide. A maximum of 4 mudslide animations can +// exist simultaneously. void Task_MuddySlope(u8 taskId) { s16 x, y, x2, y2; @@ -827,7 +832,7 @@ void Task_MuddySlope(u8 taskId) data[3] = y; if (MetatileBehavior_IsMuddySlope(MapGridGetMetatileBehaviorAt(x, y))) { - for (i=4; i<14; i+=3) + for (i = 4; i < 14; i += 3) { if (data[i] == 0) { @@ -841,6 +846,7 @@ void Task_MuddySlope(u8 taskId) } break; } + if (gCamera.field_0 && mapIndices != data[0]) { data[0] = mapIndices; @@ -852,13 +858,14 @@ void Task_MuddySlope(u8 taskId) x2 = 0; y2 = 0; } - for (i=4; i<14; i+=3) + + for (i = 4; i < 14; i += 3) { if (data[i]) { data[i + 1] -= x2; data[i + 2] -= y2; - sub_806A18C(&data[i], data[i + 1], data[i + 2]); + SetMuddySlopeAnimatedMetatile(&data[i], data[i + 1], data[i + 2]); } } } diff --git a/src/hof_pc.c b/src/hof_pc.c index 3ff9eaaea..b9407bace 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -8,7 +8,6 @@ #include "task.h" extern void (*gFieldCallback)(void); -extern void (*gUnknown_0300485C)(void); static void ReshowPCMenuAfterHallOfFamePC(void); static void Task_WaitForPaletteFade(u8); diff --git a/src/item_menu.c b/src/item_menu.c index 5fbfb775e..71516c0a4 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -38,14 +38,13 @@ #include "ewram.h" // External stuff -extern void gpu_pal_allocator_reset__manage_upper_four(void); +extern void FreeAndReserveObjectSpritePalettes(void); extern void SetVerticalScrollIndicatorPriority(); extern void sub_809D104(u16 *, u16, u16, const u8 *, u16, u16, u16, u16); extern void PauseVerticalScrollIndicator(); extern u8 sub_80F9284(void); extern void sub_808B5B4(); extern u8 sub_80F92F4(); -extern void sub_80C9C7C(u8); extern void pal_fill_black(void); extern bool8 IsWeatherNotFadingIn(void); extern u8 sub_80F931C(); @@ -140,7 +139,7 @@ EWRAM_DATA static s8 gUnknown_0203855B = 0; EWRAM_DATA static s8 gUnknown_0203855C = 0; EWRAM_DATA u16 gSpecialVar_ItemId = 0; EWRAM_DATA u8 gCurSelectedItemSlotIndex = 0; -EWRAM_DATA u8 gUnknown_02038561 = 0; +EWRAM_DATA u8 gPokemonItemUseType = 0; EWRAM_DATA static u8 gUnknown_02038562 = 0; EWRAM_DATA static u8 gUnknown_02038563 = 0; EWRAM_DATA static u8 gUnknown_02038564 = 0; @@ -392,7 +391,7 @@ static bool8 SetupBagMultistep(void) gMain.state++; break; case 2: - gpu_pal_allocator_reset__manage_upper_four(); + FreeAndReserveObjectSpritePalettes(); gMain.state++; break; case 3: @@ -2666,7 +2665,7 @@ void HandleItemMenuPaletteFade(u8 taskId) MainCallback cb = (MainCallback)((u16)taskData[8] << 16 | (u16)taskData[9]); SetMainCallback2(cb); - gpu_pal_allocator_reset__manage_upper_four(); + FreeAndReserveObjectSpritePalettes(); DestroyTask(taskId); } } @@ -2701,7 +2700,7 @@ static void HandlePopupMenuAction_UseOnField(u8 taskId) if (sCurrentBagPocket != BAG_POCKET_BERRIES) ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); else - sub_80C9C7C(taskId); + ItemUseOutOfBattle_Berry(taskId); } } } @@ -2925,7 +2924,7 @@ static void HandlePopupMenuAction_Give(u8 taskId) gTasks[taskId].data[8] = (u32)sub_808B020 >> 16; gTasks[taskId].data[9] = (u32)sub_808B020; gTasks[taskId].func = HandleItemMenuPaletteFade; - gUnknown_02038561 = 1; + gPokemonItemUseType = ITEM_USE_GIVE_ITEM; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); } } diff --git a/src/item_use.c b/src/item_use.c index 5037fee88..4e76ea434 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -34,28 +34,35 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "constants/species.h" #include "constants/vars.h" extern void (*gFieldItemUseCallback)(u8); extern void (*gFieldCallback)(void); -extern void (*gUnknown_0300485C)(void); extern void (*gPokemonItemUseCallback)(u8, u16, TaskFunc); -extern u8 gUnknown_02038561; +extern u8 gPokemonItemUseType; extern u8 gLastFieldPokeMenuOpened; extern u8 gBankInMenu; -extern u8 gUnknown_081A1654[]; -extern u8 gUnknown_081A168F[]; +extern u8 S_PlantBerryTreeFromBag[]; +extern u8 S_WaterBerryTreeFromBag[]; extern u16 gBattlerPartyIndexes[]; extern u16 gBattleTypeFlags; +static void ItemUseOnFieldCB_Berry(u8); +static void ItemUseOnFieldCB_WailmerPail(u8); +static void StartTeachMonTMHMMove(u8); +static void DisplayTeachMonTMHMYesNoChoice(u8); +static void BootTMHM(u8); +static void WaitButtonPressAndDisplayTMHMInfo(u8); + static const u8 gSSTidalBetaString[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); static const u8 gSSTidalBetaString2[] = _("この チケットで ふねに のりほうだい\nはやく のってみたいな"); -static const u8 *const gUnknown_083D61DC[2] = +static const u8 *const sSSTidalBetaStrings[] = { gSSTidalBetaString, gSSTidalBetaString2, @@ -70,9 +77,9 @@ static const MainCallback gExitToOverworldFuncList[] = static const u8 gItemFinderDirections[] = { DIR_NORTH, DIR_EAST, DIR_SOUTH, DIR_WEST }; -static const struct YesNoFuncTable gUnknown_083D61F4 = +static const struct YesNoFuncTable sTeachMonTMHMYesNoActions = { - .yesFunc = sub_80C9FC0, + .yesFunc = StartTeachMonTMHMMove, .noFunc = CleanUpItemMenuMessage, }; @@ -80,7 +87,7 @@ void ExecuteSwitchToOverworldFromItemUse(u8 taskId) { u8 taskData; - if (gSpecialVar_ItemId == 0xAF) + if (gSpecialVar_ItemId == ITEM_ENIGMA_BERRY) taskData = gTasks[taskId].data[15] - 1; else taskData = ItemId_GetType(gSpecialVar_ItemId) - 1; @@ -115,7 +122,7 @@ void SetUpItemUseOnFieldCallback(u8 taskId) } } -void HandleDeniedItemUseMessage(u8 var1, u8 playerMenuStatus, const u8 *text) +static void HandleDeniedItemUseMessage(u8 taskId, u8 playerMenuStatus, const u8 *text) { StringExpandPlaceholders(gStringVar4, text); @@ -123,22 +130,22 @@ void HandleDeniedItemUseMessage(u8 var1, u8 playerMenuStatus, const u8 *text) { case 0: // Item Menu Menu_EraseWindowRect(0, 13, 13, 20); - DisplayItemMessageOnField(var1, gStringVar4, CleanUpItemMenuMessage, 1); + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1); break; default: // Field - DisplayItemMessageOnField(var1, gStringVar4, CleanUpOverworldMessage, 0); + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpOverworldMessage, 0); break; } } -void DisplayDadsAdviceCannotUseItemMessage(u8 var1, u8 playerMenuStatus) +void DisplayDadsAdviceCannotUseItemMessage(u8 taskId, u8 playerMenuStatus) { - HandleDeniedItemUseMessage(var1, playerMenuStatus, gOtherText_DadsAdvice); + HandleDeniedItemUseMessage(taskId, playerMenuStatus, gOtherText_DadsAdvice); } -void DisplayCantGetOffBikeItemMessage(u8 var1, u8 playerMenuStatus) +void DisplayCantGetOffBikeItemMessage(u8 taskId, u8 playerMenuStatus) { - HandleDeniedItemUseMessage(var1, playerMenuStatus, gOtherText_CantGetOffBike); + HandleDeniedItemUseMessage(taskId, playerMenuStatus, gOtherText_CantGetOffBike); } u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId) @@ -177,7 +184,7 @@ void ItemUseOutOfBattle_Bike(u8 taskId) PlayerGetDestCoords(&x, &y); tileBehavior = MapGridGetMetatileBehaviorAt(x, y); - if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE // on cycling road? + if (FlagGet(FLAG_SYS_CYCLING_ROAD) == TRUE || MetatileBehavior_IsVerticalRail(tileBehavior) == TRUE || MetatileBehavior_IsHorizontalRail(tileBehavior) == TRUE || MetatileBehavior_IsIsolatedVerticalRail(tileBehavior) == TRUE @@ -200,9 +207,9 @@ void ItemUseOutOfBattle_Bike(u8 taskId) void ItemUseOnFieldCB_Bike(u8 taskId) { if (ItemId_GetSecondaryId(gSpecialVar_ItemId) == 0) - GetOnOffBike(2); + GetOnOffBike(PLAYER_AVATAR_FLAG_MACH_BIKE); if (ItemId_GetSecondaryId(gSpecialVar_ItemId) == 1) - GetOnOffBike(4); + GetOnOffBike(PLAYER_AVATAR_FLAG_ACRO_BIKE); ScriptUnfreezeEventObjects(); ScriptContext2_Disable(); @@ -256,11 +263,11 @@ void ItemUseOnFieldCB_Rod(u8 taskId) DestroyTask(taskId); } -void ItemUseOutOfBattle_Itemfinder(u8 var) +void ItemUseOutOfBattle_Itemfinder(u8 taskId) { IncrementGameStat(GAME_STAT_USED_ITEMFINDER); gFieldItemUseCallback = (void *)ItemUseOnFieldCB_Itemfinder; - SetUpItemUseOnFieldCallback(var); + SetUpItemUseOnFieldCallback(taskId); } void ItemUseOnFieldCB_Itemfinder(u8 taskId) @@ -743,7 +750,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId) if (!gTasks[taskId].data[2]) { - Menu_EraseWindowRect(0, 0xD, 0xD, 0x14); + Menu_EraseWindowRect(0, 13, 13, 20); DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1); } else @@ -752,16 +759,16 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId) } } -void sub_80C9BB8(u8 var) +static void SSTicketWaitForAButtonPress(u8 taskId) { if (gMain.newKeys & A_BUTTON) - CleanUpItemMenuMessage(var); + CleanUpItemMenuMessage(taskId); } -void sub_80C9BD8(u8 var) +static void SSTicketWaitForAButtonPress2(u8 taskId) { if (gMain.newKeys & A_BUTTON) - CleanUpOverworldMessage(var); + CleanUpOverworldMessage(taskId); } // unused @@ -769,20 +776,20 @@ void ItemUseOutOfBattle_SSTicket(u8 taskId) { if (gTasks[taskId].data[2] == 0) { - Menu_EraseWindowRect(0, 0xD, 0xD, 0x14); - DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gSpecialVar_ItemId)], sub_80C9BB8, 1); + Menu_EraseWindowRect(0, 13, 13, 20); + DisplayItemMessageOnField(taskId, sSSTidalBetaStrings[ItemId_GetSecondaryId(gSpecialVar_ItemId)], SSTicketWaitForAButtonPress, 1); } else { - DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gSpecialVar_ItemId)], sub_80C9BD8, 0); + DisplayItemMessageOnField(taskId, sSSTidalBetaStrings[ItemId_GetSecondaryId(gSpecialVar_ItemId)], SSTicketWaitForAButtonPress2, 0); } } -void sub_80C9C7C(u8 taskId) +void ItemUseOutOfBattle_Berry(u8 taskId) { if (IsPlayerFacingUnplantedSoil() == TRUE) { - gFieldItemUseCallback = sub_80C9D00; + gFieldItemUseCallback = ItemUseOnFieldCB_Berry; gFieldCallback = ExecuteItemUseFromBlackPalette; gTasks[taskId].data[8] = (u32)c2_exit_to_overworld_2_switch >> 16; gTasks[taskId].data[9] = (u32)c2_exit_to_overworld_2_switch; @@ -795,11 +802,11 @@ void sub_80C9C7C(u8 taskId) } } -void sub_80C9D00(u8 taskId) +static void ItemUseOnFieldCB_Berry(u8 taskId) { RemoveBagItem(gSpecialVar_ItemId, 1); ScriptContext2_Enable(); - ScriptContext1_SetupScript(gUnknown_081A1654); + ScriptContext1_SetupScript(S_PlantBerryTreeFromBag); DestroyTask(taskId); } @@ -807,7 +814,7 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId) { if (TryToWaterBerryTree() == TRUE) { - gFieldItemUseCallback = sub_80C9D74; + gFieldItemUseCallback = ItemUseOnFieldCB_WailmerPail; SetUpItemUseOnFieldCallback(taskId); } else @@ -816,23 +823,23 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId) } } -void sub_80C9D74(u8 taskId) +static void ItemUseOnFieldCB_WailmerPail(u8 taskId) { ScriptContext2_Enable(); - ScriptContext1_SetupScript(gUnknown_081A168F); + ScriptContext1_SetupScript(S_WaterBerryTreeFromBag); DestroyTask(taskId); } -void sub_80C9D98(u8 taskId) +static void SetPokemonItemUseAndFadeOut(u8 taskId) { - gUnknown_02038561 = 0; + gPokemonItemUseType = ITEM_USE_SINGLE_MON; ItemMenu_ConfirmNormalFade(taskId); } void ItemUseOutOfBattle_Medicine(u8 taskId) { gPokemonItemUseCallback = UseMedicine; - sub_80C9D98(taskId); + SetPokemonItemUseAndFadeOut(taskId); } void ItemUseOutOfBattle_SacredAsh(u8 taskId) @@ -841,74 +848,74 @@ void ItemUseOutOfBattle_SacredAsh(u8 taskId) gLastFieldPokeMenuOpened = 0; - for (i = 0; i < 6; i++) + for (i = 0; i < PARTY_SIZE; i++) { - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) { gLastFieldPokeMenuOpened = i; break; } } - gPokemonItemUseCallback = sub_8070048; - gUnknown_02038561 = 4; + gPokemonItemUseCallback = DoSacredAshItemEffect; + gPokemonItemUseType = ITEM_USE_ALL_MONS; ItemMenu_ConfirmNormalFade(taskId); } void ItemUseOutOfBattle_PPRecovery(u8 taskId) { gPokemonItemUseCallback = DoPPRecoveryItemEffect; - sub_80C9D98(taskId); + SetPokemonItemUseAndFadeOut(taskId); } void ItemUseOutOfBattle_PPUp(u8 taskId) { gPokemonItemUseCallback = DoPPUpItemEffect; - sub_80C9D98(taskId); + SetPokemonItemUseAndFadeOut(taskId); } void ItemUseOutOfBattle_RareCandy(u8 taskId) { gPokemonItemUseCallback = DoRareCandyItemEffect; - sub_80C9D98(taskId); + SetPokemonItemUseAndFadeOut(taskId); } void ItemUseOutOfBattle_TMHM(u8 taskId) { - Menu_EraseWindowRect(0, 0xD, 0xD, 0x14); + Menu_EraseWindowRect(0, 13, 13, 20); if (gSpecialVar_ItemId >= ITEM_HM01_CUT) - DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM + DisplayItemMessageOnField(taskId, gOtherText_BootedHM, BootTMHM, 1); // HM else - DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM + DisplayItemMessageOnField(taskId, gOtherText_BootedTM, BootTMHM, 1); // TM } -void sub_80C9EE4(u8 taskId) +static void BootTMHM(u8 taskId) { PlaySE(SE_PC_LOGON); - gTasks[taskId].func = sub_80C9F10; + gTasks[taskId].func = WaitButtonPressAndDisplayTMHMInfo; } -void sub_80C9F10(u8 taskId) +static void WaitButtonPressAndDisplayTMHMInfo(u8 taskId) { if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) { StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_ItemId)]); StringExpandPlaceholders(gStringVar4, gOtherText_ContainsMove); - DisplayItemMessageOnField(taskId, gStringVar4, sub_80C9F80, 1); + DisplayItemMessageOnField(taskId, gStringVar4, DisplayTeachMonTMHMYesNoChoice, 1); } } -void sub_80C9F80(u8 var) +static void DisplayTeachMonTMHMYesNoChoice(u8 taskId) { DisplayYesNoMenu(7, 7, 1); sub_80A3FA0(gBGTilemapBuffers[1], 8, 8, 5, 4, 1); - DoYesNoFuncWithChoice(var, &gUnknown_083D61F4); + DoYesNoFuncWithChoice(taskId, &sTeachMonTMHMYesNoActions); } -void sub_80C9FC0(u8 var) +static void StartTeachMonTMHMMove(u8 taskId) { gPokemonItemUseCallback = TeachMonTMMove; - sub_80C9D98(var); + SetPokemonItemUseAndFadeOut(taskId); } static void PrepareItemUseMessage(void) @@ -919,27 +926,27 @@ static void PrepareItemUseMessage(void) StringExpandPlaceholders(gStringVar4, gOtherText_UsedItem); } -void ItemUseOutOfBattle_Repel(u8 var) +void ItemUseOutOfBattle_Repel(u8 taskId) { if (VarGet(VAR_REPEL_STEP_COUNT) == 0) { VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gSpecialVar_ItemId)); PrepareItemUseMessage(); - DisplayItemMessageOnField(var, gStringVar4, CleanUpItemMenuMessage, 1); + DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1); } else { - DisplayItemMessageOnField(var, gOtherText_RepelLingers, CleanUpItemMenuMessage, 1); + DisplayItemMessageOnField(taskId, gOtherText_RepelLingers, CleanUpItemMenuMessage, 1); } } -void sub_80CA07C(void) +static void sub_80CA07C(void) { sub_80A3E0C(); CopyItemName(gSpecialVar_ItemId, gStringVar2); } -void sub_80CA098(u8 taskId) +static void PlayBlackWhiteFluteSound(u8 taskId) { if(++gTasks[taskId].data[15] > 7) { @@ -956,7 +963,7 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) FlagClear(FLAG_SYS_ENC_DOWN_ITEM); sub_80CA07C(); StringExpandPlaceholders(gStringVar4, gOtherText_UsedFlute); - gTasks[taskId].func = sub_80CA098; + gTasks[taskId].func = PlayBlackWhiteFluteSound; gTasks[taskId].data[15] = 0; } else if (gSpecialVar_ItemId == ITEM_BLACK_FLUTE) @@ -965,7 +972,7 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) FlagClear(FLAG_SYS_ENC_UP_ITEM); sub_80CA07C(); StringExpandPlaceholders(gStringVar4, gOtherText_UsedRepel); - gTasks[taskId].func = sub_80CA098; + gTasks[taskId].func = PlayBlackWhiteFluteSound; gTasks[taskId].data[15] = 0; } } @@ -973,11 +980,11 @@ void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId) void task08_080A1C44(u8 taskId) { ResetInitialPlayerAvatarState(); - sub_80878A8(); + StartEscapeRopeFieldEffect(); DestroyTask(taskId); } -void EscapeRopeCallback(u8 taskId) +static void ItemUseOnFieldCB_EscapeRope(u8 taskId) { Overworld_ResetStateAfterDigEscRope(); PrepareItemUseMessage(); @@ -997,7 +1004,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId) { if (CanUseEscapeRopeOnCurrMap() == TRUE) { - gFieldItemUseCallback = EscapeRopeCallback; + gFieldItemUseCallback = ItemUseOnFieldCB_EscapeRope; SetUpItemUseOnFieldCallback(taskId); } else @@ -1006,30 +1013,30 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId) } } -void ItemUseOutOfBattle_EvolutionStone(u8 var) +void ItemUseOutOfBattle_EvolutionStone(u8 taskId) { gPokemonItemUseCallback = DoEvolutionStoneItemEffect; - sub_80C9D98(var); + SetPokemonItemUseAndFadeOut(taskId); } -void ItemUseInBattle_PokeBall(u8 var) +void ItemUseInBattle_PokeBall(u8 taskId) { if (PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon? { RemoveBagItem(gSpecialVar_ItemId, 1); - sub_80A7094(var); + sub_80A7094(taskId); } else { - Menu_EraseWindowRect(0, 0xD, 0xD, 0x14); - DisplayItemMessageOnField(var, gOtherText_BoxIsFull, CleanUpItemMenuMessage, 1); + Menu_EraseWindowRect(0, 13, 13, 20); + DisplayItemMessageOnField(taskId, gOtherText_BoxIsFull, CleanUpItemMenuMessage, 1); } } -void sub_80CA294(u8 var) +void sub_80CA294(u8 taskId) { if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - sub_80A7094(var); + sub_80A7094(taskId); } void sub_80CA2BC(u8 taskId) @@ -1046,7 +1053,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId) { u16 partyId = gBattlerPartyIndexes[gBankInMenu]; - Menu_EraseWindowRect(0, 0xD, 0xD, 0x14); + Menu_EraseWindowRect(0, 13, 13, 20); if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gSpecialVar_ItemId, partyId, 0) != FALSE) { @@ -1064,7 +1071,7 @@ void sub_80CA394(u8 taskId) if (!gPaletteFade.active) { sub_8094E4C(); - gpu_pal_allocator_reset__manage_upper_four(); + FreeAndReserveObjectSpritePalettes(); DestroyTask(taskId); } } @@ -1083,7 +1090,7 @@ void ItemUseInBattle_Medicine(u8 var) void unref_sub_80CA410(u8 var) { - gPokemonItemUseCallback = sub_8070048; + gPokemonItemUseCallback = DoSacredAshItemEffect; sub_80CA3C0(var); } @@ -1095,7 +1102,7 @@ void ItemUseInBattle_PPRecovery(u8 var) void unref_sub_80CA448(u8 var) { - Menu_EraseWindowRect(0, 0xD, 0xD, 0x14); + Menu_EraseWindowRect(0, 13, 13, 20); if (ExecuteTableBasedItemEffect__(0, gSpecialVar_ItemId, 0) == FALSE) { @@ -1112,9 +1119,9 @@ void unref_sub_80CA448(u8 var) void ItemUseInBattle_Escape(u8 taskId) { - Menu_EraseWindowRect(0, 0xD, 0xD, 0x14); + Menu_EraseWindowRect(0, 13, 13, 20); - if((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) + if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER) == FALSE) { PrepareItemUseMessage(); DisplayItemMessageOnField(taskId, gStringVar4, sub_80A7094, 1); diff --git a/src/overworld.c b/src/overworld.c index d993d6cac..f6dea1271 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -1805,7 +1805,7 @@ void sub_8054D4C(u32 a1) ScanlineEffect_Clear(); ResetCameraUpdateInfo(); InstallCameraPanAheadCallback(); - sub_805C7C4(0); + InitEventObjectPalettes(0); FieldEffectActiveListClear(); InitFieldMessageBox(); StartWeather(); @@ -1819,7 +1819,7 @@ void sub_8054D90(void) { gTotalCameraPixelOffsetX = 0; gTotalCameraPixelOffsetY = 0; - sub_805AA98(); + ResetEventObjects(); TrySpawnEventObjects(0, 0); mapheader_run_first_tag4_script_list_match(); } @@ -1830,7 +1830,7 @@ void mli4_mapscripts_and_other(void) struct InitialPlayerAvatarState *initialPlayerAvatarState; gTotalCameraPixelOffsetX = 0; gTotalCameraPixelOffsetY = 0; - sub_805AA98(); + ResetEventObjects(); sav1_camera_get_focus_coords(&x, &y); initialPlayerAvatarState = GetInitialPlayerAvatarState(); InitPlayerAvatar(x, y, initialPlayerAvatarState->direction, gSaveBlock2.playerGender); diff --git a/src/party_menu.c b/src/party_menu.c index a4b7b0ffa..52c637879 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -4456,7 +4456,7 @@ bool8 IsBlueYellowRedFlute(u16 item) return FALSE; } -void sub_8070048(u8 taskId, u16 item, TaskFunc func) +void DoSacredAshItemEffect(u8 taskId, u16 item, TaskFunc func) { ewram1C000.unk10 = func; ewram1C000.unk4 = taskId; @@ -4473,7 +4473,7 @@ void sub_8070088(u8 taskId) u8 taskId2; gTasks[taskId].func = TaskDummy; - if (GetMonData(&gPlayerParty[ewram1C000.primarySelectedMonIndex], MON_DATA_SPECIES) == 0) + if (GetMonData(&gPlayerParty[ewram1C000.primarySelectedMonIndex], MON_DATA_SPECIES) == SPECIES_NONE) { gTasks[taskId].func = sub_80701DC; } diff --git a/src/player_pc.c b/src/player_pc.c index e52666a50..ce3dda3c7 100644 --- a/src/player_pc.c +++ b/src/player_pc.c @@ -37,7 +37,7 @@ static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL; static u8 gPcItemMenuOptionsNum; -extern u8 gUnknown_02038561; +extern u8 gPokemonItemUseType; // event scripts extern u8 gBrendanHouse_TurnPCOff[]; @@ -1290,7 +1290,7 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId) // Mailbox_DoGiveMailPokeMenu if(!gPaletteFade.active) { SetMainCallback2(sub_808B020); - gUnknown_02038561 = 3; + gPokemonItemUseType = ITEM_USE_GIVE_MAIL; DestroyTask(taskId); } } diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c index bafa32afa..23020383d 100644 --- a/src/pokemon_menu.c +++ b/src/pokemon_menu.c @@ -52,7 +52,7 @@ extern u8 gUnknown_020384F0; extern u8 gUnknown_0202E8F4; extern u8 gUnknown_0202E8F5; extern u8 gUnknown_0202E8F6; -extern u8 gUnknown_02038561; +extern u8 gPokemonItemUseType; extern u16 gUnknown_0202E8F8; extern void (*gPokemonItemUseCallback)(u8 taskID, u16 itemID, TaskFunc func); extern TaskFunc gUnknown_03005CF0; @@ -975,7 +975,7 @@ static void sub_808AF80(void) { if (InitPartyMenu() == TRUE) { - if (gUnknown_02038561 == 0) + if (gPokemonItemUseType == ITEM_USE_SINGLE_MON) { switch (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId)) { @@ -1002,19 +1002,19 @@ static void sub_808AF80(void) void sub_808B020(void) { gPaletteFade.bufferTransferDisabled = 1; - switch (gUnknown_02038561) + switch (gPokemonItemUseType) { - case 0: + case ITEM_USE_SINGLE_MON: if (CheckIfItemIsTMHMOrEvolutionStone(gSpecialVar_ItemId) == 1) SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 20); else SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 3); break; - case 4: + case ITEM_USE_ALL_MONS: SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B1EC, 0xFF); break; - case 1: - case 3: + case ITEM_USE_GIVE_ITEM: + case ITEM_USE_GIVE_MAIL: SetPartyMenuSettings(PARTY_MENU_TYPE_STANDARD, 0, sub_808B0C0, 4); break; } @@ -1034,14 +1034,14 @@ void sub_808B0C0(u8 taskID) else { sub_806D5A4(); - if (gUnknown_02038561 == 0) + if (gPokemonItemUseType == ITEM_USE_SINGLE_MON) gPokemonItemUseCallback(taskID, gSpecialVar_ItemId, sub_808B224); - if (gUnknown_02038561 == 1) + if (gPokemonItemUseType == ITEM_USE_GIVE_ITEM) { PlaySE(SE_SELECT); PartyMenuTryGiveMonHeldItem(taskID, gSpecialVar_ItemId, sub_808B2EC); } - if (gUnknown_02038561 == 3) + if (gPokemonItemUseType == ITEM_USE_GIVE_MAIL) { PlaySE(SE_SELECT); PartyMenuTryGiveMonMail(taskID, sub_808B2B4); @@ -1052,9 +1052,9 @@ void sub_808B0C0(u8 taskID) gLastFieldPokeMenuOpened = sub_806CA38(taskID); PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0)); - if (gUnknown_02038561 == 0 || gUnknown_02038561 == 1) + if (gPokemonItemUseType == ITEM_USE_SINGLE_MON || gPokemonItemUseType == ITEM_USE_GIVE_ITEM) gTasks[taskID].func = sub_808B25C; - if (gUnknown_02038561 == 3) + if (gPokemonItemUseType == ITEM_USE_GIVE_MAIL) gTasks[taskID].func = sub_808B2B4; break; } diff --git a/src/secret_base.c b/src/secret_base.c index 632d6845e..5bec7a06d 100644 --- a/src/secret_base.c +++ b/src/secret_base.c @@ -110,7 +110,6 @@ const u8 gUnknown_083D13EC[] = { 0x23,0x24,0xF,0x1F,0x21,0x2F,0xE,0x14,0x20,0x22,0x0,0x0 }; -extern void *gUnknown_0300485C; extern u8 gUnknown_081A2E14[]; extern u8 UnknownString_81A1BB2[]; extern u8 UnknownString_81A1F67[]; diff --git a/src/sprite.c b/src/sprite.c index a9d84e01a..22b3a6d0f 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -72,7 +72,6 @@ static void JumpToTopOfAffineAnimLoop(u8 matrixNum, struct Sprite *sprite); static void AffineAnimCmd_jump(u8 matrixNum, struct Sprite *sprite); static void AffineAnimCmd_end(u8 matrixNum, struct Sprite *sprite); static void AffineAnimCmd_frame(u8 matrixNum, struct Sprite *sprite); -static void CopyOamMatrix(u8 destMatrixIndex, struct OamMatrix *srcMatrix); static u8 GetSpriteMatrixNum(struct Sprite *sprite); static void SetSpriteOamFlipBits(struct Sprite *sprite, u8 hFlip, u8 vFlip); static void AffineAnimStateRestartAnim(u8 matrixNum); |