summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/fldeff_80F9BCC.s24
-rw-r--r--asm/fldeff_cut.s1294
-rw-r--r--asm/party_menu.s38
-rw-r--r--asm/pokemon_summary_screen.s2
-rwxr-xr-xsrc/data/field_event_obj/event_object_graphics.h4
-rw-r--r--src/field_tasks.c2
-rw-r--r--src/fldeff_cut.c610
-rw-r--r--src/fldeff_flash.c8
-rw-r--r--src/fldeff_strength.c6
-rw-r--r--src/fldeff_sweetscent.c4
-rw-r--r--src/fldeff_teleport.c4
-rw-r--r--src/metatile_behavior.c2
-rw-r--r--src/overworld.c12
-rw-r--r--src/rom6.c26
-rw-r--r--src/start_menu.c2
15 files changed, 678 insertions, 1360 deletions
diff --git a/asm/fldeff_80F9BCC.s b/asm/fldeff_80F9BCC.s
index 840d38f64..3cfbe215a 100644
--- a/asm/fldeff_80F9BCC.s
+++ b/asm/fldeff_80F9BCC.s
@@ -467,7 +467,7 @@ _080F9F54:
thumb_func_start sub_80F9F5C
sub_80F9F5C: @ 80F9F5C
push {lr}
- ldr r0, =gUnknown_0203AB40
+ ldr r0, =gPlayerFacingPosition
ldr r1, =gMapHeader
ldr r1, [r1, 0x4]
bl sub_80E9608
@@ -572,7 +572,7 @@ sub_80FA004: @ 80FA004
lsrs r0, 24
cmp r0, 0x2
bne _080FA0AE
- ldr r4, =gUnknown_0203AB40
+ ldr r4, =gPlayerFacingPosition
adds r1, r4, 0x2
adds r0, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer
@@ -590,10 +590,10 @@ sub_80FA004: @ 80FA004
cmp r0, 0x1
bne _080FA070
bl sub_80F9F5C
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
+ ldr r1, =gFieldCallback2
+ ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
+ ldr r1, =gPostMenuFieldCallback
ldr r0, =sub_80FA0DC
b _080FA0C0
.pool
@@ -605,10 +605,10 @@ _080FA070:
cmp r0, 0x1
bne _080FA0A0
bl sub_80F9F5C
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
+ ldr r1, =gFieldCallback2
+ ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
+ ldr r1, =gPostMenuFieldCallback
ldr r0, =sub_80FA1E8
b _080FA0C0
.pool
@@ -624,10 +624,10 @@ _080FA0AE:
b _080FA0C4
_080FA0B2:
bl sub_80F9F5C
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
+ ldr r1, =gFieldCallback2
+ ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
+ ldr r1, =gPostMenuFieldCallback
ldr r0, =sub_80FA34C
_080FA0C0:
str r0, [r1]
@@ -824,7 +824,7 @@ sub_80FA234: @ 80FA234
thumb_func_start sub_80FA248
sub_80FA248: @ 80FA248
push {r4,lr}
- ldr r1, =gUnknown_0203AB40
+ ldr r1, =gPlayerFacingPosition
movs r2, 0
ldrsh r0, [r1, r2]
movs r2, 0x2
diff --git a/asm/fldeff_cut.s b/asm/fldeff_cut.s
index 19a29d729..fa7ac7321 100644
--- a/asm/fldeff_cut.s
+++ b/asm/fldeff_cut.s
@@ -5,1291 +5,13 @@
.text
- thumb_func_start sub_80D3718
-sub_80D3718: @ 80D3718
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- movs r0, 0x52
- bl npc_before_player_of_type
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D3754
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =sub_80D3A9C
- str r0, [r1]
- movs r0, 0x1
- b _080D3A2C
- .pool
-_080D3754:
- ldr r0, =gUnknown_0203AB40
- adds r1, r0, 0x2
- bl PlayerGetDestCoords
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- bl GetMonAbility
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0xC]
- cmp r0, 0x34
- bne _080D3798
- ldr r1, =gUnknown_03001100
- movs r0, 0x5
- strb r0, [r1]
- ldr r0, =gUnknown_03001101
- movs r1, 0x2
- b _080D37A2
- .pool
-_080D3798:
- ldr r1, =gUnknown_03001100
- movs r0, 0x3
- strb r0, [r1]
- ldr r0, =gUnknown_03001101
- movs r1, 0x1
-_080D37A2:
- strb r1, [r0]
- ldr r0, =gUnknown_03001102
- strb r1, [r0]
- movs r6, 0
- movs r1, 0
-_080D37AC:
- mov r2, sp
- adds r0, r2, r6
- strb r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x8
- bls _080D37AC
- movs r6, 0
- ldr r2, =gUnknown_03001108
- movs r1, 0
-_080D37C2:
- adds r0, r6, r2
- strb r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x18
- bls _080D37C2
- movs r3, 0
- str r3, [sp, 0x10]
- movs r6, 0
-_080D37D6:
- ldr r4, =0x0000ffff
- adds r0, r6, r4
- ldr r1, =gUnknown_0203AB40
- ldrh r1, [r1, 0x2]
- adds r0, r1
- movs r5, 0
- adds r2, r6, 0x1
- str r2, [sp, 0x18]
- lsls r7, r6, 1
- lsls r0, 16
- str r0, [sp, 0x14]
- asrs r0, 16
- mov r10, r0
- lsls r0, r6, 2
- adds r0, r6
- mov r9, r0
-_080D37F6:
- ldr r3, =0x0000ffff
- adds r0, r5, r3
- ldr r4, =gUnknown_0203AB40
- ldrh r4, [r4]
- adds r0, r4
- lsls r0, 16
- lsrs r1, r0, 16
- mov r8, r1
- asrs r4, r0, 16
- adds r0, r4, 0
- mov r1, r10
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gUnknown_0203AB40
- movs r1, 0x4
- ldrsb r1, [r2, r1]
- cmp r0, r1
- bne _080D38BC
- adds r0, r4, 0
- mov r1, r10
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsPokeGrass
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080D3846
- adds r0, r4, 0
- bl MetatileBehavior_IsAsh
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D3856
-_080D3846:
- adds r0, r5, 0x6
- add r0, r9
- ldr r3, =gUnknown_03001108
- adds r0, r3
- movs r1, 0x1
- strb r1, [r0]
- movs r0, 0x1
- str r0, [sp, 0x10]
-_080D3856:
- mov r1, r8
- lsls r0, r1, 16
- asrs r0, 16
- ldr r2, [sp, 0x14]
- asrs r1, r2, 16
- bl MapGridIsImpassableAt
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D3890
- adds r0, r7, r6
- adds r0, r5
- mov r3, sp
- adds r1, r3, r0
- b _080D38C4
- .pool
-_080D3890:
- adds r0, r7, r6
- adds r0, r5
- mov r2, sp
- adds r1, r2, r0
- movs r0, 0x1
- strb r0, [r1]
- adds r0, r4, 0
- bl MetatileBehavior_IsCuttableGrass
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- bne _080D38C8
- adds r0, r5, 0x6
- add r0, r9
- ldr r3, =gUnknown_03001108
- adds r0, r3
- strb r1, [r0]
- b _080D38C8
- .pool
-_080D38BC:
- adds r0, r7, r6
- adds r0, r5
- mov r4, sp
- adds r1, r4, r0
-_080D38C4:
- movs r0, 0
- strb r0, [r1]
-_080D38C8:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _080D37F6
- ldr r1, [sp, 0x18]
- lsls r0, r1, 24
- lsrs r6, r0, 24
- cmp r6, 0x2
- bhi _080D38DE
- b _080D37D6
-_080D38DE:
- ldr r2, [sp, 0xC]
- cmp r2, 0x34
- beq _080D38EE
- ldr r3, [sp, 0x10]
- cmp r3, 0x1
- beq _080D38EC
- b _080D3A2A
-_080D38EC:
- b _080D3A1E
-_080D38EE:
- movs r6, 0
- ldr r4, =gUnknown_0203AB40
- mov r9, r4
- ldr r0, =gUnknown_0857C608
- mov r10, r0
-_080D38F8:
- lsls r2, r6, 2
- mov r3, r10
- adds r1, r2, r3
- movs r0, 0
- ldrsb r0, [r1, r0]
- mov r4, r9
- ldrh r4, [r4]
- adds r0, r4
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- movs r0, 0x1
- ldrsb r0, [r1, r0]
- mov r1, r9
- ldrh r1, [r1, 0x2]
- adds r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
- movs r7, 0x1
- movs r5, 0
- ldr r3, =gUnknown_0857C608 + 2
- adds r0, r2, r3
- ldrb r0, [r0]
- adds r6, 0x1
- str r6, [sp, 0x18]
- adds r6, r2, 0
- cmp r0, 0
- beq _080D395A
-_080D3930:
- adds r1, r2, 0
- adds r0, r5, r2
- adds r0, r3
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- add r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- beq _080D39F4
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bhi _080D395A
- adds r0, r5, r1
- adds r0, r3
- ldrb r0, [r0]
- cmp r0, 0
- bne _080D3930
-_080D395A:
- cmp r7, 0x1
- bne _080D3A0C
- mov r1, r8
- lsls r0, r1, 16
- asrs r5, r0, 16
- lsls r0, r4, 16
- asrs r4, r0, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- mov r2, r9
- movs r1, 0x4
- ldrsb r1, [r2, r1]
- cmp r0, r1
- bne _080D3A0C
- mov r3, r10
- adds r2, r6, r3
- movs r1, 0x1
- ldrsb r1, [r2, r1]
- lsls r0, r1, 2
- adds r0, r1
- adds r0, 0xC
- ldrb r2, [r2]
- adds r0, r2
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsPokeGrass
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080D39BC
- adds r0, r4, 0
- bl MetatileBehavior_IsAsh
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D39F8
-_080D39BC:
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =hm2_ruin_valley
- str r0, [r1]
- ldr r0, =gUnknown_03001108
- adds r0, r6, r0
- strb r7, [r0]
- movs r4, 0x1
- str r4, [sp, 0x10]
- b _080D3A0C
- .pool
-_080D39F4:
- movs r7, 0
- b _080D395A
-_080D39F8:
- adds r0, r4, 0
- bl MetatileBehavior_IsCuttableGrass
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- bne _080D3A0C
- ldr r0, =gUnknown_03001108
- adds r0, r6, r0
- strb r1, [r0]
-_080D3A0C:
- ldr r1, [sp, 0x18]
- lsls r0, r1, 24
- lsrs r6, r0, 24
- cmp r6, 0xF
- bhi _080D3A18
- b _080D38F8
-_080D3A18:
- ldr r2, [sp, 0x10]
- cmp r2, 0x1
- bne _080D3A2A
-_080D3A1E:
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =hm2_ruin_valley
- str r0, [r1]
-_080D3A2A:
- ldr r0, [sp, 0x10]
-_080D3A2C:
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D3718
-
- thumb_func_start hm2_ruin_valley
-hm2_ruin_valley: @ 80D3A50
- push {lr}
- movs r0, 0x1
- bl FieldEffectStart
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end hm2_ruin_valley
-
- thumb_func_start sub_80D3A6C
-sub_80D3A6C: @ 80D3A6C
- push {lr}
- bl oei_task_add
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, =sub_80D3AEC
- lsrs r0, r2, 16
- strh r0, [r1, 0x18]
- strh r2, [r1, 0x1A]
- movs r0, 0x12
- bl IncrementGameStat
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D3A6C
-
- thumb_func_start sub_80D3A9C
-sub_80D3A9C: @ 80D3A9C
- push {lr}
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- ldr r0, =Route103_EventScript_290705
- bl ScriptContext1_SetupScript
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D3A9C
-
- thumb_func_start sub_80D3ABC
-sub_80D3ABC: @ 80D3ABC
- push {lr}
- bl oei_task_add
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, =sub_80D4354
- lsrs r0, r2, 16
- strh r0, [r1, 0x18]
- strh r2, [r1, 0x1A]
- movs r0, 0x12
- bl IncrementGameStat
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D3ABC
-
- thumb_func_start sub_80D3AEC
-sub_80D3AEC: @ 80D3AEC
- push {lr}
- movs r0, 0x1
- bl FieldEffectActiveListRemove
- movs r0, 0x3A
- bl FieldEffectStart
- pop {r0}
- bx r0
- thumb_func_end sub_80D3AEC
-
- thumb_func_start sub_80D3B00
-sub_80D3B00: @ 80D3B00
- push {r4-r7,lr}
- movs r6, 0
- movs r0, 0x80
- bl PlaySE
- ldr r4, =gUnknown_0203AB40
- adds r1, r4, 0x2
- adds r0, r4, 0
- bl PlayerGetDestCoords
- adds r7, r4, 0
-_080D3B16:
- ldr r0, =gUnknown_03001108
- adds r0, r6, r0
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080D3B64
- adds r0, r6, 0
- movs r1, 0x5
- bl __umodsi3
- adds r4, r0, 0
- subs r4, 0x2
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x5
- bl __udivsi3
- adds r5, r0, 0
- subs r5, 0x2
- lsls r4, 24
- asrs r4, 24
- ldrh r0, [r7]
- adds r4, r0
- lsls r5, 24
- asrs r5, 24
- ldrh r2, [r7, 0x2]
- adds r5, r2
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80D3C10
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_808E75C
-_080D3B64:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x18
- bls _080D3B16
- ldr r2, =gUnknown_0203AB40
- ldr r0, =gUnknown_03001101
- ldrb r1, [r0]
- ldrh r0, [r2]
- subs r0, r1
- lsls r0, 16
- asrs r0, 16
- ldr r1, =gUnknown_03001102
- ldrb r1, [r1]
- mvns r1, r1
- ldrh r2, [r2, 0x2]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- bl sub_80D3D5C
- bl DrawWholeMapView
- ldr r4, =gUnknown_02039DD0
- movs r0, 0x8
- bl AllocZeroed
- str r0, [r4]
- movs r6, 0
- ldr r5, =gSprites
-_080D3BA0:
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrh r1, [r0, 0x2]
- lsls r1, 23
- lsrs r1, 7
- movs r2, 0x80
- lsls r2, 12
- adds r1, r2
- asrs r1, 16
- ldrb r2, [r0]
- adds r2, 0x14
- ldr r0, =gUnknown_0857C66C
- movs r3, 0
- bl CreateSprite
- ldr r1, [r4]
- adds r1, r6
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- lsls r1, r6, 5
- strh r1, [r0, 0x32]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x7
- bls _080D3BA0
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D3B00
-
- thumb_func_start sub_80D3C10
-sub_80D3C10: @ 80D3C10
- push {r4-r7,lr}
- lsls r0, 16
- lsls r1, 16
- lsrs r6, r0, 16
- asrs r4, r0, 16
- lsrs r7, r1, 16
- asrs r5, r1, 16
- adds r0, r4, 0
- adds r1, r5, 0
- bl MapGridGetMetatileIdAt
- adds r1, r0, 0
- ldr r0, =0x00000207
- cmp r1, r0
- bgt _080D3C5C
- subs r0, 0x1
- cmp r1, r0
- bge _080D3CD4
- cmp r1, 0x25
- beq _080D3CF6
- cmp r1, 0x25
- bgt _080D3C4C
- cmp r1, 0xD
- beq _080D3C9C
- cmp r1, 0x15
- beq _080D3C9C
- b _080D3D00
- .pool
-_080D3C4C:
- movs r0, 0xE3
- lsls r0, 1
- cmp r1, r0
- beq _080D3CAC
- adds r0, 0x1
- cmp r1, r0
- beq _080D3CB2
- b _080D3D00
-_080D3C5C:
- ldr r0, =0x00000212
- cmp r1, r0
- beq _080D3CE4
- cmp r1, r0
- bgt _080D3C78
- subs r0, 0xA
- cmp r1, r0
- beq _080D3C9C
- adds r0, 0x2
- cmp r1, r0
- beq _080D3CE4
- b _080D3D00
- .pool
-_080D3C78:
- ldr r0, =0x00000282
- cmp r1, r0
- beq _080D3CC4
- cmp r1, r0
- bgt _080D3C90
- subs r0, 0x1
- cmp r1, r0
- beq _080D3CBC
- b _080D3D00
- .pool
-_080D3C90:
- ldr r0, =0x00000283
- cmp r1, r0
- beq _080D3CCC
- b _080D3D00
- .pool
-_080D3C9C:
- lsls r0, r6, 16
- asrs r0, 16
- lsls r1, r7, 16
- asrs r1, 16
- movs r2, 0x1
- bl MapGridSetMetatileIdAt
- b _080D3D00
-_080D3CAC:
- movs r2, 0xE7
- lsls r2, 1
- b _080D3CD6
-_080D3CB2:
- ldr r2, =0x000001cf
- b _080D3CD6
- .pool
-_080D3CBC:
- ldr r2, =0x00000279
- b _080D3CD6
- .pool
-_080D3CC4:
- ldr r2, =0x0000027a
- b _080D3CD6
- .pool
-_080D3CCC:
- ldr r2, =0x0000027b
- b _080D3CD6
- .pool
-_080D3CD4:
- ldr r2, =0x00000271
-_080D3CD6:
- adds r0, r4, 0
- adds r1, r5, 0
- bl MapGridSetMetatileIdAt
- b _080D3D00
- .pool
-_080D3CE4:
- lsls r0, r6, 16
- asrs r0, 16
- lsls r1, r7, 16
- asrs r1, 16
- movs r2, 0x86
- lsls r2, 2
- bl MapGridSetMetatileIdAt
- b _080D3D00
-_080D3CF6:
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0xE
- bl MapGridSetMetatileIdAt
-_080D3D00:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80D3C10
-
- thumb_func_start sub_80D3D08
-sub_80D3D08: @ 80D3D08
- push {lr}
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- lsrs r1, r0, 16
- adds r2, r1, 0
- cmp r1, 0x1
- bne _080D3D24
- movs r0, 0x1
- b _080D3D56
-_080D3D24:
- ldr r0, =0x00000279
- cmp r1, r0
- bne _080D3D34
- movs r0, 0x2
- b _080D3D56
- .pool
-_080D3D34:
- ldr r0, =0x0000027a
- cmp r1, r0
- bne _080D3D44
- movs r0, 0x3
- b _080D3D56
- .pool
-_080D3D44:
- ldr r0, =0x0000027b
- cmp r2, r0
- beq _080D3D54
- movs r0, 0
- b _080D3D56
- .pool
-_080D3D54:
- movs r0, 0x4
-_080D3D56:
- pop {r1}
- bx r1
- thumb_func_end sub_80D3D08
-
- thumb_func_start sub_80D3D5C
-sub_80D3D5C: @ 80D3D5C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- ldr r1, =gUnknown_03001100
- ldrb r2, [r1]
- mov r3, r10
- adds r0, r2, r3
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- movs r4, 0
- cmp r4, r2
- blt _080D3D8A
- b _080D3EA0
-_080D3D8A:
- lsls r0, r3, 16
- asrs r7, r0, 16
-_080D3D8E:
- mov r1, r9
- lsls r0, r1, 16
- asrs r0, 16
- lsls r4, 16
- asrs r1, r4, 16
- adds r0, r1
- lsls r0, 16
- lsrs r6, r0, 16
- asrs r5, r0, 16
- adds r0, r5, 0
- adds r1, r7, 0
- bl MapGridGetMetatileIdAt
- mov r8, r4
- cmp r0, 0x15
- bne _080D3E12
- adds r4, r7, 0x1
- lsls r1, r4, 16
- asrs r1, 16
- adds r0, r5, 0
- bl sub_80D3D08
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _080D3DE8
- cmp r0, 0x2
- bgt _080D3DD0
- cmp r0, 0x1
- beq _080D3DDA
- b _080D3E12
- .pool
-_080D3DD0:
- cmp r0, 0x3
- beq _080D3DF8
- cmp r0, 0x4
- beq _080D3E08
- b _080D3E12
-_080D3DDA:
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x82
- lsls r2, 2
- bl MapGridSetMetatileIdAt
- b _080D3E12
-_080D3DE8:
- adds r0, r5, 0
- adds r1, r4, 0
- ldr r2, =0x00000281
- bl MapGridSetMetatileIdAt
- b _080D3E12
- .pool
-_080D3DF8:
- adds r0, r5, 0
- adds r1, r4, 0
- ldr r2, =0x00000282
- bl MapGridSetMetatileIdAt
- b _080D3E12
- .pool
-_080D3E08:
- adds r0, r5, 0
- adds r1, r4, 0
- ldr r2, =0x00000283
- bl MapGridSetMetatileIdAt
-_080D3E12:
- lsls r0, r6, 16
- asrs r5, r0, 16
- ldr r3, [sp]
- lsls r0, r3, 16
- asrs r4, r0, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- cmp r0, 0x1
- bne _080D3E8C
- adds r4, 0x1
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- movs r1, 0x82
- lsls r1, 2
- cmp r0, r1
- bne _080D3E44
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl MapGridSetMetatileIdAt
-_080D3E44:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000281
- cmp r0, r1
- bne _080D3E5C
- adds r0, r5, 0
- adds r1, r4, 0
- ldr r2, =0x00000279
- bl MapGridSetMetatileIdAt
-_080D3E5C:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000282
- cmp r0, r1
- bne _080D3E74
- adds r0, r5, 0
- adds r1, r4, 0
- ldr r2, =0x0000027a
- bl MapGridSetMetatileIdAt
-_080D3E74:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000283
- cmp r0, r1
- bne _080D3E8C
- adds r0, r5, 0
- adds r1, r4, 0
- ldr r2, =0x0000027b
- bl MapGridSetMetatileIdAt
-_080D3E8C:
- movs r1, 0x80
- lsls r1, 9
- add r1, r8
- lsrs r4, r1, 16
- asrs r1, 16
- ldr r0, =gUnknown_03001100
- ldrb r0, [r0]
- cmp r1, r0
- bge _080D3EA0
- b _080D3D8E
-_080D3EA0:
- ldr r1, =gUnknown_03001100
- ldrb r0, [r1]
- cmp r0, 0x5
- bne _080D3EC8
- mov r3, r9
- lsls r5, r3, 16
- asrs r5, 16
- mov r0, r10
- lsls r4, r0, 16
- asrs r4, 16
- movs r0, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_80D3EF4
- movs r0, 0x1
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_80D3EF4
-_080D3EC8:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D3D5C
-
- thumb_func_start sub_80D3EF4
-sub_80D3EF4: @ 80D3EF4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r5, r1, 16
- adds r3, r5, 0
- lsls r2, 16
- lsrs r2, 16
- mov r10, r2
- cmp r0, 0
- bne _080D3F2C
- mov r2, sp
- ldr r1, =gUnknown_03001108
- ldrb r0, [r1, 0x5]
- strb r0, [r2]
- ldrb r0, [r1, 0xA]
- strb r0, [r2, 0x1]
- ldrb r0, [r1, 0xF]
- strb r0, [r2, 0x2]
- mov r8, r5
- b _080D3F4E
- .pool
-_080D3F2C:
- cmp r0, 0x1
- beq _080D3F32
- b _080D414A
-_080D3F32:
- mov r2, sp
- ldr r1, =gUnknown_03001108
- ldrb r0, [r1, 0x9]
- strb r0, [r2]
- ldrb r0, [r1, 0xE]
- strb r0, [r2, 0x1]
- ldrb r0, [r1, 0x13]
- strb r0, [r2, 0x2]
- lsls r0, r3, 16
- movs r1, 0x80
- lsls r1, 11
- adds r0, r1
- lsrs r0, 16
- mov r8, r0
-_080D3F4E:
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080D3FC6
- mov r1, r8
- lsls r0, r1, 16
- asrs r5, r0, 16
- mov r1, r10
- lsls r0, r1, 16
- asrs r0, 16
- adds r4, r0, 0x3
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- movs r1, 0x82
- lsls r1, 2
- cmp r0, r1
- bne _080D3F7E
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl MapGridSetMetatileIdAt
-_080D3F7E:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000281
- cmp r0, r1
- bne _080D3F96
- ldr r2, =0x00000279
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
-_080D3F96:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000282
- cmp r0, r1
- bne _080D3FAE
- ldr r2, =0x0000027a
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
-_080D3FAE:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000283
- cmp r0, r1
- bne _080D3FC6
- ldr r2, =0x0000027b
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
-_080D3FC6:
- mov r0, sp
- ldrb r0, [r0, 0x1]
- cmp r0, 0x1
- bne _080D40C0
- mov r0, r8
- lsls r5, r0, 16
- asrs r6, r5, 16
- mov r1, r10
- lsls r4, r1, 16
- asrs r7, r4, 16
- adds r1, r7, 0x2
- adds r0, r6, 0
- bl MapGridGetMetatileIdAt
- mov r9, r4
- cmp r0, 0x15
- bne _080D4056
- adds r4, r7, 0x3
- lsls r1, r4, 16
- asrs r1, 16
- adds r0, r6, 0
- bl sub_80D3D08
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _080D4034
- cmp r0, 0x2
- bgt _080D4024
- cmp r0, 0x1
- beq _080D402E
- b _080D4056
- .pool
-_080D4024:
- cmp r0, 0x3
- beq _080D403C
- cmp r0, 0x4
- beq _080D404C
- b _080D4056
-_080D402E:
- movs r2, 0x82
- lsls r2, 2
- b _080D403E
-_080D4034:
- ldr r2, =0x00000281
- b _080D403E
- .pool
-_080D403C:
- ldr r2, =0x00000282
-_080D403E:
- adds r0, r6, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
- b _080D4056
- .pool
-_080D404C:
- ldr r2, =0x00000283
- adds r0, r6, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
-_080D4056:
- asrs r5, 16
- mov r1, r9
- asrs r0, r1, 16
- adds r4, r0, 0x4
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- movs r1, 0x82
- lsls r1, 2
- cmp r0, r1
- bne _080D4078
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl MapGridSetMetatileIdAt
-_080D4078:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000281
- cmp r0, r1
- bne _080D4090
- ldr r2, =0x00000279
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
-_080D4090:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000282
- cmp r0, r1
- bne _080D40A8
- ldr r2, =0x0000027a
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
-_080D40A8:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridGetMetatileIdAt
- ldr r1, =0x00000283
- cmp r0, r1
- bne _080D40C0
- ldr r2, =0x0000027b
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
-_080D40C0:
- mov r0, sp
- ldrb r0, [r0, 0x2]
- cmp r0, 0x1
- bne _080D414A
- mov r1, r8
- lsls r0, r1, 16
- asrs r5, r0, 16
- mov r1, r10
- lsls r0, r1, 16
- asrs r4, r0, 16
- adds r1, r4, 0x3
- adds r0, r5, 0
- bl MapGridGetMetatileIdAt
- cmp r0, 0x15
- bne _080D414A
- adds r4, 0x4
- lsls r1, r4, 16
- asrs r1, 16
- adds r0, r5, 0
- bl sub_80D3D08
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _080D4128
- cmp r0, 0x2
- bgt _080D4118
- cmp r0, 0x1
- beq _080D4122
- b _080D414A
- .pool
-_080D4118:
- cmp r0, 0x3
- beq _080D4130
- cmp r0, 0x4
- beq _080D4140
- b _080D414A
-_080D4122:
- movs r2, 0x82
- lsls r2, 2
- b _080D4132
-_080D4128:
- ldr r2, =0x00000281
- b _080D4132
- .pool
-_080D4130:
- ldr r2, =0x00000282
-_080D4132:
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
- b _080D414A
- .pool
-_080D4140:
- ldr r2, =0x00000283
- adds r0, r5, 0
- adds r1, r4, 0
- bl MapGridSetMetatileIdAt
-_080D414A:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D3EF4
-
- thumb_func_start objc_8097BA8
-objc_8097BA8: @ 80D4160
- movs r2, 0
- movs r1, 0x8
- strh r1, [r0, 0x2E]
- strh r2, [r0, 0x30]
- strh r2, [r0, 0x34]
- ldr r1, =objc_8097BBC
- str r1, [r0, 0x1C]
- bx lr
- .pool
- thumb_func_end objc_8097BA8
-
- thumb_func_start objc_8097BBC
-objc_8097BBC: @ 80D4174
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r2, 0x2E
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x24]
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r2, 0x2E
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- adds r0, 0x8
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x32]
- ldrh r1, [r4, 0x2E]
- adds r1, 0x1
- ldrh r2, [r4, 0x34]
- lsls r0, r2, 16
- asrs r0, 18
- adds r1, r0
- strh r1, [r4, 0x2E]
- adds r2, 0x1
- strh r2, [r4, 0x34]
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0x1C
- beq _080D41C0
- adds r0, r1, 0x1
- strh r0, [r4, 0x30]
- b _080D41C4
-_080D41C0:
- ldr r0, =sub_80D41D0
- str r0, [r4, 0x1C]
-_080D41C4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end objc_8097BBC
- thumb_func_start sub_80D41D0
-sub_80D41D0: @ 80D41D0
+ thumb_func_start CutGrassSpriteCallbackEnd
+CutGrassSpriteCallbackEnd: @ 80D41D0
push {r4-r6,lr}
movs r4, 0x1
_080D41D4:
- ldr r6, =gUnknown_02039DD0
+ ldr r6, =gCutGrassSpriteArrayPtr
ldr r0, [r6]
adds r0, r4
ldrb r1, [r0]
@@ -1330,7 +52,7 @@ _080D422A:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80D41D0
+ thumb_func_end CutGrassSpriteCallbackEnd
thumb_func_start sub_80D423C
sub_80D423C: @ 80D423C
@@ -1352,7 +74,7 @@ sub_80D423C: @ 80D423C
lsls r1, r4, 16
asrs r1, 16
adds r0, r5, 0
- bl sub_80D3D08
+ bl GetTallGrassCaseAt
lsls r0, 24
lsrs r0, 24
cmp r0, 0x2
@@ -1471,8 +193,8 @@ _080D434A:
.pool
thumb_func_end sub_80D42B8
- thumb_func_start sub_80D4354
-sub_80D4354: @ 80D4354
+ thumb_func_start StartCutTreeFieldEffect
+StartCutTreeFieldEffect: @ 80D4354
push {lr}
movs r0, 0x80
bl PlaySE
@@ -1481,6 +203,6 @@ sub_80D4354: @ 80D4354
bl EnableBothScriptContexts
pop {r0}
bx r0
- thumb_func_end sub_80D4354
+ thumb_func_end StartCutTreeFieldEffect
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 4001b7144..5c1e6c1b0 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -10199,10 +10199,10 @@ _081B5714:
movs r0, 0x5
bl PlaySE
_081B571A:
- ldr r0, =gUnknown_03005DB0
+ ldr r0, =gFieldCallback2
movs r1, 0
str r1, [r0]
- ldr r0, =gUnknown_0203CEEC
+ ldr r0, =gPostMenuFieldCallback
str r1, [r0]
adds r0, r4, 0
bl sub_81B1C1C
@@ -10213,8 +10213,8 @@ _081B572A:
.pool
thumb_func_end sub_81B56D8
- thumb_func_start FieldCallback_Teleport
-FieldCallback_Teleport: @ 81B5738
+ thumb_func_start FieldCallback_PrepareFadeInFromMenu
+FieldCallback_PrepareFadeInFromMenu: @ 81B5738
push {lr}
bl pal_fill_black
ldr r0, =task_launch_hm_phase_2
@@ -10224,7 +10224,7 @@ FieldCallback_Teleport: @ 81B5738
pop {r1}
bx r1
.pool
- thumb_func_end FieldCallback_Teleport
+ thumb_func_end FieldCallback_PrepareFadeInFromMenu
thumb_func_start task_launch_hm_phase_2
task_launch_hm_phase_2: @ 81B5750
@@ -10241,7 +10241,7 @@ task_launch_hm_phase_2: @ 81B5750
lsls r0, 16
lsrs r0, 16
str r0, [r1]
- ldr r0, =gUnknown_0203CEEC
+ ldr r0, =gPostMenuFieldCallback
ldr r0, [r0]
bl _call_via_r0
adds r0, r4, 0
@@ -10345,10 +10345,10 @@ sub_81B5820: @ 81B5820
lsrs r0, 24
cmp r0, 0x1
bne _081B585C
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
+ ldr r1, =gFieldCallback2
+ ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
+ ldr r1, =gPostMenuFieldCallback
ldr r0, =hm_surf_run_dp02scr
str r0, [r1]
movs r0, 0x1
@@ -10463,10 +10463,10 @@ hm_prepare_waterfall: @ 81B58F0
lsrs r0, 24
cmp r0, 0x1
bne _081B594C
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
+ ldr r1, =gFieldCallback2
+ ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
+ ldr r1, =gPostMenuFieldCallback
ldr r0, =hm2_waterfall
str r0, [r1]
movs r0, 0x1
@@ -10510,10 +10510,10 @@ sub_81B5974: @ 81B5974
b _081B599E
.pool
_081B5990:
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
+ ldr r1, =gFieldCallback2
+ ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
+ ldr r1, =gPostMenuFieldCallback
ldr r0, =sub_81B5958
str r0, [r1]
movs r0, 0x1
@@ -17276,7 +17276,7 @@ sub_81B9354: @ 81B9354
sub sp, 0xC
lsls r0, 24
lsrs r0, 24
- ldr r2, =gUnknown_03005DB0
+ ldr r2, =gFieldCallback2
ldr r1, =hm_add_c3_without_phase_2
str r1, [r2]
movs r1, 0
@@ -17308,7 +17308,7 @@ sub_81B9390: @ 81B9390
movs r0, 0xFF
strh r0, [r4]
_081B93A6:
- ldr r0, =gUnknown_03005DB0
+ ldr r0, =gFieldCallback2
ldr r1, =hm_add_c3_without_phase_2
str r1, [r0]
ldr r0, =CB2_ReturnToField
@@ -17417,7 +17417,7 @@ _081B9486:
ldr r1, =gSpecialVar_0x8004
ldrb r0, [r2]
strh r0, [r1]
- ldr r1, =gUnknown_03005DB0
+ ldr r1, =gFieldCallback2
ldr r0, =hm_add_c3_without_phase_2
str r0, [r1]
ldr r0, =CB2_ReturnToField
@@ -17553,7 +17553,7 @@ _081B95A4:
lsrs r0, 24
strh r0, [r4]
_081B95BA:
- ldr r0, =gUnknown_03005DB0
+ ldr r0, =gFieldCallback2
ldr r1, =hm_add_c3_without_phase_2
str r1, [r0]
ldr r0, =CB2_ReturnToField
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index c7f2ad085..d758aa314 100644
--- a/asm/pokemon_summary_screen.s
+++ b/asm/pokemon_summary_screen.s
@@ -2070,7 +2070,7 @@ sub_81C4F44: @ 81C4F44
cmp r0, 0
bne _081C4F6E
bl overworld_free_bg_tilemaps
- ldr r0, =gUnknown_03005DB0
+ ldr r0, =gFieldCallback2
ldr r1, =hm_add_c3_without_phase_2
str r1, [r0]
ldr r1, =CB2_ReturnToField
diff --git a/src/data/field_event_obj/event_object_graphics.h b/src/data/field_event_obj/event_object_graphics.h
index 3d4303189..b226b066a 100755
--- a/src/data/field_event_obj/event_object_graphics.h
+++ b/src/data/field_event_obj/event_object_graphics.h
@@ -1376,7 +1376,9 @@ const u32 gFieldEffectObjectPic_ShadowSmall[] = INCBIN_U32("graphics/event_objec
const u32 gFieldEffectObjectPic_ShadowMedium[] = INCBIN_U32("graphics/event_objects/pics/effects/shadow_medium.4bpp");
const u32 gFieldEffectObjectPic_ShadowLarge[] = INCBIN_U32("graphics/event_objects/pics/effects/shadow_large.4bpp");
const u32 gFieldEffectObjectPic_ShadowExtraLarge[] = INCBIN_U32("graphics/event_objects/pics/effects/shadow_extra_large.4bpp");
-const u32 gUnknown_084F6D38[] = INCBIN_U32("graphics/event_objects/pics/effects/unknown_4F6D38/0.4bpp");
+const u32 filler_8368A08[0x48] = {};
+const u8 gFieldEffectPic_CutGrass[] = INCBIN_U8("graphics/event_objects/pics/effects/cut_grass.4bpp");
+const u32 gFieldEffectPic_CutGrass_Copy[] = INCBIN_U32("graphics/event_objects/pics/effects/cut_grass.4bpp");
const u16 gFieldEffectObjectPalette6[] = INCBIN_U16("graphics/event_objects/palettes/field_effect_object_palette_06.gbapal");
const u32 gFieldEffectObjectPic_Ripple_0[] = INCBIN_U32("graphics/event_objects/pics/effects/ripple/0.4bpp");
const u32 gFieldEffectObjectPic_Ripple_1[] = INCBIN_U32("graphics/event_objects/pics/effects/ripple/1.4bpp");
diff --git a/src/field_tasks.c b/src/field_tasks.c
index d9c3078da..59990f22e 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -623,7 +623,7 @@ static void PerStepCallback_8069F64(u8 taskId)
{
data[1] = x;
data[2] = y;
- if (MetatileBehavior_IsAsh(MapGridGetMetatileBehaviorAt(x, y)))
+ if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
{
if (MapGridGetMetatileIdAt(x, y) == 0x20a)
{
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
index 9929dd6f9..a007c8ca7 100644
--- a/src/fldeff_cut.c
+++ b/src/fldeff_cut.c
@@ -1,19 +1,613 @@
-
-// Includes
#include "global.h"
+#include "field_camera.h"
+#include "field_effect.h"
+#include "event_object_movement.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "event_obj_lock.h"
+#include "metatile_behavior.h"
+#include "party_menu.h"
+#include "overworld.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "malloc.h"
+#include "constants/event_objects.h"
+#include "constants/songs.h"
+#include "constants/abilities.h"
+
+// tileset 0 as first
+#define METATILE_ID_GRASS 0x1
+#define METATILE_ID_POKE_GRASS 0xD
+
+#define METATILE_ID_POKE_GRASS_TREE_UP 0x25
+#define METATILE_ID_GRASS_TREE_UP 0xE
+
+#define METATILE_ID_POKE_GRASS_TREE_LEFT 0x1C6
+#define METATILE_ID_POKE_GRASS_TREE_RIGHT 0x1C7
+
+#define METATILE_ID_GRASS_TREE_LEFT 0x1CE
+#define METATILE_ID_GRASS_TREE_RIGHT 0x1CF
+
+#define METATILE_ID_POKE_TALL_GRASS 0x15
+
+// tileset 6 as second
+#define METATILE_ID_POKE_STEP_LAVA_GRASS 0x206
+#define METATILE_ID_POKE_LAVA_GRASS 0x207
+#define METATILE_ID_LAVA_FIELD 0x271
+
+// tileset 7 as second
+#define METATILE_ID_POKE_ASH_GRASS 0x20A
+#define METATILE_ID_POKE_STEP_ASH_GRASS 0x212
+#define METATILE_ID_ASH 0x218
+
+// tileset 8 as second
+#define METATILE_ID_POKE_TALL_GRASS_START 0x208
+
+#define METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS 0x279
+#define METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS 0x27A
+#define METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS 0x27B
+
+#define METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS 0x281
+#define METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS 0x282
+#define METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS 0x283
+
+extern bool8 SetLastTalkedObjectInFrontOfPlayer(u8);
+extern u8 oei_task_add(void);
+
+extern struct MapPosition gPlayerFacingPosition;
+extern u8 *gCutGrassSpriteArrayPtr;
+
+extern const u8 Route103_EventScript_290705[];
+extern const u8 gFieldEffectPic_CutGrass[];
+extern const u16 gFieldEffectObjectPalette6[];
+
+#define CUT_NORMAL_SIDE 3
+#define CUT_NORMAL_AREA CUT_NORMAL_SIDE * CUT_NORMAL_SIDE
+/* P - player
+ X - cut area
+
+ XXX
+ XPX
+ XXX
+*/
-// Static type declarations
+#define CUT_HYPER_SIDE 5
+#define CUT_HYPER_AREA CUT_HYPER_SIDE * CUT_HYPER_SIDE
+/* P - player
+ X - cut area
-// Static RAM declarations
+ XXXXX
+ XXXXX
+ XXPXX
+ XXXXX
+ XXXXX
+*/
IWRAM_DATA u8 gUnknown_03001100;
IWRAM_DATA u8 gUnknown_03001101;
IWRAM_DATA u8 gUnknown_03001102;
IWRAM_DATA u32 fldeff_cut_unused_03001104;
-IWRAM_DATA u8 gUnknown_03001108[25];
+IWRAM_DATA bool8 gUnknown_03001108[CUT_HYPER_AREA];
+
+struct HyperCutterUnk
+{
+ s8 x;
+ s8 y;
+ u8 unk2[2];
+};
+
+const struct HyperCutterUnk gUnknown_0857C608[] =
+{
+ {-2, -2, {1}},
+ {-1, -2, {1}},
+ {0, -2, {2}},
+ {1, -2, {3}},
+ {2, -2, {3}},
+ {-2, -1, {1}},
+ {2, -1, {3}},
+ {-2, 0, {4}},
+ {2, 0, {6}},
+ {-2, 1, {7}},
+ {2, 1, {9}},
+ {-2, 2, {7}},
+ {-1, 2, {7}},
+ {0, 2, {8}},
+ {1, 2, {9}},
+ {2, 2, {9}},
+};
+
+const struct OamData gOamData_CutGrass =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 1,
+ .priority = 1,
+ .paletteNum = 1,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_CutGrass[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_CutGrass[] =
+{
+ gSpriteAnim_CutGrass,
+};
+
+const struct SpriteFrameImage gSpriteImageTable_CutGrass[] =
+{
+ {gFieldEffectPic_CutGrass, 0x20},
+};
+
+const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000};
+
+void FieldCallback_CutTree(void);
+void FieldCallback_CutGrass(void);
+void StartCutTreeFieldEffect(void);
+void StartCutGrassFieldEffect(void);
+void SetCutGrassMetatile(s16, s16);
+void SetCutGrassMetatiles(s16, s16);
+void CutGrassSpriteCallback1(struct Sprite *);
+void CutGrassSpriteCallback2(struct Sprite *);
+void CutGrassSpriteCallbackEnd(struct Sprite *);
+void HandleTallGrassOnHyper(u8, s16, s16);
+
+const struct SpriteTemplate gSpriteTemplate_CutGrass =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1000,
+ .oam = &gOamData_CutGrass,
+ .anims = gSpriteAnimTable_CutGrass,
+ .images = gSpriteImageTable_CutGrass,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = CutGrassSpriteCallback1,
+};
+
+bool8 SetUpFieldMove_Cut(void)
+{
+ s16 x, y;
+ u8 i, j;
+ u8 tileBehavior;
+ u8 userAbility;
+ bool8 array[CUT_NORMAL_AREA];
+ bool8 ret;
+
+ if (SetLastTalkedObjectInFrontOfPlayer(EVENT_OBJ_GFX_CUTTABLE_TREE) == TRUE)
+ {
+ // Standing in front of cuttable tree.
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutTree;
+ return TRUE;
+ }
+ else
+ {
+ PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
+ userAbility = GetMonAbility(&gPlayerParty[GetCursorSelectionMonId()]);
+ if (userAbility == ABILITY_HYPER_CUTTER)
+ {
+ gUnknown_03001100 = 5;
+ gUnknown_03001101 = 2;
+ gUnknown_03001102 = 2;
+ }
+ else
+ {
+ gUnknown_03001100 = 3;
+ gUnknown_03001101 = 1;
+ gUnknown_03001102 = 1;
+ }
+
+ for (i = 0; i < CUT_NORMAL_AREA; i++)
+ array[i] = FALSE;
+ for (i = 0; i < CUT_HYPER_AREA; i++)
+ gUnknown_03001108[i] = FALSE;
+
+ ret = FALSE;
+
+ for (i = 0; i < 3; i++)
+ {
+ y = i - 1 + gPlayerFacingPosition.y;
+ for (j = 0; j < 3; j++)
+ {
+ x = j - 1 + gPlayerFacingPosition.x;
+ if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
+ {
+ tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE
+ || MetatileBehavior_IsAshGrass(tileBehavior) == TRUE)
+ {
+ // Standing in front of grass.
+ gUnknown_03001108[6 + (i * 5) + j] = TRUE;
+ ret = TRUE;
+ }
+ if (MapGridIsImpassableAt(x, y) == TRUE)
+ {
+ array[i * 3 + j] = FALSE;
+ }
+ else
+ {
+ array[i * 3 + j] = TRUE;
+ if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
+ gUnknown_03001108[6 + (i * 5) + j] = TRUE;
+ }
+ }
+ else
+ {
+ array[i * 3 + j] = FALSE;
+ }
+ }
+ }
+
+ if (userAbility != ABILITY_HYPER_CUTTER)
+ {
+ if (ret == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutGrass;
+ }
+ }
+ else
+ {
+ bool8 r7;
+ for (i = 0; i < 16; i++)
+ {
+ x = gPlayerFacingPosition.x + gUnknown_0857C608[i].x;
+ y = gPlayerFacingPosition.y + gUnknown_0857C608[i].y;
+ r7 = TRUE;
+
+ j = 0;
+ while (1)
+ {
+ if (gUnknown_0857C608[i].unk2[j] == 0)
+ break;
+ if (array[(u8)(gUnknown_0857C608[i].unk2[j] - 1)] == FALSE)
+ {
+ r7 = FALSE;
+ break;
+ }
+ if (++j >= 2)
+ break;
+ }
+
+ if (r7 == TRUE)
+ {
+ if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
+ {
+ u8 r6 = ((gUnknown_0857C608[i].y * 5) + 12) + (gUnknown_0857C608[i].x);
+ tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE
+ || MetatileBehavior_IsAshGrass(tileBehavior) == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutGrass;
+ gUnknown_03001108[r6] = r7;
+ ret = TRUE;
+ }
+ else
+ {
+ if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
+ gUnknown_03001108[r6] = TRUE;
+ }
+ }
+ }
+ }
+
+ if (ret == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_CutGrass;
+ }
+ }
+
+ return ret;
+ }
+}
+
+void FieldCallback_CutGrass(void)
+{
+ FieldEffectStart(FLDEFF_USE_CUT_ON_GRASS);
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+}
+
+bool8 FldEff_UseCutOnGrass(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)StartCutGrassFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartCutGrassFieldEffect;
+ IncrementGameStat(GAME_STAT_USED_CUT);
+ return FALSE;
+}
+
+void FieldCallback_CutTree(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ ScriptContext1_SetupScript(Route103_EventScript_290705);
+}
+
+bool8 FldEff_UseCutOnTree(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)StartCutTreeFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartCutTreeFieldEffect;
+ IncrementGameStat(GAME_STAT_USED_CUT);
+ return FALSE;
+}
+
+void StartCutGrassFieldEffect(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_GRASS);
+ FieldEffectStart(FLDEFF_CUT_GRASS);
+}
+
+bool8 FldEff_CutGrass(void)
+{
+ s16 x, y;
+ u8 tileBehavior;
+ u8 i;
+
+ for (i = 0, PlaySE(SE_W015), PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); i < 25; i++)
+ {
+ if (gUnknown_03001108[i] == TRUE)
+ {
+ s8 xAdd = (i % 5) - 2;
+ s8 yAdd = (i / 5) - 2;
+
+ x = xAdd + gPlayerFacingPosition.x;
+ y = yAdd + gPlayerFacingPosition.y;
+
+ SetCutGrassMetatile(x, y);
+ sub_808E75C(x, y);
+ }
+ }
+
+ SetCutGrassMetatiles(gPlayerFacingPosition.x - gUnknown_03001101, gPlayerFacingPosition.y + (~gUnknown_03001102));
+ DrawWholeMapView();
+ gCutGrassSpriteArrayPtr = AllocZeroed(8);
+
+ // populate sprite ID array
+ for (i = 0; i < 8; i++)
+ {
+ gCutGrassSpriteArrayPtr[i] = CreateSprite(&gSpriteTemplate_CutGrass,
+ gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0);
+ gSprites[gCutGrassSpriteArrayPtr[i]].data[2] = 32 * i;
+ }
+
+ return FALSE;
+}
+
+// set map grid metatile depending on x, y
+void SetCutGrassMetatile(s16 x, s16 y)
+{
+ s32 metatileId = MapGridGetMetatileIdAt(x, y);
+
+ switch (metatileId)
+ {
+ case METATILE_ID_POKE_TALL_GRASS_START:
+ case METATILE_ID_POKE_TALL_GRASS:
+ case METATILE_ID_POKE_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS);
+ break;
+ case METATILE_ID_POKE_GRASS_TREE_LEFT:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_LEFT);
+ break;
+ case METATILE_ID_POKE_GRASS_TREE_RIGHT:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_RIGHT);
+ break;
+ case METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS);
+ break;
+ case METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS);
+ break;
+ case METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS);
+ break;
+ case METATILE_ID_POKE_STEP_LAVA_GRASS:
+ case METATILE_ID_POKE_LAVA_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_LAVA_FIELD);
+ break;
+ case METATILE_ID_POKE_STEP_ASH_GRASS:
+ case METATILE_ID_POKE_ASH_GRASS:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_ASH);
+ break;
+ case METATILE_ID_POKE_GRASS_TREE_UP:
+ MapGridSetMetatileIdAt(x, y, METATILE_ID_GRASS_TREE_UP);
+ break;
+ }
+}
+
+enum
+{
+ TALL_GRASS_NONE,
+ TALL_GRASS_FIELD,
+ TALL_GRASS_BASE_LEFT,
+ TALL_GRASS_BASE_CENTER,
+ TALL_GRASS_BASE_RIGHT
+};
+
+u8 GetTallGrassCaseAt(s16 x, s16 y)
+{
+ u16 metatileId = MapGridGetMetatileIdAt(x, y);
+
+ if (metatileId == METATILE_ID_GRASS)
+ return TALL_GRASS_FIELD;
+ else if (metatileId == METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS)
+ return TALL_GRASS_BASE_LEFT;
+ else if (metatileId == METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS)
+ return TALL_GRASS_BASE_CENTER;
+ else if (metatileId == METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS)
+ return TALL_GRASS_BASE_RIGHT;
+ else
+ return TALL_GRASS_NONE;
+}
+
+void SetCutGrassMetatiles(s16 x, s16 y)
+{
+ s16 i;
+ s16 lowerY = y + gUnknown_03001100;
+
+ for (i = 0; i < gUnknown_03001100; i++)
+ {
+ s16 currentX = x + i;
+ if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID_POKE_TALL_GRASS)
+ {
+ switch (GetTallGrassCaseAt(currentX, y + 1))
+ {
+ case TALL_GRASS_FIELD:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_POKE_TALL_GRASS_START);
+ break;
+ case TALL_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS);
+ break;
+ case TALL_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS);
+ break;
+ case TALL_GRASS_BASE_RIGHT:
+ MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS);
+ break;
+ }
+ }
+ if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID_GRASS)
+ {
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_POKE_TALL_GRASS_START)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_GRASS);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS);
+ }
+ }
+
+ if (gUnknown_03001100 == CUT_HYPER_SIDE)
+ {
+ HandleTallGrassOnHyper(0, x, y);
+ HandleTallGrassOnHyper(1, x, y);
+ }
+}
+
+void HandleTallGrassOnHyper(u8 caseId, s16 x, s16 y)
+{
+ s16 newX;
+ bool8 arr[3];
+
+ if (caseId == 0)
+ {
+ arr[0] = gUnknown_03001108[5];
+ arr[1] = gUnknown_03001108[10];
+ arr[2] = gUnknown_03001108[15];
+ newX = x;
+ }
+ else if (caseId == 1)
+ {
+ arr[0] = gUnknown_03001108[9];
+ arr[1] = gUnknown_03001108[14];
+ arr[2] = gUnknown_03001108[19];
+ newX = x + 4;
+ }
+ else // invalid case
+ {
+ return;
+ }
+
+ if (arr[0] == TRUE)
+ {
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_TALL_GRASS_START)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS);
+ }
+ if (arr[1] == TRUE)
+ {
+ if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID_POKE_TALL_GRASS)
+ {
+ switch (GetTallGrassCaseAt(newX, y + 3))
+ {
+ case TALL_GRASS_FIELD:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_POKE_TALL_GRASS_START);
+ break;
+ case TALL_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS);
+ break;
+ case TALL_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS);
+ break;
+ case TALL_GRASS_BASE_RIGHT:
+ MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS);
+ break;
+ }
+ }
+
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_POKE_TALL_GRASS_START)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_TALL_GRASS);
+ if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS)
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_TALL_GRASS);
+ }
+ if (arr[2] == TRUE)
+ {
+ if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_TALL_GRASS)
+ {
+ switch (GetTallGrassCaseAt(newX, y + 4))
+ {
+ case TALL_GRASS_FIELD:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_POKE_TALL_GRASS_START);
+ break;
+ case TALL_GRASS_BASE_LEFT:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_POKE_TALL_GRASS);
+ break;
+ case TALL_GRASS_BASE_CENTER:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_POKE_TALL_GRASS);
+ break;
+ case TALL_GRASS_BASE_RIGHT:
+ MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_POKE_TALL_GRASS);
+ break;
+ }
+ }
+ }
+}
+
+void CutGrassSpriteCallback1(struct Sprite *sprite)
+{
+ sprite->data[0] = 8;
+ sprite->data[1] = 0;
+ sprite->data[3] = 0;
+ sprite->callback = CutGrassSpriteCallback2;
+}
-// Static ROM declarations
+void CutGrassSpriteCallback2(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[2], sprite->data[0]);
+ sprite->pos2.y = Cos(sprite->data[2], sprite->data[0]);
-// .rodata
+ sprite->data[2] = (sprite->data[2] + 8) & 0xFF;
+ sprite->data[0] += 1 + (sprite->data[3] >> 2); // right shift by 2 is dividing by 4
+ sprite->data[3]++;
-// .text
+ if (sprite->data[1] != 28)
+ sprite->data[1]++;
+ else
+ sprite->callback = CutGrassSpriteCallbackEnd; // done rotating the grass, execute clean up function
+}
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index 4f3a091ce..654f02c23 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -78,14 +78,14 @@ bool8 SetUpFieldMove_Flash(void)
if (ShouldDoBrailleFlyEffect())
{
gSpecialVar_Result = GetCursorSelectionMonId();
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = sub_8179918;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = sub_8179918;
return TRUE;
}
else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm2_flash;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm2_flash;
return TRUE;
}
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index 162479c73..52b76edb4 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -14,11 +14,11 @@ static void sub_8145E74(void);
// text
bool8 SetUpFieldMove_Strength(void)
{
- if (npc_before_player_of_type(87) == TRUE)
+ if (SetLastTalkedObjectInFrontOfPlayer(87) == TRUE)
{
gSpecialVar_Result = GetCursorSelectionMonId();
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = FldEff_UseStrength;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FldEff_UseStrength;
return TRUE;
}
return FALSE;
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index 100e440a5..14da87eb3 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -24,8 +24,8 @@ void sub_81BE72C(void);
bool8 SetUpFieldMove_SweetScent(void)
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm2_sweet_scent;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm2_sweet_scent;
return TRUE;
}
diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c
index 1b88b42d7..e82a26cd1 100644
--- a/src/fldeff_teleport.c
+++ b/src/fldeff_teleport.c
@@ -11,8 +11,8 @@ bool8 SetUpFieldMove_Teleport(void)
{
if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm_teleport_run_dp02scr;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm_teleport_run_dp02scr;
return TRUE;
}
return FALSE;
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index ad0062c20..a5e328e4a 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -846,7 +846,7 @@ bool8 MetatileBehavior_IsBerryTreeSoil(u8 var)
return FALSE;
}
-bool8 MetatileBehavior_IsAsh(u8 var)
+bool8 MetatileBehavior_IsAshGrass(u8 var)
{
if (var == MB_ASHGRASS)
return TRUE;
diff --git a/src/overworld.c b/src/overworld.c
index 1e4116053..99670dfe2 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -88,7 +88,7 @@ extern const u16 gUnknown_82EC7C4[];
u16 gUnknown_03005DA8;
MainCallback gFieldCallback;
-bool8 (*gUnknown_03005DB0)(void);
+bool8 (*gFieldCallback2)(void);
u8 gUnknown_03005DB4;
u8 gFieldLinkPlayerCount;
@@ -1518,15 +1518,15 @@ void sub_8085E94(void *a0)
static bool8 map_post_load_hook_exec(void)
{
- if (gUnknown_03005DB0 != NULL)
+ if (gFieldCallback2 != NULL)
{
- if (!gUnknown_03005DB0())
+ if (!gFieldCallback2())
{
return FALSE;
}
else
{
- gUnknown_03005DB0 = NULL;
+ gFieldCallback2 = NULL;
gFieldCallback = NULL;
}
}
@@ -1554,7 +1554,7 @@ void CB2_NewGame(void)
ScriptContext1_Init();
ScriptContext2_Disable();
gFieldCallback = ExecuteTruckSequence;
- gUnknown_03005DB0 = NULL;
+ gFieldCallback2 = NULL;
do_load_map_stuff_loop(&gMain.state);
SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld);
@@ -1684,7 +1684,7 @@ void c2_8056854(void)
void CB2_ReturnToFieldWithOpenMenu(void)
{
FieldClearVBlankHBlankCallbacks();
- gUnknown_03005DB0 = sub_80AF6A4;
+ gFieldCallback2 = sub_80AF6A4;
CB2_ReturnToField();
}
diff --git a/src/rom6.c b/src/rom6.c
index cdc1064dd..cec2cfcb6 100644
--- a/src/rom6.c
+++ b/src/rom6.c
@@ -27,16 +27,16 @@ static void hm2_dig(void);
static void sub_8135780(void);
// extern RAM loc
-extern struct MapPosition gUnknown_0203AB40;
+extern struct MapPosition gPlayerFacingPosition;
// text
-bool8 npc_before_player_of_type(u8 a)
+bool8 SetLastTalkedObjectInFrontOfPlayer(u8 a)
{
u8 eventObjId;
- GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203AB40.x, &gUnknown_0203AB40.y);
- gUnknown_0203AB40.height = PlayerGetZCoord();
- eventObjId = GetEventObjectIdByXYZ(gUnknown_0203AB40.x, gUnknown_0203AB40.y, gUnknown_0203AB40.height);
+ GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
+ gPlayerFacingPosition.height = PlayerGetZCoord();
+ eventObjId = GetEventObjectIdByXYZ(gPlayerFacingPosition.x, gPlayerFacingPosition.y, gPlayerFacingPosition.height);
if (gEventObjects[eventObjId].graphicsId != a)
{
return FALSE;
@@ -50,7 +50,7 @@ bool8 npc_before_player_of_type(u8 a)
u8 oei_task_add(void)
{
- GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203AB40.x, &gUnknown_0203AB40.y);
+ GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
return CreateTask(task08_080C9820, 8);
}
@@ -121,14 +121,14 @@ bool8 SetUpFieldMove_RockSmash(void)
if(ShouldDoBrailleStrengthEffect())
{
gSpecialVar_Result = GetCursorSelectionMonId();
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = sub_8179834;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = sub_8179834;
return TRUE;
}
- else if (npc_before_player_of_type(0x56) == TRUE)
+ else if (SetLastTalkedObjectInFrontOfPlayer(0x56) == TRUE)
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = sub_81356C4;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = sub_81356C4;
return TRUE;
}
else
@@ -164,8 +164,8 @@ bool8 SetUpFieldMove_Dig(void)
{
if (CanUseEscapeRopeOnCurrMap() == TRUE)
{
- gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm2_dig;
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm2_dig;
return TRUE;
}
else
diff --git a/src/start_menu.c b/src/start_menu.c
index 7080ae6a8..6371acff0 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -530,7 +530,7 @@ void sub_809FA18(void) // Called from field_screen.s
{
sUnknown_02037619[0] = 0;
sUnknown_02037619[1] = 0;
- gUnknown_03005DB0 = sub_809FA00;
+ gFieldCallback2 = sub_809FA00;
}
void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s