diff options
Diffstat (limited to 'src/fldeff_cut.c')
-rw-r--r-- | src/fldeff_cut.c | 113 |
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 +*/ |