summaryrefslogtreecommitdiff
path: root/src/fldeff_cut.c
blob: 4d7e4fb61bda287167fc44688eb043caa331a324 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
*/