event_object_80688E4

This commit is contained in:
PikalaxALT 2020-02-01 21:39:02 -05:00
parent fc3d571ab9
commit 708fa70823
13 changed files with 632 additions and 1628 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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 @ =UpdateEventObjectSpriteSubpriorityAndVisibility
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 UpdateEventObjectSpriteSubpriorityAndVisibility
_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

View File

@ -951,7 +951,7 @@ _080DB4C0:
_080DB4CE:
adds r0, r5, 0
movs r1, 0
bl sub_8068EB4
bl UpdateEventObjectSpriteVisibility
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 UpdateEventObjectSpriteVisibility
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 UpdateEventObjectSpriteVisibility
_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 UpdateEventObjectSpriteVisibility
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 UpdateEventObjectSpriteVisibility
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 UpdateEventObjectSpriteVisibility
_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 UpdateEventObjectSpriteVisibility
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 UpdateEventObjectSpriteVisibility
_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 UpdateEventObjectSpriteVisibility
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 UpdateEventObjectSpriteVisibility
_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 UpdateEventObjectSpriteVisibility
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 UpdateEventObjectSpriteVisibility
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 UpdateEventObjectSpriteVisibility
_080DCD42:
pop {r0}
bx r0

View File

@ -7979,7 +7979,7 @@ _08058978:
_0805898A:
adds r0, r5, 0
movs r1, 0
bl sub_8068EB4
bl UpdateEventObjectSpriteVisibility
ldrb r0, [r6]
lsls r0, 29
cmp r0, 0

View File

@ -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"

View File

@ -4,9 +4,9 @@
#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);
void sub_8069124(u8 a0, bool32 a1);
u32 sub_806916C(u8 a0);
void sub_80691A4(u8 a0, u8 a1);
void sub_8069094(u8 a0, u8 a1);

View File

@ -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 TurnEventObject(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

View File

@ -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);

View File

@ -190,7 +190,7 @@ struct ObjectEvent
u32 mapobj_bit_19:1;
u32 mapobj_bit_20:1;
u32 mapobj_bit_21:1;
u32 mapobj_bit_22:1;
u32 hasShadow:1;
u32 mapobj_bit_23:1;
/*0x03*/ u32 mapobj_bit_24:1;
u32 mapobj_bit_25:1;

View File

@ -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);

603
src/event_object_80688E4.c Normal file
View File

@ -0,0 +1,603 @@
#include "global.h"
#include "event_object_80688E4.h"
#include "event_object_movement.h"
#include "field_effect.h"
#include "field_ground_effect.h"
void sub_8069248(struct Sprite * sprite);
bool8 FreezeObjectEvent(struct ObjectEvent * objectEvent)
{
if (objectEvent->mapobj_bit_6 || objectEvent->mapobj_bit_8)
return TRUE;
objectEvent->mapobj_bit_8 = TRUE;
objectEvent->mapobj_bit_23 = gSprites[objectEvent->spriteId].animPaused;
objectEvent->mapobj_bit_24 = 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->mapobj_bit_8)
{
objectEvent->mapobj_bit_8 = FALSE;
gSprites[objectEvent->spriteId].animPaused = objectEvent->mapobj_bit_23;
gSprites[objectEvent->spriteId].affineAnimPaused = objectEvent->mapobj_bit_24;
}
}
void UnfreezeObjectEvents(void)
{
u8 i;
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
if (gObjectEvents[i].active)
UnfreezeObjectEvent(&gObjectEvents[i]);
}
}
void little_step(struct Sprite * sprite, u8 direction)
{
sprite->pos1.x += gUnknown_83A64C8[direction].x;
sprite->pos1.y += gUnknown_83A64C8[direction].y;
}
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;
}
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;
}
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;
}
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->data[3] = direction;
sprite->data[4] = speed;
sprite->data[5] = 0;
}
typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 direction);
static const SpriteStepFunc gUnknown_83A710C[] = {
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 gUnknown_83A714C[] = {
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 gUnknown_83A716C[] = {
double_little_steps,
triple_little_steps,
triple_little_steps,
double_little_steps,
triple_little_steps,
triple_little_steps
};
static const SpriteStepFunc gUnknown_83A7184[] = {
quad_little_steps,
quad_little_steps,
quad_little_steps,
quad_little_steps
};
static const SpriteStepFunc gUnknown_83A7194[] = {
oct_little_steps,
oct_little_steps
};
static const SpriteStepFunc *const gUnknown_83A719C[] = {
gUnknown_83A710C,
gUnknown_83A714C,
gUnknown_83A716C,
gUnknown_83A7184,
gUnknown_83A7194
};
static const s16 gUnknown_83A71B0[] = {
16, 8, 6, 4, 2
};
bool8 obj_npc_ministep(struct Sprite *sprite)
{
if (sprite->data[5] >= gUnknown_83A71B0[sprite->data[4]])
return FALSE;
gUnknown_83A719C[sprite->data[4]][sprite->data[5]](sprite, sprite->data[3]);
sprite->data[5]++;
if (sprite->data[5] < gUnknown_83A71B0[sprite->data[4]])
return FALSE;
return TRUE;
}
void sub_8068BBC(struct Sprite *sprite, u8 direction)
{
sprite->data[3] = direction;
sprite->data[4] = 0;
sprite->data[5] = 0;
}
bool8 sub_8068BCC(struct Sprite *sprite)
{
if (!(sprite->data[4] & 1))
{
little_step(sprite, sprite->data[3]);
sprite->data[5]++;
}
sprite->data[4]++;
if (sprite->data[5] > 15)
return TRUE;
else
return FALSE;
}
void sub_8068C08(struct Sprite *sprite, u8 direction)
{
sprite->data[3] = direction;
sprite->data[4] = 0;
sprite->data[5] = 0;
}
bool8 sub_8068C18(struct Sprite *sprite)
{
if (++sprite->data[4] < 3)
{
little_step(sprite, sprite->data[3]);
sprite->data[5]++;
}
else
sprite->data[4] = 0;
if (sprite->data[5] > 15)
return TRUE;
else
return FALSE;
}
void sub_8068C58(struct Sprite *sprite, u8 direction)
{
sprite->data[3] = direction;
sprite->data[4] = 0;
sprite->data[5] = 0;
}
bool8 sub_8068C68(struct Sprite *sprite)
{
if (++sprite->data[4] > 9)
{
sprite->data[4] = 0;
little_step(sprite, sprite->data[3]);
sprite->data[5]++;
}
if (sprite->data[5] > 15)
return TRUE;
else
return FALSE;
}
void sub_8068CA4(struct Sprite *sprite, u8 direction)
{
sprite->data[3] = direction;
sprite->data[4] = 0;
sprite->data[5] = 0;
}
bool8 sub_8068CB4(struct Sprite *sprite)
{
if ((++sprite->data[4]) & 1)
{
little_step(sprite, sprite->data[3]);
sprite->data[5]++;
}
else
{
double_little_steps(sprite, sprite->data[3]);
sprite->data[5] += 2;
}
if (sprite->data[5] > 15)
return TRUE;
else
return FALSE;
}
static const s8 gUnknown_83A71BA[] = {
-4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0
};
static const s8 gUnknown_83A71CA[] = {
0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0
};
static const s8 gUnknown_83A71DA[] = {
-2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0
};
static const s8 *const gUnknown_83A71EC[] = {
gUnknown_83A71BA,
gUnknown_83A71CA,
gUnknown_83A71DA
};
s16 sub_8068D00(s16 a1, u8 a2)
{
return gUnknown_83A71EC[a2][a1];
}
void sub_8068D1C(struct Sprite *sprite, u8 a2, u8 a3, u8 a4)
{
sprite->data[3] = a2;
sprite->data[4] = a3;
sprite->data[5] = a4;
sprite->data[6] = 0;
}
u8 sub_8068D3C(struct Sprite *sprite)
{
s16 v5[3] = {0x10, 0x10, 0x20};
u8 v6[3] = {0, 0, 1};
u8 v2 = 0;
if (sprite->data[4])
little_step(sprite, sprite->data[3]);
sprite->pos2.y = sub_8068D00(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]);
sprite->data[6]++;
if (sprite->data[6] == (v5[sprite->data[4]] >> 1))
v2 = 1;
if (sprite->data[6] >= v5[sprite->data[4]])
{
sprite->pos2.y = 0;
v2 = -1;
}
return v2;
}
u8 sub_8068DC4(struct Sprite *sprite)
{
s16 v5[3] = {0x20, 0x20, 0x40};
u8 v6[3] = {1, 1, 2};
u8 v2 = 0;
if (sprite->data[4] && !(sprite->data[6] & 1))
little_step(sprite, sprite->data[3]);
sprite->pos2.y = sub_8068D00(sprite->data[6] >> v6[sprite->data[4]], sprite->data[5]);
sprite->data[6]++;
if (sprite->data[6] == (v5[sprite->data[4]] >> 1))
v2 = 1;
if (sprite->data[6] >= v5[sprite->data[4]])
{
sprite->pos2.y = 0;
v2 = -1;
}
return v2;
}
void SetObjectEventStepTimer(struct Sprite *sprite, s16 delay)
{
sprite->data[3] = delay;
}
bool8 RunObjectEventStepTimer(struct Sprite *sprite)
{
sprite->data[3]--;
if (sprite->data[3] == 0)
return TRUE;
else
return FALSE;
}
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 UpdateEventObjectSpriteVisibility(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 UpdateEventObjectSpriteSubpriorityAndVisibility(struct Sprite *sprite)
{
sub_8069248(sprite);
SetObjectSubpriorityByZCoord(sprite->data[1], sprite, 1);
UpdateEventObjectSpriteVisibility(sprite, sprite->data[2]);
}
void sub_8068FD0(void)
{
s32 i;
for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
if (sprite->inUse && sprite->callback == UpdateEventObjectSpriteSubpriorityAndVisibility)
{
DestroySprite(sprite);
}
}
}
s32 sub_806900C(u8 objectEventId)
{
s32 i;
for (i = 0; i < MAX_SPRITES; i++)
{
struct Sprite *sprite = &gSprites[i];
if (sprite->inUse && sprite->callback == UpdateEventObjectSpriteSubpriorityAndVisibility && (u8)sprite->data[0] == objectEventId)
{
return i;
}
}
return MAX_SPRITES;
}
void TurnEventObject(u8 objectEventId, u8 direction)
{
u8 animNum;
u8 spriteId = sub_806900C(objectEventId);
if (spriteId != MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[spriteId];
StartSpriteAnim(sprite, ObjectEventDirectionToImageAnimId(direction));
}
}
void sub_8069094(u8 objectEventId, u8 direction)
{
u8 animNum;
s32 spriteId = sub_806900C(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 = 0;
}
else
{
SetSubspriteTables(sprite, info->subspriteTables);
sprite->subspriteMode = 2;
}
StartSpriteAnim(sprite, 0);
}
}
void sub_8069124(u8 objectEventId, bool32 arg1)
{
u8 spriteId = sub_806900C(objectEventId);
if (spriteId != MAX_SPRITES)
{
if (arg1)
gSprites[spriteId].data[2] = TRUE;
else
gSprites[spriteId].data[2] = FALSE;
}
}
bool32 sub_806916C(u8 objectEventId)
{
u8 spriteId = sub_806900C(objectEventId);
if (spriteId == MAX_SPRITES)
return FALSE;
return gSprites[spriteId].data[2] == TRUE;
}
void sub_80691A4(u8 objectEventId, u8 direction)
{
u8 spriteId = sub_806900C(objectEventId);
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[3] = direction;
gSprites[spriteId].data[4] = 0;
}
}
void sub_80691D4(struct Sprite * sprite)
{
switch (sprite->data[4])
{
case 0:
sprite->pos2.y = 0;
sprite->data[4]++;
// fallthrough
case 1:
if ((sprite->pos2.y -= 8) == -160)
{
sprite->pos2.y = 0;
sprite->data[2] = 1;
sprite->data[3] = 0;
sprite->data[4] = 0;
}
}
}
void sub_8069210(struct Sprite * sprite)
{
switch (sprite->data[4])
{
case 0:
sprite->pos2.y = -160;
sprite->data[4]++;
// fallthrough
case 1:
if ((sprite->pos2.y += 8) == 0)
{
sprite->data[3] = 0;
sprite->data[4] = 0;
}
}
}
void sub_8069248(struct Sprite * sprite)
{
switch (sprite->data[3])
{
case 0:
break;
case 1:
sub_8069210(sprite);
break;
case 2:
sub_80691D4(sprite);
break;
default:
sprite->data[3] = 0;
AGB_ASSERT_EX(0, ABSPATH("evobjmv.c"), 13331);
}
}
bool32 sub_8069294(u8 objectEventId)
{
u8 spriteId = sub_806900C(objectEventId);
if (spriteId == MAX_SPRITES)
return FALSE;
if (gSprites[spriteId].data[3])
return TRUE;
else
return FALSE;
}
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 = 1;
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);
}

View File

@ -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);
TurnEventObject(5 * arg1 - 0x38 + arg0, arg2);
}
void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2)

View File

@ -1193,7 +1193,7 @@ bool8 ScrCmd_turnvobject(struct ScriptContext *ctx)
u8 v1 = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx);
sub_8069058(v1, direction);
TurnEventObject(v1, direction);
return FALSE;
}