Merge branch 'DizzyEggg-decompile_cut'

This commit is contained in:
Diegoisawesome 2018-07-05 20:33:47 -07:00
commit 6313f360d5
34 changed files with 786 additions and 1634 deletions

View File

@ -8656,7 +8656,7 @@ task_mpl_807E3C8: @ 80AF6B0
bl ScriptContext2_Disable bl ScriptContext2_Disable
adds r0, r4, 0 adds r0, r4, 0
bl DestroyTask bl DestroyTask
bl sub_80984F4 bl ScriptUnfreezeEventObjects
_080AF6CC: _080AF6CC:
pop {r4} pop {r4}
pop {r0} pop {r0}

View File

@ -467,7 +467,7 @@ _080F9F54:
thumb_func_start sub_80F9F5C thumb_func_start sub_80F9F5C
sub_80F9F5C: @ 80F9F5C sub_80F9F5C: @ 80F9F5C
push {lr} push {lr}
ldr r0, =gUnknown_0203AB40 ldr r0, =gPlayerFacingPosition
ldr r1, =gMapHeader ldr r1, =gMapHeader
ldr r1, [r1, 0x4] ldr r1, [r1, 0x4]
bl sub_80E9608 bl sub_80E9608
@ -572,7 +572,7 @@ sub_80FA004: @ 80FA004
lsrs r0, 24 lsrs r0, 24
cmp r0, 0x2 cmp r0, 0x2
bne _080FA0AE bne _080FA0AE
ldr r4, =gUnknown_0203AB40 ldr r4, =gPlayerFacingPosition
adds r1, r4, 0x2 adds r1, r4, 0x2
adds r0, r4, 0 adds r0, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer bl GetXYCoordsOneStepInFrontOfPlayer
@ -590,10 +590,10 @@ sub_80FA004: @ 80FA004
cmp r0, 0x1 cmp r0, 0x1
bne _080FA070 bne _080FA070
bl sub_80F9F5C bl sub_80F9F5C
ldr r1, =gUnknown_03005DB0 ldr r1, =gFieldCallback2
ldr r0, =FieldCallback_Teleport ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1] str r0, [r1]
ldr r1, =gUnknown_0203CEEC ldr r1, =gPostMenuFieldCallback
ldr r0, =sub_80FA0DC ldr r0, =sub_80FA0DC
b _080FA0C0 b _080FA0C0
.pool .pool
@ -605,10 +605,10 @@ _080FA070:
cmp r0, 0x1 cmp r0, 0x1
bne _080FA0A0 bne _080FA0A0
bl sub_80F9F5C bl sub_80F9F5C
ldr r1, =gUnknown_03005DB0 ldr r1, =gFieldCallback2
ldr r0, =FieldCallback_Teleport ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1] str r0, [r1]
ldr r1, =gUnknown_0203CEEC ldr r1, =gPostMenuFieldCallback
ldr r0, =sub_80FA1E8 ldr r0, =sub_80FA1E8
b _080FA0C0 b _080FA0C0
.pool .pool
@ -624,10 +624,10 @@ _080FA0AE:
b _080FA0C4 b _080FA0C4
_080FA0B2: _080FA0B2:
bl sub_80F9F5C bl sub_80F9F5C
ldr r1, =gUnknown_03005DB0 ldr r1, =gFieldCallback2
ldr r0, =FieldCallback_Teleport ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1] str r0, [r1]
ldr r1, =gUnknown_0203CEEC ldr r1, =gPostMenuFieldCallback
ldr r0, =sub_80FA34C ldr r0, =sub_80FA34C
_080FA0C0: _080FA0C0:
str r0, [r1] str r0, [r1]
@ -824,7 +824,7 @@ sub_80FA234: @ 80FA234
thumb_func_start sub_80FA248 thumb_func_start sub_80FA248
sub_80FA248: @ 80FA248 sub_80FA248: @ 80FA248
push {r4,lr} push {r4,lr}
ldr r1, =gUnknown_0203AB40 ldr r1, =gPlayerFacingPosition
movs r2, 0 movs r2, 0
ldrsh r0, [r1, r2] ldrsh r0, [r1, r2]
movs r2, 0x2 movs r2, 0x2

File diff suppressed because it is too large Load Diff

View File

@ -10199,10 +10199,10 @@ _081B5714:
movs r0, 0x5 movs r0, 0x5
bl PlaySE bl PlaySE
_081B571A: _081B571A:
ldr r0, =gUnknown_03005DB0 ldr r0, =gFieldCallback2
movs r1, 0 movs r1, 0
str r1, [r0] str r1, [r0]
ldr r0, =gUnknown_0203CEEC ldr r0, =gPostMenuFieldCallback
str r1, [r0] str r1, [r0]
adds r0, r4, 0 adds r0, r4, 0
bl sub_81B1C1C bl sub_81B1C1C
@ -10213,8 +10213,8 @@ _081B572A:
.pool .pool
thumb_func_end sub_81B56D8 thumb_func_end sub_81B56D8
thumb_func_start FieldCallback_Teleport thumb_func_start FieldCallback_PrepareFadeInFromMenu
FieldCallback_Teleport: @ 81B5738 FieldCallback_PrepareFadeInFromMenu: @ 81B5738
push {lr} push {lr}
bl pal_fill_black bl pal_fill_black
ldr r0, =task_launch_hm_phase_2 ldr r0, =task_launch_hm_phase_2
@ -10224,7 +10224,7 @@ FieldCallback_Teleport: @ 81B5738
pop {r1} pop {r1}
bx r1 bx r1
.pool .pool
thumb_func_end FieldCallback_Teleport thumb_func_end FieldCallback_PrepareFadeInFromMenu
thumb_func_start task_launch_hm_phase_2 thumb_func_start task_launch_hm_phase_2
task_launch_hm_phase_2: @ 81B5750 task_launch_hm_phase_2: @ 81B5750
@ -10241,7 +10241,7 @@ task_launch_hm_phase_2: @ 81B5750
lsls r0, 16 lsls r0, 16
lsrs r0, 16 lsrs r0, 16
str r0, [r1] str r0, [r1]
ldr r0, =gUnknown_0203CEEC ldr r0, =gPostMenuFieldCallback
ldr r0, [r0] ldr r0, [r0]
bl _call_via_r0 bl _call_via_r0
adds r0, r4, 0 adds r0, r4, 0
@ -10345,10 +10345,10 @@ sub_81B5820: @ 81B5820
lsrs r0, 24 lsrs r0, 24
cmp r0, 0x1 cmp r0, 0x1
bne _081B585C bne _081B585C
ldr r1, =gUnknown_03005DB0 ldr r1, =gFieldCallback2
ldr r0, =FieldCallback_Teleport ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1] str r0, [r1]
ldr r1, =gUnknown_0203CEEC ldr r1, =gPostMenuFieldCallback
ldr r0, =hm_surf_run_dp02scr ldr r0, =hm_surf_run_dp02scr
str r0, [r1] str r0, [r1]
movs r0, 0x1 movs r0, 0x1
@ -10463,10 +10463,10 @@ hm_prepare_waterfall: @ 81B58F0
lsrs r0, 24 lsrs r0, 24
cmp r0, 0x1 cmp r0, 0x1
bne _081B594C bne _081B594C
ldr r1, =gUnknown_03005DB0 ldr r1, =gFieldCallback2
ldr r0, =FieldCallback_Teleport ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1] str r0, [r1]
ldr r1, =gUnknown_0203CEEC ldr r1, =gPostMenuFieldCallback
ldr r0, =hm2_waterfall ldr r0, =hm2_waterfall
str r0, [r1] str r0, [r1]
movs r0, 0x1 movs r0, 0x1
@ -10510,10 +10510,10 @@ sub_81B5974: @ 81B5974
b _081B599E b _081B599E
.pool .pool
_081B5990: _081B5990:
ldr r1, =gUnknown_03005DB0 ldr r1, =gFieldCallback2
ldr r0, =FieldCallback_Teleport ldr r0, =FieldCallback_PrepareFadeInFromMenu
str r0, [r1] str r0, [r1]
ldr r1, =gUnknown_0203CEEC ldr r1, =gPostMenuFieldCallback
ldr r0, =sub_81B5958 ldr r0, =sub_81B5958
str r0, [r1] str r0, [r1]
movs r0, 0x1 movs r0, 0x1
@ -17276,7 +17276,7 @@ sub_81B9354: @ 81B9354
sub sp, 0xC sub sp, 0xC
lsls r0, 24 lsls r0, 24
lsrs r0, 24 lsrs r0, 24
ldr r2, =gUnknown_03005DB0 ldr r2, =gFieldCallback2
ldr r1, =hm_add_c3_without_phase_2 ldr r1, =hm_add_c3_without_phase_2
str r1, [r2] str r1, [r2]
movs r1, 0 movs r1, 0
@ -17308,7 +17308,7 @@ sub_81B9390: @ 81B9390
movs r0, 0xFF movs r0, 0xFF
strh r0, [r4] strh r0, [r4]
_081B93A6: _081B93A6:
ldr r0, =gUnknown_03005DB0 ldr r0, =gFieldCallback2
ldr r1, =hm_add_c3_without_phase_2 ldr r1, =hm_add_c3_without_phase_2
str r1, [r0] str r1, [r0]
ldr r0, =CB2_ReturnToField ldr r0, =CB2_ReturnToField
@ -17417,7 +17417,7 @@ _081B9486:
ldr r1, =gSpecialVar_0x8004 ldr r1, =gSpecialVar_0x8004
ldrb r0, [r2] ldrb r0, [r2]
strh r0, [r1] strh r0, [r1]
ldr r1, =gUnknown_03005DB0 ldr r1, =gFieldCallback2
ldr r0, =hm_add_c3_without_phase_2 ldr r0, =hm_add_c3_without_phase_2
str r0, [r1] str r0, [r1]
ldr r0, =CB2_ReturnToField ldr r0, =CB2_ReturnToField
@ -17553,7 +17553,7 @@ _081B95A4:
lsrs r0, 24 lsrs r0, 24
strh r0, [r4] strh r0, [r4]
_081B95BA: _081B95BA:
ldr r0, =gUnknown_03005DB0 ldr r0, =gFieldCallback2
ldr r1, =hm_add_c3_without_phase_2 ldr r1, =hm_add_c3_without_phase_2
str r1, [r0] str r1, [r0]
ldr r0, =CB2_ReturnToField ldr r0, =CB2_ReturnToField

View File

@ -2070,7 +2070,7 @@ sub_81C4F44: @ 81C4F44
cmp r0, 0 cmp r0, 0
bne _081C4F6E bne _081C4F6E
bl overworld_free_bg_tilemaps bl overworld_free_bg_tilemaps
ldr r0, =gUnknown_03005DB0 ldr r0, =gFieldCallback2
ldr r1, =hm_add_c3_without_phase_2 ldr r1, =hm_add_c3_without_phase_2
str r1, [r0] str r1, [r0]
ldr r1, =CB2_ReturnToField ldr r1, =CB2_ReturnToField

View File

@ -26527,8 +26527,8 @@ _081D4A0E:
bx r1 bx r1
thumb_func_end EventObjectIsFarawayIslandMew thumb_func_end EventObjectIsFarawayIslandMew
thumb_func_start unown_chamber_related thumb_func_start IsMewPlayingHideAndSeek
unown_chamber_related: @ 81D4A14 IsMewPlayingHideAndSeek: @ 81D4A14
push {lr} push {lr}
ldr r0, =gSaveBlock1Ptr ldr r0, =gSaveBlock1Ptr
ldr r0, [r0] ldr r0, [r0]
@ -26557,7 +26557,7 @@ _081D4A50:
_081D4A52: _081D4A52:
pop {r1} pop {r1}
bx r1 bx r1
thumb_func_end unown_chamber_related thumb_func_end IsMewPlayingHideAndSeek
thumb_func_start sub_81D4A58 thumb_func_start sub_81D4A58
sub_81D4A58: @ 81D4A58 sub_81D4A58: @ 81D4A58

View File

@ -1,5 +1,5 @@
gUnknown_03005DA8 gUnknown_03005DA8
gFieldCallback gFieldCallback
gUnknown_03005DB0 gFieldCallback2
gUnknown_03005DB4 gUnknown_03005DB4
gFieldLinkPlayerCount gFieldLinkPlayerCount

View File

@ -78,11 +78,11 @@ gFieldEffectScript_ExclamationMarkIcon1:: @ 82DBAE0
field_eff_end field_eff_end
gFieldEffectScript_UseCutOnTallGrass:: @ 82DBAE6 gFieldEffectScript_UseCutOnTallGrass:: @ 82DBAE6
field_eff_callnative sub_80D3A6C field_eff_callnative FldEff_UseCutOnGrass
field_eff_end field_eff_end
gFieldEffectScript_UseCutOnTree:: @ 82DBAEC gFieldEffectScript_UseCutOnTree:: @ 82DBAEC
field_eff_callnative sub_80D3ABC field_eff_callnative FldEff_UseCutOnTree
field_eff_end field_eff_end
gFieldEffectScript_Shadow:: @ 82DBAF2 gFieldEffectScript_Shadow:: @ 82DBAF2
@ -308,7 +308,7 @@ gFieldEffectScript_Unknown57:: @ 82DBCB8
field_eff_end field_eff_end
gFieldEffectScript_Unknown58:: @ 82DBCC2 gFieldEffectScript_Unknown58:: @ 82DBCC2
field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo6, sub_80D3B00 field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo6, FldEff_CutGrass
field_eff_end field_eff_end
gFieldEffectScript_FieldMoveShowMonInit:: @ 82DBCCC gFieldEffectScript_FieldMoveShowMonInit:: @ 82DBCCC

View File

@ -1,32 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2, 0
gUnknown_0857C608:: @ 857C608
.byte 0xfe, 0xfe, 0x01, 0x00, 0xff, 0xfe, 0x01, 0x00, 0x00, 0xfe, 0x02, 0x00, 0x01, 0xfe, 0x03, 0x00, 0x02, 0xfe, 0x03, 0x00, 0xfe, 0xff, 0x01, 0x00, 0x02, 0xff, 0x03, 0x00, 0xfe, 0x00, 0x04, 0x00, 0x02, 0x00
.byte 0x06, 0x00, 0xfe, 0x01, 0x07, 0x00, 0x02, 0x01, 0x09, 0x00, 0xfe, 0x02, 0x07, 0x00, 0xff, 0x02, 0x07, 0x00, 0x00, 0x02, 0x08, 0x00, 0x01, 0x02, 0x09, 0x00, 0x02, 0x02, 0x09, 0x00
gUnknown_0857C648:: @ 857C648
.2byte 0
.2byte 0
.2byte 0x1401
.2byte 0
gUnknown_0857C650:: @ 857C650
obj_image_anim_frame 0, 0x1E
obj_image_anim_jump 0
gUnknown_0857C658:: @ 857C658
.4byte gUnknown_0857C650
gUnknown_0857C65C:: @ 857C65C
obj_frame_tiles gFieldEffectObjectPic_ShadowExtraLarge + 0x520, 32
.align 2
gFieldEffectObjectPaletteInfo6:: @ 857C664
obj_pal gFieldEffectObjectPalette6, 0x1000
gUnknown_0857C66C:: @ 857C66C
spr_template -1, 0x1000, gUnknown_0857C648, gUnknown_0857C658, gUnknown_0857C65C, gDummySpriteAffineAnimTable, objc_8097BA8

View File

@ -431,7 +431,7 @@ gUnknown_08615D7E:: @ 8615D7E
.align 2 .align 2
gUnknown_08615D9C:: @ 8615D9C gUnknown_08615D9C:: @ 8615D9C
.4byte sub_80D3718, 0x00000007 .4byte SetUpFieldMove_Cut, 0x00000007
.4byte SetUpFieldMove_Flash, 0x0000000d .4byte SetUpFieldMove_Flash, 0x0000000d
.4byte SetUpFieldMove_RockSmash, 0x0000000d .4byte SetUpFieldMove_RockSmash, 0x0000000d
.4byte SetUpFieldMove_Strength, 0x0000000d .4byte SetUpFieldMove_Strength, 0x0000000d

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 B

View File

@ -78,8 +78,8 @@ enum FieldEffectScriptIdx
}; };
extern s32 gFieldEffectArguments[8]; extern s32 gFieldEffectArguments[8];
extern void (*gUnknown_0203CEEC)(void); extern void (*gPostMenuFieldCallback)(void);
extern bool8 (*gUnknown_03005DB0)(void); extern bool8 (*gFieldCallback2)(void);
u32 FieldEffectStart(u8); u32 FieldEffectStart(u8);
bool8 FieldEffectActiveListContains(u8 id); bool8 FieldEffectActiveListContains(u8 id);

View File

@ -1,7 +1,13 @@
#ifndef GUARD_FLDEFF_CUT_H #ifndef GUARD_FLDEFF_CUT_H
#define GUARD_FLDEFF_CUT_H #define GUARD_FLDEFF_CUT_H
void sub_80D423C(s16, s16); extern const struct SpritePalette gFieldEffectObjectPaletteInfo6;
void sub_80D42B8(s16, s16);
bool8 SetUpFieldMove_Cut(void);
bool8 FldEff_UseCutOnGrass(void);
bool8 FldEff_UseCutOnTree(void);
bool8 FldEff_CutGrass(void);
void sub_80D423C(s16 x, s16 y);
void sub_80D42B8(s16 x, s16 y);
#endif // GUARD_FLDEFF_CUT_H #endif // GUARD_FLDEFF_CUT_H

View File

@ -867,7 +867,7 @@ struct MapPosition
{ {
s16 x; s16 x;
s16 y; s16 y;
u8 height; s8 height;
}; };
struct UnkStruct_8054FF8 struct UnkStruct_8054FF8

View File

@ -74,7 +74,7 @@ bool8 MetatileBehavior_IsPuddle(u8);
bool8 MetatileBehavior_IsTallGrass(u8); bool8 MetatileBehavior_IsTallGrass(u8);
bool8 MetatileBehavior_IsLongGrass(u8); bool8 MetatileBehavior_IsLongGrass(u8);
bool8 MetatileBehavior_IsBerryTreeSoil(u8); bool8 MetatileBehavior_IsBerryTreeSoil(u8);
bool8 MetatileBehavior_IsAsh(u8); bool8 MetatileBehavior_IsAshGrass(u8);
bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8); bool8 MetatileBehavior_IsUnusedFootprintMetatile(u8);
bool8 MetatileBehavior_IsBridge(u8); bool8 MetatileBehavior_IsBridge(u8);
u8 MetatileBehavior_GetBridgeSth(u8); u8 MetatileBehavior_GetBridgeSth(u8);

View File

@ -28,7 +28,7 @@ void DoWallyTutorialBagMenu(void);
u8 pokemon_ailments_get_primary(u32 status); u8 pokemon_ailments_get_primary(u32 status);
u8 *GetMonNickname(struct Pokemon *mon, u8 *dst); u8 *GetMonNickname(struct Pokemon *mon, u8 *dst);
u8 GetCursorSelectionMonId(void); u8 GetCursorSelectionMonId(void);
bool8 FieldCallback_Teleport(void); bool8 FieldCallback_PrepareFadeInFromMenu(void);
void sub_81B7F60(void); void sub_81B7F60(void);
void sub_81B0FCC(u8 partyIdx, u8 a); void sub_81B0FCC(u8 partyIdx, u8 a);

View File

@ -12,7 +12,7 @@ void UpdateFrontierManiac(u16 days);
void UpdateFrontierGambler(u16 days); void UpdateFrontierGambler(u16 days);
void SetShoalItemFlag(u16 days); void SetShoalItemFlag(u16 days);
bool8 npc_before_player_of_type(u8); bool8 CheckObjectGraphicsInFrontOfPlayer(u8);
u8 oei_task_add(void); u8 oei_task_add(void);
#endif //GUARD_ROM6_H #endif //GUARD_ROM6_H

View File

@ -128,7 +128,7 @@ SECTIONS {
asm/pokemon_storage_system.o(.text); asm/pokemon_storage_system.o(.text);
src/pokemon_icon.o(.text); src/pokemon_icon.o(.text);
src/script_movement.o(.text); src/script_movement.o(.text);
asm/fldeff_cut.o(.text); src/fldeff_cut.o(.text);
src/mail_data.o(.text); src/mail_data.o(.text);
src/map_name_popup.o(.text); src/map_name_popup.o(.text);
src/item_menu_icons.o(.text); src/item_menu_icons.o(.text);
@ -425,7 +425,7 @@ SECTIONS {
src/pokemon_storage_system.o(.rodata); src/pokemon_storage_system.o(.rodata);
data/pokemon_storage_system.o(.rodata); data/pokemon_storage_system.o(.rodata);
src/pokemon_icon.o(.rodata); src/pokemon_icon.o(.rodata);
data/fldeff_cut.o(.rodata); src/fldeff_cut.o(.rodata);
src/map_name_popup.o(.rodata); src/map_name_popup.o(.rodata);
src/item_menu_icons.o(.rodata); src/item_menu_icons.o(.rodata);
data/contest.o(.rodata); data/contest.o(.rodata);

View File

@ -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_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_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 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 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_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"); const u32 gFieldEffectObjectPic_Ripple_1[] = INCBIN_U32("graphics/event_objects/pics/effects/ripple/1.4bpp");

View File

@ -87,7 +87,7 @@ void LockSelectedEventObject(void)
} }
} }
void sub_80984F4(void) void ScriptUnfreezeEventObjects(void)
{ {
u8 objectId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0); u8 objectId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
EventObjectClearHeldMovementIfFinished(&gEventObjects[objectId]); EventObjectClearHeldMovementIfFinished(&gEventObjects[objectId]);

View File

@ -561,7 +561,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y)
PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10); PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10);
if (spriteId == 0xFFFF) if (spriteId == 0xFFFF)
return 0x40; return 0x40;
return spriteId; return spriteId;
} }
#else #else
@ -623,7 +623,7 @@ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subprio
PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
if (spriteId == 0xFFFF) if (spriteId == 0xFFFF)
return 0x40; return 0x40;
return spriteId; return spriteId;
} }

View File

@ -623,7 +623,7 @@ static void PerStepCallback_8069F64(u8 taskId)
{ {
data[1] = x; data[1] = x;
data[2] = y; data[2] = y;
if (MetatileBehavior_IsAsh(MapGridGetMetatileBehaviorAt(x, y))) if (MetatileBehavior_IsAshGrass(MapGridGetMetatileBehaviorAt(x, y)))
{ {
if (MapGridGetMetatileIdAt(x, y) == 0x20a) if (MapGridGetMetatileIdAt(x, y) == 0x20a)
{ {

View File

@ -1,19 +1,683 @@
// Includes
#include "global.h" #include "global.h"
#include "fldeff_cut.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"
// Static type declarations extern bool8 CheckObjectGraphicsInFrontOfPlayer(u8);
extern u8 oei_task_add(void);
extern void ScriptUnfreezeEventObjects(void);
extern bool8 IsMewPlayingHideAndSeek(void);
// Static RAM declarations extern struct MapPosition gPlayerFacingPosition;
IWRAM_DATA u8 gUnknown_03001100; extern const u8 Route103_EventScript_290705[];
IWRAM_DATA u8 gUnknown_03001101; extern const u8 FarawayIsland_Interior_EventScript_267EDB[];
IWRAM_DATA u8 gUnknown_03001102;
IWRAM_DATA u32 fldeff_cut_unused_03001104;
IWRAM_DATA u8 gUnknown_03001108[25];
// Static ROM declarations extern const u8 gFieldEffectPic_CutGrass[];
extern const u16 gFieldEffectObjectPalette6[];
// .rodata // tileset 0 as first
#define METATILE_ID_GRASS 0x1
#define METATILE_ID_POKE_GRASS 0xD
// .text #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_LONG_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_LONG_GRASS_START 0x208
#define METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS 0x279
#define METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS 0x27A
#define METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS 0x27B
#define METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS 0x281
#define METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS 0x282
#define METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS 0x283
// cut 'square' defines
#define CUT_NORMAL_SIDE 3
#define CUT_NORMAL_AREA CUT_NORMAL_SIDE * CUT_NORMAL_SIDE
#define CUT_HYPER_SIDE 5
#define CUT_HYPER_AREA CUT_HYPER_SIDE * CUT_HYPER_SIDE
#define CUT_SPRITE_ARRAY_COUNT 8
struct HyperCutterUnk
{
s8 x;
s8 y;
u8 unk2[2];
};
// this file's functions
static void FieldCallback_CutTree(void);
static void FieldCallback_CutGrass(void);
static void StartCutTreeFieldEffect(void);
static void StartCutGrassFieldEffect(void);
static void SetCutGrassMetatile(s16, s16);
static void SetCutGrassMetatiles(s16, s16);
static void CutGrassSpriteCallback1(struct Sprite *);
static void CutGrassSpriteCallback2(struct Sprite *);
static void CutGrassSpriteCallbackEnd(struct Sprite *);
static void HandleLongGrassOnHyper(u8, s16, s16);
// IWRAM variables
static IWRAM_DATA u8 sCutSquareSide;
static IWRAM_DATA u8 sTileCountFromPlayer_X;
static IWRAM_DATA u8 sTileCountFromPlayer_Y;
static IWRAM_DATA u32 sUnused;
static IWRAM_DATA bool8 sHyperCutTiles[CUT_HYPER_AREA];
// EWRAM variables
static EWRAM_DATA u8 *sCutGrassSpriteArrayPtr = NULL;
// const rom data
static const struct HyperCutterUnk sHyperCutStruct[] =
{
{-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}},
};
static const struct OamData sOamData_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,
};
static const union AnimCmd sSpriteAnim_CutGrass[] =
{
ANIMCMD_FRAME(0, 30),
ANIMCMD_JUMP(0),
};
static const union AnimCmd *const sSpriteAnimTable_CutGrass[] =
{
sSpriteAnim_CutGrass,
};
static const struct SpriteFrameImage sSpriteImageTable_CutGrass[] =
{
{gFieldEffectPic_CutGrass, 0x20},
};
const struct SpritePalette gFieldEffectObjectPaletteInfo6 = {gFieldEffectObjectPalette6, 0x1000};
static const struct SpriteTemplate sSpriteTemplate_CutGrass =
{
.tileTag = 0xFFFF,
.paletteTag = 0x1000,
.oam = &sOamData_CutGrass,
.anims = sSpriteAnimTable_CutGrass,
.images = sSpriteImageTable_CutGrass,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = CutGrassSpriteCallback1,
};
// code
bool8 SetUpFieldMove_Cut(void)
{
s16 x, y;
u8 i, j;
u8 tileBehavior;
u8 userAbility;
bool8 cutTiles[CUT_NORMAL_AREA];
bool8 ret;
if (CheckObjectGraphicsInFrontOfPlayer(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)
{
sCutSquareSide = CUT_HYPER_SIDE;
sTileCountFromPlayer_X = 2;
sTileCountFromPlayer_Y = 2;
}
else
{
sCutSquareSide = CUT_NORMAL_SIDE;
sTileCountFromPlayer_X = 1;
sTileCountFromPlayer_Y = 1;
}
for (i = 0; i < CUT_NORMAL_AREA; i++)
cutTiles[i] = FALSE;
for (i = 0; i < CUT_HYPER_AREA; i++)
sHyperCutTiles[i] = FALSE;
ret = FALSE;
for (i = 0; i < CUT_NORMAL_SIDE; i++)
{
y = i - 1 + gPlayerFacingPosition.y;
for (j = 0; j < CUT_NORMAL_SIDE; 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.
sHyperCutTiles[6 + (i * 5) + j] = TRUE;
ret = TRUE;
}
if (MapGridIsImpassableAt(x, y) == TRUE)
{
cutTiles[i * 3 + j] = FALSE;
}
else
{
cutTiles[i * 3 + j] = TRUE;
if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
sHyperCutTiles[6 + (i * 5) + j] = TRUE;
}
}
else
{
cutTiles[i * 3 + j] = FALSE;
}
}
}
if (userAbility != ABILITY_HYPER_CUTTER)
{
if (ret == TRUE)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gPostMenuFieldCallback = FieldCallback_CutGrass;
}
}
else
{
bool8 tileCuttable;
for (i = 0; i < 16; i++)
{
x = gPlayerFacingPosition.x + sHyperCutStruct[i].x;
y = gPlayerFacingPosition.y + sHyperCutStruct[i].y;
tileCuttable = TRUE;
j = 0;
do
{
if (sHyperCutStruct[i].unk2[j] == 0)
break;
if (cutTiles[(u8)(sHyperCutStruct[i].unk2[j] - 1)] == FALSE)
{
tileCuttable = FALSE;
break;
}
} while (++j <= 1);
if (tileCuttable == TRUE)
{
if (MapGridGetZCoordAt(x, y) == gPlayerFacingPosition.height)
{
u8 tileArrayId = ((sHyperCutStruct[i].y * 5) + 12) + (sHyperCutStruct[i].x);
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE
|| MetatileBehavior_IsAshGrass(tileBehavior) == TRUE)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gPostMenuFieldCallback = FieldCallback_CutGrass;
sHyperCutTiles[tileArrayId] = TRUE;
ret = TRUE;
}
else
{
if (MetatileBehavior_IsCuttableGrass(tileBehavior) == TRUE)
sHyperCutTiles[tileArrayId] = TRUE;
}
}
}
}
if (ret == TRUE)
{
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gPostMenuFieldCallback = FieldCallback_CutGrass;
}
}
return ret;
}
}
static 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;
}
static 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;
}
static void StartCutGrassFieldEffect(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_GRASS);
FieldEffectStart(FLDEFF_CUT_GRASS);
}
bool8 FldEff_CutGrass(void)
{
s16 x, y;
u8 i = 0;
PlaySE(SE_W015);
PlayerGetDestCoords(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
for (i = 0; i < CUT_HYPER_AREA; i++)
{
if (sHyperCutTiles[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 - sTileCountFromPlayer_X, gPlayerFacingPosition.y - (1 + sTileCountFromPlayer_Y));
DrawWholeMapView();
sCutGrassSpriteArrayPtr = AllocZeroed(CUT_SPRITE_ARRAY_COUNT);
// populate sprite ID array
for (i = 0; i < CUT_SPRITE_ARRAY_COUNT; i++)
{
sCutGrassSpriteArrayPtr[i] = CreateSprite(&sSpriteTemplate_CutGrass,
gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0);
gSprites[sCutGrassSpriteArrayPtr[i]].data[2] = 32 * i;
}
return FALSE;
}
// set map grid metatile depending on x, y
static void SetCutGrassMetatile(s16 x, s16 y)
{
s32 metatileId = MapGridGetMetatileIdAt(x, y);
switch (metatileId)
{
case METATILE_ID_POKE_LONG_GRASS_START:
case METATILE_ID_POKE_LONG_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_LONG_GRASS:
MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
break;
case METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS:
MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
break;
case METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS:
MapGridSetMetatileIdAt(x, y, METATILE_ID_SECRET_BASE_RIGHT_LONG_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
{
LONG_GRASS_NONE,
LONG_GRASS_FIELD,
LONG_GRASS_BASE_LEFT,
LONG_GRASS_BASE_CENTER,
LONG_GRASS_BASE_RIGHT
};
static u8 GetLongGrassCaseAt(s16 x, s16 y)
{
u16 metatileId = MapGridGetMetatileIdAt(x, y);
if (metatileId == METATILE_ID_GRASS)
return LONG_GRASS_FIELD;
else if (metatileId == METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS)
return LONG_GRASS_BASE_LEFT;
else if (metatileId == METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS)
return LONG_GRASS_BASE_CENTER;
else if (metatileId == METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS)
return LONG_GRASS_BASE_RIGHT;
else
return LONG_GRASS_NONE;
}
static void SetCutGrassMetatiles(s16 x, s16 y)
{
s16 i;
s16 lowerY = y + sCutSquareSide;
for (i = 0; i < sCutSquareSide; i++)
{
s16 currentX = x + i;
if (MapGridGetMetatileIdAt(currentX, y) == METATILE_ID_POKE_LONG_GRASS)
{
switch (GetLongGrassCaseAt(currentX, y + 1))
{
case LONG_GRASS_FIELD:
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_POKE_LONG_GRASS_START);
break;
case LONG_GRASS_BASE_LEFT:
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
break;
case LONG_GRASS_BASE_CENTER:
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
break;
case LONG_GRASS_BASE_RIGHT:
MapGridSetMetatileIdAt(currentX, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
break;
}
}
if (MapGridGetMetatileIdAt(currentX, lowerY) == METATILE_ID_GRASS)
{
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_POKE_LONG_GRASS_START)
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_GRASS);
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
if (MapGridGetMetatileIdAt(currentX, lowerY + 1) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(currentX, lowerY + 1, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
}
}
if (sCutSquareSide == CUT_HYPER_SIDE)
{
HandleLongGrassOnHyper(0, x, y);
HandleLongGrassOnHyper(1, x, y);
}
}
static void HandleLongGrassOnHyper(u8 caseId, s16 x, s16 y)
{
s16 newX;
bool8 arr[3];
if (caseId == 0)
{
arr[0] = sHyperCutTiles[5];
arr[1] = sHyperCutTiles[10];
arr[2] = sHyperCutTiles[15];
newX = x;
}
else if (caseId == 1)
{
arr[0] = sHyperCutTiles[9];
arr[1] = sHyperCutTiles[14];
arr[2] = sHyperCutTiles[19];
newX = x + 4;
}
else // invalid case
{
return;
}
if (arr[0] == TRUE)
{
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_LONG_GRASS_START)
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_GRASS);
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
}
if (arr[1] == TRUE)
{
if (MapGridGetMetatileIdAt(newX, y + 2) == METATILE_ID_POKE_LONG_GRASS)
{
switch (GetLongGrassCaseAt(newX, y + 3))
{
case LONG_GRASS_FIELD:
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_POKE_LONG_GRASS_START);
break;
case LONG_GRASS_BASE_LEFT:
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
break;
case LONG_GRASS_BASE_CENTER:
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
break;
case LONG_GRASS_BASE_RIGHT:
MapGridSetMetatileIdAt(newX, y + 3, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
break;
}
}
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_POKE_LONG_GRASS_START)
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_GRASS);
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
if (MapGridGetMetatileIdAt(newX, y + 4) == METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS)
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
}
if (arr[2] == TRUE)
{
if (MapGridGetMetatileIdAt(newX, y + 3) == METATILE_ID_POKE_LONG_GRASS)
{
switch (GetLongGrassCaseAt(newX, y + 4))
{
case LONG_GRASS_FIELD:
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_POKE_LONG_GRASS_START);
break;
case LONG_GRASS_BASE_LEFT:
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
break;
case LONG_GRASS_BASE_CENTER:
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
break;
case LONG_GRASS_BASE_RIGHT:
MapGridSetMetatileIdAt(newX, y + 4, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
break;
}
}
}
}
static void CutGrassSpriteCallback1(struct Sprite *sprite)
{
sprite->data[0] = 8;
sprite->data[1] = 0;
sprite->data[3] = 0;
sprite->callback = CutGrassSpriteCallback2;
}
static 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]);
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]++;
if (sprite->data[1] != 28)
sprite->data[1]++;
else
sprite->callback = CutGrassSpriteCallbackEnd; // done rotating the grass, execute clean up function
}
static void CutGrassSpriteCallbackEnd(struct Sprite *sprite)
{
u8 i;
for (i = 1; i < CUT_SPRITE_ARRAY_COUNT; i++)
DestroySprite(&gSprites[sCutGrassSpriteArrayPtr[i]]);
FieldEffectStop(&gSprites[sCutGrassSpriteArrayPtr[0]], FLDEFF_CUT_GRASS);
FREE_AND_SET_NULL(sCutGrassSpriteArrayPtr);
ScriptUnfreezeEventObjects();
ScriptContext2_Disable();
if (IsMewPlayingHideAndSeek() == TRUE)
ScriptContext1_SetupScript(FarawayIsland_Interior_EventScript_267EDB);
}
void sub_80D423C(s16 x, s16 y)
{
u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsLongGrass_Duplicate(metatileBehavior))
{
switch (GetLongGrassCaseAt(x, y + 1))
{
case LONG_GRASS_FIELD:
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_POKE_LONG_GRASS_START);
break;
case LONG_GRASS_BASE_LEFT:
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS);
break;
case LONG_GRASS_BASE_CENTER:
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS);
break;
case LONG_GRASS_BASE_RIGHT:
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS);
break;
}
}
}
void sub_80D42B8(s16 x, s16 y)
{
if (MapGridGetMetatileIdAt(x, y) == METATILE_ID_GRASS)
{
u8 metatileBehavior = MapGridGetMetatileBehaviorAt(x, y + 1);
if (MetatileBehavior_IsLongGrassSouthEdge(metatileBehavior))
{
s32 metatileId = MapGridGetMetatileIdAt(x, y + 1);
switch (metatileId)
{
case METATILE_ID_POKE_LONG_GRASS_START:
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_GRASS);
break;
case METATILE_ID_SECRET_BASE_LEFT_POKE_LONG_GRASS:
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_LEFT_LONG_GRASS);
break;
case METATILE_ID_SECRET_BASE_CENTER_POKE_LONG_GRASS:
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_CENTER_LONG_GRASS);
break;
case METATILE_ID_SECRET_BASE_RIGHT_POKE_LONG_GRASS:
MapGridSetMetatileIdAt(x, y + 1, METATILE_ID_SECRET_BASE_RIGHT_LONG_GRASS);
break;
}
}
}
}
static void StartCutTreeFieldEffect(void)
{
PlaySE(SE_W015);
FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE);
EnableBothScriptContexts();
}

View File

@ -78,14 +78,14 @@ bool8 SetUpFieldMove_Flash(void)
if (ShouldDoBrailleFlyEffect()) if (ShouldDoBrailleFlyEffect())
{ {
gSpecialVar_Result = GetCursorSelectionMonId(); gSpecialVar_Result = GetCursorSelectionMonId();
gUnknown_03005DB0 = FieldCallback_Teleport; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gUnknown_0203CEEC = sub_8179918; gPostMenuFieldCallback = sub_8179918;
return TRUE; return TRUE;
} }
else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH)) else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
{ {
gUnknown_03005DB0 = FieldCallback_Teleport; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gUnknown_0203CEEC = hm2_flash; gPostMenuFieldCallback = hm2_flash;
return TRUE; return TRUE;
} }

View File

@ -6,6 +6,7 @@
#include "rom6.h" #include "rom6.h"
#include "script.h" #include "script.h"
#include "task.h" #include "task.h"
#include "constants/event_objects.h"
// static functions // static functions
static void FldEff_UseStrength(void); static void FldEff_UseStrength(void);
@ -14,11 +15,11 @@ static void sub_8145E74(void);
// text // text
bool8 SetUpFieldMove_Strength(void) bool8 SetUpFieldMove_Strength(void)
{ {
if (npc_before_player_of_type(87) == TRUE) if (CheckObjectGraphicsInFrontOfPlayer(EVENT_OBJ_GFX_PUSHABLE_BOULDER) == TRUE)
{ {
gSpecialVar_Result = GetCursorSelectionMonId(); gSpecialVar_Result = GetCursorSelectionMonId();
gUnknown_03005DB0 = FieldCallback_Teleport; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gUnknown_0203CEEC = FldEff_UseStrength; gPostMenuFieldCallback = FldEff_UseStrength;
return TRUE; return TRUE;
} }
return FALSE; return FALSE;

View File

@ -24,8 +24,8 @@ void sub_81BE72C(void);
bool8 SetUpFieldMove_SweetScent(void) bool8 SetUpFieldMove_SweetScent(void)
{ {
gUnknown_03005DB0 = FieldCallback_Teleport; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gUnknown_0203CEEC = hm2_sweet_scent; gPostMenuFieldCallback = hm2_sweet_scent;
return TRUE; return TRUE;
} }

View File

@ -11,8 +11,8 @@ bool8 SetUpFieldMove_Teleport(void)
{ {
if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE) if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{ {
gUnknown_03005DB0 = FieldCallback_Teleport; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gUnknown_0203CEEC = hm_teleport_run_dp02scr; gPostMenuFieldCallback = hm_teleport_run_dp02scr;
return TRUE; return TRUE;
} }
return FALSE; return FALSE;

View File

@ -39,7 +39,7 @@ extern void sub_81C5B14(u8 taskId);
extern u8 gText_DadsAdvice[]; extern u8 gText_DadsAdvice[];
extern u8 gText_CantDismountBike[]; extern u8 gText_CantDismountBike[];
extern void sub_8197434(u8 a, u8 b); extern void sub_8197434(u8 a, u8 b);
extern void sub_80984F4(void); extern void ScriptUnfreezeEventObjects(void);
extern void ItemUseOutOfBattle_TMHM(u8 a); extern void ItemUseOutOfBattle_TMHM(u8 a);
extern void ItemUseOutOfBattle_EvolutionStone(u8 b); extern void ItemUseOutOfBattle_EvolutionStone(u8 b);
extern void bag_menu_mail_related(void); extern void bag_menu_mail_related(void);
@ -197,7 +197,7 @@ void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId)
{ {
sub_8197434(0, 1); sub_8197434(0, 1);
DestroyTask(taskId); DestroyTask(taskId);
sub_80984F4(); ScriptUnfreezeEventObjects();
ScriptContext2_Disable(); ScriptContext2_Disable();
} }
@ -252,7 +252,7 @@ void ItemUseOnFieldCB_Bike(u8 taskId)
GetOnOffBike(2); GetOnOffBike(2);
else else
GetOnOffBike(4); GetOnOffBike(4);
sub_80984F4(); ScriptUnfreezeEventObjects();
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(taskId); DestroyTask(taskId);
} }
@ -358,7 +358,7 @@ void sub_80FD504(u8 taskId)
void sub_80FD5CC(u8 taskId) void sub_80FD5CC(u8 taskId)
{ {
sub_8197434(0, 1); sub_8197434(0, 1);
sub_80984F4(); ScriptUnfreezeEventObjects();
ScriptContext2_Disable(); ScriptContext2_Disable();
DestroyTask(taskId); DestroyTask(taskId);
} }

View File

@ -846,7 +846,7 @@ bool8 MetatileBehavior_IsBerryTreeSoil(u8 var)
return FALSE; return FALSE;
} }
bool8 MetatileBehavior_IsAsh(u8 var) bool8 MetatileBehavior_IsAshGrass(u8 var)
{ {
if (var == MB_ASHGRASS) if (var == MB_ASHGRASS)
return TRUE; return TRUE;

View File

@ -88,7 +88,7 @@ extern const u16 gUnknown_82EC7C4[];
u16 gUnknown_03005DA8; u16 gUnknown_03005DA8;
MainCallback gFieldCallback; MainCallback gFieldCallback;
bool8 (*gUnknown_03005DB0)(void); bool8 (*gFieldCallback2)(void);
u8 gUnknown_03005DB4; u8 gUnknown_03005DB4;
u8 gFieldLinkPlayerCount; u8 gFieldLinkPlayerCount;
@ -1518,15 +1518,15 @@ void sub_8085E94(void *a0)
static bool8 map_post_load_hook_exec(void) static bool8 map_post_load_hook_exec(void)
{ {
if (gUnknown_03005DB0 != NULL) if (gFieldCallback2 != NULL)
{ {
if (!gUnknown_03005DB0()) if (!gFieldCallback2())
{ {
return FALSE; return FALSE;
} }
else else
{ {
gUnknown_03005DB0 = NULL; gFieldCallback2 = NULL;
gFieldCallback = NULL; gFieldCallback = NULL;
} }
} }
@ -1554,7 +1554,7 @@ void CB2_NewGame(void)
ScriptContext1_Init(); ScriptContext1_Init();
ScriptContext2_Disable(); ScriptContext2_Disable();
gFieldCallback = ExecuteTruckSequence; gFieldCallback = ExecuteTruckSequence;
gUnknown_03005DB0 = NULL; gFieldCallback2 = NULL;
do_load_map_stuff_loop(&gMain.state); do_load_map_stuff_loop(&gMain.state);
SetFieldVBlankCallback(); SetFieldVBlankCallback();
SetMainCallback1(CB1_Overworld); SetMainCallback1(CB1_Overworld);
@ -1684,7 +1684,7 @@ void c2_8056854(void)
void CB2_ReturnToFieldWithOpenMenu(void) void CB2_ReturnToFieldWithOpenMenu(void)
{ {
FieldClearVBlankHBlankCallbacks(); FieldClearVBlankHBlankCallbacks();
gUnknown_03005DB0 = sub_80AF6A4; gFieldCallback2 = sub_80AF6A4;
CB2_ReturnToField(); CB2_ReturnToField();
} }

View File

@ -27,16 +27,16 @@ static void hm2_dig(void);
static void sub_8135780(void); static void sub_8135780(void);
// extern RAM loc // extern RAM loc
extern struct MapPosition gUnknown_0203AB40; extern struct MapPosition gPlayerFacingPosition;
// text // text
bool8 npc_before_player_of_type(u8 a) bool8 CheckObjectGraphicsInFrontOfPlayer(u8 a)
{ {
u8 eventObjId; u8 eventObjId;
GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203AB40.x, &gUnknown_0203AB40.y); GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
gUnknown_0203AB40.height = PlayerGetZCoord(); gPlayerFacingPosition.height = PlayerGetZCoord();
eventObjId = GetEventObjectIdByXYZ(gUnknown_0203AB40.x, gUnknown_0203AB40.y, gUnknown_0203AB40.height); eventObjId = GetEventObjectIdByXYZ(gPlayerFacingPosition.x, gPlayerFacingPosition.y, gPlayerFacingPosition.height);
if (gEventObjects[eventObjId].graphicsId != a) if (gEventObjects[eventObjId].graphicsId != a)
{ {
return FALSE; return FALSE;
@ -50,7 +50,7 @@ bool8 npc_before_player_of_type(u8 a)
u8 oei_task_add(void) u8 oei_task_add(void)
{ {
GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203AB40.x, &gUnknown_0203AB40.y); GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
return CreateTask(task08_080C9820, 8); return CreateTask(task08_080C9820, 8);
} }
@ -118,17 +118,17 @@ static void sub_813561C(u8 taskId)
bool8 SetUpFieldMove_RockSmash(void) bool8 SetUpFieldMove_RockSmash(void)
{ {
if(ShouldDoBrailleStrengthEffect()) if (ShouldDoBrailleStrengthEffect())
{ {
gSpecialVar_Result = GetCursorSelectionMonId(); gSpecialVar_Result = GetCursorSelectionMonId();
gUnknown_03005DB0 = FieldCallback_Teleport; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gUnknown_0203CEEC = sub_8179834; gPostMenuFieldCallback = sub_8179834;
return TRUE; return TRUE;
} }
else if (npc_before_player_of_type(0x56) == TRUE) else if (CheckObjectGraphicsInFrontOfPlayer(EVENT_OBJ_GFX_BREAKABLE_ROCK) == TRUE)
{ {
gUnknown_03005DB0 = FieldCallback_Teleport; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gUnknown_0203CEEC = sub_81356C4; gPostMenuFieldCallback = sub_81356C4;
return TRUE; return TRUE;
} }
else else
@ -164,8 +164,8 @@ bool8 SetUpFieldMove_Dig(void)
{ {
if (CanUseEscapeRopeOnCurrMap() == TRUE) if (CanUseEscapeRopeOnCurrMap() == TRUE)
{ {
gUnknown_03005DB0 = FieldCallback_Teleport; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gUnknown_0203CEEC = hm2_dig; gPostMenuFieldCallback = hm2_dig;
return TRUE; return TRUE;
} }
else else

View File

@ -90,7 +90,7 @@ extern void sub_80C4DDC(void (*)(void));
extern void sub_80C51C4(void (*)(void)); extern void sub_80C51C4(void (*)(void));
extern void sub_80C4E74(u8, void (*)(void)); extern void sub_80C4E74(u8, void (*)(void));
extern void sub_81C4EFC(void); extern void sub_81C4EFC(void);
extern void sub_80984F4(void); extern void ScriptUnfreezeEventObjects(void);
extern void sub_81A9EC8(void); extern void sub_81A9EC8(void);
extern void save_serialize_map(void); extern void save_serialize_map(void);
extern void sub_81A9E90(void); extern void sub_81A9E90(void);
@ -526,7 +526,7 @@ void sub_809FA18(void) // Called from field_screen.s
{ {
sUnknown_02037619[0] = 0; sUnknown_02037619[0] = 0;
sUnknown_02037619[1] = 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 void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s
@ -769,7 +769,7 @@ static bool8 StartMenuBattlePyramidRetireCallback(void)
void sub_809FDD4(void) // Called from battle_frontier_2.s void sub_809FDD4(void) // Called from battle_frontier_2.s
{ {
sub_8197DF8(0, FALSE); sub_8197DF8(0, FALSE);
sub_80984F4(); ScriptUnfreezeEventObjects();
CreateStartMenuTask(sub_809FA34); CreateStartMenuTask(sub_809FA34);
ScriptContext2_Enable(); ScriptContext2_Enable();
} }
@ -811,7 +811,7 @@ static bool8 SaveCallback(void)
case SAVE_SUCCESS: case SAVE_SUCCESS:
case SAVE_ERROR: // Close start menu case SAVE_ERROR: // Close start menu
sub_8197DF8(0, TRUE); sub_8197DF8(0, TRUE);
sub_80984F4(); ScriptUnfreezeEventObjects();
ScriptContext2_Disable(); ScriptContext2_Disable();
sub_81A9EC8(); sub_81A9EC8();
return TRUE; return TRUE;
@ -848,7 +848,7 @@ static bool8 BattlePyramidRetireCallback(void)
return FALSE; return FALSE;
case SAVE_CANCELED: // Yes (Retire from battle pyramid) case SAVE_CANCELED: // Yes (Retire from battle pyramid)
sub_8197DF8(0, TRUE); sub_8197DF8(0, TRUE);
sub_80984F4(); ScriptUnfreezeEventObjects();
ScriptContext2_Disable(); ScriptContext2_Disable();
ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88); ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88);
return TRUE; return TRUE;
@ -1405,7 +1405,7 @@ static void HideStartMenuWindow(void)
{ {
sub_819746C(GetStartMenuWindowId(), TRUE); sub_819746C(GetStartMenuWindowId(), TRUE);
RemoveStartMenuWindow(); RemoveStartMenuWindow();
sub_80984F4(); ScriptUnfreezeEventObjects();
ScriptContext2_Disable(); ScriptContext2_Disable();
} }

View File

@ -384,10 +384,7 @@ gUnknown_02039D8C: @ 2039D8C
.space 0x4 .space 0x4
.include "src/script_movement.o" .include "src/script_movement.o"
.include "src/fldeff_cut.o"
gUnknown_02039DD0: @ 2039DD0
.space 0x4
.include "src/map_name_popup.o" .include "src/map_name_popup.o"
.include "src/item.o" .include "src/item.o"
@ -607,7 +604,7 @@ gUnknown_0203AB34: @ 203AB34
.include "src/battle_ai_script_commands.o" .include "src/battle_ai_script_commands.o"
.align 2 .align 2
gUnknown_0203AB40: @ 203AB40 gPlayerFacingPosition: @ 203AB40
.space 0x8 .space 0x8
.include "src/pokeblock.o" .include "src/pokeblock.o"
@ -844,7 +841,7 @@ gUnknown_0203CEE8: @ 203CEE8
gUnknown_0203CEE9: @ 203CEE9 gUnknown_0203CEE9: @ 203CEE9
.space 0x3 .space 0x3
gUnknown_0203CEEC: @ 203CEEC gPostMenuFieldCallback: @ 203CEEC
.space 0x4 .space 0x4
gUnknown_0203CEF0: @ 203CEF0 gUnknown_0203CEF0: @ 203CEF0