summaryrefslogtreecommitdiff
path: root/engine/debug/field/field_cut.inc
blob: b56a0b235bd01d2e50b95c5cb532327ffd757ddd (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
FieldDebug_FieldCut:
	call .DetermineEnvironment
	jr c, .close_menu
	ld a, FIELDDEBUG_RETURN_REOPEN
	ret

.close_menu
	ld a, FIELDDEBUG_RETURN_CLEANUP
	ret

.DetermineEnvironment:
	call GetMapEnvironment
	cp ROUTE
	jr z, .outdoors
; Exit if indoors
	cp TOWN
	jr nz, .exit

.outdoors
	call .CheckGrassMetatile
	jr z, .in_grass
	call .IsCollision
	jr nz, .exit
	call .IsCuttableTile
	jr nc, .exit
	ld [hl], a
	jr .do_cut
.in_grass
	ld [hl], METATILE_LAWN
.do_cut
	call CloseWindow
	ld de, SFX_SHINE
	call PlaySFX
	call LoadMapPart
	call UpdateSprites
	call WaitBGMap
	scf
	ret

.exit
	and a
	ret

.CheckGrassMetatile:
	ld a, [wPlayerNextMapX]
	ld d, a
	ld a, [wPlayerNextMapY]
	ld e, a
	call GetBlockLocation
	ld a, [hl]
	cp METATILE_GRASS
	ret

.IsCollision: ; broken
	call GetFacingTileCoord
	cp OLD_COLLISION_CUT_TREE
	ret

.IsCuttableTile:
	call GetBlockLocation
	ld a, [hl]
	ld b, a
	ld de, .CuttableMetatiles
.find_cuttables
	ld a, [de]
	inc de
	cp b
	jr z, .got_cuttable
	cp -1
	jr z, .not_cuttable
	inc de
	jr .find_cuttables

.got_cuttable
	ld a, [de]
	scf
	ret

.not_cuttable
	and a
	ret

.CuttableMetatiles:
	db METATILE_CUT_SE_TREES_N
	db METATILE_SMALL_TREES_N
	db METATILE_CUT_NW_TREES_E
	db METATILE_SMALL_TREES_E
	db METATILE_CUT_NE_TREE_NW
	db METATILE_SMALL_TREE_NW
	db METATILE_CUT_NE_TREE_SE
	db METATILE_SMALL_TREE_SE
	db -1