Merge pull request #255 from PikalaxALT/event_object_80688E4
event_object_80688E4
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1645,7 +1645,7 @@ sprite_new: @ 805E9F8
|
||||
adds r0, r5, 0
|
||||
bl GetObjectEventGraphicsInfo
|
||||
adds r4, r0, 0
|
||||
ldr r1, _0805EB38 @ =sub_8068FA8
|
||||
ldr r1, _0805EB38 @ =UpdateObjectEventSpriteSubpriorityAndVisibility
|
||||
add r3, sp, 0x1C
|
||||
adds r0, r5, 0
|
||||
mov r2, sp
|
||||
@@ -1769,7 +1769,7 @@ _0805EB24:
|
||||
pop {r1}
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0805EB38: .4byte sub_8068FA8
|
||||
_0805EB38: .4byte UpdateObjectEventSpriteSubpriorityAndVisibility
|
||||
_0805EB3C: .4byte 0x0000ffff
|
||||
_0805EB40: .4byte gSprites
|
||||
thumb_func_end sprite_new
|
||||
@@ -18285,7 +18285,7 @@ sub_8066108: @ 8066108
|
||||
push {r4,lr}
|
||||
adds r4, r1, 0
|
||||
adds r0, r4, 0
|
||||
bl sub_8068E9C
|
||||
bl SpriteAnimEnded
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0806611C
|
||||
@@ -19637,7 +19637,7 @@ sub_8066A54: @ 8066A54
|
||||
push {r4,lr}
|
||||
adds r4, r1, 0
|
||||
adds r0, r4, 0
|
||||
bl sub_8068E9C
|
||||
bl SpriteAnimEnded
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08066A70
|
||||
@@ -19707,7 +19707,7 @@ sub_8066AD0: @ 8066AD0
|
||||
push {r4,lr}
|
||||
adds r4, r1, 0
|
||||
adds r0, r4, 0
|
||||
bl sub_8068E9C
|
||||
bl SpriteAnimEnded
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08066AEC
|
||||
|
||||
+13
-13
@@ -951,7 +951,7 @@ _080DB4C0:
|
||||
_080DB4CE:
|
||||
adds r0, r5, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
ldrh r1, [r5, 0x2E]
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
@@ -1294,7 +1294,7 @@ _080DB750:
|
||||
_080DB770:
|
||||
adds r0, r5, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
ldrh r1, [r5, 0x2E]
|
||||
lsls r1, 24
|
||||
lsrs r1, 24
|
||||
@@ -1564,7 +1564,7 @@ _080DB94E:
|
||||
lsls r1, 29
|
||||
lsrs r1, 31
|
||||
adds r0, r4, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
_080DB98E:
|
||||
add sp, 0x4
|
||||
pop {r3}
|
||||
@@ -1781,7 +1781,7 @@ sub_80DBB18: @ 80DBB18
|
||||
_080DBB2E:
|
||||
adds r0, r1, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80DBB18
|
||||
@@ -1810,7 +1810,7 @@ sub_80DBB3C: @ 80DBB3C
|
||||
lsls r1, 29
|
||||
lsrs r1, 31
|
||||
adds r0, r4, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
movs r1, 0x30
|
||||
ldrsh r0, [r4, r1]
|
||||
cmp r0, 0x38
|
||||
@@ -1966,7 +1966,7 @@ _080DBC66:
|
||||
strh r0, [r4, 0x22]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
_080DBCA6:
|
||||
add sp, 0x4
|
||||
pop {r4}
|
||||
@@ -2233,7 +2233,7 @@ _080DBE98:
|
||||
strb r0, [r1]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
ldr r1, [r5, 0x10]
|
||||
ldr r0, [r4, 0x34]
|
||||
cmp r1, r0
|
||||
@@ -2461,7 +2461,7 @@ _080DC03C:
|
||||
strb r0, [r1]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
_080DC080:
|
||||
add sp, 0x4
|
||||
pop {r4,r5}
|
||||
@@ -2889,7 +2889,7 @@ sub_80DC3A8: @ 80DC3A8
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
adds r0, r4, 0
|
||||
adds r0, 0x3F
|
||||
ldrb r1, [r0]
|
||||
@@ -3627,7 +3627,7 @@ _080DC8F6:
|
||||
strb r0, [r1]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
_080DC926:
|
||||
add sp, 0x4
|
||||
pop {r4-r6}
|
||||
@@ -3706,7 +3706,7 @@ sub_80DC99C: @ 80DC99C
|
||||
strh r1, [r4, 0x22]
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
ldrh r1, [r4, 0x3E]
|
||||
ldr r0, _080DC9D8 @ =0x00001004
|
||||
ands r0, r1
|
||||
@@ -4163,7 +4163,7 @@ sub_80DCCE0: @ 80DCCE0
|
||||
_080DCCFE:
|
||||
adds r0, r4, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
ldrh r0, [r4, 0x2E]
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
@@ -4195,7 +4195,7 @@ sub_80DCD1C: @ 80DCD1C
|
||||
_080DCD3A:
|
||||
adds r0, r2, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
_080DCD42:
|
||||
pop {r0}
|
||||
bx r0
|
||||
|
||||
+1
-1
@@ -7979,7 +7979,7 @@ _08058978:
|
||||
_0805898A:
|
||||
adds r0, r5, 0
|
||||
movs r1, 0
|
||||
bl sub_8068EB4
|
||||
bl UpdateObjectEventSpriteVisibility
|
||||
ldrb r0, [r6]
|
||||
lsls r0, 29
|
||||
cmp r0, 0
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
.include "asm/macros.inc"
|
||||
.include "constants/constants.inc"
|
||||
.section .rodata
|
||||
.align 2
|
||||
|
||||
gUnknown_83A710C::
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
.4byte little_step
|
||||
|
||||
gUnknown_83A714C::
|
||||
.4byte double_little_steps
|
||||
.4byte double_little_steps
|
||||
.4byte double_little_steps
|
||||
.4byte double_little_steps
|
||||
.4byte double_little_steps
|
||||
.4byte double_little_steps
|
||||
.4byte double_little_steps
|
||||
.4byte double_little_steps
|
||||
|
||||
gUnknown_83A716C::
|
||||
.4byte double_little_steps
|
||||
.4byte triple_little_steps
|
||||
.4byte triple_little_steps
|
||||
.4byte double_little_steps
|
||||
.4byte triple_little_steps
|
||||
.4byte triple_little_steps
|
||||
|
||||
gUnknown_83A7184::
|
||||
.4byte quad_little_steps
|
||||
.4byte quad_little_steps
|
||||
.4byte quad_little_steps
|
||||
.4byte quad_little_steps
|
||||
|
||||
gUnknown_83A7194::
|
||||
.4byte oct_little_steps
|
||||
.4byte oct_little_steps
|
||||
|
||||
gUnknown_83A719C:: @ 83A719C
|
||||
.4byte gUnknown_83A710C
|
||||
.4byte gUnknown_83A714C
|
||||
.4byte gUnknown_83A716C
|
||||
.4byte gUnknown_83A7184
|
||||
.4byte gUnknown_83A7194
|
||||
|
||||
gUnknown_83A71B0:: @ 83A71B0
|
||||
.2byte 0x0010, 0x0008, 0x0006, 0x0004, 0x0002
|
||||
|
||||
gUnknown_83A71BA::
|
||||
.byte 0xfc, 0xfa, 0xf8, 0xf6, 0xf5, 0xf4, 0xf4, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x00, 0x00
|
||||
|
||||
gUnknown_83A71CA::
|
||||
.byte 0x00, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, 0x00, 0x00
|
||||
|
||||
gUnknown_83A71DA::
|
||||
.byte 0xfe, 0xfc, 0xfa, 0xf8, 0xf7, 0xf6, 0xf6, 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, 0xfd, 0xfe, 0x00, 0x00
|
||||
|
||||
.align 2
|
||||
gUnknown_83A71EC:: @ 83A71EC
|
||||
.4byte gUnknown_83A71BA
|
||||
.4byte gUnknown_83A71CA
|
||||
.4byte gUnknown_83A71DA
|
||||
|
||||
.align 1
|
||||
gUnknown_83A71F8:: @ 83A71F8
|
||||
.2byte 0x10, 0x10, 0x20
|
||||
|
||||
gUnknown_83A71FE:: @ 83A71FE
|
||||
.byte 0, 0, 1
|
||||
|
||||
.align 1
|
||||
gUnknown_83A7202:: @ 83A7202
|
||||
.2byte 0x20, 0x20, 0x40
|
||||
|
||||
gUnknown_83A7208:: @ 83A7208
|
||||
.byte 1, 1, 2
|
||||
|
||||
.align 2
|
||||
gUnknown_83A720C:: @ 83A720C
|
||||
abspath "evobjmv.c"
|
||||
|
||||
.align 2
|
||||
gUnknown_83A7240:: @ 83A7240
|
||||
.asciz "0"
|
||||
@@ -4,12 +4,12 @@
|
||||
#include "global.h"
|
||||
|
||||
void FreezeObjectEvents(void);
|
||||
void FreezeObjectEvent(struct ObjectEvent *);
|
||||
bool8 FreezeObjectEvent(struct ObjectEvent *);
|
||||
void FreezeObjectEventsExceptOne(u8 objEventId);
|
||||
void sub_8069124(u8 a0, bool8 a1);
|
||||
u32 sub_806916C(u8 a0);
|
||||
void sub_80691A4(u8 a0, u8 a1);
|
||||
void sub_8069094(u8 a0, u8 a1);
|
||||
bool32 sub_8069294(u8 a0);
|
||||
void RfuUnionObjectToggleInvisibility(u8 a0, bool32 a1);
|
||||
u32 RfuUnionObjectIsInvisible(u8 a0);
|
||||
void RfuUnionObjectStartWarp(u8 a0, u8 a1);
|
||||
void RfuUnionObjectSetFacingDirection(u8 a0, u8 a1);
|
||||
bool32 RfuUnionObjectIsWarping(u8 a0);
|
||||
|
||||
#endif // GUARD_EVENT_OBJECT_80688E4_H
|
||||
|
||||
@@ -97,7 +97,7 @@ u8 sub_8063F84(u8 direction);
|
||||
u8 GetTrainerFacingDirectionMovementType(u8 direction);
|
||||
void CameraObjectSetFollowedObjectId(u8 spriteId);
|
||||
void UnfreezeObjectEvents(void);
|
||||
void sub_8069058(u8, u8);
|
||||
void TurnObjectEvent(u8, u8);
|
||||
|
||||
// Exported data declarations
|
||||
|
||||
@@ -105,5 +105,6 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
|
||||
extern const struct SpritePalette gUnknown_83A5348;
|
||||
extern const struct SpriteTemplate * const gFieldEffectObjectTemplatePointers[];
|
||||
extern const struct OamData gObjectEventBaseOam_32x32;
|
||||
extern const struct UCoords16 gUnknown_83A64C8[];
|
||||
|
||||
#endif // GUARD_EVENT_OBJECT_MOVEMENT_H
|
||||
|
||||
@@ -8,7 +8,7 @@ extern u32 gFieldEffectArguments[8];
|
||||
extern void (*gPostMenuFieldCallback)(void);
|
||||
extern bool8 (*gFieldCallback2)(void);
|
||||
|
||||
u8 FieldEffectStart(u8);
|
||||
u32 FieldEffectStart(u8);
|
||||
bool8 FieldEffectActiveListContains(u8 id);
|
||||
void sub_80B69DC(void);
|
||||
void CreateTeleportFieldEffectTask(void);
|
||||
|
||||
+52
-56
@@ -168,62 +168,58 @@ struct MapHeader
|
||||
|
||||
struct ObjectEvent
|
||||
{
|
||||
/*0x00*/ u32 active:1;
|
||||
u32 mapobj_bit_1:1;
|
||||
u32 mapobj_bit_2:1;
|
||||
u32 mapobj_bit_3:1;
|
||||
u32 mapobj_bit_4:1;
|
||||
u32 mapobj_bit_5:1;
|
||||
u32 mapobj_bit_6:1;
|
||||
u32 mapobj_bit_7:1;
|
||||
/*0x01*/ u32 mapobj_bit_8:1;
|
||||
u32 mapobj_bit_9:1;
|
||||
u32 mapobj_bit_10:1;
|
||||
u32 mapobj_bit_11:1;
|
||||
u32 mapobj_bit_12:1;
|
||||
u32 mapobj_bit_13:1;
|
||||
u32 mapobj_bit_14:1;
|
||||
u32 mapobj_bit_15:1;
|
||||
/*0x02*/ u32 mapobj_bit_16:1;
|
||||
u32 mapobj_bit_17:1;
|
||||
u32 mapobj_bit_18:1;
|
||||
u32 mapobj_bit_19:1;
|
||||
u32 mapobj_bit_20:1;
|
||||
u32 mapobj_bit_21:1;
|
||||
u32 mapobj_bit_22:1;
|
||||
u32 mapobj_bit_23:1;
|
||||
/*0x03*/ u32 mapobj_bit_24:1;
|
||||
u32 mapobj_bit_25:1;
|
||||
u32 mapobj_bit_26:1;
|
||||
u32 mapobj_bit_27:1;
|
||||
u32 mapobj_bit_28:1;
|
||||
u32 mapobj_bit_29:1;
|
||||
u32 mapobj_bit_30:1;
|
||||
u32 mapobj_bit_31:1;
|
||||
/*0x04*/ u8 spriteId;
|
||||
/*0x05*/ u8 graphicsId;
|
||||
/*0x06*/ u8 animPattern;
|
||||
/*0x07*/ u8 trainerType;
|
||||
/*0x08*/ u8 localId;
|
||||
/*0x09*/ u8 mapNum;
|
||||
/*0x0A*/ u8 mapGroup;
|
||||
/*0x0B*/ u8 mapobj_unk_0B_0:4;
|
||||
u8 elevation:4;
|
||||
/*0x0C*/ struct Coords16 coords1;
|
||||
/*0x10*/ struct Coords16 coords2;
|
||||
/*0x14*/ struct Coords16 coords3;
|
||||
/*0x18*/ u8 facingDirection:4; //current direction?
|
||||
/*0x18*/ u8 placeholder18:4;
|
||||
/*0x19*/ union ObjectEventRange range;
|
||||
/*0x1A*/ u8 mapobj_unk_1A;
|
||||
/*0x1B*/ u8 mapobj_unk_1B;
|
||||
/*0x1C*/ u8 mapobj_unk_1C;
|
||||
/*0x1D*/ u8 trainerRange_berryTreeId;
|
||||
/*0x1E*/ u8 mapobj_unk_1E;
|
||||
/*0x1F*/ u8 mapobj_unk_1F;
|
||||
/*0x20*/ u8 mapobj_unk_20;
|
||||
/*0x21*/ u8 mapobj_unk_21;
|
||||
/*0x22*/ u8 animId;
|
||||
/*0x00*/ /* 0*/ u32 active:1;
|
||||
/* 1*/ u32 singleMovementActive:1;
|
||||
/* 2*/ u32 triggerGroundEffectsOnMove:1;
|
||||
/* 3*/ u32 triggerGroundEffectsOnStop:1;
|
||||
/* 4*/ u32 disableCoveringGroundEffects:1;
|
||||
/* 5*/ u32 landingJump:1;
|
||||
/* 6*/ u32 heldMovementActive:1;
|
||||
/* 7*/ u32 heldMovementFinished:1;
|
||||
/*0x01*/ /* 8*/ u32 frozen:1;
|
||||
/* 9*/ u32 facingDirectionLocked:1;
|
||||
/*10*/ u32 disableAnim:1;
|
||||
/*11*/ u32 enableAnim:1;
|
||||
/*12*/ u32 inanimate:1;
|
||||
/*13*/ u32 invisible:1;
|
||||
/*14*/ u32 offScreen:1;
|
||||
/*15*/ u32 trackedByCamera:1;
|
||||
/*0x02*/ /*16*/ u32 isPlayer:1;
|
||||
/*17*/ u32 hasReflection:1;
|
||||
/*18*/ u32 inShortGrass:1;
|
||||
/*19*/ u32 inShallowFlowingWater:1;
|
||||
/*20*/ u32 inSandPile:1;
|
||||
/*21*/ u32 inHotSprings:1;
|
||||
/*22*/ u32 hasShadow:1;
|
||||
/*23*/ u32 spriteAnimPausedBackup:1;
|
||||
/*0x03*/ /*24*/ u32 spriteAffineAnimPausedBackup:1;
|
||||
/*25*/ u32 disableJumpLandingGroundEffect:1;
|
||||
/*26*/ u32 fixedPriority:1;
|
||||
/*27*/ u32 hideReflection:1;
|
||||
/*0x04*/ u8 spriteId;
|
||||
/*0x05*/ u8 graphicsId;
|
||||
/*0x06*/ u8 animPattern;
|
||||
/*0x07*/ u8 trainerType;
|
||||
/*0x08*/ u8 localId;
|
||||
/*0x09*/ u8 mapNum;
|
||||
/*0x0A*/ u8 mapGroup;
|
||||
/*0x0B*/ u8 mapobj_unk_0B_0:4;
|
||||
u8 elevation:4;
|
||||
/*0x0C*/ struct Coords16 coords1;
|
||||
/*0x10*/ struct Coords16 coords2;
|
||||
/*0x14*/ struct Coords16 coords3;
|
||||
/*0x18*/ u8 facingDirection:4; //current direction?
|
||||
/*0x18*/ u8 placeholder18:4;
|
||||
/*0x19*/ union ObjectEventRange range;
|
||||
/*0x1A*/ u8 mapobj_unk_1A;
|
||||
/*0x1B*/ u8 mapobj_unk_1B;
|
||||
/*0x1C*/ u8 mapobj_unk_1C;
|
||||
/*0x1D*/ u8 trainerRange_berryTreeId;
|
||||
/*0x1E*/ u8 mapobj_unk_1E;
|
||||
/*0x1F*/ u8 mapobj_unk_1F;
|
||||
/*0x20*/ u8 mapobj_unk_20;
|
||||
/*0x21*/ u8 mapobj_unk_21;
|
||||
/*0x22*/ u8 animId;
|
||||
/*size = 0x24*/
|
||||
};
|
||||
|
||||
|
||||
+16
-16
@@ -591,22 +591,22 @@ union QuestLogMovement
|
||||
struct QuestLogObjectEvent
|
||||
{
|
||||
/*0x00*/ u8 active:1;
|
||||
/*0x00*/ u8 mapobj_bit_3:1;
|
||||
/*0x00*/ u8 mapobj_bit_4:1;
|
||||
/*0x00*/ u8 mapobj_bit_5:1;
|
||||
/*0x00*/ u8 mapobj_bit_8:1;
|
||||
/*0x00*/ u8 mapobj_bit_9:1;
|
||||
/*0x00*/ u8 mapobj_bit_10:1;
|
||||
/*0x00*/ u8 mapobj_bit_11:1;
|
||||
/*0x01*/ u8 mapobj_bit_12:1;
|
||||
/*0x01*/ u8 mapobj_bit_13:1;
|
||||
/*0x01*/ u8 mapobj_bit_14:1;
|
||||
/*0x01*/ u8 mapobj_bit_15:1;
|
||||
/*0x01*/ u8 mapobj_bit_16:1;
|
||||
/*0x01*/ u8 mapobj_bit_23:1;
|
||||
/*0x01*/ u8 mapobj_bit_24:1;
|
||||
/*0x01*/ u8 mapobj_bit_25:1;
|
||||
/*0x02*/ u8 mapobj_bit_26:1;
|
||||
/*0x00*/ u8 triggerGroundEffectsOnStop:1;
|
||||
/*0x00*/ u8 disableCoveringGroundEffects:1;
|
||||
/*0x00*/ u8 landingJump:1;
|
||||
/*0x00*/ u8 frozen:1;
|
||||
/*0x00*/ u8 facingDirectionLocked:1;
|
||||
/*0x00*/ u8 disableAnim:1;
|
||||
/*0x00*/ u8 enableAnim:1;
|
||||
/*0x01*/ u8 inanimate:1;
|
||||
/*0x01*/ u8 invisible:1;
|
||||
/*0x01*/ u8 offScreen:1;
|
||||
/*0x01*/ u8 trackedByCamera:1;
|
||||
/*0x01*/ u8 isPlayer:1;
|
||||
/*0x01*/ u8 spriteAnimPausedBackup:1;
|
||||
/*0x01*/ u8 spriteAffineAnimPausedBackup:1;
|
||||
/*0x01*/ u8 disableJumpLandingGroundEffect:1;
|
||||
/*0x02*/ u8 fixedPriority:1;
|
||||
/*0x02*/ u8 mapobj_unk_18:4;
|
||||
/*0x02*/ u8 unused_02_5:3;
|
||||
/*0x03*/ u8 mapobj_unk_0B_0:4;
|
||||
|
||||
+2
-2
@@ -95,7 +95,7 @@ SECTIONS {
|
||||
asm/field_player_avatar.o(.text);
|
||||
asm/event_object_movement.o(.text);
|
||||
asm/field_ground_effect.o(.text);
|
||||
asm/event_object_80688E4.o(.text);
|
||||
src/event_object_80688E4.o(.text);
|
||||
asm/field_message_box.o(.text);
|
||||
src/event_object_lock.o(.text);
|
||||
src/text_window_graphics.o(.text);
|
||||
@@ -422,7 +422,7 @@ SECTIONS {
|
||||
data/field_player_avatar.o(.rodata);
|
||||
data/event_object_movement.o(.rodata);
|
||||
data/field_ground_effect.o(.rodata);
|
||||
data/event_object_80688E4.o(.rodata);
|
||||
src/event_object_80688E4.o(.rodata);
|
||||
src/scrcmd.o(.rodata);
|
||||
src/coord_event_weather.o(.rodata);
|
||||
src/field_tasks.o(.rodata);
|
||||
|
||||
@@ -0,0 +1,653 @@
|
||||
#include "global.h"
|
||||
#include "event_object_80688E4.h"
|
||||
#include "event_object_movement.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_ground_effect.h"
|
||||
|
||||
// This is part of evobjmv.c (see assert statement in DoObjectUnionRoomWarpYDisplacement).
|
||||
|
||||
static void DoObjectUnionRoomWarpYDisplacement(struct Sprite * sprite);
|
||||
|
||||
bool8 FreezeObjectEvent(struct ObjectEvent * objectEvent)
|
||||
{
|
||||
if (objectEvent->heldMovementActive || objectEvent->frozen)
|
||||
return TRUE;
|
||||
objectEvent->frozen = TRUE;
|
||||
objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused;
|
||||
objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused;
|
||||
gSprites[objectEvent->spriteId].animPaused = TRUE;
|
||||
gSprites[objectEvent->spriteId].affineAnimPaused = TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void FreezeObjectEvents(void)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
if (gObjectEvents[i].active && i != gPlayerAvatar.objectEventId)
|
||||
FreezeObjectEvent(&gObjectEvents[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void FreezeObjectEventsExceptOne(u8 noFreeze)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
if (i != noFreeze && gObjectEvents[i].active && i != gPlayerAvatar.objectEventId)
|
||||
FreezeObjectEvent(&gObjectEvents[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void UnfreezeObjectEvent(struct ObjectEvent * objectEvent)
|
||||
{
|
||||
if (objectEvent->active && objectEvent->frozen)
|
||||
{
|
||||
objectEvent->frozen = FALSE;
|
||||
gSprites[objectEvent->spriteId].animPaused = objectEvent->spriteAnimPausedBackup;
|
||||
gSprites[objectEvent->spriteId].affineAnimPaused = objectEvent->spriteAffineAnimPausedBackup;
|
||||
}
|
||||
}
|
||||
|
||||
void UnfreezeObjectEvents(void)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
if (gObjectEvents[i].active)
|
||||
UnfreezeObjectEvent(&gObjectEvents[i]);
|
||||
}
|
||||
}
|
||||
|
||||
#define tObjectEventId data[0]
|
||||
#define tZCoord data[1]
|
||||
#define tInvisible data[2]
|
||||
|
||||
#define tDirection data[3]
|
||||
#define tSpeed data[4]
|
||||
#define tStepNo data[5]
|
||||
|
||||
static void little_step(struct Sprite * sprite, u8 direction)
|
||||
{
|
||||
sprite->pos1.x += gUnknown_83A64C8[direction].x;
|
||||
sprite->pos1.y += gUnknown_83A64C8[direction].y;
|
||||
}
|
||||
|
||||
static void double_little_steps(struct Sprite * sprite, u8 direction)
|
||||
{
|
||||
sprite->pos1.x += 2 * gUnknown_83A64C8[direction].x;
|
||||
sprite->pos1.y += 2 * gUnknown_83A64C8[direction].y;
|
||||
}
|
||||
|
||||
static void triple_little_steps(struct Sprite * sprite, u8 direction)
|
||||
{
|
||||
sprite->pos1.x += 2 * gUnknown_83A64C8[direction].x + gUnknown_83A64C8[direction].x;
|
||||
sprite->pos1.y += 2 * gUnknown_83A64C8[direction].y + gUnknown_83A64C8[direction].y;
|
||||
}
|
||||
|
||||
static void quad_little_steps(struct Sprite * sprite, u8 direction)
|
||||
{
|
||||
sprite->pos1.x += 4 * gUnknown_83A64C8[direction].x;
|
||||
sprite->pos1.y += 4 * gUnknown_83A64C8[direction].y;
|
||||
}
|
||||
|
||||
static void oct_little_steps(struct Sprite * sprite, u8 direction)
|
||||
{
|
||||
sprite->pos1.x += 8 * gUnknown_83A64C8[direction].x;
|
||||
sprite->pos1.y += 8 * gUnknown_83A64C8[direction].y;
|
||||
}
|
||||
|
||||
void oamt_npc_ministep_reset(struct Sprite * sprite, u8 direction, u8 speed)
|
||||
{
|
||||
sprite->tDirection = direction;
|
||||
sprite->tSpeed = speed;
|
||||
sprite->tStepNo = 0;
|
||||
}
|
||||
|
||||
typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 direction);
|
||||
|
||||
static const SpriteStepFunc sSpeed0[] = {
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step,
|
||||
little_step
|
||||
};
|
||||
|
||||
static const SpriteStepFunc sSpeed1[] = {
|
||||
double_little_steps,
|
||||
double_little_steps,
|
||||
double_little_steps,
|
||||
double_little_steps,
|
||||
double_little_steps,
|
||||
double_little_steps,
|
||||
double_little_steps,
|
||||
double_little_steps
|
||||
};
|
||||
|
||||
static const SpriteStepFunc sSpeed2[] = {
|
||||
double_little_steps,
|
||||
triple_little_steps,
|
||||
triple_little_steps,
|
||||
double_little_steps,
|
||||
triple_little_steps,
|
||||
triple_little_steps
|
||||
};
|
||||
|
||||
static const SpriteStepFunc sSpeed3[] = {
|
||||
quad_little_steps,
|
||||
quad_little_steps,
|
||||
quad_little_steps,
|
||||
quad_little_steps
|
||||
};
|
||||
|
||||
static const SpriteStepFunc sSpeed4[] = {
|
||||
oct_little_steps,
|
||||
oct_little_steps
|
||||
};
|
||||
|
||||
static const SpriteStepFunc *const sSpriteStepFuncsBySpeed[] = {
|
||||
sSpeed0,
|
||||
sSpeed1,
|
||||
sSpeed2,
|
||||
sSpeed3,
|
||||
sSpeed4
|
||||
};
|
||||
|
||||
static const s16 sSpriteStepCountsBySpeed[] = {
|
||||
NELEMS(sSpeed0),
|
||||
NELEMS(sSpeed1),
|
||||
NELEMS(sSpeed2),
|
||||
NELEMS(sSpeed3),
|
||||
NELEMS(sSpeed4)
|
||||
};
|
||||
|
||||
bool8 obj_npc_ministep(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->tStepNo >= sSpriteStepCountsBySpeed[sprite->tSpeed])
|
||||
return FALSE;
|
||||
|
||||
sSpriteStepFuncsBySpeed[sprite->tSpeed][sprite->tStepNo](sprite, sprite->tDirection);
|
||||
|
||||
sprite->tStepNo++;
|
||||
|
||||
if (sprite->tStepNo < sSpriteStepCountsBySpeed[sprite->tSpeed])
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#undef tStepNo
|
||||
#undef tSpeed
|
||||
#undef tDirection
|
||||
|
||||
#define tDirection data[3]
|
||||
#define tDelay data[4]
|
||||
#define tStepNo data[5]
|
||||
|
||||
void sub_8068BBC(struct Sprite *sprite, u8 direction)
|
||||
{
|
||||
sprite->tDirection = direction;
|
||||
sprite->tDelay = 0;
|
||||
sprite->tStepNo = 0;
|
||||
}
|
||||
|
||||
bool8 sub_8068BCC(struct Sprite *sprite)
|
||||
{
|
||||
if (!(sprite->tDelay & 1))
|
||||
{
|
||||
little_step(sprite, sprite->tDirection);
|
||||
sprite->tStepNo++;
|
||||
}
|
||||
|
||||
sprite->tDelay++;
|
||||
|
||||
if (sprite->tStepNo > 15)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8068C08(struct Sprite *sprite, u8 direction)
|
||||
{
|
||||
sprite->tDirection = direction;
|
||||
sprite->tDelay = 0;
|
||||
sprite->tStepNo = 0;
|
||||
}
|
||||
|
||||
bool8 sub_8068C18(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->tDelay < 3)
|
||||
{
|
||||
little_step(sprite, sprite->tDirection);
|
||||
sprite->tStepNo++;
|
||||
}
|
||||
else
|
||||
sprite->tDelay = 0;
|
||||
|
||||
if (sprite->tStepNo > 15)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8068C58(struct Sprite *sprite, u8 direction)
|
||||
{
|
||||
sprite->tDirection = direction;
|
||||
sprite->tDelay = 0;
|
||||
sprite->tStepNo = 0;
|
||||
}
|
||||
|
||||
bool8 sub_8068C68(struct Sprite *sprite)
|
||||
{
|
||||
if (++sprite->tDelay > 9)
|
||||
{
|
||||
sprite->tDelay = 0;
|
||||
little_step(sprite, sprite->tDirection);
|
||||
sprite->tStepNo++;
|
||||
}
|
||||
|
||||
if (sprite->tStepNo > 15)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8068CA4(struct Sprite *sprite, u8 direction)
|
||||
{
|
||||
sprite->tDirection = direction;
|
||||
sprite->tDelay = 0;
|
||||
sprite->tStepNo = 0;
|
||||
}
|
||||
|
||||
bool8 sub_8068CB4(struct Sprite *sprite)
|
||||
{
|
||||
if ((++sprite->tDelay) & 1)
|
||||
{
|
||||
little_step(sprite, sprite->tDirection);
|
||||
sprite->tStepNo++;
|
||||
}
|
||||
else
|
||||
{
|
||||
double_little_steps(sprite, sprite->tDirection);
|
||||
sprite->tStepNo += 2;
|
||||
}
|
||||
|
||||
if (sprite->tStepNo > 15)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#undef tStepNo
|
||||
#undef tDelay
|
||||
#undef tDirection
|
||||
|
||||
#define tDirection data[3]
|
||||
#define tJumpSpeed data[4]
|
||||
#define tJumpHeight data[5]
|
||||
#define tStepNo data[6]
|
||||
|
||||
static const s8 sJumpHeight12[] = {
|
||||
-4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0
|
||||
};
|
||||
|
||||
static const s8 sJumpHeight6[] = {
|
||||
0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0
|
||||
};
|
||||
|
||||
static const s8 sJumpHeight10[] = {
|
||||
-2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0
|
||||
};
|
||||
|
||||
static const s8 *const sYDisplacementPtrs[] = {
|
||||
sJumpHeight12,
|
||||
sJumpHeight6,
|
||||
sJumpHeight10
|
||||
};
|
||||
|
||||
static s16 GetJumpYDisplacement(s16 stepno, u8 jumpno)
|
||||
{
|
||||
return sYDisplacementPtrs[jumpno][stepno];
|
||||
}
|
||||
|
||||
void sub_8068D1C(struct Sprite *sprite, u8 direction, u8 speed, u8 height)
|
||||
{
|
||||
sprite->tDirection = direction;
|
||||
sprite->tJumpSpeed = speed;
|
||||
sprite->tJumpHeight = height;
|
||||
sprite->tStepNo = 0;
|
||||
}
|
||||
|
||||
u8 sub_8068D3C(struct Sprite *sprite)
|
||||
{
|
||||
s16 duration[3] = {0x10, 0x10, 0x20};
|
||||
u8 shifts[3] = {0, 0, 1};
|
||||
u8 jumpPhase = 0;
|
||||
|
||||
if (sprite->tJumpSpeed != 0)
|
||||
little_step(sprite, sprite->tDirection);
|
||||
|
||||
sprite->pos2.y = GetJumpYDisplacement(sprite->tStepNo >> shifts[sprite->tJumpSpeed], sprite->tJumpHeight);
|
||||
|
||||
sprite->tStepNo++;
|
||||
|
||||
if (sprite->tStepNo == (duration[sprite->tJumpSpeed] >> 1))
|
||||
jumpPhase = 1;
|
||||
|
||||
if (sprite->tStepNo >= duration[sprite->tJumpSpeed])
|
||||
{
|
||||
sprite->pos2.y = 0;
|
||||
jumpPhase = -1;
|
||||
}
|
||||
|
||||
return jumpPhase;
|
||||
}
|
||||
|
||||
u8 sub_8068DC4(struct Sprite *sprite)
|
||||
{
|
||||
s16 duration[3] = {0x20, 0x20, 0x40};
|
||||
u8 shifts[3] = {1, 1, 2};
|
||||
u8 jumpPhase = 0;
|
||||
|
||||
if (sprite->tJumpSpeed != 0 && !(sprite->tStepNo & 1))
|
||||
little_step(sprite, sprite->tDirection);
|
||||
|
||||
sprite->pos2.y = GetJumpYDisplacement(sprite->tStepNo >> shifts[sprite->tJumpSpeed], sprite->tJumpHeight);
|
||||
|
||||
sprite->tStepNo++;
|
||||
|
||||
if (sprite->tStepNo == (duration[sprite->tJumpSpeed] >> 1))
|
||||
jumpPhase = 1;
|
||||
|
||||
if (sprite->tStepNo >= duration[sprite->tJumpSpeed])
|
||||
{
|
||||
sprite->pos2.y = 0;
|
||||
jumpPhase = -1;
|
||||
}
|
||||
|
||||
return jumpPhase;
|
||||
}
|
||||
|
||||
#undef tStepNo
|
||||
#undef tJumpHeight
|
||||
#undef tJumpSpeed
|
||||
#undef tDirection
|
||||
|
||||
#define tDelay data[3]
|
||||
|
||||
void SetObjectEventStepTimer(struct Sprite *sprite, s16 delay)
|
||||
{
|
||||
sprite->tDelay = delay;
|
||||
}
|
||||
|
||||
bool8 RunObjectEventStepTimer(struct Sprite *sprite)
|
||||
{
|
||||
sprite->tDelay--;
|
||||
|
||||
if (sprite->tDelay == 0)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#undef tDelay
|
||||
|
||||
void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 animNum, u8 animCmdIndex)
|
||||
{
|
||||
sprite->animNum = animNum;
|
||||
sprite->animPaused = FALSE;
|
||||
SeekSpriteAnim(sprite, animCmdIndex);
|
||||
}
|
||||
|
||||
bool8 SpriteAnimEnded(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->animEnded)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible)
|
||||
{
|
||||
u16 x, y;
|
||||
s16 x2, y2;
|
||||
|
||||
sprite->invisible = invisible;
|
||||
|
||||
if (sprite->coordOffsetEnabled)
|
||||
{
|
||||
x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX;
|
||||
y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX;
|
||||
y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY;
|
||||
}
|
||||
|
||||
x2 = x - (sprite->centerToCornerVecX >> 1);
|
||||
y2 = y - (sprite->centerToCornerVecY >> 1);
|
||||
|
||||
if ((s16)x > 255 || x2 < -16)
|
||||
sprite->invisible = TRUE;
|
||||
if ((s16)y > 175 || y2 < -16)
|
||||
sprite->invisible = TRUE;
|
||||
}
|
||||
|
||||
void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *sprite)
|
||||
{
|
||||
DoObjectUnionRoomWarpYDisplacement(sprite);
|
||||
SetObjectSubpriorityByZCoord(sprite->tZCoord, sprite, 1);
|
||||
UpdateObjectEventSpriteVisibility(sprite, sprite->tInvisible);
|
||||
}
|
||||
|
||||
void sub_8068FD0(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[i];
|
||||
if (sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility)
|
||||
{
|
||||
DestroySprite(sprite);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define tUnionRoomWarpAnimNo data[3]
|
||||
#define tUnionRoomWarpAnimState data[4]
|
||||
|
||||
static int GetObjectEventSpriteId(u8 objectEventId)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[i];
|
||||
if (sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility && (u8)sprite->tObjectEventId == objectEventId)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return MAX_SPRITES;
|
||||
}
|
||||
|
||||
void TurnObjectEvent(u8 objectEventId, u8 direction)
|
||||
{
|
||||
u8 animNum;
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[spriteId];
|
||||
StartSpriteAnim(sprite, ObjectEventDirectionToImageAnimId(direction));
|
||||
}
|
||||
}
|
||||
|
||||
void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction)
|
||||
{
|
||||
u8 animNum;
|
||||
int spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
u16 baseBlock;
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
struct Sprite *sprite = &gSprites[spriteId];
|
||||
const struct ObjectEventGraphicsInfo * info = GetObjectEventGraphicsInfo(direction);
|
||||
baseBlock = sprite->oam.tileNum;
|
||||
sprite->oam = *info->oam;
|
||||
sprite->oam.tileNum = baseBlock;
|
||||
sprite->oam.paletteNum = info->paletteSlot;
|
||||
sprite->images = info->images;
|
||||
if (info->subspriteTables == NULL)
|
||||
{
|
||||
sprite->subspriteTables = NULL;
|
||||
sprite->subspriteTableNum = 0;
|
||||
sprite->subspriteMode = SUBSPRITES_OFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
SetSubspriteTables(sprite, info->subspriteTables);
|
||||
sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
|
||||
}
|
||||
StartSpriteAnim(sprite, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 arg1)
|
||||
{
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
if (arg1)
|
||||
gSprites[spriteId].tInvisible = TRUE;
|
||||
else
|
||||
gSprites[spriteId].tInvisible = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 RfuUnionObjectIsInvisible(u8 objectEventId)
|
||||
{
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId == MAX_SPRITES)
|
||||
return FALSE;
|
||||
return gSprites[spriteId].tInvisible == TRUE;
|
||||
}
|
||||
|
||||
void RfuUnionObjectStartWarp(u8 objectEventId, u8 direction)
|
||||
{
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].tUnionRoomWarpAnimNo = direction;
|
||||
gSprites[spriteId].tUnionRoomWarpAnimState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void DoObjectUnionRoomWarpYDisplacementUpwards(struct Sprite * sprite)
|
||||
{
|
||||
switch (sprite->tUnionRoomWarpAnimState)
|
||||
{
|
||||
case 0:
|
||||
sprite->pos2.y = 0;
|
||||
sprite->tUnionRoomWarpAnimState++;
|
||||
// fallthrough
|
||||
case 1:
|
||||
if ((sprite->pos2.y -= 8) == -160)
|
||||
{
|
||||
sprite->pos2.y = 0;
|
||||
sprite->tInvisible = 1;
|
||||
sprite->tUnionRoomWarpAnimNo = 0;
|
||||
sprite->tUnionRoomWarpAnimState = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void DoObjectUnionRoomWarpYDisplacementDownwards(struct Sprite * sprite)
|
||||
{
|
||||
switch (sprite->tUnionRoomWarpAnimState)
|
||||
{
|
||||
case 0:
|
||||
sprite->pos2.y = -160;
|
||||
sprite->tUnionRoomWarpAnimState++;
|
||||
// fallthrough
|
||||
case 1:
|
||||
if ((sprite->pos2.y += 8) == 0)
|
||||
{
|
||||
sprite->tUnionRoomWarpAnimNo = 0;
|
||||
sprite->tUnionRoomWarpAnimState = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void DoObjectUnionRoomWarpYDisplacement(struct Sprite * sprite)
|
||||
{
|
||||
switch (sprite->tUnionRoomWarpAnimNo)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
DoObjectUnionRoomWarpYDisplacementDownwards(sprite);
|
||||
break;
|
||||
case 2:
|
||||
DoObjectUnionRoomWarpYDisplacementUpwards(sprite);
|
||||
break;
|
||||
default:
|
||||
sprite->tUnionRoomWarpAnimNo = 0;
|
||||
AGB_ASSERT_EX(0, ABSPATH("evobjmv.c"), 13331);
|
||||
}
|
||||
}
|
||||
|
||||
bool32 RfuUnionObjectIsWarping(u8 objectEventId)
|
||||
{
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId == MAX_SPRITES)
|
||||
return FALSE;
|
||||
if (gSprites[spriteId].tUnionRoomWarpAnimNo)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#undef tUnionRoomWarpAnimState
|
||||
#undef tUnionRoomWarpAnimNo
|
||||
#undef tInvisible
|
||||
#undef tZCoord
|
||||
#undef tObjectEventId
|
||||
|
||||
u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct ObjectEvent * objectEvent)
|
||||
{
|
||||
ObjectEventGetLocalIdAndMap(objectEvent, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
|
||||
return FieldEffectStart(fieldEffectId);
|
||||
}
|
||||
|
||||
void DoShadowFieldEffect(struct ObjectEvent *objectEvent)
|
||||
{
|
||||
if (!objectEvent->hasShadow)
|
||||
{
|
||||
objectEvent->hasShadow = TRUE;
|
||||
oe_exec_and_other_stuff(FLDEFF_SHADOW, objectEvent);
|
||||
}
|
||||
}
|
||||
|
||||
void DoRippleFieldEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||
{
|
||||
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
|
||||
gFieldEffectArguments[0] = sprite->pos1.x;
|
||||
gFieldEffectArguments[1] = sprite->pos1.y + (graphicsInfo->height >> 1) - 2;
|
||||
gFieldEffectArguments[2] = 151;
|
||||
gFieldEffectArguments[3] = 3;
|
||||
FieldEffectStart(FLDEFF_RIPPLE);
|
||||
}
|
||||
@@ -51,7 +51,7 @@ void sub_80695CC(u8 taskId)
|
||||
task->data[0] = 1;
|
||||
}
|
||||
|
||||
if (task->data[1] == 0 && !gObjectEvents[gSelectedObjectEvent].mapobj_bit_1)
|
||||
if (task->data[1] == 0 && !gObjectEvents[gSelectedObjectEvent].singleMovementActive)
|
||||
{
|
||||
FreezeObjectEvent(&gObjectEvents[gSelectedObjectEvent]);
|
||||
task->data[1] = 1;
|
||||
@@ -78,7 +78,7 @@ void LockSelectedObjectEvent(void)
|
||||
|
||||
FreezeObjectEventsExceptOne(gSelectedObjectEvent);
|
||||
taskId = CreateTask(sub_80695CC, 80);
|
||||
if (!gObjectEvents[gSelectedObjectEvent].mapobj_bit_1)
|
||||
if (!gObjectEvents[gSelectedObjectEvent].singleMovementActive)
|
||||
{
|
||||
FreezeObjectEvent(&gObjectEvents[gSelectedObjectEvent]);
|
||||
gTasks[taskId].data[1] = 1;
|
||||
|
||||
@@ -850,7 +850,7 @@ static void sub_807EAC4(s16 a0, s16 a1, s16 *a2, s16 *a3, s16 *a4)
|
||||
(*a4)++;
|
||||
playerSpr->pos2.x = *a2 >> 5;
|
||||
playerSpr->pos2.y = *a3 >> 5;
|
||||
if (playerObj->mapobj_bit_7)
|
||||
if (playerObj->heldMovementFinished)
|
||||
{
|
||||
ObjectEventForceSetSpecialAnim(playerObj, GetStepInPlaceDelay16AnimId(GetPlayerFacingDirection()));
|
||||
}
|
||||
|
||||
@@ -316,7 +316,7 @@ void Special_AnimatePcTurnOff()
|
||||
void SpawnCameraObject(void)
|
||||
{
|
||||
u8 objectEventId = SpawnSpecialObjectEventParameterized(OBJECT_EVENT_GFX_YOUNGSTER, 8, 127, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
|
||||
gObjectEvents[objectEventId].mapobj_bit_13 = TRUE;
|
||||
gObjectEvents[objectEventId].invisible = TRUE;
|
||||
CameraObjectSetFollowedObjectId(gObjectEvents[objectEventId].spriteId);
|
||||
}
|
||||
|
||||
|
||||
+32
-32
@@ -14,22 +14,22 @@ void SetQuestLogObjectEventsData(struct QuestLog * questLog)
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
questLog->unk_008[i].active = gObjectEvents[i].active;
|
||||
questLog->unk_008[i].mapobj_bit_3 = gObjectEvents[i].mapobj_bit_3;
|
||||
questLog->unk_008[i].mapobj_bit_4 = gObjectEvents[i].mapobj_bit_4;
|
||||
questLog->unk_008[i].mapobj_bit_5 = gObjectEvents[i].mapobj_bit_5;
|
||||
questLog->unk_008[i].mapobj_bit_8 = gObjectEvents[i].mapobj_bit_8;
|
||||
questLog->unk_008[i].mapobj_bit_9 = gObjectEvents[i].mapobj_bit_9;
|
||||
questLog->unk_008[i].mapobj_bit_10 = gObjectEvents[i].mapobj_bit_10;
|
||||
questLog->unk_008[i].mapobj_bit_11 = gObjectEvents[i].mapobj_bit_11;
|
||||
questLog->unk_008[i].mapobj_bit_12 = gObjectEvents[i].mapobj_bit_12;
|
||||
questLog->unk_008[i].mapobj_bit_13 = gObjectEvents[i].mapobj_bit_13;
|
||||
questLog->unk_008[i].mapobj_bit_14 = gObjectEvents[i].mapobj_bit_14;
|
||||
questLog->unk_008[i].mapobj_bit_15 = gObjectEvents[i].mapobj_bit_15;
|
||||
questLog->unk_008[i].mapobj_bit_16 = gObjectEvents[i].mapobj_bit_16;
|
||||
questLog->unk_008[i].mapobj_bit_23 = gObjectEvents[i].mapobj_bit_23;
|
||||
questLog->unk_008[i].mapobj_bit_24 = gObjectEvents[i].mapobj_bit_24;
|
||||
questLog->unk_008[i].mapobj_bit_25 = gObjectEvents[i].mapobj_bit_25;
|
||||
questLog->unk_008[i].mapobj_bit_26 = gObjectEvents[i].mapobj_bit_26;
|
||||
questLog->unk_008[i].triggerGroundEffectsOnStop = gObjectEvents[i].triggerGroundEffectsOnStop;
|
||||
questLog->unk_008[i].disableCoveringGroundEffects = gObjectEvents[i].disableCoveringGroundEffects;
|
||||
questLog->unk_008[i].landingJump = gObjectEvents[i].landingJump;
|
||||
questLog->unk_008[i].frozen = gObjectEvents[i].frozen;
|
||||
questLog->unk_008[i].facingDirectionLocked = gObjectEvents[i].facingDirectionLocked;
|
||||
questLog->unk_008[i].disableAnim = gObjectEvents[i].disableAnim;
|
||||
questLog->unk_008[i].enableAnim = gObjectEvents[i].enableAnim;
|
||||
questLog->unk_008[i].inanimate = gObjectEvents[i].inanimate;
|
||||
questLog->unk_008[i].invisible = gObjectEvents[i].invisible;
|
||||
questLog->unk_008[i].offScreen = gObjectEvents[i].offScreen;
|
||||
questLog->unk_008[i].trackedByCamera = gObjectEvents[i].trackedByCamera;
|
||||
questLog->unk_008[i].isPlayer = gObjectEvents[i].isPlayer;
|
||||
questLog->unk_008[i].spriteAnimPausedBackup = gObjectEvents[i].spriteAnimPausedBackup;
|
||||
questLog->unk_008[i].spriteAffineAnimPausedBackup = gObjectEvents[i].spriteAffineAnimPausedBackup;
|
||||
questLog->unk_008[i].disableJumpLandingGroundEffect = gObjectEvents[i].disableJumpLandingGroundEffect;
|
||||
questLog->unk_008[i].fixedPriority = gObjectEvents[i].fixedPriority;
|
||||
questLog->unk_008[i].mapobj_unk_18 = gObjectEvents[i].facingDirection;
|
||||
questLog->unk_008[i].mapobj_unk_0B_0 = gObjectEvents[i].mapobj_unk_0B_0;
|
||||
questLog->unk_008[i].elevation = gObjectEvents[i].elevation;
|
||||
@@ -58,22 +58,22 @@ void sub_815A1F8(const struct QuestLog * questLog, const struct ObjectEventTempl
|
||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||
{
|
||||
gObjectEvents[i].active = questLogObjectEvents[i].active;
|
||||
gObjectEvents[i].mapobj_bit_3 = questLogObjectEvents[i].mapobj_bit_3;
|
||||
gObjectEvents[i].mapobj_bit_4 = questLogObjectEvents[i].mapobj_bit_4;
|
||||
gObjectEvents[i].mapobj_bit_5 = questLogObjectEvents[i].mapobj_bit_5;
|
||||
gObjectEvents[i].mapobj_bit_8 = questLogObjectEvents[i].mapobj_bit_8;
|
||||
gObjectEvents[i].mapobj_bit_9 = questLogObjectEvents[i].mapobj_bit_9;
|
||||
gObjectEvents[i].mapobj_bit_10 = questLogObjectEvents[i].mapobj_bit_10;
|
||||
gObjectEvents[i].mapobj_bit_11 = questLogObjectEvents[i].mapobj_bit_11;
|
||||
gObjectEvents[i].mapobj_bit_12 = questLogObjectEvents[i].mapobj_bit_12;
|
||||
gObjectEvents[i].mapobj_bit_13 = questLogObjectEvents[i].mapobj_bit_13;
|
||||
gObjectEvents[i].mapobj_bit_14 = questLogObjectEvents[i].mapobj_bit_14;
|
||||
gObjectEvents[i].mapobj_bit_15 = questLogObjectEvents[i].mapobj_bit_15;
|
||||
gObjectEvents[i].mapobj_bit_16 = questLogObjectEvents[i].mapobj_bit_16;
|
||||
gObjectEvents[i].mapobj_bit_23 = questLogObjectEvents[i].mapobj_bit_23;
|
||||
gObjectEvents[i].mapobj_bit_24 = questLogObjectEvents[i].mapobj_bit_24;
|
||||
gObjectEvents[i].mapobj_bit_25 = questLogObjectEvents[i].mapobj_bit_25;
|
||||
gObjectEvents[i].mapobj_bit_26 = questLogObjectEvents[i].mapobj_bit_26;
|
||||
gObjectEvents[i].triggerGroundEffectsOnStop = questLogObjectEvents[i].triggerGroundEffectsOnStop;
|
||||
gObjectEvents[i].disableCoveringGroundEffects = questLogObjectEvents[i].disableCoveringGroundEffects;
|
||||
gObjectEvents[i].landingJump = questLogObjectEvents[i].landingJump;
|
||||
gObjectEvents[i].frozen = questLogObjectEvents[i].frozen;
|
||||
gObjectEvents[i].facingDirectionLocked = questLogObjectEvents[i].facingDirectionLocked;
|
||||
gObjectEvents[i].disableAnim = questLogObjectEvents[i].disableAnim;
|
||||
gObjectEvents[i].enableAnim = questLogObjectEvents[i].enableAnim;
|
||||
gObjectEvents[i].inanimate = questLogObjectEvents[i].inanimate;
|
||||
gObjectEvents[i].invisible = questLogObjectEvents[i].invisible;
|
||||
gObjectEvents[i].offScreen = questLogObjectEvents[i].offScreen;
|
||||
gObjectEvents[i].trackedByCamera = questLogObjectEvents[i].trackedByCamera;
|
||||
gObjectEvents[i].isPlayer = questLogObjectEvents[i].isPlayer;
|
||||
gObjectEvents[i].spriteAnimPausedBackup = questLogObjectEvents[i].spriteAnimPausedBackup;
|
||||
gObjectEvents[i].spriteAffineAnimPausedBackup = questLogObjectEvents[i].spriteAffineAnimPausedBackup;
|
||||
gObjectEvents[i].disableJumpLandingGroundEffect = questLogObjectEvents[i].disableJumpLandingGroundEffect;
|
||||
gObjectEvents[i].fixedPriority = questLogObjectEvents[i].fixedPriority;
|
||||
gObjectEvents[i].facingDirection = questLogObjectEvents[i].mapobj_unk_18;
|
||||
gObjectEvents[i].mapobj_unk_0B_0 = questLogObjectEvents[i].mapobj_unk_0B_0;
|
||||
gObjectEvents[i].elevation = questLogObjectEvents[i].elevation;
|
||||
|
||||
@@ -100,7 +100,7 @@ static void sub_81505C4(u8 taskId)
|
||||
{
|
||||
case 0:
|
||||
ObjectEventClearAnimIfSpecialAnimActive(objectEvent);
|
||||
objectEvent->mapobj_bit_11 = TRUE;
|
||||
objectEvent->enableAnim = TRUE;
|
||||
sub_81507BC(objectEvent, sub_805C808(4));
|
||||
StartSpriteAnim(sprite, sub_80634F0(objectEvent->facingDirection));
|
||||
gTasks[taskId].data[0]++;
|
||||
|
||||
+11
-11
@@ -73,7 +73,7 @@ static const u8 gUnknown_845711B[] = {
|
||||
1,
|
||||
3,
|
||||
1,
|
||||
4,
|
||||
4,
|
||||
2
|
||||
};
|
||||
|
||||
@@ -441,7 +441,7 @@ void sub_811BAAC(u8 * sp8, s32 r9)
|
||||
{
|
||||
s32 r5 = 5 * r9 + r7;
|
||||
sp8[r5] = sprite_new(OBJECT_EVENT_GFX_MAN, r5 - 0x38, sUnionPartnerCoords[r9][0] + sFacingDirectionOffsets[r7][0], sUnionPartnerCoords[r9][1] + sFacingDirectionOffsets[r7][1], 3, 1);
|
||||
sub_8069124(r5 - 0x38, TRUE);
|
||||
RfuUnionObjectToggleInvisibility(r5 - 0x38, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -485,7 +485,7 @@ static u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2)
|
||||
|
||||
static u32 sub_811BBC8(u32 a0, u32 a1)
|
||||
{
|
||||
return sub_806916C(5 * a0 + a1 - 0x38);
|
||||
return RfuUnionObjectIsInvisible(5 * a0 + a1 - 0x38);
|
||||
}
|
||||
|
||||
static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
|
||||
@@ -494,10 +494,10 @@ static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
|
||||
s32 r7 = 5 * r5 + r6;
|
||||
if (sub_811BBC8(r5, r6) == 1)
|
||||
{
|
||||
sub_8069124(r7 - 0x38, FALSE);
|
||||
sub_80691A4(r7 - 0x38, 1);
|
||||
RfuUnionObjectToggleInvisibility(r7 - 0x38, FALSE);
|
||||
RfuUnionObjectStartWarp(r7 - 0x38, 1);
|
||||
}
|
||||
sub_8069094(r7 - 0x38, r8);
|
||||
RfuUnionObjectSetFacingDirection(r7 - 0x38, r8);
|
||||
sub_811C008(r6, r5, sub_811BBA0(r6, r5, r9));
|
||||
GetUnionRoomPlayerFacingCoords(r5, r6, &x, &y);
|
||||
sub_8059024(x, y, 1);
|
||||
@@ -506,7 +506,7 @@ static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
|
||||
static void sub_811BC68(u32 a0, u32 a1)
|
||||
{
|
||||
s32 x, y;
|
||||
sub_80691A4(5 * a0 + a1 - 0x38, 2);
|
||||
RfuUnionObjectStartWarp(5 * a0 + a1 - 0x38, 2);
|
||||
GetUnionRoomPlayerFacingCoords(a0, a1, &x, &y);
|
||||
sub_8059024(x, y, 0);
|
||||
}
|
||||
@@ -518,7 +518,7 @@ static void sub_811BCA0(u32 r7, struct GFtgtGname * r8)
|
||||
|
||||
PlayerGetDestCoords(&x, &y);
|
||||
player_get_pos_including_state_based_drift(&x2, &y2);
|
||||
if (sub_806916C(5 * r7 - 0x38) == 1)
|
||||
if (RfuUnionObjectIsInvisible(5 * r7 - 0x38) == 1)
|
||||
{
|
||||
if (sub_811B58C(r7, 0, x, y) == TRUE || sub_811B58C(r7, 0, x2, y2) == TRUE)
|
||||
{
|
||||
@@ -631,11 +631,11 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (sub_806916C(r3 - 0x38) != 0)
|
||||
if (RfuUnionObjectIsInvisible(r3 - 0x38) != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (sub_8069294(r3 - 0x38) != 0)
|
||||
if (RfuUnionObjectIsWarping(r3 - 0x38) != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -654,7 +654,7 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
|
||||
|
||||
static void sub_811C008(s32 arg0, s32 arg1, u8 arg2)
|
||||
{
|
||||
sub_8069058(5 * arg1 - 0x38 + arg0, arg2);
|
||||
TurnObjectEvent(5 * arg1 - 0x38 + arg0, arg2);
|
||||
}
|
||||
|
||||
void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2)
|
||||
|
||||
+1
-1
@@ -1193,7 +1193,7 @@ bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
|
||||
u8 v1 = ScriptReadByte(ctx);
|
||||
u8 direction = ScriptReadByte(ctx);
|
||||
|
||||
sub_8069058(v1, direction);
|
||||
TurnObjectEvent(v1, direction);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -598,7 +598,7 @@ static void sub_810C3B8(u8 taskId)
|
||||
{
|
||||
if (sub_810CF04(i) == TRUE)
|
||||
{
|
||||
if (gObjectEvents[i].mapobj_bit_1)
|
||||
if (gObjectEvents[i].singleMovementActive)
|
||||
return;
|
||||
FreezeObjectEvent(&gObjectEvents[i]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user