From 7ea5dd7923eb9a44609a6cdaff331f7cd97bb34a Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 16 Jun 2018 00:45:48 +0200 Subject: start fldeffect cut --- src/data/field_event_obj/event_object_graphics.h | 4 +- src/field_tasks.c | 2 +- src/fldeff_cut.c | 610 ++++++++++++++++++++++- src/fldeff_flash.c | 8 +- src/fldeff_strength.c | 6 +- src/fldeff_sweetscent.c | 4 +- src/fldeff_teleport.c | 4 +- src/metatile_behavior.c | 2 +- src/overworld.c | 12 +- src/rom6.c | 26 +- src/start_menu.c | 2 +- 11 files changed, 638 insertions(+), 42 deletions(-) (limited to 'src') 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/field_tasks.c b/src/field_tasks.c index d9c3078da..59990f22e 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..a007c8ca7 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -1,19 +1,613 @@ - -// Includes #include "global.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" + +// 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_TALL_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_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); + +extern struct MapPosition gPlayerFacingPosition; +extern u8 *gCutGrassSpriteArrayPtr; + +extern const u8 Route103_EventScript_290705[]; +extern const u8 gFieldEffectPic_CutGrass[]; +extern const u16 gFieldEffectObjectPalette6[]; + +#define CUT_NORMAL_SIDE 3 +#define CUT_NORMAL_AREA CUT_NORMAL_SIDE * CUT_NORMAL_SIDE +/* P - player + X - cut area + + XXX + XPX + XXX +*/ -// Static type declarations +#define CUT_HYPER_SIDE 5 +#define CUT_HYPER_AREA CUT_HYPER_SIDE * CUT_HYPER_SIDE +/* P - player + X - cut area -// Static RAM declarations + 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 u8 gUnknown_03001108[25]; +IWRAM_DATA bool8 gUnknown_03001108[CUT_HYPER_AREA]; + +struct HyperCutterUnk +{ + s8 x; + s8 y; + u8 unk2[2]; +}; + +const struct HyperCutterUnk gUnknown_0857C608[] = +{ + {-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}}, +}; + +const struct OamData gOamData_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, +}; + +const union AnimCmd gSpriteAnim_CutGrass[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd *const gSpriteAnimTable_CutGrass[] = +{ + gSpriteAnim_CutGrass, +}; + +const struct SpriteFrameImage gSpriteImageTable_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 = +{ + .tileTag = 0xFFFF, + .paletteTag = 0x1000, + .oam = &gOamData_CutGrass, + .anims = gSpriteAnimTable_CutGrass, + .images = gSpriteImageTable_CutGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = CutGrassSpriteCallback1, +}; + +bool8 SetUpFieldMove_Cut(void) +{ + s16 x, y; + u8 i, j; + u8 tileBehavior; + u8 userAbility; + bool8 array[CUT_NORMAL_AREA]; + bool8 ret; + + if (SetLastTalkedObjectInFrontOfPlayer(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) + { + gUnknown_03001100 = 5; + gUnknown_03001101 = 2; + gUnknown_03001102 = 2; + } + else + { + gUnknown_03001100 = 3; + gUnknown_03001101 = 1; + gUnknown_03001102 = 1; + } + + for (i = 0; i < CUT_NORMAL_AREA; i++) + array[i] = FALSE; + for (i = 0; i < CUT_HYPER_AREA; i++) + gUnknown_03001108[i] = FALSE; + + ret = FALSE; + + for (i = 0; i < 3; i++) + { + y = i - 1 + gPlayerFacingPosition.y; + for (j = 0; j < 3; 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. + gUnknown_03001108[6 + (i * 5) + j] = TRUE; + ret = TRUE; + } + if (MapGridIsImpassableAt(x, y) == TRUE) + { + array[i * 3 + j] = FALSE; + } + else + { + array[i * 3 + j] = TRUE; + if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) + gUnknown_03001108[6 + (i * 5) + j] = TRUE; + } + } + else + { + array[i * 3 + j] = FALSE; + } + } + } + + if (userAbility != ABILITY_HYPER_CUTTER) + { + if (ret == TRUE) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_CutGrass; + } + } + else + { + bool8 r7; + for (i = 0; i < 16; i++) + { + x = gPlayerFacingPosition.x + gUnknown_0857C608[i].x; + y = gPlayerFacingPosition.y + gUnknown_0857C608[i].y; + r7 = TRUE; + + j = 0; + while (1) + { + if (gUnknown_0857C608[i].unk2[j] == 0) + break; + if (array[(u8)(gUnknown_0857C608[i].unk2[j] - 1)] == FALSE) + { + r7 = FALSE; + break; + } + if (++j >= 2) + break; + } + + if (r7 == TRUE) + { + if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height) + { + u8 r6 = ((gUnknown_0857C608[i].y * 5) + 12) + (gUnknown_0857C608[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; + ret = TRUE; + } + else + { + if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE) + gUnknown_03001108[r6] = TRUE; + } + } + } + } + + if (ret == TRUE) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_CutGrass; + } + } + + return ret; + } +} + +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; +} + +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; +} + +void StartCutGrassFieldEffect(void) +{ + FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_GRASS); + FieldEffectStart(FLDEFF_CUT_GRASS); +} + +bool8 FldEff_CutGrass(void) +{ + s16 x, y; + u8 tileBehavior; + u8 i; + + for (i = 0, PlaySE(SE_W015), PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); i < 25; i++) + { + if (gUnknown_03001108[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 - gUnknown_03001101, gPlayerFacingPosition.y + (~gUnknown_03001102)); + DrawWholeMapView(); + gCutGrassSpriteArrayPtr = AllocZeroed(8); + + // populate sprite ID array + for (i = 0; i < 8; i++) + { + gCutGrassSpriteArrayPtr[i] = CreateSprite(&gSpriteTemplate_CutGrass, + gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0); + gSprites[gCutGrassSpriteArrayPtr[i]].data[2] = 32 * i; + } + + return FALSE; +} + +// set map grid metatile depending on x, y +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_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_TALL_GRASS: + MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS); + break; + case METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS: + MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS); + break; + case METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS: + MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_RIGHT_TALL_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 +{ + TALL_GRASS_NONE, + TALL_GRASS_FIELD, + TALL_GRASS_BASE_LEFT, + TALL_GRASS_BASE_CENTER, + TALL_GRASS_BASE_RIGHT +}; + +u8 GetTallGrassCaseAt(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; + else + return TALL_GRASS_NONE; +} + +void SetCutGrassMetatiles(s16 x, s16 y) +{ + s16 i; + s16 lowerY = y + gUnknown_03001100; + + for (i = 0; i < gUnknown_03001100; i++) + { + s16 currentX = x + i; + if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID_POKE_TALL_GRASS) + { + switch (GetTallGrassCaseAt(currentX, y + 1)) + { + case TALL_GRASS_FIELD: + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_POKE_TALL_GRASS_START); + break; + case TALL_GRASS_BASE_LEFT: + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS); + break; + case TALL_GRASS_BASE_CENTER: + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS); + break; + case TALL_GRASS_BASE_RIGHT: + MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS); + break; + } + } + if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID_GRASS) + { + if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_POKE_TALL_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 (gUnknown_03001100 == CUT_HYPER_SIDE) + { + HandleTallGrassOnHyper(0, x, y); + HandleTallGrassOnHyper(1, x, y); + } +} + +void HandleTallGrassOnHyper(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]; + newX = x; + } + else if (caseId == 1) + { + arr[0] = gUnknown_03001108[9]; + arr[1] = gUnknown_03001108[14]; + arr[2] = gUnknown_03001108[19]; + newX = x + 4; + } + else // invalid case + { + return; + } + + if (arr[0] == TRUE) + { + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_TALL_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 (arr[1] == TRUE) + { + if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID_POKE_TALL_GRASS) + { + switch (GetTallGrassCaseAt(newX, y + 3)) + { + case TALL_GRASS_FIELD: + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_POKE_TALL_GRASS_START); + break; + case TALL_GRASS_BASE_LEFT: + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS); + break; + case TALL_GRASS_BASE_CENTER: + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS); + break; + case TALL_GRASS_BASE_RIGHT: + MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS); + break; + } + } + + if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_POKE_TALL_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 (arr[2] == TRUE) + { + if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_TALL_GRASS) + { + switch (GetTallGrassCaseAt(newX, y + 4)) + { + case TALL_GRASS_FIELD: + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_POKE_TALL_GRASS_START); + break; + case TALL_GRASS_BASE_LEFT: + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS); + break; + case TALL_GRASS_BASE_CENTER: + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS); + break; + case TALL_GRASS_BASE_RIGHT: + MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS); + break; + } + } + } +} + +void CutGrassSpriteCallback1(struct Sprite *sprite) +{ + sprite->data[0] = 8; + sprite->data[1] = 0; + sprite->data[3] = 0; + sprite->callback = CutGrassSpriteCallback2; +} -// Static ROM declarations +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]); -// .rodata + 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]++; -// .text + if (sprite->data[1] != 28) + sprite->data[1]++; + else + sprite->callback = CutGrassSpriteCallbackEnd; // done rotating the grass, execute clean up function +} 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..52b76edb4 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -14,11 +14,11 @@ static void sub_8145E74(void); // text bool8 SetUpFieldMove_Strength(void) { - if (npc_before_player_of_type(87) == TRUE) + if (SetLastTalkedObjectInFrontOfPlayer(87) == 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/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 1e4116053..99670dfe2 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..cec2cfcb6 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 SetLastTalkedObjectInFrontOfPlayer(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); } @@ -121,14 +121,14 @@ bool8 SetUpFieldMove_RockSmash(void) 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 (SetLastTalkedObjectInFrontOfPlayer(0x56) == 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 7080ae6a8..6371acff0 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -530,7 +530,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 -- cgit v1.2.3 From 3bcd30969a8b7ced6e9fa54e1fc0f8447c2983bc Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 16 Jun 2018 14:04:29 +0200 Subject: cut field effect is decompiled and documented --- src/event_obj_lock.c | 2 +- src/fldeff_cut.c | 445 +++++++++++++++++++++++++++++---------------------- src/item_use.c | 8 +- src/start_menu.c | 10 +- 4 files changed, 268 insertions(+), 197 deletions(-) (limited to 'src') 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(); } -- cgit v1.2.3 From 9329ffc2bc4435337f456334046eba18e2d27302 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 17 Jun 2018 12:39:58 +0200 Subject: review cut changes --- src/field_effect.c | 4 ++-- src/fldeff_cut.c | 6 ++---- src/fldeff_strength.c | 2 +- src/rom6.c | 4 ++-- 4 files changed, 7 insertions(+), 9 deletions(-) (limited to 'src') 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/fldeff_cut.c b/src/fldeff_cut.c index 615de0202..bdc9b7868 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -266,7 +266,7 @@ bool8 SetUpFieldMove_Cut(void) tileCuttable = TRUE; j = 0; - while (1) + do { if (sHyperCutStruct[i].unk2[j] == 0) break; @@ -275,9 +275,7 @@ bool8 SetUpFieldMove_Cut(void) tileCuttable = FALSE; break; } - if (++j >= 2) - break; - } + } while (++j <= 1); if (tileCuttable == TRUE) { diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 52b76edb4..fb5aa5e95 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -14,7 +14,7 @@ static void sub_8145E74(void); // text bool8 SetUpFieldMove_Strength(void) { - if (SetLastTalkedObjectInFrontOfPlayer(87) == TRUE) + if (SetLastTalkedObjectInFrontOfPlayer(EVENT_OBJ_GFX_PUSHABLE_BOULDER) == TRUE) { gSpecialVar_Result = GetCursorSelectionMonId(); gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; diff --git a/src/rom6.c b/src/rom6.c index cec2cfcb6..6c7439622 100644 --- a/src/rom6.c +++ b/src/rom6.c @@ -118,14 +118,14 @@ static void sub_813561C(u8 taskId) bool8 SetUpFieldMove_RockSmash(void) { - if(ShouldDoBrailleStrengthEffect()) + if (ShouldDoBrailleStrengthEffect()) { gSpecialVar_Result = GetCursorSelectionMonId(); gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; gPostMenuFieldCallback = sub_8179834; return TRUE; } - else if (SetLastTalkedObjectInFrontOfPlayer(0x56) == TRUE) + else if (SetLastTalkedObjectInFrontOfPlayer(EVENT_OBJ_GFX_BREAKABLE_ROCK) == TRUE) { gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; gPostMenuFieldCallback = sub_81356C4; -- cgit v1.2.3 From cdacc2771426a8e4ec5ccc5d7ba0d8d7c4224c36 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 30 Jun 2018 14:26:33 +0200 Subject: change for loop in fldeff_cut --- src/fldeff_cut.c | 7 ++++--- src/fldeff_strength.c | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c index bdc9b7868..c2f5e7731 100644 --- a/src/fldeff_cut.c +++ b/src/fldeff_cut.c @@ -352,10 +352,11 @@ static void StartCutGrassFieldEffect(void) bool8 FldEff_CutGrass(void) { s16 x, y; - u8 tileBehavior; - u8 i; + u8 i = 0; - for (i = 0, PlaySE(SE_W015), PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); i < CUT_HYPER_AREA; i++) + PlaySE(SE_W015); + PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); + for (i = 0; i < CUT_HYPER_AREA; i++) { if (sHyperCutTiles[i] == TRUE) { diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index fb5aa5e95..ae7b557d8 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); -- cgit v1.2.3