diff options
author | PikalaxALT <PikalaxALT@users.noreply.github.com> | 2020-02-26 13:50:04 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-26 13:50:04 -0500 |
commit | 9f4e2abfc685de4f771f0107bc3bf2375df81966 (patch) | |
tree | bd4d9775c281c1533c576e6a435e9a0e481fd677 | |
parent | 3b558edc7906b2a75b7d65aa396c611ce1802e62 (diff) | |
parent | cac0681b2c11b7184545cc42d4bd209d6000b42c (diff) |
Merge pull request #272 from PikalaxALT/fldeff_cut
fldeff_cut
-rw-r--r-- | asm/field_control_avatar.s | 2 | ||||
-rw-r--r-- | asm/field_player_avatar.s | 12 | ||||
-rw-r--r-- | asm/fldeff_cut.s | 535 | ||||
-rw-r--r-- | asm/fldeff_flash.s | 2 | ||||
-rw-r--r-- | data/field_effect_scripts.s | 6 | ||||
-rw-r--r-- | data/fldeff_cut.s | 40 | ||||
-rw-r--r-- | include/constants/metatile_labels.h | 24 | ||||
-rw-r--r-- | include/event_object_movement.h | 4 | ||||
-rw-r--r-- | include/event_scripts.h | 3 | ||||
-rw-r--r-- | include/field_specials.h | 2 | ||||
-rw-r--r-- | include/fieldmap.h | 5 | ||||
-rw-r--r-- | include/fldeff.h | 2 | ||||
-rw-r--r-- | include/global.fieldmap.h | 2 | ||||
-rw-r--r-- | include/metatile_behavior.h | 2 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/field_fadetransition.c | 7 | ||||
-rw-r--r-- | src/fieldmap.c | 100 | ||||
-rw-r--r-- | src/fldeff_cut.c | 299 | ||||
-rw-r--r-- | src/fldeff_dig.c | 2 | ||||
-rw-r--r-- | src/fldeff_rocksmash.c | 44 | ||||
-rw-r--r-- | src/fldeff_strength.c | 2 | ||||
-rw-r--r-- | src/fldeff_sweetscent.c | 2 | ||||
-rw-r--r-- | src/fldeff_teleport.c | 2 | ||||
-rw-r--r-- | src/metatile_behavior.c | 41 | ||||
-rw-r--r-- | src/quest_log.c | 30 | ||||
-rw-r--r-- | src/wild_encounter.c | 22 | ||||
-rw-r--r-- | sym_ewram.txt | 8 |
27 files changed, 467 insertions, 737 deletions
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s index b74e60d1f..f1bef0721 100644 --- a/asm/field_control_avatar.s +++ b/asm/field_control_avatar.s @@ -332,7 +332,7 @@ sub_806CAC8: @ 806CAC8 movs r2, 0x2 ldrsh r1, [r4, r2] movs r2, 0xFF - bl sub_8058F48 + bl MapGridGetMetatileAttributeAt mov r8, r0 mov r0, sp movs r1, 0 diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s index 5510caceb..6e425d2c7 100644 --- a/asm/field_player_avatar.s +++ b/asm/field_player_avatar.s @@ -2921,7 +2921,7 @@ IsPlayerFacingSurfableFishableWater: @ 805C8B0 ldrsh r0, [r0, r1] movs r2, 0 ldrsh r1, [r5, r2] - bl sub_805C938 + bl MetatileAtCoordsIsWaterTile lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -2940,24 +2940,24 @@ _0805C92E: bx r1 thumb_func_end IsPlayerFacingSurfableFishableWater - thumb_func_start sub_805C938 -sub_805C938: @ 805C938 + thumb_func_start MetatileAtCoordsIsWaterTile +MetatileAtCoordsIsWaterTile: @ 805C938 push {lr} lsls r0, 16 asrs r0, 16 lsls r1, 16 asrs r1, 16 movs r2, 0x1 - bl sub_8058F48 + bl MapGridGetMetatileAttributeAt lsls r0, 24 lsrs r0, 24 movs r1, 0x2 - bl sub_805A2BC + bl TestMetatileAttributeBit lsls r0, 24 lsrs r0, 24 pop {r1} bx r1 - thumb_func_end sub_805C938 + thumb_func_end MetatileAtCoordsIsWaterTile thumb_func_start ClearPlayerAvatarInfo ClearPlayerAvatarInfo: @ 805C95C diff --git a/asm/fldeff_cut.s b/asm/fldeff_cut.s deleted file mode 100644 index c0266194e..000000000 --- a/asm/fldeff_cut.s +++ /dev/null @@ -1,535 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8097874 -sub_8097874: @ 8097874 - push {lr} - lsls r0, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - movs r2, 0x1 - bl sub_8058F48 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1 - bl sub_805A2BC - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8097874 - - thumb_func_start SetUpFieldMove_Cut -SetUpFieldMove_Cut: @ 8097898 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - ldr r4, _080978CC @ =gUnknown_2039874 - movs r0, 0 - strb r0, [r4] - bl CutMoveRuinValleyCheck - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080978E0 - movs r0, 0x5F - bl CheckObjectGraphicsInFrontOfPlayer - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08097904 - ldr r1, _080978D0 @ =gFieldCallback2 - ldr r0, _080978D4 @ =FieldCallback_PrepareFadeInFromMenu - str r0, [r1] - ldr r1, _080978D8 @ =gPostMenuFieldCallback - ldr r0, _080978DC @ =sub_80979D0 - b _080978EC - .align 2, 0 -_080978CC: .4byte gUnknown_2039874 -_080978D0: .4byte gFieldCallback2 -_080978D4: .4byte FieldCallback_PrepareFadeInFromMenu -_080978D8: .4byte gPostMenuFieldCallback -_080978DC: .4byte sub_80979D0 -_080978E0: - strb r0, [r4] -_080978E2: - ldr r1, _080978F4 @ =gFieldCallback2 - ldr r0, _080978F8 @ =FieldCallback_PrepareFadeInFromMenu - str r0, [r1] - ldr r1, _080978FC @ =gPostMenuFieldCallback - ldr r0, _08097900 @ =sub_8097984 -_080978EC: - str r0, [r1] - movs r0, 0x1 - b _08097970 - .align 2, 0 -_080978F4: .4byte gFieldCallback2 -_080978F8: .4byte FieldCallback_PrepareFadeInFromMenu -_080978FC: .4byte gPostMenuFieldCallback -_08097900: .4byte sub_8097984 -_08097904: - ldr r4, _0809797C @ =gPlayerFacingPosition - adds r1, r4, 0x2 - adds r0, r4, 0 - bl PlayerGetDestCoords - movs r7, 0 - adds r2, r4, 0 - ldr r0, _08097980 @ =0x0000ffff - mov r8, r0 -_08097916: - mov r1, r8 - adds r0, r1, r7 - ldrh r1, [r2, 0x2] - adds r0, r1 - movs r6, 0 - lsls r0, 16 - asrs r5, r0, 16 -_08097924: - mov r1, r8 - adds r0, r1, r6 - ldrh r1, [r2] - adds r0, r1 - lsls r0, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - adds r1, r5, 0 - str r2, [sp] - bl MapGridGetZCoordAt - lsls r0, 24 - lsrs r0, 24 - ldr r2, [sp] - movs r1, 0x4 - ldrsb r1, [r2, r1] - cmp r0, r1 - bne _0809795A - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8097874 - lsls r0, 24 - lsrs r0, 24 - ldr r2, [sp] - cmp r0, 0x1 - beq _080978E2 -_0809795A: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x2 - bls _08097924 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x2 - bls _08097916 - movs r0, 0 -_08097970: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0809797C: .4byte gPlayerFacingPosition -_08097980: .4byte 0x0000ffff - thumb_func_end SetUpFieldMove_Cut - - thumb_func_start sub_8097984 -sub_8097984: @ 8097984 - push {lr} - movs r0, 0x1 - bl FieldEffectStart - bl GetCursorSelectionMonId - ldr r1, _0809799C @ =gFieldEffectArguments - lsls r0, 24 - lsrs r0, 24 - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0809799C: .4byte gFieldEffectArguments - thumb_func_end sub_8097984 - - thumb_func_start sub_80979A0 -sub_80979A0: @ 80979A0 - push {lr} - bl oei_task_add - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080979C8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _080979CC @ =sub_8097A20 - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - movs r0, 0x12 - bl IncrementGameStat - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080979C8: .4byte gTasks -_080979CC: .4byte sub_8097A20 - thumb_func_end sub_80979A0 - - thumb_func_start sub_80979D0 -sub_80979D0: @ 80979D0 - push {lr} - bl GetCursorSelectionMonId - ldr r1, _080979E8 @ =gFieldEffectArguments - lsls r0, 24 - lsrs r0, 24 - str r0, [r1] - ldr r0, _080979EC @ =EventScript_FldEffCut - bl ScriptContext1_SetupScript - pop {r0} - bx r0 - .align 2, 0 -_080979E8: .4byte gFieldEffectArguments -_080979EC: .4byte EventScript_FldEffCut - thumb_func_end sub_80979D0 - - thumb_func_start sub_80979F0 -sub_80979F0: @ 80979F0 - push {lr} - bl oei_task_add - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08097A18 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r2, _08097A1C @ =sub_8097C6C - lsrs r0, r2, 16 - strh r0, [r1, 0x18] - strh r2, [r1, 0x1A] - movs r0, 0x12 - bl IncrementGameStat - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08097A18: .4byte gTasks -_08097A1C: .4byte sub_8097C6C - thumb_func_end sub_80979F0 - - thumb_func_start sub_8097A20 -sub_8097A20: @ 8097A20 - push {lr} - movs r0, 0x1 - bl FieldEffectActiveListRemove - ldr r0, _08097A38 @ =gUnknown_2039874 - ldrb r0, [r0] - cmp r0, 0x1 - bne _08097A3C - bl CutMoveOpenDottedHoleDoor - b _08097A42 - .align 2, 0 -_08097A38: .4byte gUnknown_2039874 -_08097A3C: - movs r0, 0x3A - bl FieldEffectStart -_08097A42: - pop {r0} - bx r0 - thumb_func_end sub_8097A20 - - thumb_func_start sub_8097A48 -sub_8097A48: @ 8097A48 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - movs r7, 0 - movs r0, 0x79 - bl PlaySE - ldr r4, _08097B38 @ =gPlayerFacingPosition - adds r1, r4, 0x2 - adds r0, r4, 0 - bl PlayerGetDestCoords - mov r8, r4 - ldr r0, _08097B3C @ =0x0000ffff - mov r9, r0 -_08097A68: - mov r1, r9 - adds r0, r1, r7 - mov r2, r8 - ldrh r2, [r2, 0x2] - adds r0, r2 - movs r6, 0 - lsls r0, 16 - asrs r5, r0, 16 -_08097A78: - mov r1, r9 - adds r0, r1, r6 - mov r2, r8 - ldrh r2, [r2] - adds r0, r2 - lsls r0, 16 - asrs r4, r0, 16 - adds r0, r4, 0 - adds r1, r5, 0 - bl MapGridGetZCoordAt - lsls r0, 24 - lsrs r0, 24 - mov r2, r8 - movs r1, 0x4 - ldrsb r1, [r2, r1] - cmp r0, r1 - bne _08097ABC - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8097874 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08097ABC - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_8097B50 - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_805F378 -_08097ABC: - adds r0, r6, 0x1 - lsls r0, 24 - lsrs r6, r0, 24 - cmp r6, 0x2 - bls _08097A78 - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x2 - bls _08097A68 - bl DrawWholeMapView - ldr r4, _08097B40 @ =gUnknown_2039870 - movs r0, 0x8 - bl Alloc - str r0, [r4] - movs r7, 0 - ldr r5, _08097B44 @ =gSprites -_08097AE2: - ldr r0, _08097B48 @ =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, _08097B4C @ =gUnknown_83D414C - movs r3, 0 - bl CreateSprite - ldr r1, [r4] - adds r1, r7 - strb r0, [r1] - ldr r0, [r4] - adds r0, r7 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - lsls r1, r7, 5 - strh r1, [r0, 0x32] - adds r0, r7, 0x1 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0x7 - bls _08097AE2 - movs r0, 0 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08097B38: .4byte gPlayerFacingPosition -_08097B3C: .4byte 0x0000ffff -_08097B40: .4byte gUnknown_2039870 -_08097B44: .4byte gSprites -_08097B48: .4byte gPlayerAvatar -_08097B4C: .4byte gUnknown_83D414C - thumb_func_end sub_8097A48 - - thumb_func_start sub_8097B50 -sub_8097B50: @ 8097B50 - push {r4-r7,lr} - lsls r0, 16 - lsls r1, 16 - movs r4, 0 - lsrs r6, r0, 16 - asrs r0, 16 - lsrs r7, r1, 16 - asrs r1, 16 - bl MapGridGetMetatileIdAt - lsls r0, 16 - lsrs r2, r0, 16 - ldr r1, _08097B84 @ =gUnknown_83D4100 - ldr r5, _08097B88 @ =0x0000ffff - mov r12, r1 -_08097B6E: - lsls r3, r4, 2 - adds r0, r3, r1 - ldrh r0, [r0] - cmp r0, r5 - beq _08097BA0 - cmp r0, r2 - beq _08097B8C - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - b _08097B6E - .align 2, 0 -_08097B84: .4byte gUnknown_83D4100 -_08097B88: .4byte 0x0000ffff -_08097B8C: - lsls r0, r6, 16 - asrs r0, 16 - lsls r1, r7, 16 - asrs r1, 16 - mov r2, r12 - adds r2, 0x2 - adds r2, r3, r2 - ldrh r2, [r2] - bl MapGridSetMetatileIdAt -_08097BA0: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8097B50 - - thumb_func_start objc_8097BA8 -objc_8097BA8: @ 8097BA8 - movs r2, 0 - movs r1, 0x8 - strh r1, [r0, 0x2E] - strh r2, [r0, 0x30] - strh r2, [r0, 0x34] - ldr r1, _08097BB8 @ =objc_8097BBC - str r1, [r0, 0x1C] - bx lr - .align 2, 0 -_08097BB8: .4byte objc_8097BBC - thumb_func_end objc_8097BA8 - - thumb_func_start objc_8097BBC -objc_8097BBC: @ 8097BBC - 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 _08097C08 - adds r0, r1, 0x1 - strh r0, [r4, 0x30] - b _08097C0C -_08097C08: - ldr r0, _08097C14 @ =sub_8097C18 - str r0, [r4, 0x1C] -_08097C0C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097C14: .4byte sub_8097C18 - thumb_func_end objc_8097BBC - - thumb_func_start sub_8097C18 -sub_8097C18: @ 8097C18 - push {r4-r6,lr} - movs r4, 0x1 -_08097C1C: - ldr r6, _08097C64 @ =gUnknown_2039870 - ldr r0, [r6] - adds r0, r4 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r5, _08097C68 @ =gSprites - adds r0, r5 - bl DestroySprite - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0x7 - bls _08097C1C - ldr r0, [r6] - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - movs r1, 0x3A - bl FieldEffectStop - ldr r0, [r6] - bl Free - bl sub_80696C0 - bl ScriptContext2_Disable - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08097C64: .4byte gUnknown_2039870 -_08097C68: .4byte gSprites - thumb_func_end sub_8097C18 - - thumb_func_start sub_8097C6C -sub_8097C6C: @ 8097C6C - push {lr} - movs r0, 0x79 - bl PlaySE - movs r0, 0x2 - bl FieldEffectActiveListRemove - bl EnableBothScriptContexts - pop {r0} - bx r0 - thumb_func_end sub_8097C6C - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/fldeff_flash.s b/asm/fldeff_flash.s index f550d2291..c6cc17f82 100644 --- a/asm/fldeff_flash.s +++ b/asm/fldeff_flash.s @@ -42,7 +42,7 @@ _080C9B6E: thumb_func_start sub_80C9B74 sub_80C9B74: @ 80C9B74 push {r4,lr} - bl oei_task_add + bl CreateFieldEffectShowMon adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index de50ed39d..cac76bea9 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -78,11 +78,11 @@ gFldEffScript_ExclamationMarkIcon:: @ 81D97C4 end gFldEffScript_UseCutOnGrass:: @ 81D97CA - callnative sub_80979A0 + callnative FldEff_UseCutOnGrass end gFldEffScript_UseCutOnTree:: @ 81D97D0 - callnative sub_80979F0 + callnative FldEff_UseCutOnTree end gFldEffScript_Shadow:: @ 81D97D6 @@ -299,7 +299,7 @@ gFldEffScript_SecretPowerShrub:: @ 81D9964 end gFldEffScript_CutGrass:: @ 81D9965 - loadfadedpal_callnative gUnknown_83D4144, sub_8097A48 + loadfadedpal_callnative gFldEffPalette_CutGrass, FldEff_CutGrass end gFldEffScript_FieldMoveShowMonInit:: @ 81D996F diff --git a/data/fldeff_cut.s b/data/fldeff_cut.s deleted file mode 100644 index ca25b396a..000000000 --- a/data/fldeff_cut.s +++ /dev/null @@ -1,40 +0,0 @@ -#include "constants/maps.h" -#include "constants/species.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83D4100:: @ 83D4100 - .2byte 0x000d, 0x0001 - .2byte 0x000a, 0x0013 - .2byte 0x000b, 0x000e - .2byte 0x000c, 0x000f - .2byte 0x0352, 0x033e - .2byte 0x0300, 0x0310 - .2byte 0x0301, 0x0311 - .2byte 0x0302, 0x0312 - .2byte 0x0284, 0x0281 - .2byte 0xffff, 0xffff - - .align 2 -gOamData_83D4128:: - .4byte 0x00000000, 0x00001401 - -gAnimCmd_83D4130:: - obj_image_anim_frame 0, 30 - obj_image_anim_jump 0 - -gSpriteAnimTable_83D4138:: - .4byte gAnimCmd_83D4130 - -gUnknown_83D413C:: - obj_frame_tiles gUnknown_8398648, 0x20 - -gUnknown_83D4144:: - obj_pal gUnknown_8398688, 4096 - -gUnknown_83D414C:: @ 83D414C - spr_template 0xFFFF, 4096, gOamData_83D4128, gSpriteAnimTable_83D4138, gUnknown_83D413C, gDummySpriteAffineAnimTable, objc_8097BA8 - diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index b71e7d08f..ca4a92263 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -2,6 +2,14 @@ #define GUARD_METATILE_LABELS_H // gTileset_General +#define METATILE_General_Plain_Mowed 0x001 +#define METATILE_General_ThinTreeTop_Grass 0x00A +#define METATILE_General_WideTreeTopLeft_Grass 0x00B +#define METATILE_General_WideTreeTopRight_Grass 0x00C +#define METATILE_General_Plain_Grass 0x00D +#define METATILE_General_WideTreeTopLeft_Mowed 0x00E +#define METATILE_General_WideTreeTopRight_Mowed 0x00F +#define METATILE_General_ThinTreeTop_Mowed 0x013 #define METATILE_General_CalmWater 0x12B // gTileset_Mart @@ -127,4 +135,20 @@ #define METATILE_TrainerTower_Floor_ShadeBottomLeft 0x287 #define METATILE_TrainerTower_CounterBarrier 0x2B4 +// gTileset_ViridianForest +#define METATILE_ViridianForest_HugeTreeTopMiddle_Grass 0x284 +#define METATILE_ViridianForest_HugeTreeTopMiddle_Mowed 0x281 + +// gTileset_CeladonCity +#define METATILE_CeladonCity_CyclingRoad_Grass 0x352 +#define METATILE_CeladonCity_CyclingRoad_Mowed 0x33E + +// gTileset_FuchsiaCity +#define METATILE_FuchsiaCity_SafariZoneTreeTopLeft_Grass 0x300 +#define METATILE_FuchsiaCity_SafariZoneTreeTopMiddle_Grass 0x301 +#define METATILE_FuchsiaCity_SafariZoneTreeTopRight_Grass 0x302 +#define METATILE_FuchsiaCity_SafariZoneTreeTopLeft_Mowed 0x310 +#define METATILE_FuchsiaCity_SafariZoneTreeTopMiddle_Mowed 0x311 +#define METATILE_FuchsiaCity_SafariZoneTreeTopRight_Mowed 0x312 + #endif // GUARD_METATILE_LABELS_H diff --git a/include/event_object_movement.h b/include/event_object_movement.h index b713dbd7d..baf66d737 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -117,6 +117,8 @@ bool32 RfuUnionObjectIsInvisible(u8 objectEventId); void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo); bool32 RfuUnionObjectIsWarping(u8 objectEventId); +void sub_805F378(s16 x, s16 y); + // Exported data declarations extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; @@ -124,5 +126,7 @@ extern const struct SpritePalette gUnknown_83A5348; extern const struct SpriteTemplate * const gFieldEffectObjectTemplatePointers[]; extern const struct OamData gObjectEventBaseOam_32x32; extern const struct UCoords16 gUnknown_83A64C8[]; +extern const u16 gUnknown_8398648[]; +extern const u16 gUnknown_8398688[]; #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/event_scripts.h b/include/event_scripts.h index f026cb57a..bf16ed2ec 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1201,4 +1201,7 @@ extern const u8 Text_MonSentToBoxBillsBoxFull[]; extern const u8 EventScript_BagItemCanBeRegistered[]; +// fldeff_cut +extern const u8 EventScript_FldEffCut[]; + #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_specials.h b/include/field_specials.h index 02069ff84..9653a9169 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -25,5 +25,7 @@ bool8 ShouldShowBoxWasFullMessage(void); u16 GetHiddenItemAttr(u32 hiddenItem, u8 attr); u8 GetUnlockedSeviiAreas(void); u32 GetPlayerTrainerId(void); +bool8 CutMoveRuinValleyCheck(void); +void CutMoveOpenDottedHoleDoor(void); #endif // GUARD_FIELD_SPECIALS_H diff --git a/include/fieldmap.h b/include/fieldmap.h index 406ec2959..a8e31685f 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -19,6 +19,7 @@ u32 MapGridGetMetatileBehaviorAt(int, int); u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); void MapGridSetMetatileIdAt(int, int, u16); void MapGridSetMetatileEntryAt(int, int, u16); +u8 MapGridGetZCoordAt(s32 x, s32 y); void GetCameraCoords(u16*, u16*); bool8 MapGridIsImpassableAt(s32, s32); s32 GetMapBorderIdAt(s32, s32); @@ -29,8 +30,8 @@ struct MapConnection * GetMapConnectionAtPos(s16 x, s16 y); void sub_8059948(u8 a0, u8 a1); void save_serialize_map(void); -u32 sub_8058F1C(u32 original, u8 bit); -u32 sub_8058F48(s16 x, s16 y, u8 z); +u32 GetMetatileAttributeFromRawMetatileBehavior(u32 original, u8 bit); +u32 MapGridGetMetatileAttributeAt(s16 x, s16 y, u8 attr); void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2); #endif //GUARD_FIELDMAP_H diff --git a/include/fldeff.h b/include/fldeff.h index 51287f400..56e2dfbd9 100644 --- a/include/fldeff.h +++ b/include/fldeff.h @@ -10,7 +10,7 @@ gTasks[taskId].data[9] = (u32)func; extern struct MapPosition gPlayerFacingPosition; bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId); -u8 oei_task_add(void); +u8 CreateFieldEffectShowMon(void); // flash u8 sub_80C9DCC(u8 lightLevel, u8 mapType); diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index c599b68ab..a4d6880b1 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -15,6 +15,8 @@ enum typedef void (*TilesetCB)(void); +#define METATILE_ID(tileset, name) (METATILE_##tileset##_##name) + struct Tileset { /*0x00*/ bool8 isCompressed; diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index d567ab77c..f3195e6c9 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -114,7 +114,7 @@ bool8 MetatileBehavior_UnusedReturnFalse_10(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_11(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_12(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_13(u8 metatileBehavior); -bool8 sub_805A2BC(u8 metatileBehavior, u8 playerDirection); +bool8 TestMetatileAttributeBit(u8 attr, u8 bitmask); bool8 MetatileBehavior_UnusedIsSpinRight(u8 metatileBehavior); bool8 MetatileBehavior_UnusedIsSpinLeft(u8 metatileBehavior); bool8 MetatileBehavior_UnusedIsSpinUp(u8 metatileBehavior); diff --git a/ld_script.txt b/ld_script.txt index 74607f92e..4bd983bfc 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -131,7 +131,7 @@ SECTIONS { asm/pokemon_storage_system.o(.text); src/pokemon_icon.o(.text); src/script_movement.o(.text); - asm/fldeff_cut.o(.text); + src/fldeff_cut.o(.text); src/mail_data.o(.text); src/map_name_popup.o(.text); src/item_menu_icons.o(.text); @@ -449,7 +449,7 @@ SECTIONS { src/trainer_card.o(.rodata); data/pokemon_storage_system.o(.rodata); src/pokemon_icon.o(.rodata); - data/fldeff_cut.o(.rodata); + src/fldeff_cut.o(.rodata); src/map_name_popup.o(.rodata); src/item_menu_icons.o(.rodata); src/battle_anim_mon_movement.o(.rodata); diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 6e937e026..16f691a2d 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -22,6 +22,7 @@ #include "event_object_lock.h" #include "start_menu.h" #include "constants/songs.h" +#include "constants/event_object_movement.h" static void sub_807DF4C(u8 a0); static void sub_807DFBC(u8 taskId); @@ -348,7 +349,7 @@ static void sub_807DFBC(u8 taskId) { PlayerGetDestCoords(&task->data[12], &task->data[13]); sub_807DCB0(TRUE); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], 16); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); task->data[0] = 8; } break; @@ -372,7 +373,7 @@ static void sub_807DFBC(u8 taskId) if (sub_807E418()) { sub_807DCB0(TRUE); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], 16); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_DOWN); task->data[0] = 2; } break; @@ -752,7 +753,7 @@ static void sub_807E80C(u8 taskId) if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE) { ObjectEventClearAnimIfSpecialAnimActive(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)]); - ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], 17); + ObjectEventSetHeldMovement(&gObjectEvents[GetObjectEventIdByLocalIdAndMap(0xFF, 0, 0)], MOVEMENT_ACTION_WALK_NORMAL_UP); task->data[0] = 2; } break; diff --git a/src/fieldmap.c b/src/fieldmap.c index 1f7d8b0b8..60ff70f10 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -16,37 +16,37 @@ struct ConnectionFlags }; static void InitMapLayoutData(struct MapHeader *mapHeader); -void map_copy_with_padding(u16 *map, u16 width, u16 height); -void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader); -void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); -void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); -void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); -void fillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); -void LoadSavedMapView(void); -struct MapConnection *sub_8059600(u8 direction, s32 x, s32 y); -bool8 sub_8059658(u8 direction, s32 x, s32 y, struct MapConnection *connection); -bool8 sub_80596BC(s32 x, s32 src_width, s32 dest_width, s32 offset); +static void map_copy_with_padding(u16 *map, u16 width, u16 height); +static void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader); +static void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); +static void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); +static void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); +static void fillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset); +static void LoadSavedMapView(void); +static struct MapConnection *sub_8059600(u8 direction, s32 x, s32 y); +static bool8 sub_8059658(u8 direction, s32 x, s32 y, struct MapConnection *connection); +static bool8 sub_80596BC(s32 x, s32 src_width, s32 dest_width, s32 offset); struct BackupMapLayout VMap; -EWRAM_DATA u16 gBackupMapLayout[VIRTUAL_MAP_SIZE] = {}; +static EWRAM_DATA u16 gBackupMapLayout[VIRTUAL_MAP_SIZE] = {}; EWRAM_DATA struct MapHeader gMapHeader = {}; EWRAM_DATA struct Camera gCamera = {}; -EWRAM_DATA struct ConnectionFlags gMapConnectionFlags = {}; +static EWRAM_DATA struct ConnectionFlags gMapConnectionFlags = {}; -const struct ConnectionFlags sDummyConnectionFlags = {}; +static const struct ConnectionFlags sDummyConnectionFlags = {}; -const u32 gUnknown_8352EF0[] = { - 0x1ff, - 0x3e00, - 0x3c000, - 0xfc0000, - 0x7000000, +static const u32 sMetatileAttrMasks[] = { + 0x000001ff, + 0x00003e00, + 0x0003c000, + 0x00fc0000, + 0x07000000, 0x18000000, 0x60000000, 0x80000000 }; -const u8 gUnknown_8352F10[] = { +static const u8 sMetatileAttrShifts[] = { 0, 9, 14, @@ -87,7 +87,7 @@ static void InitMapLayoutData(struct MapHeader * mapHeader) mapheader_copy_mapdata_of_adjacent_maps(mapHeader); } -void map_copy_with_padding(u16 *map, u16 width, u16 height) +static void map_copy_with_padding(u16 *map, u16 width, u16 height) { s32 y; u16 *dest = VMap.map; @@ -101,7 +101,7 @@ void map_copy_with_padding(u16 *map, u16 width, u16 height) } } -void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader) +static void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader) { s32 count; struct MapConnection *connection; @@ -147,7 +147,7 @@ void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader) } } -void sub_8058B54(s32 x, s32 y, const struct MapHeader *connectedMapHeader, s32 x2, s32 y2, s32 width, s32 height) +static void sub_8058B54(s32 x, s32 y, const struct MapHeader *connectedMapHeader, s32 x2, s32 y2, s32 width, s32 height) { s32 i; u16 *src; @@ -166,7 +166,7 @@ void sub_8058B54(s32 x, s32 y, const struct MapHeader *connectedMapHeader, s32 x } } -void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset) +static void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset) { s32 x, y; s32 x2; @@ -213,7 +213,7 @@ void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader con } } -void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset) +static void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset) { s32 x; s32 x2, y2; @@ -262,7 +262,7 @@ void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader con } } -void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset) +static void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset) { s32 y; s32 x2, y2; @@ -308,7 +308,7 @@ void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader cons } } -void fillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset) +static void fillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset) { s32 x, y; s32 y2; @@ -443,28 +443,28 @@ u32 MapGridGetMetatileIdAt(s32 x, s32 y) return block & 0x3FF; } -u32 sub_8058F1C(u32 original, u8 bit) +u32 GetMetatileAttributeFromRawMetatileBehavior(u32 original, u8 bit) { if (bit >= 8) return original; - return (original & gUnknown_8352EF0[bit]) >> gUnknown_8352F10[bit]; + return (original & sMetatileAttrMasks[bit]) >> sMetatileAttrShifts[bit]; } -u32 sub_8058F48(s16 x, s16 y, u8 z) +u32 MapGridGetMetatileAttributeAt(s16 x, s16 y, u8 attr) { u16 metatileId = MapGridGetMetatileIdAt(x, y); - return GetBehaviorByMetatileIdAndMapLayout(gMapHeader.mapLayout, metatileId, z); + return GetBehaviorByMetatileIdAndMapLayout(gMapHeader.mapLayout, metatileId, attr); } u32 MapGridGetMetatileBehaviorAt(s32 x, s32 y) { - return sub_8058F48(x, y, 0); + return MapGridGetMetatileAttributeAt(x, y, 0); } u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y) { - return sub_8058F48(x, y, 6); + return MapGridGetMetatileAttributeAt(x, y, 6); } void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatile) @@ -512,12 +512,12 @@ u32 GetBehaviorByMetatileIdAndMapLayout(struct MapLayout *mapLayout, u16 metatil if (metatile < NUM_METATILES_IN_PRIMARY) { attributes = mapLayout->primaryTileset->metatileAttributes; - return sub_8058F1C(attributes[metatile], attr); + return GetMetatileAttributeFromRawMetatileBehavior(attributes[metatile], attr); } else if (metatile < 0x400) { attributes = mapLayout->secondaryTileset->metatileAttributes; - return sub_8058F1C(attributes[metatile - NUM_METATILES_IN_PRIMARY], attr); + return GetMetatileAttributeFromRawMetatileBehavior(attributes[metatile - NUM_METATILES_IN_PRIMARY], attr); } else { @@ -544,7 +544,7 @@ void save_serialize_map(void) } } -bool32 SavedMapViewIsEmpty(void) +static bool32 SavedMapViewIsEmpty(void) { u16 i; u32 marker = 0; @@ -559,12 +559,12 @@ bool32 SavedMapViewIsEmpty(void) return FALSE; } -void ClearSavedMapView(void) +static void ClearSavedMapView(void) { CpuFill16(0, gSaveBlock2Ptr->mapView, sizeof(gSaveBlock2Ptr->mapView)); } -void LoadSavedMapView(void) +static void LoadSavedMapView(void) { s32 i, j; s32 x, y; @@ -588,7 +588,7 @@ void LoadSavedMapView(void) } } -void sub_8059250(u8 a1) +static void sub_8059250(u8 a1) { s32 width; u16 *mapView; @@ -690,7 +690,7 @@ s32 GetMapBorderIdAt(s32 x, s32 y) return 0; } -s32 GetPostCameraMoveMapBorderId(s32 x, s32 y) +static s32 GetPostCameraMoveMapBorderId(s32 x, s32 y) { return GetMapBorderIdAt(7 + gSaveBlock1Ptr->pos.x + x, 7 + gSaveBlock1Ptr->pos.y + y); } @@ -708,7 +708,7 @@ bool32 CanCameraMoveInDirection(s32 direction) return TRUE; } -void sub_80594AC(struct MapConnection *connection, int direction, s32 x, s32 y) +static void sub_80594AC(struct MapConnection *connection, int direction, s32 x, s32 y) { struct MapHeader const *mapHeader; mapHeader = mapconnection_get_mapheader(connection); @@ -779,7 +779,7 @@ struct MapConnection *sub_8059600(u8 direction, s32 x, s32 y) } -bool8 sub_8059658(u8 direction, s32 x, s32 y, struct MapConnection *connection) +static bool8 sub_8059658(u8 direction, s32 x, s32 y, struct MapConnection *connection) { struct MapHeader const *mapHeader; mapHeader = mapconnection_get_mapheader(connection); @@ -795,7 +795,7 @@ bool8 sub_8059658(u8 direction, s32 x, s32 y, struct MapConnection *connection) return FALSE; } -bool8 sub_80596BC(s32 x, s32 src_width, s32 dest_width, s32 offset) +static bool8 sub_80596BC(s32 x, s32 src_width, s32 dest_width, s32 offset) { s32 offset2 = max(offset, 0); @@ -808,7 +808,7 @@ bool8 sub_80596BC(s32 x, s32 src_width, s32 dest_width, s32 offset) return FALSE; } -bool32 sub_80596E8(s32 x, s32 width) +static bool32 sub_80596E8(s32 x, s32 width) { if (x >= 0 && x < width) return TRUE; @@ -816,7 +816,7 @@ bool32 sub_80596E8(s32 x, s32 width) return FALSE; } -s32 sub_80596FC(struct MapConnection *connection, s32 x, s32 y) +static s32 sub_80596FC(struct MapConnection *connection, s32 x, s32 y) { struct MapHeader const *mapHeader; mapHeader = mapconnection_get_mapheader(connection); @@ -878,7 +878,7 @@ void GetCameraFocusCoords(u16 *x, u16 *y) *y = gSaveBlock1Ptr->pos.y + 7; } -void SetCameraCoords(u16 x, u16 y) +static void SetCameraCoords(u16 x, u16 y) { gSaveBlock1Ptr->pos.x = x; gSaveBlock1Ptr->pos.y = y; @@ -889,7 +889,7 @@ void GetCameraCoords(u16 *x, u16 *y) *x = gSaveBlock1Ptr->pos.x; *y = gSaveBlock1Ptr->pos.y; } -void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles, u16 offset) +static void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles, u16 offset) { if (tileset) { @@ -900,7 +900,7 @@ void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles, } } -void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles, u16 offset) +static void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles, u16 offset) { if (tileset) { @@ -911,7 +911,7 @@ void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles, } } -void sub_80598CC(u16 a0, u16 a1) +static void sub_80598CC(u16 a0, u16 a1) { switch (gUnknown_2036E28) { @@ -955,7 +955,7 @@ void sub_8059948(u8 a0, u8 a1) CpuFastCopy(gPlttBufferUnfaded + a0 * 16, gPlttBufferFaded + a0 * 16, a1 * 16 * sizeof(u16)); } -void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u16 size) +static void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u16 size) { u16 black = RGB_BLACK; diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c new file mode 100644 index 000000000..8617a1aaa --- /dev/null +++ b/src/fldeff_cut.c @@ -0,0 +1,299 @@ +#include "global.h" +#include "gflib.h" +#include "event_object_lock.h" +#include "event_object_movement.h" +#include "event_scripts.h" +#include "fieldmap.h" +#include "field_camera.h" +#include "field_specials.h" +#include "fldeff.h" +#include "field_effect.h" +#include "field_player_avatar.h" +#include "metatile_behavior.h" +#include "overworld.h" +#include "party_menu.h" +#include "script.h" +#include "trig.h" +#include "constants/event_objects.h" +#include "constants/songs.h" +#include "constants/metatile_labels.h" + +#define CUT_GRASS_SPRITE_COUNT 8 + +static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL; +static EWRAM_DATA bool8 sScheduleOpenDottedHole = FALSE; + +static void FieldCallback_CutGrass(void); +static void FieldCallback_CutTree(void); +static void FieldMoveCallback_CutGrass(void); +static void SetCutGrassMetatileAt(s16 x, s16 y); +static void SpriteCallback_CutGrass_Init(struct Sprite * sprite); +static void SpriteCallback_CutGrass_Run(struct Sprite * sprite); +static void SpriteCallback_CutGrass_Cleanup(struct Sprite * sprite); +static void FieldMoveCallback_CutTree(void); + +static const u16 sCutGrassMetatileMapping[][2] = { + { + METATILE_ID(General, Plain_Grass), + METATILE_ID(General, Plain_Mowed) + }, { + METATILE_ID(General, ThinTreeTop_Grass), + METATILE_ID(General, ThinTreeTop_Mowed) + }, { + METATILE_ID(General, WideTreeTopLeft_Grass), + METATILE_ID(General, WideTreeTopLeft_Mowed) + }, { + METATILE_ID(General, WideTreeTopRight_Grass), + METATILE_ID(General, WideTreeTopRight_Mowed) + }, { + METATILE_ID(CeladonCity, CyclingRoad_Grass), + METATILE_ID(CeladonCity, CyclingRoad_Mowed) + }, { + METATILE_ID(FuchsiaCity, SafariZoneTreeTopLeft_Grass), + METATILE_ID(FuchsiaCity, SafariZoneTreeTopLeft_Mowed) + }, { + METATILE_ID(FuchsiaCity, SafariZoneTreeTopMiddle_Grass), + METATILE_ID(FuchsiaCity, SafariZoneTreeTopMiddle_Mowed) + }, { + METATILE_ID(FuchsiaCity, SafariZoneTreeTopRight_Grass), + METATILE_ID(FuchsiaCity, SafariZoneTreeTopRight_Mowed) + }, { + METATILE_ID(ViridianForest, HugeTreeTopMiddle_Grass), + METATILE_ID(ViridianForest, HugeTreeTopMiddle_Mowed) + }, { + 0xffff, + 0xffff + } +}; + +static const struct OamData sOamData_FldEff_CutGrass = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(8x8), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0x001, + .priority = 1, + .paletteNum = 0x1, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_Fldeff_CutGrass_0[] = { + ANIMCMD_FRAME(0, 30), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_FldEff_CutGrass[] = { + sSpriteAnim_Fldeff_CutGrass_0 +}; + +static const struct SpriteFrameImage sSpriteFrameImages_FldEff_CutGrass[] = { + {gUnknown_8398648, 0x20} +}; + +const struct SpritePalette gFldEffPalette_CutGrass[] = { + gUnknown_8398688, 4096 +}; + +static const struct SpriteTemplate sSpriteTemplate_FldEff_CutGrass = { + .tileTag = 0xFFFF, + .paletteTag = 4096, + .oam = &sOamData_FldEff_CutGrass, + .anims = sSpriteAnimTable_FldEff_CutGrass, + .images = sSpriteFrameImages_FldEff_CutGrass, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallback_CutGrass_Init +}; + +static u8 MetatileAtCoordsIsGrassTile(s16 x, s16 y) +{ + return TestMetatileAttributeBit(MapGridGetMetatileAttributeAt(x, y, 1), 1); +} + +bool8 SetUpFieldMove_Cut(void) +{ + s16 x, y; + u8 i, j; + sScheduleOpenDottedHole = FALSE; + if (CutMoveRuinValleyCheck() == TRUE) + { + sScheduleOpenDottedHole = TRUE; + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_CutGrass; + return TRUE; + } + + if (CheckObjectGraphicsInFrontOfPlayer(OBJ_EVENT_GFX_CUT_TREE) == TRUE) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_CutTree; + return TRUE; + } + else + { + // FIXME: this fakematch + register s32 neg1 asm("r8"); + struct MapPosition *pos; + PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); + + for (i = 0, pos = &gPlayerFacingPosition, neg1 = 0xFFFF; i < 3; i++) + { + + y = i + neg1 + pos->y; + for (j = 0; j < 3; j++) + { + x = j + neg1 + pos->x; + if (MapGridGetZCoordAt(x, y) == pos->height) + { + if (MetatileAtCoordsIsGrassTile(x, y) == TRUE) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_CutGrass; + return TRUE; + } + } + } + } + return FALSE; + } +} + +static void FieldCallback_CutGrass(void) +{ + FieldEffectStart(FLDEFF_USE_CUT_ON_GRASS); + gFieldEffectArguments[0] = GetCursorSelectionMonId(); +} + +bool8 FldEff_UseCutOnGrass(void) +{ + u8 taskId = CreateFieldEffectShowMon(); + FLDEFF_SET_FUNC_TO_DATA(FieldMoveCallback_CutGrass); + IncrementGameStat(GAME_STAT_USED_CUT); + return FALSE; +} + +static void FieldCallback_CutTree(void) +{ + gFieldEffectArguments[0] = GetCursorSelectionMonId(); + ScriptContext1_SetupScript(EventScript_FldEffCut); +} + +bool8 FldEff_UseCutOnTree(void) +{ + u8 taskId = CreateFieldEffectShowMon(); + FLDEFF_SET_FUNC_TO_DATA(FieldMoveCallback_CutTree); + IncrementGameStat(GAME_STAT_USED_CUT); + return FALSE; +} + +static void FieldMoveCallback_CutGrass(void) +{ + FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_GRASS); + if (sScheduleOpenDottedHole == TRUE) + CutMoveOpenDottedHoleDoor(); + else + FieldEffectStart(FLDEFF_CUT_GRASS); +} + +bool8 FldEff_CutGrass(void) +{ + u8 i, j; + s16 x, y; + // FIXME: this fakematch + register s32 neg1 asm("r9"); + struct MapPosition *pos; + + i = 0; + PlaySE(SE_W015); + PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); + + for (i = 0, pos = &gPlayerFacingPosition, neg1 = 0xFFFF; i < 3; i++) + { + + y = i + neg1 + pos->y; + for (j = 0; j < 3; j++) + { + x = j + neg1 + pos->x; + if (MapGridGetZCoordAt(x, y) == pos->height) + { + if (MetatileAtCoordsIsGrassTile(x, y) == TRUE) + { + SetCutGrassMetatileAt(x, y); + sub_805F378(x, y); + } + } + } + } + DrawWholeMapView(); + sCutGrassSpriteArrayPtr = Alloc(CUT_GRASS_SPRITE_COUNT); + for (i = 0; i < 8; i++) + { + sCutGrassSpriteArrayPtr[i] = CreateSprite(&sSpriteTemplate_FldEff_CutGrass, gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0); + gSprites[sCutGrassSpriteArrayPtr[i]].data[2] = i * (0x100 / CUT_GRASS_SPRITE_COUNT); + } + return FALSE; +} + +static void SetCutGrassMetatileAt(s16 x, s16 y) +{ + u16 i = 0; + u16 metatileId = MapGridGetMetatileIdAt(x, y); + while (1) + { + if (sCutGrassMetatileMapping[i][0] == 0xFFFF) + return; + if (sCutGrassMetatileMapping[i][0] == metatileId) + { + MapGridSetMetatileIdAt(x, y, sCutGrassMetatileMapping[i][1]); + break; + } + i++; + } +} + +static void SpriteCallback_CutGrass_Init(struct Sprite * sprite) +{ + sprite->data[0] = 8; + sprite->data[1] = 0; + sprite->data[3] = 0; + sprite->callback = SpriteCallback_CutGrass_Run; +} + +static void SpriteCallback_CutGrass_Run(struct Sprite * sprite) +{ + sprite->pos2.x = Sin(sprite->data[2], sprite->data[0]); + sprite->pos2.y = Cos(sprite->data[2], sprite->data[0]); + sprite->data[2] += 8; + sprite->data[2] &= 0xFF; + sprite->data[0]++; + sprite->data[0] += sprite->data[3] >> 2; + sprite->data[3]++; + if (sprite->data[1] != 28) + sprite->data[1]++; + else + sprite->callback = SpriteCallback_CutGrass_Cleanup; +} + +static void SpriteCallback_CutGrass_Cleanup(struct Sprite * sprite) +{ + u8 i; + for (i = 1; i < CUT_GRASS_SPRITE_COUNT; i++) + { + DestroySprite(&gSprites[sCutGrassSpriteArrayPtr[i]]); + } + FieldEffectStop(&gSprites[sCutGrassSpriteArrayPtr[0]], FLDEFF_CUT_GRASS); + Free(sCutGrassSpriteArrayPtr); + sub_80696C0(); + ScriptContext2_Disable(); +} + +static void FieldMoveCallback_CutTree(void) +{ + PlaySE(SE_W015); + FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE); + EnableBothScriptContexts(); +} diff --git a/src/fldeff_dig.c b/src/fldeff_dig.c index 9e1686468..0eb0d3c1e 100644 --- a/src/fldeff_dig.c +++ b/src/fldeff_dig.c @@ -29,7 +29,7 @@ static void FieldCallback_Dig(void) bool8 FldEff_UseDig(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldEffectShowMon(); FLDEFF_SET_FUNC_TO_DATA(sub_80C9AFC); SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 058922f06..397741806 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -12,12 +12,13 @@ #include "event_object_movement.h" #include "constants/songs.h" #include "constants/event_objects.h" +#include "constants/event_object_movement.h" #include "constants/maps.h" -static void task08_080C9820(u8 taskId); -static void sub_80C98FC(u8 taskId); -static void sub_80C98B0(u8 taskId); -static void sub_80C99A0(u8 taskId); +static void Task_FieldEffectShowMon_Init(u8 taskId); +static void Task_FieldEffectShowMon_WaitFldeff(u8 taskId); +static void Task_FieldEffectShowMon_WaitPlayerAnim(u8 taskId); +static void Task_FieldEffectShowMon_Cleanup(u8 taskId); static void sub_80C9A10(void); static void sub_80C9A60(void); @@ -36,13 +37,13 @@ bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) return TRUE; } -u8 oei_task_add(void) +u8 CreateFieldEffectShowMon(void) { GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y); - return CreateTask(task08_080C9820, 8); + return CreateTask(Task_FieldEffectShowMon_Init, 8); } -static void task08_080C9820(u8 taskId) +static void Task_FieldEffectShowMon_Init(u8 taskId) { u8 mapObjId; @@ -54,48 +55,49 @@ static void task08_080C9820(u8 taskId) { if (gMapHeader.mapType == MAP_TYPE_UNDERWATER) { + // Leftover from RS, inhibits the player anim while underwater. FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = sub_80C98FC; + gTasks[taskId].func = Task_FieldEffectShowMon_WaitFldeff; } else { sub_805CB70(); - ObjectEventSetHeldMovement(&gObjectEvents[mapObjId], 0x45); - gTasks[taskId].func = sub_80C98B0; + ObjectEventSetHeldMovement(&gObjectEvents[mapObjId], MOVEMENT_ACTION_UNKNOWN_STEP_45); + gTasks[taskId].func = Task_FieldEffectShowMon_WaitPlayerAnim; } } } -static void sub_80C98B0(u8 taskId) +static void Task_FieldEffectShowMon_WaitPlayerAnim(u8 taskId) { if (ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]) == TRUE) { FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); - gTasks[taskId].func = sub_80C98FC; + gTasks[taskId].func = Task_FieldEffectShowMon_WaitFldeff; } } -static void sub_80C98FC(u8 taskId) +static void Task_FieldEffectShowMon_WaitFldeff(u8 taskId) { if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) { gFieldEffectArguments[1] = GetPlayerFacingDirection(); - if (gFieldEffectArguments[1] == 1) + if (gFieldEffectArguments[1] == DIR_SOUTH) gFieldEffectArguments[2] = 0; - if (gFieldEffectArguments[1] == 2) + if (gFieldEffectArguments[1] == DIR_NORTH) gFieldEffectArguments[2] = 1; - if (gFieldEffectArguments[1] == 3) + if (gFieldEffectArguments[1] == DIR_WEST) gFieldEffectArguments[2] = 2; - if (gFieldEffectArguments[1] == 4) + if (gFieldEffectArguments[1] == DIR_EAST) gFieldEffectArguments[2] = 3; ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByCurrentState()); StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]); - FieldEffectActiveListRemove(6); - gTasks[taskId].func = sub_80C99A0; + FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON); + gTasks[taskId].func = Task_FieldEffectShowMon_Cleanup; } } -static void sub_80C99A0(u8 taskId) +static void Task_FieldEffectShowMon_Cleanup(u8 taskId) { FLDEFF_CALL_FUNC_IN_DATA(); gPlayerAvatar.unk6 = FALSE; @@ -121,7 +123,7 @@ static void sub_80C9A10(void) bool8 FldEff_UseRockSmash(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldEffectShowMon(); FLDEFF_SET_FUNC_TO_DATA(sub_80C9A60); IncrementGameStat(GAME_STAT_USED_ROCK_SMASH); diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c index 230b9c751..712d9f1c6 100644 --- a/src/fldeff_strength.c +++ b/src/fldeff_strength.c @@ -33,7 +33,7 @@ static void FldEff_UseStrength(void) bool8 sub_80D0860(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldEffectShowMon(); FLDEFF_SET_FUNC_TO_DATA(sub_80D08A8); GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1); return FALSE; diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c index 45c471e95..d827aff4d 100644 --- a/src/fldeff_sweetscent.c +++ b/src/fldeff_sweetscent.c @@ -43,7 +43,7 @@ bool8 FldEff_SweetScent(void) u8 taskId; SetWeatherScreenFadeOut(); - taskId = oei_task_add(); + taskId = CreateFieldEffectShowMon(); FLDEFF_SET_FUNC_TO_DATA(StartSweetScentFieldEffect); return FALSE; } diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c index a66a332bf..44a7af732 100644 --- a/src/fldeff_teleport.c +++ b/src/fldeff_teleport.c @@ -28,7 +28,7 @@ static void FieldCallback_Teleport(void) bool8 FldEff_UseTeleport(void) { - u8 taskId = oei_task_add(); + u8 taskId = CreateFieldEffectShowMon(); FLDEFF_SET_FUNC_TO_DATA(StartTeleportFieldEffect); SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); return FALSE; diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 8e07c1c97..7c05d1dde 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -16,39 +16,12 @@ static const bool8 sTileSurfable[METATILE_COUNT] = { [MB_SOUTHWARD_CURRENT] = TRUE }; -static const u8 sTileBitAttributes[] = { - 0x00, - 0x01, - 0x02, - 0x04, - 0x08, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00, - 0x00 +static const u8 sTileBitAttributes[32] = { + [0] = 0x00, + [1] = 0x01, + [2] = 0x02, + [3] = 0x04, + [4] = 0x08, }; bool8 MetatileBehavior_UnusedReturnTrue(u8 metatileBehavior) @@ -769,7 +742,7 @@ bool8 MetatileBehavior_UnusedReturnFalse_11(u8 metatileBehavior) { return FALSE; bool8 MetatileBehavior_UnusedReturnFalse_12(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_UnusedReturnFalse_13(u8 metatileBehavior) { return FALSE; } -bool8 sub_805A2BC(u8 arg1, u8 arg2) +bool8 TestMetatileAttributeBit(u8 arg1, u8 arg2) { if(sTileBitAttributes[arg1] & arg2) return TRUE; diff --git a/src/quest_log.c b/src/quest_log.c index b747dd8b6..6e70ceea8 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -113,7 +113,7 @@ static EWRAM_DATA u16 *gUnknown_203AE90 = NULL; static EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0}; static EWRAM_DATA struct UnkStruct_203AE98 gUnknown_203AE98[32] = {0}; static EWRAM_DATA u16 sQuestLogIdx = 0; -static EWRAM_DATA u8 gUnknown_203AF9A[64][2] = {{0}}; +static EWRAM_DATA u8 sMovementScripts[64][2] = {{0}}; static EWRAM_DATA u16 gUnknown_203B01A = 0; static EWRAM_DATA u16 gUnknown_203B01C = 0; static EWRAM_DATA u16 sFlagOrVarPlayhead = 0; @@ -1551,24 +1551,24 @@ void sub_811246C(struct Sprite *sprite) struct ObjectEvent *objectEvent = &gObjectEvents[sprite->data[0]]; if (objectEvent->localId == OBJ_EVENT_ID_PLAYER) { - if (gUnknown_203AF9A[0][0] != OBJ_EVENT_ID_PLAYER) + if (sMovementScripts[0][0] != 0xFF) { - ObjectEventSetHeldMovement(objectEvent, gUnknown_203AF9A[0][0]); - gUnknown_203AF9A[0][0] = OBJ_EVENT_ID_PLAYER; + ObjectEventSetHeldMovement(objectEvent, sMovementScripts[0][0]); + sMovementScripts[0][0] = 0xFF; } - if (gUnknown_203AF9A[0][1] != OBJ_EVENT_ID_PLAYER) + if (sMovementScripts[0][1] != OBJ_EVENT_ID_PLAYER) { sub_8150454(); - gUnknown_203AF9A[0][1] = OBJ_EVENT_ID_PLAYER; + sMovementScripts[0][1] = OBJ_EVENT_ID_PLAYER; } sub_8063E28(objectEvent, sprite); } else { - if (gUnknown_203AF9A[objectEvent->localId][0] != OBJ_EVENT_ID_PLAYER) + if (sMovementScripts[objectEvent->localId][0] != 0xFF) { - ObjectEventSetHeldMovement(objectEvent, gUnknown_203AF9A[objectEvent->localId][0]); - gUnknown_203AF9A[objectEvent->localId][0] = OBJ_EVENT_ID_PLAYER; + ObjectEventSetHeldMovement(objectEvent, sMovementScripts[objectEvent->localId][0]); + sMovementScripts[objectEvent->localId][0] = 0xFF; } sub_8063E28(objectEvent, sprite); } @@ -1736,15 +1736,15 @@ static void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2) sNumQuestLogs = a2 / 8; for (i = 0; i < 0x40; i++) { - gUnknown_203AF9A[i][0] |= 0xFF; - gUnknown_203AF9A[i][1] |= 0xFF; + sMovementScripts[i][0] |= 0xFF; + sMovementScripts[i][1] |= 0xFF; } sQuestLogIdx = 0; gUnknown_203B01C = 0; gUnknown_3005E90 = (struct UnkStruct_3005E90){}; gUnknown_203B01A = gUnknown_3005E94[sQuestLogIdx].unk_4; - gUnknown_203AF9A[0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3; - gUnknown_203AF9A[0][1] = 0xFF; + sMovementScripts[0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3; + sMovementScripts[0][1] = 0xFF; gUnknown_3005E88 = 1; break; case 2: @@ -1807,10 +1807,10 @@ void sub_8112B3C(void) switch (gUnknown_3005E94[sQuestLogIdx].unk_6) { case 0: - gUnknown_203AF9A[gUnknown_3005E94[sQuestLogIdx].unk_0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3; + sMovementScripts[gUnknown_3005E94[sQuestLogIdx].unk_0][0] = gUnknown_3005E94[sQuestLogIdx].unk_3; break; case 1: - gUnknown_203AF9A[gUnknown_3005E94[sQuestLogIdx].unk_0][1] = gUnknown_3005E94[sQuestLogIdx].unk_3; + sMovementScripts[gUnknown_3005E94[sQuestLogIdx].unk_0][1] = gUnknown_3005E94[sQuestLogIdx].unk_3; break; case 2: *(u32 *)&gUnknown_3005E90 = ((gUnknown_3005E94[sQuestLogIdx].unk_3 << 24) | (gUnknown_3005E94[sQuestLogIdx].unk_2 << 16) | (gUnknown_3005E94[sQuestLogIdx].unk_1 << 8) | (gUnknown_3005E94[sQuestLogIdx].unk_0 << 0)); diff --git a/src/wild_encounter.c b/src/wild_encounter.c index b32eb583a..b3605db47 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -367,11 +367,11 @@ bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavi headerId = GetCurrentMapWildMonHeaderId(); if (headerId != 0xFFFF) { - if (sub_8058F1C(currMetatileBehavior, 4) == TRUE) + if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4) == TRUE) { if (gWildMonHeaders[headerId].landMonsInfo == NULL) return FALSE; - else if (previousMetatileBehavior != sub_8058F1C(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll()) + else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll()) return FALSE; if (DoWildEncounterRateTest(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE) { @@ -405,12 +405,12 @@ bool8 StandardWildEncounter(u32 currMetatileBehavior, u16 previousMetatileBehavi } } } - else if (sub_8058F1C(currMetatileBehavior, 4) == 2 - || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(sub_8058F1C(currMetatileBehavior, 0)) == TRUE)) + else if (GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4) == 2 + || (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) && MetatileBehavior_IsBridge(GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0)) == TRUE)) { if (gWildMonHeaders[headerId].waterMonsInfo == NULL) return FALSE; - else if (previousMetatileBehavior != sub_8058F1C(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll()) + else if (previousMetatileBehavior != GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0) && !DoGlobalWildEncounterDiceRoll()) return FALSE; else if (DoWildEncounterRateTest(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE) { @@ -474,7 +474,7 @@ bool8 SweetScentWildEncounter(void) headerId = GetCurrentMapWildMonHeaderId(); if (headerId != 0xFFFF) { - if (sub_8058F48(x, y, 4) == 1) + if (MapGridGetMetatileAttributeAt(x, y, 4) == 1) { if (TryStartRoamerEncounter() == TRUE) { @@ -490,7 +490,7 @@ bool8 SweetScentWildEncounter(void) BattleSetup_StartWildBattle(); return TRUE; } - else if (sub_8058F48(x, y, 4) == 2) + else if (MapGridGetMetatileAttributeAt(x, y, 4) == 2) { if (TryStartRoamerEncounter() == TRUE) { @@ -711,7 +711,7 @@ void ResetEncounterRateModifiers(void) static bool8 HandleWildEncounterCooldown(u32 currMetatileBehavior) { - u8 unk = sub_8058F1C(currMetatileBehavior, 4); + u8 unk = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 4); u32 minSteps; u32 encRate; if (unk == 0) @@ -763,19 +763,19 @@ bool8 TryStandardWildEncounter(u32 currMetatileBehavior) { if (!HandleWildEncounterCooldown(currMetatileBehavior)) { - sWildEncounterData.prevMetatileBehavior = sub_8058F1C(currMetatileBehavior, 0); + sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0); return FALSE; } else if (StandardWildEncounter(currMetatileBehavior, sWildEncounterData.prevMetatileBehavior) == TRUE) { sWildEncounterData.encounterRateBuff = 0; sWildEncounterData.stepsSinceLastEncounter = 0; - sWildEncounterData.prevMetatileBehavior = sub_8058F1C(currMetatileBehavior, 0); + sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0); return TRUE; } else { - sWildEncounterData.prevMetatileBehavior = sub_8058F1C(currMetatileBehavior, 0); + sWildEncounterData.prevMetatileBehavior = GetMetatileAttributeFromRawMetatileBehavior(currMetatileBehavior, 0); return FALSE; } } diff --git a/sym_ewram.txt b/sym_ewram.txt index d358929eb..856d5d9e0 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -218,14 +218,8 @@ gUnknown_203982C: @ 203982C .align 2 .include "src/script_movement.o" - .align 2 -gUnknown_2039870: @ 2039870 - .space 0x4 - -gUnknown_2039874: @ 2039874 - .space 0x4 - + .include "src/fldeff_cut.o" .align 2 .include "src/item_menu_icons.o" |