summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDiegoisawesome <diego@domoreaweso.me>2018-07-05 20:33:47 -0700
committerDiegoisawesome <diego@domoreaweso.me>2018-07-05 20:33:47 -0700
commit6313f360d5006527549b142253e22374624129e9 (patch)
tree99f4f3c4f4810cc24e247fa714a304897c073f64 /src
parentefebc51972b23ddffa2700b1dd6895d4728646a3 (diff)
parentf79ac26ce36197ddf98ab18b6699c76039ec68db (diff)
Merge branch 'DizzyEggg-decompile_cut'
Diffstat (limited to 'src')
-rwxr-xr-xsrc/data/field_event_obj/event_object_graphics.h4
-rw-r--r--src/event_obj_lock.c2
-rw-r--r--src/field_effect.c4
-rw-r--r--src/field_tasks.c2
-rw-r--r--src/fldeff_cut.c688
-rw-r--r--src/fldeff_flash.c8
-rw-r--r--src/fldeff_strength.c7
-rw-r--r--src/fldeff_sweetscent.c4
-rw-r--r--src/fldeff_teleport.c4
-rwxr-xr-xsrc/item_use.c8
-rw-r--r--src/metatile_behavior.c2
-rw-r--r--src/overworld.c12
-rw-r--r--src/rom6.c28
-rw-r--r--src/start_menu.c12
14 files changed, 726 insertions, 59 deletions
diff --git a/src/data/field_event_obj/event_object_graphics.h b/src/data/field_event_obj/event_object_graphics.h
index 3d4303189..b226b066a 100755
--- a/src/data/field_event_obj/event_object_graphics.h
+++ b/src/data/field_event_obj/event_object_graphics.h
@@ -1376,7 +1376,9 @@ const u32 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U32("graphics/event_objec
const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/event_objects/pics/effects/shadow_medium.4bpp");
const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/event_objects/pics/effects/shadow_large.4bpp");
const u32 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/event_objects/pics/effects/shadow_extra_large.4bpp");
-const u32 gUnknown_084F6D38[] = INCBIN_U32("graphics/event_objects/pics/effects/unknown_4F6D38/0.4bpp");
+const u32 filler_8368A08[0x48] = {};
+const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/event_objects/pics/effects/cut_grass.4bpp");
+const u32 gFieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/event_objects/pics/effects/cut_grass.4bpp");
const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/event_objects/palettes/field_effect_object_palette_06.gbapal");
const u32 gFieldEffectObjectPic_Ripple_0[] = INCBIN_U32("graphics/event_objects/pics/effects/ripple/0.4bpp");
const u32 gFieldEffectObjectPic_Ripple_1[] = INCBIN_U32("graphics/event_objects/pics/effects/ripple/1.4bpp");
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/field_effect.c b/src/field_effect.c
index 00814192e..f047c78a3 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -561,7 +561,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y)
PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10);
if (spriteId == 0xFFFF)
return 0x40;
-
+
return spriteId;
}
#else
@@ -623,7 +623,7 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio
PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
if (spriteId == 0xFFFF)
return 0x40;
-
+
return spriteId;
}
diff --git a/src/field_tasks.c b/src/field_tasks.c
index 3cc40ac9d..fc57585e5 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -623,7 +623,7 @@ static void PerStepCallback_8069F64(u8 taskId)
{
data[1] = x;
data[2] = y;
- if (MetatileBehavior_IsAsh(MapGridGetMetatileBehaviorAt(x, y)))
+ if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
{
if (MapGridGetMetatileIdAt(x, y) == 0x20a)
{
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
index 9929dd6f9..9de954e80 100644
--- a/src/fldeff_cut.c
+++ b/src/fldeff_cut.c
@@ -1,19 +1,683 @@
-
-// Includes
#include "global.h"
+#include "fldeff_cut.h"
+#include "field_camera.h"
+#include "field_effect.h"
+#include "event_object_movement.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "event_obj_lock.h"
+#include "metatile_behavior.h"
+#include "party_menu.h"
+#include "overworld.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "malloc.h"
+#include "constants/event_objects.h"
+#include "constants/songs.h"
+#include "constants/abilities.h"
+
+extern bool8 CheckObjectGraphicsInFrontOfPlayer(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
+
+#define METATILE_ID_POKE_GRASS_TREE_UP 0x25
+#define METATILE_ID_GRASS_TREE_UP 0xE
+
+#define METATILE_ID_POKE_GRASS_TREE_LEFT 0x1C6
+#define METATILE_ID_POKE_GRASS_TREE_RIGHT 0x1C7
+
+#define METATILE_ID_GRASS_TREE_LEFT 0x1CE
+#define METATILE_ID_GRASS_TREE_RIGHT 0x1CF
+
+#define METATILE_ID_POKE_LONG_GRASS 0x15
+
+// tileset 6 as second
+#define METATILE_ID_POKE_STEP_LAVA_GRASS 0x206
+#define METATILE_ID_POKE_LAVA_GRASS 0x207
+#define METATILE_ID_LAVA_FIELD 0x271
+
+// tileset 7 as second
+#define METATILE_ID_POKE_ASH_GRASS 0x20A
+#define METATILE_ID_POKE_STEP_ASH_GRASS 0x212
+#define METATILE_ID_ASH 0x218
+
+// tileset 8 as second
+#define METATILE_ID_POKE_LONG_GRASS_START 0x208
+
+#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
+
+#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
+
+#define CUT_HYPER_SIDE 5
+#define CUT_HYPER_AREA CUT_HYPER_SIDE * CUT_HYPER_SIDE
+
+#define CUT_SPRITE_ARRAY_COUNT 8
+
+struct HyperCutterUnk
+{
+ s8 x;
+ s8 y;
+ u8 unk2[2];
+};
+
+// 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}},
+ {0, -2, {2}},
+ {1, -2, {3}},
+ {2, -2, {3}},
+ {-2, -1, {1}},
+ {2, -1, {3}},
+ {-2, 0, {4}},
+ {2, 0, {6}},
+ {-2, 1, {7}},
+ {2, 1, {9}},
+ {-2, 2, {7}},
+ {-1, 2, {7}},
+ {0, 2, {8}},
+ {1, 2, {9}},
+ {2, 2, {9}},
+};
+
+static const struct OamData sOamData_CutGrass =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 1,
+ .priority = 1,
+ .paletteNum = 1,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_CutGrass[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const sSpriteAnimTable_CutGrass[] =
+{
+ sSpriteAnim_CutGrass,
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_CutGrass[] =
+{
+ {gFieldEffectPic_CutGrass, 0x20},
+};
+
+const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000};
+
+static const struct SpriteTemplate sSpriteTemplate_CutGrass =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1000,
+ .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 cutTiles[CUT_NORMAL_AREA];
+ bool8 ret;
+
+ if (CheckObjectGraphicsInFrontOfPlayer(EVENT_OBJ_GFX_CUTTABLE_TREE) == TRUE)
+ {
+ // Standing in front of cuttable tree.
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutTree;
+ return TRUE;
+ }
+ else
+ {
+ PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
+ userAbility = GetMonAbility(&gPlayerParty[GetCursorSelectionMonId()]);
+ if (userAbility == ABILITY_HYPER_CUTTER)
+ {
+ sCutSquareSide = CUT_HYPER_SIDE;
+ sTileCountFromPlayer_X = 2;
+ sTileCountFromPlayer_Y = 2;
+ }
+ else
+ {
+ sCutSquareSide = CUT_NORMAL_SIDE;
+ sTileCountFromPlayer_X = 1;
+ sTileCountFromPlayer_Y = 1;
+ }
+
+ for (i = 0; i < CUT_NORMAL_AREA; i++)
+ cutTiles[i] = FALSE;
+ for (i = 0; i < CUT_HYPER_AREA; i++)
+ sHyperCutTiles[i] = FALSE;
+
+ ret = FALSE;
+
+ for (i = 0; i < CUT_NORMAL_SIDE; i++)
+ {
+ y = i - 1 + gPlayerFacingPosition.y;
+ for (j = 0; j < CUT_NORMAL_SIDE; j++)
+ {
+ x = j - 1 + gPlayerFacingPosition.x;
+ if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
+ {
+ tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE
+ || MetatileBehavior_IsAshGrass(tileBehavior) == TRUE)
+ {
+ // Standing in front of grass.
+ sHyperCutTiles[6 + (i * 5) + j] = TRUE;
+ ret = TRUE;
+ }
+ if (MapGridIsImpassableAt(x, y) == TRUE)
+ {
+ cutTiles[i * 3 + j] = FALSE;
+ }
+ else
+ {
+ cutTiles[i * 3 + j] = TRUE;
+ if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
+ sHyperCutTiles[6 + (i * 5) + j] = TRUE;
+ }
+ }
+ else
+ {
+ cutTiles[i * 3 + j] = FALSE;
+ }
+ }
+ }
+
+ if (userAbility != ABILITY_HYPER_CUTTER)
+ {
+ if (ret == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutGrass;
+ }
+ }
+ else
+ {
+ bool8 tileCuttable;
+ for (i = 0; i < 16; i++)
+ {
+ x = gPlayerFacingPosition.x + sHyperCutStruct[i].x;
+ y = gPlayerFacingPosition.y + sHyperCutStruct[i].y;
+ tileCuttable = TRUE;
+
+ j = 0;
+ do
+ {
+ if (sHyperCutStruct[i].unk2[j] == 0)
+ break;
+ if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE)
+ {
+ tileCuttable = FALSE;
+ break;
+ }
+ } while (++j <= 1);
+
+ if (tileCuttable == TRUE)
+ {
+ if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
+ {
+ 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;
+ sHyperCutTiles[tileArrayId] = TRUE;
+ ret = TRUE;
+ }
+ else
+ {
+ if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
+ sHyperCutTiles[tileArrayId] = TRUE;
+ }
+ }
+ }
+ }
+
+ if (ret == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutGrass;
+ }
+ }
+
+ return ret;
+ }
+}
+
+static void FieldCallback_CutGrass(void)
+{
+ FieldEffectStart(FLDEFF_USE_CUT_ON_GRASS);
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+}
+
+bool8 FldEff_UseCutOnGrass(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)StartCutGrassFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartCutGrassFieldEffect;
+ IncrementGameStat(GAME_STAT_USED_CUT);
+ return FALSE;
+}
+
+static void FieldCallback_CutTree(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ ScriptContext1_SetupScript(Route103_EventScript_290705);
+}
+
+bool8 FldEff_UseCutOnTree(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)StartCutTreeFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartCutTreeFieldEffect;
+ IncrementGameStat(GAME_STAT_USED_CUT);
+ return FALSE;
+}
+
+static void StartCutGrassFieldEffect(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_GRASS);
+ FieldEffectStart(FLDEFF_CUT_GRASS);
+}
+
+bool8 FldEff_CutGrass(void)
+{
+ s16 x, y;
+ u8 i = 0;
+
+ PlaySE(SE_W015);
+ PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
+ for (i = 0; i < CUT_HYPER_AREA; i++)
+ {
+ if (sHyperCutTiles[i] == TRUE)
+ {
+ s8 xAdd = (i % 5) - 2;
+ s8 yAdd = (i / 5) - 2;
+
+ x = xAdd + gPlayerFacingPosition.x;
+ y = yAdd + gPlayerFacingPosition.y;
+
+ SetCutGrassMetatile(x, y);
+ sub_808E75C(x, y);
+ }
+ }
+
+ SetCutGrassMetatiles(gPlayerFacingPosition.x - sTileCountFromPlayer_X, gPlayerFacingPosition.y - (1 + sTileCountFromPlayer_Y));
+ DrawWholeMapView();
+ sCutGrassSpriteArrayPtr = AllocZeroed(CUT_SPRITE_ARRAY_COUNT);
+
+ // populate sprite ID array
+ for (i = 0; i < CUT_SPRITE_ARRAY_COUNT; i++)
+ {
+ sCutGrassSpriteArrayPtr[i] = CreateSprite(&sSpriteTemplate_CutGrass,
+ gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0);
+ gSprites[sCutGrassSpriteArrayPtr[i]].data[2] = 32 * i;
+ }
+
+ return FALSE;
+}
+
+// set map grid metatile depending on x, y
+static void SetCutGrassMetatile(s16 x, s16 y)
+{
+ s32 metatileId = MapGridGetMetatileIdAt(x, y);
+
+ switch (metatileId)
+ {
+ 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;
+ case METATILE_ID_POKE_GRASS_TREE_LEFT:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_LEFT);
+ break;
+ case METATILE_ID_POKE_GRASS_TREE_RIGHT:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_RIGHT);
+ break;
+ 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_LONG_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
+ break;
+ 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:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_LAVA_FIELD);
+ break;
+ case METATILE_ID_POKE_STEP_ASH_GRASS:
+ case METATILE_ID_POKE_ASH_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_ASH);
+ break;
+ case METATILE_ID_POKE_GRASS_TREE_UP:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_UP);
+ break;
+ }
+}
+
+enum
+{
+ LONG_GRASS_NONE,
+ LONG_GRASS_FIELD,
+ LONG_GRASS_BASE_LEFT,
+ LONG_GRASS_BASE_CENTER,
+ LONG_GRASS_BASE_RIGHT
+};
+
+static u8 GetLongGrassCaseAt(s16 x, s16 y)
+{
+ u16 metatileId = MapGridGetMetatileIdAt(x, y);
+
+ if (metatileId == METATILE_ID_GRASS)
+ 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 LONG_GRASS_NONE;
+}
+
+static void SetCutGrassMetatiles(s16 x, s16 y)
+{
+ s16 i;
+ s16 lowerY = y + sCutSquareSide;
+
+ for (i = 0; i < sCutSquareSide; i++)
+ {
+ s16 currentX = x + i;
+ if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID_POKE_LONG_GRASS)
+ {
+ switch (GetLongGrassCaseAt(currentX, y + 1))
+ {
+ case LONG_GRASS_FIELD:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_POKE_LONG_GRASS_START);
+ break;
+ case LONG_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
+ break;
+ case LONG_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
+ break;
+ 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_LONG_GRASS_START)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_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 (sCutSquareSide == CUT_HYPER_SIDE)
+ {
+ HandleLongGrassOnHyper(0, x, y);
+ HandleLongGrassOnHyper(1, x, y);
+ }
+}
+
+static void HandleLongGrassOnHyper(u8 caseId, s16 x, s16 y)
+{
+ s16 newX;
+ bool8 arr[3];
+
+ if (caseId == 0)
+ {
+ arr[0] = sHyperCutTiles[5];
+ arr[1] = sHyperCutTiles[10];
+ arr[2] = sHyperCutTiles[15];
+ newX = x;
+ }
+ else if (caseId == 1)
+ {
+ arr[0] = sHyperCutTiles[9];
+ arr[1] = sHyperCutTiles[14];
+ arr[2] = sHyperCutTiles[19];
+ newX = x + 4;
+ }
+ else // invalid case
+ {
+ return;
+ }
+
+ if (arr[0] == TRUE)
+ {
+ 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_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_LONG_GRASS)
+ {
+ switch (GetLongGrassCaseAt(newX, y + 3))
+ {
+ case LONG_GRASS_FIELD:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_POKE_LONG_GRASS_START);
+ break;
+ case LONG_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
+ break;
+ case LONG_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
+ break;
+ 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_LONG_GRASS_START)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_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_LONG_GRASS)
+ {
+ switch (GetLongGrassCaseAt(newX, y + 4))
+ {
+ case LONG_GRASS_FIELD:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_POKE_LONG_GRASS_START);
+ break;
+ case LONG_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
+ break;
+ case LONG_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
+ break;
+ case LONG_GRASS_BASE_RIGHT:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
+ break;
+ }
+ }
+ }
+}
+
+static void CutGrassSpriteCallback1(struct Sprite *sprite)
+{
+ sprite->data[0] = 8;
+ sprite->data[1] = 0;
+ sprite->data[3] = 0;
+ sprite->callback = CutGrassSpriteCallback2;
+}
+
+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]);
+
+ sprite->data[2] = (sprite->data[2] + 8) & 0xFF;
+ sprite->data[0] += 1 + (sprite->data[3] >> 2); // right shift by 2 is dividing by 4
+ sprite->data[3]++;
+
+ if (sprite->data[1] != 28)
+ sprite->data[1]++;
+ else
+ sprite->callback = CutGrassSpriteCallbackEnd; // done rotating the grass, execute clean up function
+}
+
+static void CutGrassSpriteCallbackEnd(struct Sprite *sprite)
+{
+ u8 i;
-// Static type declarations
+ for (i = 1; i < CUT_SPRITE_ARRAY_COUNT; i++)
+ DestroySprite(&gSprites[sCutGrassSpriteArrayPtr[i]]);
-// Static RAM declarations
+ FieldEffectStop(&gSprites[sCutGrassSpriteArrayPtr[0]], FLDEFF_CUT_GRASS);
+ FREE_AND_SET_NULL(sCutGrassSpriteArrayPtr);
+ ScriptUnfreezeEventObjects();
+ ScriptContext2_Disable();
-IWRAM_DATA u8 gUnknown_03001100;
-IWRAM_DATA u8 gUnknown_03001101;
-IWRAM_DATA u8 gUnknown_03001102;
-IWRAM_DATA u32 fldeff_cut_unused_03001104;
-IWRAM_DATA u8 gUnknown_03001108[25];
+ if (IsMewPlayingHideAndSeek() == TRUE)
+ ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_267EDB);
+}
-// Static ROM declarations
+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;
+ }
+ }
+}
-// .rodata
+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;
+ }
+ }
+ }
+}
-// .text
+static void StartCutTreeFieldEffect(void)
+{
+ PlaySE(SE_W015);
+ FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE);
+ EnableBothScriptContexts();
+}
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index 4f3a091ce..654f02c23 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -78,14 +78,14 @@ bool8 SetUpFieldMove_Flash(void)
if (ShouldDoBrailleFlyEffect())
{
gSpecialVar_Result = GetCursorSelectionMonId();
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = sub_8179918;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = sub_8179918;
return TRUE;
}
else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm2_flash;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm2_flash;
return TRUE;
}
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index 162479c73..74eb100bc 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -6,6 +6,7 @@
#include "rom6.h"
#include "script.h"
#include "task.h"
+#include "constants/event_objects.h"
// static functions
static void FldEff_UseStrength(void);
@@ -14,11 +15,11 @@ static void sub_8145E74(void);
// text
bool8 SetUpFieldMove_Strength(void)
{
- if (npc_before_player_of_type(87) == TRUE)
+ if (CheckObjectGraphicsInFrontOfPlayer(EVENT_OBJ_GFX_PUSHABLE_BOULDER) == TRUE)
{
gSpecialVar_Result = GetCursorSelectionMonId();
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = FldEff_UseStrength;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FldEff_UseStrength;
return TRUE;
}
return FALSE;
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index 100e440a5..14da87eb3 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -24,8 +24,8 @@ void sub_81BE72C(void);
bool8 SetUpFieldMove_SweetScent(void)
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm2_sweet_scent;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm2_sweet_scent;
return TRUE;
}
diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c
index 1b88b42d7..e82a26cd1 100644
--- a/src/fldeff_teleport.c
+++ b/src/fldeff_teleport.c
@@ -11,8 +11,8 @@ bool8 SetUpFieldMove_Teleport(void)
{
if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm_teleport_run_dp02scr;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm_teleport_run_dp02scr;
return TRUE;
}
return FALSE;
diff --git a/src/item_use.c b/src/item_use.c
index f3cb58069..6bdfe1c54 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/metatile_behavior.c b/src/metatile_behavior.c
index ad0062c20..a5e328e4a 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -846,7 +846,7 @@ bool8 MetatileBehavior_IsBerryTreeSoil(u8 var)
return FALSE;
}
-bool8 MetatileBehavior_IsAsh(u8 var)
+bool8 MetatileBehavior_IsAshGrass(u8 var)
{
if (var == MB_ASHGRASS)
return TRUE;
diff --git a/src/overworld.c b/src/overworld.c
index 657ffd86a..d4cb25e6c 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -88,7 +88,7 @@ extern const u16 gUnknown_82EC7C4[];
u16 gUnknown_03005DA8;
MainCallback gFieldCallback;
-bool8 (*gUnknown_03005DB0)(void);
+bool8 (*gFieldCallback2)(void);
u8 gUnknown_03005DB4;
u8 gFieldLinkPlayerCount;
@@ -1518,15 +1518,15 @@ void sub_8085E94(void *a0)
static bool8 map_post_load_hook_exec(void)
{
- if (gUnknown_03005DB0 != NULL)
+ if (gFieldCallback2 != NULL)
{
- if (!gUnknown_03005DB0())
+ if (!gFieldCallback2())
{
return FALSE;
}
else
{
- gUnknown_03005DB0 = NULL;
+ gFieldCallback2 = NULL;
gFieldCallback = NULL;
}
}
@@ -1554,7 +1554,7 @@ void CB2_NewGame(void)
ScriptContext1_Init();
ScriptContext2_Disable();
gFieldCallback = ExecuteTruckSequence;
- gUnknown_03005DB0 = NULL;
+ gFieldCallback2 = NULL;
do_load_map_stuff_loop(&gMain.state);
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
@@ -1684,7 +1684,7 @@ void c2_8056854(void)
void CB2_ReturnToFieldWithOpenMenu(void)
{
FieldClearVBlankHBlankCallbacks();
- gUnknown_03005DB0 = sub_80AF6A4;
+ gFieldCallback2 = sub_80AF6A4;
CB2_ReturnToField();
}
diff --git a/src/rom6.c b/src/rom6.c
index cdc1064dd..78cbbe2de 100644
--- a/src/rom6.c
+++ b/src/rom6.c
@@ -27,16 +27,16 @@ static void hm2_dig(void);
static void sub_8135780(void);
// extern RAM loc
-extern struct MapPosition gUnknown_0203AB40;
+extern struct MapPosition gPlayerFacingPosition;
// text
-bool8 npc_before_player_of_type(u8 a)
+bool8 CheckObjectGraphicsInFrontOfPlayer(u8 a)
{
u8 eventObjId;
- GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203AB40.x, &gUnknown_0203AB40.y);
- gUnknown_0203AB40.height = PlayerGetZCoord();
- eventObjId = GetEventObjectIdByXYZ(gUnknown_0203AB40.x, gUnknown_0203AB40.y, gUnknown_0203AB40.height);
+ GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
+ gPlayerFacingPosition.height = PlayerGetZCoord();
+ eventObjId = GetEventObjectIdByXYZ(gPlayerFacingPosition.x, gPlayerFacingPosition.y, gPlayerFacingPosition.height);
if (gEventObjects[eventObjId].graphicsId != a)
{
return FALSE;
@@ -50,7 +50,7 @@ bool8 npc_before_player_of_type(u8 a)
u8 oei_task_add(void)
{
- GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203AB40.x, &gUnknown_0203AB40.y);
+ GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
return CreateTask(task08_080C9820, 8);
}
@@ -118,17 +118,17 @@ static void sub_813561C(u8 taskId)
bool8 SetUpFieldMove_RockSmash(void)
{
- if(ShouldDoBrailleStrengthEffect())
+ if (ShouldDoBrailleStrengthEffect())
{
gSpecialVar_Result = GetCursorSelectionMonId();
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = sub_8179834;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = sub_8179834;
return TRUE;
}
- else if (npc_before_player_of_type(0x56) == TRUE)
+ else if (CheckObjectGraphicsInFrontOfPlayer(EVENT_OBJ_GFX_BREAKABLE_ROCK) == TRUE)
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = sub_81356C4;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = sub_81356C4;
return TRUE;
}
else
@@ -164,8 +164,8 @@ bool8 SetUpFieldMove_Dig(void)
{
if (CanUseEscapeRopeOnCurrMap() == TRUE)
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm2_dig;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm2_dig;
return TRUE;
}
else
diff --git a/src/start_menu.c b/src/start_menu.c
index dad107887..37cafc0ff 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);
@@ -526,7 +526,7 @@ void sub_809FA18(void) // Called from field_screen.s
{
sUnknown_02037619[0] = 0;
sUnknown_02037619[1] = 0;
- gUnknown_03005DB0 = sub_809FA00;
+ gFieldCallback2 = sub_809FA00;
}
void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s
@@ -769,7 +769,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();
}
@@ -811,7 +811,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;
@@ -848,7 +848,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;
@@ -1405,7 +1405,7 @@ static void HideStartMenuWindow(void)
{
sub_819746C(GetStartMenuWindowId(), TRUE);
RemoveStartMenuWindow();
- sub_80984F4();
+ ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
}