summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2018-06-16 14:04:29 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2018-06-16 14:04:29 +0200
commit3bcd30969a8b7ced6e9fa54e1fc0f8447c2983bc (patch)
tree5905e1d11348213b18494870d04d24ffa7629c60 /src
parent7ea5dd7923eb9a44609a6cdaff331f7cd97bb34a (diff)
cut field effect is decompiled and documented
Diffstat (limited to 'src')
-rw-r--r--src/event_obj_lock.c2
-rw-r--r--src/fldeff_cut.c445
-rwxr-xr-xsrc/item_use.c8
-rw-r--r--src/start_menu.c10
4 files changed, 268 insertions, 197 deletions
diff --git a/src/event_obj_lock.c b/src/event_obj_lock.c
index efa498c0f..8c324ea82 100644
--- a/src/event_obj_lock.c
+++ b/src/event_obj_lock.c
@@ -87,7 +87,7 @@ void LockSelectedEventObject(void)
}
}
-void sub_80984F4(void)
+void ScriptUnfreezeEventObjects(void)
{
u8 objectId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[objectId]);
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
index a007c8ca7..615de0202 100644
--- a/src/fldeff_cut.c
+++ b/src/fldeff_cut.c
@@ -1,4 +1,5 @@
#include "global.h"
+#include "fldeff_cut.h"
#include "field_camera.h"
#include "field_effect.h"
#include "event_object_movement.h"
@@ -18,6 +19,19 @@
#include "constants/songs.h"
#include "constants/abilities.h"
+extern bool8 SetLastTalkedObjectInFrontOfPlayer(u8);
+extern u8 oei_task_add(void);
+extern void ScriptUnfreezeEventObjects(void);
+extern bool8 IsMewPlayingHideAndSeek(void);
+
+extern struct MapPosition gPlayerFacingPosition;
+
+extern const u8 Route103_EventScript_290705[];
+extern const u8 FarawayIsland_Interior_EventScript_267EDB[];
+
+extern const u8 gFieldEffectPic_CutGrass[];
+extern const u16 gFieldEffectObjectPalette6[];
+
// tileset 0 as first
#define METATILE_ID_GRASS 0x1
#define METATILE_ID_POKE_GRASS 0xD
@@ -31,7 +45,7 @@
#define METATILE_ID_GRASS_TREE_LEFT 0x1CE
#define METATILE_ID_GRASS_TREE_RIGHT 0x1CF
-#define METATILE_ID_POKE_TALL_GRASS 0x15
+#define METATILE_ID_POKE_LONG_GRASS 0x15
// tileset 6 as second
#define METATILE_ID_POKE_STEP_LAVA_GRASS 0x206
@@ -44,53 +58,24 @@
#define METATILE_ID_ASH 0x218
// tileset 8 as second
-#define METATILE_ID_POKE_TALL_GRASS_START 0x208
-
-#define METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS 0x279
-#define METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS 0x27A
-#define METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS 0x27B
-
-#define METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS 0x281
-#define METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS 0x282
-#define METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS 0x283
-
-extern bool8 SetLastTalkedObjectInFrontOfPlayer(u8);
-extern u8 oei_task_add(void);
+#define METATILE_ID_POKE_LONG_GRASS_START 0x208
-extern struct MapPosition gPlayerFacingPosition;
-extern u8 *gCutGrassSpriteArrayPtr;
+#define METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS 0x279
+#define METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS 0x27A
+#define METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS 0x27B
-extern const u8 Route103_EventScript_290705[];
-extern const u8 gFieldEffectPic_CutGrass[];
-extern const u16 gFieldEffectObjectPalette6[];
+#define METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS 0x281
+#define METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS 0x282
+#define METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS 0x283
+// cut 'square' defines
#define CUT_NORMAL_SIDE 3
#define CUT_NORMAL_AREA CUT_NORMAL_SIDE * CUT_NORMAL_SIDE
-/* P - player
- X - cut area
-
- XXX
- XPX
- XXX
-*/
#define CUT_HYPER_SIDE 5
#define CUT_HYPER_AREA CUT_HYPER_SIDE * CUT_HYPER_SIDE
-/* P - player
- X - cut area
-
- XXXXX
- XXXXX
- XXPXX
- XXXXX
- XXXXX
-*/
-
-IWRAM_DATA u8 gUnknown_03001100;
-IWRAM_DATA u8 gUnknown_03001101;
-IWRAM_DATA u8 gUnknown_03001102;
-IWRAM_DATA u32 fldeff_cut_unused_03001104;
-IWRAM_DATA bool8 gUnknown_03001108[CUT_HYPER_AREA];
+
+#define CUT_SPRITE_ARRAY_COUNT 8
struct HyperCutterUnk
{
@@ -99,7 +84,30 @@ struct HyperCutterUnk
u8 unk2[2];
};
-const struct HyperCutterUnk gUnknown_0857C608[] =
+// this file's functions
+static void FieldCallback_CutTree(void);
+static void FieldCallback_CutGrass(void);
+static void StartCutTreeFieldEffect(void);
+static void StartCutGrassFieldEffect(void);
+static void SetCutGrassMetatile(s16, s16);
+static void SetCutGrassMetatiles(s16, s16);
+static void CutGrassSpriteCallback1(struct Sprite *);
+static void CutGrassSpriteCallback2(struct Sprite *);
+static void CutGrassSpriteCallbackEnd(struct Sprite *);
+static void HandleLongGrassOnHyper(u8, s16, s16);
+
+// IWRAM variables
+static IWRAM_DATA u8 sCutSquareSide;
+static IWRAM_DATA u8 sTileCountFromPlayer_X;
+static IWRAM_DATA u8 sTileCountFromPlayer_Y;
+static IWRAM_DATA u32 sUnused;
+static IWRAM_DATA bool8 sHyperCutTiles[CUT_HYPER_AREA];
+
+// EWRAM variables
+static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL;
+
+// const rom data
+static const struct HyperCutterUnk sHyperCutStruct[] =
{
{-2, -2, {1}},
{-1, -2, {1}},
@@ -119,7 +127,7 @@ const struct HyperCutterUnk gUnknown_0857C608[] =
{2, 2, {9}},
};
-const struct OamData gOamData_CutGrass =
+static const struct OamData sOamData_CutGrass =
{
.y = 0,
.affineMode = 0,
@@ -136,53 +144,43 @@ const struct OamData gOamData_CutGrass =
.affineParam = 0,
};
-const union AnimCmd gSpriteAnim_CutGrass[] =
+static const union AnimCmd sSpriteAnim_CutGrass[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_JUMP(0),
};
-const union AnimCmd *const gSpriteAnimTable_CutGrass[] =
+static const union AnimCmd *const sSpriteAnimTable_CutGrass[] =
{
- gSpriteAnim_CutGrass,
+ sSpriteAnim_CutGrass,
};
-const struct SpriteFrameImage gSpriteImageTable_CutGrass[] =
+static const struct SpriteFrameImage sSpriteImageTable_CutGrass[] =
{
{gFieldEffectPic_CutGrass, 0x20},
};
const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000};
-void FieldCallback_CutTree(void);
-void FieldCallback_CutGrass(void);
-void StartCutTreeFieldEffect(void);
-void StartCutGrassFieldEffect(void);
-void SetCutGrassMetatile(s16, s16);
-void SetCutGrassMetatiles(s16, s16);
-void CutGrassSpriteCallback1(struct Sprite *);
-void CutGrassSpriteCallback2(struct Sprite *);
-void CutGrassSpriteCallbackEnd(struct Sprite *);
-void HandleTallGrassOnHyper(u8, s16, s16);
-
-const struct SpriteTemplate gSpriteTemplate_CutGrass =
+static const struct SpriteTemplate sSpriteTemplate_CutGrass =
{
.tileTag = 0xFFFF,
.paletteTag = 0x1000,
- .oam = &gOamData_CutGrass,
- .anims = gSpriteAnimTable_CutGrass,
- .images = gSpriteImageTable_CutGrass,
+ .oam = &sOamData_CutGrass,
+ .anims = sSpriteAnimTable_CutGrass,
+ .images = sSpriteImageTable_CutGrass,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = CutGrassSpriteCallback1,
};
+// code
bool8 SetUpFieldMove_Cut(void)
{
s16 x, y;
u8 i, j;
u8 tileBehavior;
u8 userAbility;
- bool8 array[CUT_NORMAL_AREA];
+ bool8 cutTiles[CUT_NORMAL_AREA];
bool8 ret;
if (SetLastTalkedObjectInFrontOfPlayer(EVENT_OBJ_GFX_CUTTABLE_TREE) == TRUE)
@@ -198,28 +196,28 @@ bool8 SetUpFieldMove_Cut(void)
userAbility = GetMonAbility(&gPlayerParty[GetCursorSelectionMonId()]);
if (userAbility == ABILITY_HYPER_CUTTER)
{
- gUnknown_03001100 = 5;
- gUnknown_03001101 = 2;
- gUnknown_03001102 = 2;
+ sCutSquareSide = CUT_HYPER_SIDE;
+ sTileCountFromPlayer_X = 2;
+ sTileCountFromPlayer_Y = 2;
}
else
{
- gUnknown_03001100 = 3;
- gUnknown_03001101 = 1;
- gUnknown_03001102 = 1;
+ sCutSquareSide = CUT_NORMAL_SIDE;
+ sTileCountFromPlayer_X = 1;
+ sTileCountFromPlayer_Y = 1;
}
for (i = 0; i < CUT_NORMAL_AREA; i++)
- array[i] = FALSE;
+ cutTiles[i] = FALSE;
for (i = 0; i < CUT_HYPER_AREA; i++)
- gUnknown_03001108[i] = FALSE;
+ sHyperCutTiles[i] = FALSE;
ret = FALSE;
- for (i = 0; i < 3; i++)
+ for (i = 0; i < CUT_NORMAL_SIDE; i++)
{
y = i - 1 + gPlayerFacingPosition.y;
- for (j = 0; j < 3; j++)
+ for (j = 0; j < CUT_NORMAL_SIDE; j++)
{
x = j - 1 + gPlayerFacingPosition.x;
if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
@@ -229,23 +227,23 @@ bool8 SetUpFieldMove_Cut(void)
|| MetatileBehavior_IsAshGrass(tileBehavior) == TRUE)
{
// Standing in front of grass.
- gUnknown_03001108[6 + (i * 5) + j] = TRUE;
+ sHyperCutTiles[6 + (i * 5) + j] = TRUE;
ret = TRUE;
}
if (MapGridIsImpassableAt(x, y) == TRUE)
{
- array[i * 3 + j] = FALSE;
+ cutTiles[i * 3 + j] = FALSE;
}
else
{
- array[i * 3 + j] = TRUE;
+ cutTiles[i * 3 + j] = TRUE;
if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
- gUnknown_03001108[6 + (i * 5) + j] = TRUE;
+ sHyperCutTiles[6 + (i * 5) + j] = TRUE;
}
}
else
{
- array[i * 3 + j] = FALSE;
+ cutTiles[i * 3 + j] = FALSE;
}
}
}
@@ -260,45 +258,45 @@ bool8 SetUpFieldMove_Cut(void)
}
else
{
- bool8 r7;
+ bool8 tileCuttable;
for (i = 0; i < 16; i++)
{
- x = gPlayerFacingPosition.x + gUnknown_0857C608[i].x;
- y = gPlayerFacingPosition.y + gUnknown_0857C608[i].y;
- r7 = TRUE;
+ x = gPlayerFacingPosition.x + sHyperCutStruct[i].x;
+ y = gPlayerFacingPosition.y + sHyperCutStruct[i].y;
+ tileCuttable = TRUE;
j = 0;
while (1)
{
- if (gUnknown_0857C608[i].unk2[j] == 0)
+ if (sHyperCutStruct[i].unk2[j] == 0)
break;
- if (array[(u8)(gUnknown_0857C608[i].unk2[j] - 1)] == FALSE)
+ if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE)
{
- r7 = FALSE;
+ tileCuttable = FALSE;
break;
}
if (++j >= 2)
break;
}
- if (r7 == TRUE)
+ if (tileCuttable == TRUE)
{
if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
{
- u8 r6 = ((gUnknown_0857C608[i].y * 5) + 12) + (gUnknown_0857C608[i].x);
+ u8 tileArrayId = ((sHyperCutStruct[i].y * 5) + 12) + (sHyperCutStruct[i].x);
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE
|| MetatileBehavior_IsAshGrass(tileBehavior) == TRUE)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gPostMenuFieldCallback = FieldCallback_CutGrass;
- gUnknown_03001108[r6] = r7;
+ sHyperCutTiles[tileArrayId] = TRUE;
ret = TRUE;
}
else
{
if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
- gUnknown_03001108[r6] = TRUE;
+ sHyperCutTiles[tileArrayId] = TRUE;
}
}
}
@@ -315,7 +313,7 @@ bool8 SetUpFieldMove_Cut(void)
}
}
-void FieldCallback_CutGrass(void)
+static void FieldCallback_CutGrass(void)
{
FieldEffectStart(FLDEFF_USE_CUT_ON_GRASS);
gFieldEffectArguments[0] = GetCursorSelectionMonId();
@@ -331,7 +329,7 @@ bool8 FldEff_UseCutOnGrass(void)
return FALSE;
}
-void FieldCallback_CutTree(void)
+static void FieldCallback_CutTree(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
ScriptContext1_SetupScript(Route103_EventScript_290705);
@@ -347,7 +345,7 @@ bool8 FldEff_UseCutOnTree(void)
return FALSE;
}
-void StartCutGrassFieldEffect(void)
+static void StartCutGrassFieldEffect(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_GRASS);
FieldEffectStart(FLDEFF_CUT_GRASS);
@@ -359,9 +357,9 @@ bool8 FldEff_CutGrass(void)
u8 tileBehavior;
u8 i;
- for (i = 0, PlaySE(SE_W015), PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); i < 25; i++)
+ for (i = 0, PlaySE(SE_W015), PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); i < CUT_HYPER_AREA; i++)
{
- if (gUnknown_03001108[i] == TRUE)
+ if (sHyperCutTiles[i] == TRUE)
{
s8 xAdd = (i % 5) - 2;
s8 yAdd = (i / 5) - 2;
@@ -374,30 +372,30 @@ bool8 FldEff_CutGrass(void)
}
}
- SetCutGrassMetatiles(gPlayerFacingPosition.x - gUnknown_03001101, gPlayerFacingPosition.y + (~gUnknown_03001102));
+ SetCutGrassMetatiles(gPlayerFacingPosition.x - sTileCountFromPlayer_X, gPlayerFacingPosition.y - (1 + sTileCountFromPlayer_Y));
DrawWholeMapView();
- gCutGrassSpriteArrayPtr = AllocZeroed(8);
+ sCutGrassSpriteArrayPtr = AllocZeroed(CUT_SPRITE_ARRAY_COUNT);
// populate sprite ID array
- for (i = 0; i < 8; i++)
+ for (i = 0; i < CUT_SPRITE_ARRAY_COUNT; i++)
{
- gCutGrassSpriteArrayPtr[i] = CreateSprite(&gSpriteTemplate_CutGrass,
+ sCutGrassSpriteArrayPtr[i] = CreateSprite(&sSpriteTemplate_CutGrass,
gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0);
- gSprites[gCutGrassSpriteArrayPtr[i]].data[2] = 32 * i;
+ gSprites[sCutGrassSpriteArrayPtr[i]].data[2] = 32 * i;
}
return FALSE;
}
// set map grid metatile depending on x, y
-void SetCutGrassMetatile(s16 x, s16 y)
+static void SetCutGrassMetatile(s16 x, s16 y)
{
s32 metatileId = MapGridGetMetatileIdAt(x, y);
switch (metatileId)
{
- case METATILE_ID_POKE_TALL_GRASS_START:
- case METATILE_ID_POKE_TALL_GRASS:
+ case METATILE_ID_POKE_LONG_GRASS_START:
+ case METATILE_ID_POKE_LONG_GRASS:
case METATILE_ID_POKE_GRASS:
MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS);
break;
@@ -407,14 +405,14 @@ void SetCutGrassMetatile(s16 x, s16 y)
case METATILE_ID_POKE_GRASS_TREE_RIGHT:
MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_RIGHT);
break;
- case METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS:
- MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS);
+ case METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
break;
- case METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS:
- MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS);
+ case METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
break;
- case METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS:
- MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS);
+ case METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
break;
case METATILE_ID_POKE_STEP_LAVA_GRASS:
case METATILE_ID_POKE_LAVA_GRASS:
@@ -432,92 +430,92 @@ void SetCutGrassMetatile(s16 x, s16 y)
enum
{
- TALL_GRASS_NONE,
- TALL_GRASS_FIELD,
- TALL_GRASS_BASE_LEFT,
- TALL_GRASS_BASE_CENTER,
- TALL_GRASS_BASE_RIGHT
+ LONG_GRASS_NONE,
+ LONG_GRASS_FIELD,
+ LONG_GRASS_BASE_LEFT,
+ LONG_GRASS_BASE_CENTER,
+ LONG_GRASS_BASE_RIGHT
};
-u8 GetTallGrassCaseAt(s16 x, s16 y)
+static u8 GetLongGrassCaseAt(s16 x, s16 y)
{
u16 metatileId = MapGridGetMetatileIdAt(x, y);
if (metatileId == METATILE_ID_GRASS)
- return TALL_GRASS_FIELD;
- else if (metatileId == METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS)
- return TALL_GRASS_BASE_LEFT;
- else if (metatileId == METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS)
- return TALL_GRASS_BASE_CENTER;
- else if (metatileId == METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS)
- return TALL_GRASS_BASE_RIGHT;
+ return LONG_GRASS_FIELD;
+ else if (metatileId == METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS)
+ return LONG_GRASS_BASE_LEFT;
+ else if (metatileId == METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS)
+ return LONG_GRASS_BASE_CENTER;
+ else if (metatileId == METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS)
+ return LONG_GRASS_BASE_RIGHT;
else
- return TALL_GRASS_NONE;
+ return LONG_GRASS_NONE;
}
-void SetCutGrassMetatiles(s16 x, s16 y)
+static void SetCutGrassMetatiles(s16 x, s16 y)
{
s16 i;
- s16 lowerY = y + gUnknown_03001100;
+ s16 lowerY = y + sCutSquareSide;
- for (i = 0; i < gUnknown_03001100; i++)
+ for (i = 0; i < sCutSquareSide; i++)
{
s16 currentX = x + i;
- if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID_POKE_TALL_GRASS)
+ if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID_POKE_LONG_GRASS)
{
- switch (GetTallGrassCaseAt(currentX, y + 1))
+ switch (GetLongGrassCaseAt(currentX, y + 1))
{
- case TALL_GRASS_FIELD:
- MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_POKE_TALL_GRASS_START);
+ case LONG_GRASS_FIELD:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_POKE_LONG_GRASS_START);
break;
- case TALL_GRASS_BASE_LEFT:
- MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
break;
- case TALL_GRASS_BASE_CENTER:
- MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
break;
- case TALL_GRASS_BASE_RIGHT:
- MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_RIGHT:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
break;
}
}
if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID_GRASS)
{
- if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_POKE_TALL_GRASS_START)
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_POKE_LONG_GRASS_START)
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_GRASS);
- if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS);
- if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS);
- if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
}
}
- if (gUnknown_03001100 == CUT_HYPER_SIDE)
+ if (sCutSquareSide == CUT_HYPER_SIDE)
{
- HandleTallGrassOnHyper(0, x, y);
- HandleTallGrassOnHyper(1, x, y);
+ HandleLongGrassOnHyper(0, x, y);
+ HandleLongGrassOnHyper(1, x, y);
}
}
-void HandleTallGrassOnHyper(u8 caseId, s16 x, s16 y)
+static void HandleLongGrassOnHyper(u8 caseId, s16 x, s16 y)
{
s16 newX;
bool8 arr[3];
if (caseId == 0)
{
- arr[0] = gUnknown_03001108[5];
- arr[1] = gUnknown_03001108[10];
- arr[2] = gUnknown_03001108[15];
+ arr[0] = sHyperCutTiles[5];
+ arr[1] = sHyperCutTiles[10];
+ arr[2] = sHyperCutTiles[15];
newX = x;
}
else if (caseId == 1)
{
- arr[0] = gUnknown_03001108[9];
- arr[1] = gUnknown_03001108[14];
- arr[2] = gUnknown_03001108[19];
+ arr[0] = sHyperCutTiles[9];
+ arr[1] = sHyperCutTiles[14];
+ arr[2] = sHyperCutTiles[19];
newX = x + 4;
}
else // invalid case
@@ -527,69 +525,69 @@ void HandleTallGrassOnHyper(u8 caseId, s16 x, s16 y)
if (arr[0] == TRUE)
{
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_TALL_GRASS_START)
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_LONG_GRASS_START)
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_GRASS);
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS);
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS);
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
}
if (arr[1] == TRUE)
{
- if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID_POKE_TALL_GRASS)
+ if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID_POKE_LONG_GRASS)
{
- switch (GetTallGrassCaseAt(newX, y + 3))
+ switch (GetLongGrassCaseAt(newX, y + 3))
{
- case TALL_GRASS_FIELD:
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_POKE_TALL_GRASS_START);
+ case LONG_GRASS_FIELD:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_POKE_LONG_GRASS_START);
break;
- case TALL_GRASS_BASE_LEFT:
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
break;
- case TALL_GRASS_BASE_CENTER:
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
break;
- case TALL_GRASS_BASE_RIGHT:
- MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_RIGHT:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
break;
}
}
- if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_POKE_TALL_GRASS_START)
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_POKE_LONG_GRASS_START)
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_GRASS);
- if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS);
- if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS);
- if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS)
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
}
if (arr[2] == TRUE)
{
- if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_TALL_GRASS)
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_LONG_GRASS)
{
- switch (GetTallGrassCaseAt(newX, y + 4))
+ switch (GetLongGrassCaseAt(newX, y + 4))
{
- case TALL_GRASS_FIELD:
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_POKE_TALL_GRASS_START);
+ case LONG_GRASS_FIELD:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_POKE_LONG_GRASS_START);
break;
- case TALL_GRASS_BASE_LEFT:
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
break;
- case TALL_GRASS_BASE_CENTER:
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
break;
- case TALL_GRASS_BASE_RIGHT:
- MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS);
+ case LONG_GRASS_BASE_RIGHT:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
break;
}
}
}
}
-void CutGrassSpriteCallback1(struct Sprite *sprite)
+static void CutGrassSpriteCallback1(struct Sprite *sprite)
{
sprite->data[0] = 8;
sprite->data[1] = 0;
@@ -597,7 +595,7 @@ void CutGrassSpriteCallback1(struct Sprite *sprite)
sprite->callback = CutGrassSpriteCallback2;
}
-void CutGrassSpriteCallback2(struct Sprite *sprite)
+static void CutGrassSpriteCallback2(struct Sprite *sprite)
{
sprite->pos2.x = Sin(sprite->data[2], sprite->data[0]);
sprite->pos2.y = Cos(sprite->data[2], sprite->data[0]);
@@ -611,3 +609,76 @@ void CutGrassSpriteCallback2(struct Sprite *sprite)
else
sprite->callback = CutGrassSpriteCallbackEnd; // done rotating the grass, execute clean up function
}
+
+static void CutGrassSpriteCallbackEnd(struct Sprite *sprite)
+{
+ u8 i;
+
+ for (i = 1; i < CUT_SPRITE_ARRAY_COUNT; i++)
+ DestroySprite(&gSprites[sCutGrassSpriteArrayPtr[i]]);
+
+ FieldEffectStop(&gSprites[sCutGrassSpriteArrayPtr[0]], FLDEFF_CUT_GRASS);
+ FREE_AND_SET_NULL(sCutGrassSpriteArrayPtr);
+ ScriptUnfreezeEventObjects();
+ ScriptContext2_Disable();
+
+ if (IsMewPlayingHideAndSeek() == TRUE)
+ ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_267EDB);
+}
+
+void sub_80D423C(s16 x, s16 y)
+{
+ u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (MetatileBehavior_IsLongGrass_Duplicate(metatileBehavior))
+ {
+ switch (GetLongGrassCaseAt(x, y + 1))
+ {
+ case LONG_GRASS_FIELD:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_POKE_LONG_GRASS_START);
+ break;
+ case LONG_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
+ break;
+ case LONG_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
+ break;
+ case LONG_GRASS_BASE_RIGHT:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
+ break;
+ }
+ }
+}
+
+void sub_80D42B8(s16 x, s16 y)
+{
+ if (MapGridGetMetatileIdAt(x, y) == METATILE_ID_GRASS)
+ {
+ u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y + 1);
+ if (MetatileBehavior_IsLongGrassSouthEdge(metatileBehavior))
+ {
+ s32 metatileId = MapGridGetMetatileIdAt(x, y + 1);
+ switch (metatileId)
+ {
+ case METATILE_ID_POKE_LONG_GRASS_START:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_GRASS);
+ break;
+ case METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
+ break;
+ case METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
+ break;
+ case METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS:
+ MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
+ break;
+ }
+ }
+ }
+}
+
+static void StartCutTreeFieldEffect(void)
+{
+ PlaySE(SE_W015);
+ FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE);
+ EnableBothScriptContexts();
+}
diff --git a/src/item_use.c b/src/item_use.c
index 96f63ee3e..5bbc1d50e 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -39,7 +39,7 @@ extern void sub_81C5B14(u8 taskId);
extern u8 gText_DadsAdvice[];
extern u8 gText_CantDismountBike[];
extern void sub_8197434(u8 a, u8 b);
-extern void sub_80984F4(void);
+extern void ScriptUnfreezeEventObjects(void);
extern void ItemUseOutOfBattle_TMHM(u8 a);
extern void ItemUseOutOfBattle_EvolutionStone(u8 b);
extern void bag_menu_mail_related(void);
@@ -197,7 +197,7 @@ void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId)
{
sub_8197434(0, 1);
DestroyTask(taskId);
- sub_80984F4();
+ ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
}
@@ -252,7 +252,7 @@ void ItemUseOnFieldCB_Bike(u8 taskId)
GetOnOffBike(2);
else
GetOnOffBike(4);
- sub_80984F4();
+ ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
DestroyTask(taskId);
}
@@ -358,7 +358,7 @@ void sub_80FD504(u8 taskId)
void sub_80FD5CC(u8 taskId)
{
sub_8197434(0, 1);
- sub_80984F4();
+ ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
DestroyTask(taskId);
}
diff --git a/src/start_menu.c b/src/start_menu.c
index 6371acff0..5900cced1 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -90,7 +90,7 @@ extern void sub_80C4DDC(void (*)(void));
extern void sub_80C51C4(void (*)(void));
extern void sub_80C4E74(u8, void (*)(void));
extern void sub_81C4EFC(void);
-extern void sub_80984F4(void);
+extern void ScriptUnfreezeEventObjects(void);
extern void sub_81A9EC8(void);
extern void save_serialize_map(void);
extern void sub_81A9E90(void);
@@ -773,7 +773,7 @@ static bool8 StartMenuBattlePyramidRetireCallback(void)
void sub_809FDD4(void) // Called from battle_frontier_2.s
{
sub_8197DF8(0, FALSE);
- sub_80984F4();
+ ScriptUnfreezeEventObjects();
CreateStartMenuTask(sub_809FA34);
ScriptContext2_Enable();
}
@@ -815,7 +815,7 @@ static bool8 SaveCallback(void)
case SAVE_SUCCESS:
case SAVE_ERROR: // Close start menu
sub_8197DF8(0, TRUE);
- sub_80984F4();
+ ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
sub_81A9EC8();
return TRUE;
@@ -852,7 +852,7 @@ static bool8 BattlePyramidRetireCallback(void)
return FALSE;
case SAVE_CANCELED: // Yes (Retire from battle pyramid)
sub_8197DF8(0, TRUE);
- sub_80984F4();
+ ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88);
return TRUE;
@@ -1409,7 +1409,7 @@ static void HideStartMenuWindow(void)
{
sub_819746C(GetStartMenuWindowId(), TRUE);
RemoveStartMenuWindow();
- sub_80984F4();
+ ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
}