summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/berry_tag_screen.c2
-rw-r--r--src/data/field_event_obj/field_effect_object_template_pointers.h4
-rw-r--r--src/data/field_event_obj/field_effect_objects.h106
-rw-r--r--src/event_object_movement.c208
-rw-r--r--src/field_effect.c42
-rw-r--r--src/field_effect_helpers.c298
-rw-r--r--src/field_player_avatar.c6
-rw-r--r--src/field_tasks.c33
-rw-r--r--src/hof_pc.c1
-rw-r--r--src/item_menu.c13
-rw-r--r--src/item_use.c167
-rw-r--r--src/overworld.c6
-rw-r--r--src/party_menu.c4
-rw-r--r--src/player_pc.c4
-rw-r--r--src/pokemon_menu.c24
-rw-r--r--src/secret_base.c1
-rw-r--r--src/sprite.c1
17 files changed, 480 insertions, 440 deletions
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);