summaryrefslogtreecommitdiff
path: root/src/event_object_80688E4.c
diff options
context:
space:
mode:
authorultima-soul <akshayjhanji@hotmail.com>2020-03-15 19:44:47 -0700
committerultima-soul <akshayjhanji@hotmail.com>2020-03-15 19:44:47 -0700
commite1f7efb8e67fb5587a8baf20f421c20e134e8b24 (patch)
treef6aaefcb79c3ac6ec09c7592464b67942de8d745 /src/event_object_80688E4.c
parentdd24bd3116021039c136a44470ee7c87e6118d8f (diff)
Document some metatile behaviors and address review comments.
Diffstat (limited to 'src/event_object_80688E4.c')
-rw-r--r--src/event_object_80688E4.c652
1 files changed, 0 insertions, 652 deletions
diff --git a/src/event_object_80688E4.c b/src/event_object_80688E4.c
deleted file mode 100644
index 0477a02d9..000000000
--- a/src/event_object_80688E4.c
+++ /dev/null
@@ -1,652 +0,0 @@
-#include "global.h"
-#include "event_object_movement.h"
-#include "field_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 += sDirectionToVectors[direction].x;
- sprite->pos1.y += sDirectionToVectors[direction].y;
-}
-
-static void double_little_steps(struct Sprite * sprite, u8 direction)
-{
- sprite->pos1.x += 2 * (u16) sDirectionToVectors[direction].x;
- sprite->pos1.y += 2 * (u16) sDirectionToVectors[direction].y;
-}
-
-static void triple_little_steps(struct Sprite * sprite, u8 direction)
-{
- sprite->pos1.x += 2 * (u16) sDirectionToVectors[direction].x + (u16) sDirectionToVectors[direction].x;
- sprite->pos1.y += 2 * (u16) sDirectionToVectors[direction].y + (u16) sDirectionToVectors[direction].y;
-}
-
-static void quad_little_steps(struct Sprite * sprite, u8 direction)
-{
- sprite->pos1.x += 4 * (u16) sDirectionToVectors[direction].x;
- sprite->pos1.y += 4 * (u16) sDirectionToVectors[direction].y;
-}
-
-static void oct_little_steps(struct Sprite * sprite, u8 direction)
-{
- sprite->pos1.x += 8 * (u16) sDirectionToVectors[direction].x;
- sprite->pos1.y += 8 * (u16) sDirectionToVectors[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;
-}
-
-// used by an_walk_any_2
-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 SetMovementDelay(struct Sprite *sprite, s16 delay)
-{
- sprite->tDelay = delay;
-}
-
-bool8 WaitForMovementDelay(struct Sprite *sprite)
-{
- sprite->tDelay--;
-
- if (sprite->tDelay == 0)
- return TRUE;
- else
- return FALSE;
-}
-
-#undef tDelay
-
-void SetAndStartSpriteAnim(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, GetFaceDirectionAnimNum(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 invisible)
-{
- u8 spriteId = GetObjectEventSpriteId(objectEventId);
- if (spriteId != MAX_SPRITES)
- {
- if (invisible)
- 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 animNo)
-{
- u8 spriteId = GetObjectEventSpriteId(objectEventId);
- if (spriteId != MAX_SPRITES)
- {
- gSprites[spriteId].tUnionRoomWarpAnimNo = animNo;
- 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 StartFieldEffectForObjectEvent(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;
- StartFieldEffectForObjectEvent(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);
-}