summaryrefslogtreecommitdiff
path: root/src/fldeff_cut.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fldeff_cut.c')
-rw-r--r--src/fldeff_cut.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
new file mode 100644
index 000000000..c30eb2d80
--- /dev/null
+++ b/src/fldeff_cut.c
@@ -0,0 +1,68 @@
+#include "global.h"
+#include "gflib.h"
+#include "fieldmap.h"
+#include "field_specials.h"
+#include "fldeff.h"
+#include "field_effect.h"
+#include "field_player_avatar.h"
+#include "metatile_behavior.h"
+#include "party_menu.h"
+#include "constants/event_objects.h"
+
+EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL;
+EWRAM_DATA bool8 sScheduleOpenDottedHole = FALSE;
+
+void FieldCallback_CutTree(void);
+void FieldCallback_CutGrass(void);
+
+u8 MetatileAtCoordsIsGrassTile(s16 x, s16 y)
+{
+ return TestMetatileAttributeBit(MapGridGetMetatileAttributeAt(x, y, 1), 1);
+}
+
+bool8 SetUpFieldMove_Cut(void)
+{
+ s16 x, y;
+ u8 i, j;
+ sScheduleOpenDottedHole = FALSE;
+ if (CutMoveRuinValleyCheck() == TRUE)
+ {
+ sScheduleOpenDottedHole = TRUE;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutGrass;
+ return TRUE;
+ }
+
+ if (CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_CUT_TREE) == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutTree;
+ return TRUE;
+ }
+ else
+ {
+ register s32 neg1 asm("r8");
+ struct MapPosition *pos;
+ PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
+
+ for (i = 0, pos = &gPlayerFacingPosition, neg1 = 0xFFFF; i < 3; i++)
+ {
+
+ y = i + neg1 + pos->y;
+ for (j = 0; j < 3; j++)
+ {
+ x = j + neg1 + pos->x;
+ if (MapGridGetZCoordAt(x, y) == pos->height)
+ {
+ if (MetatileAtCoordsIsGrassTile(x, y) == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutGrass;
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+ }
+}