Merge pull request #272 from PikalaxALT/fldeff_cut

fldeff_cut
This commit is contained in:
PikalaxALT
2020-02-26 13:50:04 -05:00
committed by GitHub
27 changed files with 467 additions and 737 deletions
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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
-535
View File
@@ -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.
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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
-40
View File
@@ -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
+24
View File
@@ -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
+4
View File
@@ -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
+3
View File
@@ -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
+2
View File
@@ -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
+3 -2
View File
@@ -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
+1 -1
View File
@@ -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);
+2
View File
@@ -15,6 +15,8 @@ enum
typedef void (*TilesetCB)(void);
#define METATILE_ID(tileset, name) (METATILE_##tileset##_##name)
struct Tileset
{
/*0x00*/ bool8 isCompressed;
+1 -1
View File
@@ -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);
+2 -2
View File
@@ -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);
+4 -3
View File
@@ -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;
+50 -50
View File
@@ -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;
+299
View File
@@ -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();
}
+1 -1
View File
@@ -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);
+23 -21
View File
@@ -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);
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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;
}
+1 -1
View File
@@ -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;
+7 -34
View File
@@ -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;
+15 -15
View File
@@ -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));
+11 -11
View File
@@ -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;
}
}
+1 -7
View File
@@ -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"