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.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
new file mode 100644
index 000000000..4d7e4fb61
--- /dev/null
+++ b/src/fldeff_cut.c
@@ -0,0 +1,113 @@
+#include "global.h"
+#include "asm.h"
+#include "metatile_behavior.h"
+#include "field_player_avatar.h"
+#include "field_effect.h"
+#include "rom4.h"
+#include "script.h"
+#include "rom6.h"
+
+extern void (*gUnknown_0300485C)(void);
+extern void (*gUnknown_03005CE4)(void);
+
+extern struct MapPosition gUnknown_0203923C;
+
+extern u8 gUnknown_03005CE0;
+extern u32 gUnknown_0202FF84;
+
+extern u8 UseCutScript;
+
+extern void sub_808AB90(void); // unknown args
+extern void sub_80A2634(void); // unknown args
+extern void sub_80A25E8(void); // unknown args
+extern void sub_80A2684(void); // unknown args
+extern void sub_80A2B00(void); // unknown args
+
+bool8 SetUpFieldMove_Cut(void)
+{
+ s16 x, y;
+ u8 i, j;
+ u8 tileBehavior;
+
+ if(npc_before_player_of_type(0x52) == TRUE) // is in front of tree?
+ {
+ gUnknown_0300485C = sub_808AB90;
+ gUnknown_03005CE4 = sub_80A2634;
+ return TRUE;
+ }
+ else // is in ash or grass to cut?
+ {
+ PlayerGetDestCoords(&gUnknown_0203923C.x, &gUnknown_0203923C.y);
+ for(i = 0; i < 3; i++)
+ {
+ y = i - 1 + gUnknown_0203923C.y;
+ for(j = 0; j < 3; j++)
+ {
+ x = j - 1 + gUnknown_0203923C.x;
+ if(MapGridGetZCoordAt(x, y) == (s8)gUnknown_0203923C.height)
+ {
+ tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+ if(MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE
+ || MetatileBehavior_IsAsh(tileBehavior) == TRUE)
+ {
+ gUnknown_0300485C = sub_808AB90;
+ gUnknown_03005CE4 = sub_80A25E8;
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE; // do not use cut
+ }
+}
+
+void sub_80A25E8(void)
+{
+ FieldEffectStart(1);
+ gUnknown_0202FF84 = gUnknown_03005CE0;
+}
+
+bool8 FldEff_UseCutOnGrass(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)sub_80A2684 >> 16;
+ gTasks[taskId].data[9] = (u32)sub_80A2684;
+ IncrementGameStat(0x12);
+ return FALSE;
+}
+
+void sub_80A2634(void)
+{
+ gUnknown_0202FF84 = gUnknown_03005CE0;
+ ScriptContext1_SetupScript(&UseCutScript);
+}
+
+bool8 FldEff_UseCutOnTree(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)sub_80A2B00 >> 16;
+ gTasks[taskId].data[9] = (u32)sub_80A2B00;
+ IncrementGameStat(0x12);
+ return FALSE;
+}
+
+void sub_80A2684(void)
+{
+ FieldEffectActiveListRemove(1);
+ FieldEffectStart(0x3A);
+}
+
+/*
+ thumb_func_start sub_80A2684
+sub_80A2684: @ 80A2684
+ push {lr}
+ movs r0, 0x1
+ bl FieldEffectActiveListRemove
+ movs r0, 0x3A
+ bl FieldEffectStart
+ pop {r0}
+ bx r0
+ thumb_func_end sub_80A2684
+*/