summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_setup.c2
-rw-r--r--src/event_object_80688E4.c652
-rw-r--r--src/event_object_movement.c954
-rw-r--r--src/field_specials.c1
-rw-r--r--src/fieldmap.c88
-rw-r--r--src/metatile_behavior.c18
-rw-r--r--src/vs_seeker.c4
7 files changed, 856 insertions, 863 deletions
diff --git a/src/battle_setup.c b/src/battle_setup.c
index ed9e7a552..1abbbcec6 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -461,7 +461,7 @@ u8 BattleSetup_GetTerrainId(void)
return BATTLE_TERRAIN_GRASS;
if (MetatileBehavior_IsLongGrass(tileBehavior))
return BATTLE_TERRAIN_LONG_GRASS;
- if (MetatileBehavior_IsMB21OrWaterfallBottom(tileBehavior))
+ if (MetatileBehavior_IsSandOrShallowFlowingWater(tileBehavior))
return BATTLE_TERRAIN_SAND;
switch (gMapHeader.mapType)
{
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);
-}
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 6c8976bca..a399ddf5e 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -55,7 +55,7 @@ static void ObjectEventUpdateSubpriority(struct ObjectEvent*, struct Sprite*);
static void DoTracksGroundEffect_None(struct ObjectEvent*, struct Sprite*, u8);
static void DoTracksGroundEffect_Footprints(struct ObjectEvent*, struct Sprite*, u8);
static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent*, struct Sprite*, u8);
-/*static*/ void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
+static void DoRippleFieldEffect(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnSpawn(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnBeginStep(struct ObjectEvent*, struct Sprite*);
static void DoGroundEffects_OnFinishStep(struct ObjectEvent*, struct Sprite*);
@@ -85,9 +85,9 @@ static bool8 ObjectEventDoesZCoordMatch(struct ObjectEvent *, u8);
static struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8 localId, struct ObjectEventTemplate *templates, u8 count);
static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *);
static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8);
-static u8 sub_805E238(struct ObjectEventTemplate *, u8, s16, s16);
-static u8 sub_805E27C(struct ObjectEventTemplate *, s16, s16);
-static u8 sub_805E2E8(struct ObjectEventTemplate *, s16, s16);
+static bool8 sub_805E238(struct ObjectEventTemplate *, u8, s16, s16);
+static bool8 sub_805E27C(struct ObjectEventTemplate *, s16, s16);
+static bool8 sub_805E2E8(struct ObjectEventTemplate *, s16, s16);
static void sub_805E384(struct ObjectEventTemplate *);
static bool8 MovementType_Disguise_Callback(struct ObjectEvent *, struct Sprite *);
static bool8 MovementType_Hidden_Callback(struct ObjectEvent *, struct Sprite *);
@@ -190,29 +190,33 @@ bool8 MovementActionFunc_x94_1(struct ObjectEvent *, struct Sprite *);
bool8 MovementActionFunc_x95_1(struct ObjectEvent *, struct Sprite *);
bool8 MovementActionFunc_x96_1(struct ObjectEvent *, struct Sprite *);
bool8 MovementActionFunc_x97_1(struct ObjectEvent *, struct Sprite *);
+static void DoObjectUnionRoomWarpYDisplacement(struct Sprite * sprite);
-#define movement_type_def(setup, table) \
-static u8 setup##_callback(struct ObjectEvent *, struct Sprite *);\
-void setup(struct Sprite *sprite)\
-{\
- UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, setup##_callback);\
-}\
-static u8 setup##_callback(struct ObjectEvent *objectEvent, struct Sprite *sprite)\
-{\
- return table[sprite->data[1]](objectEvent, sprite);\
+#define movement_type_def(setup, table) \
+static u8 setup##_callback(struct ObjectEvent *, struct Sprite *); \
+void setup(struct Sprite *sprite) \
+{ \
+ UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, setup##_callback); \
+} \
+static u8 setup##_callback(struct ObjectEvent *objectEvent, struct Sprite *sprite) \
+{ \
+ return table[sprite->data[1]](objectEvent, sprite); \
}
-#define movement_type_empty_callback(setup) \
-static u8 setup##_callback(struct ObjectEvent *, struct Sprite *);\
-void setup(struct Sprite *sprite)\
-{\
- UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, setup##_callback);\
-}\
-static u8 setup##_callback(struct ObjectEvent *objectEvent, struct Sprite *sprite)\
-{\
- return 0;\
+#define movement_type_empty_callback(setup) \
+static u8 setup##_callback(struct ObjectEvent *, struct Sprite *); \
+void setup(struct Sprite *sprite) \
+{ \
+ UpdateObjectEventCurrentMovement(&gObjectEvents[sprite->data[0]], sprite, setup##_callback); \
+} \
+static u8 setup##_callback(struct ObjectEvent *objectEvent, struct Sprite *sprite) \
+{ \
+ return 0; \
}
+EWRAM_DATA u8 sCurrentReflectionType = 0;
+EWRAM_DATA u16 sCurrentSpecialObjectPaletteTag = 0;
+
extern const u8 gRangedMovementTypes[NUM_FIELD_MAP_OBJECT_TEMPLATES];
extern const u8 gInitialMovementTypeFacingDirections[NUM_FIELD_MAP_OBJECT_TEMPLATES];
extern void (*const sMovementTypeCallbacks[])(struct Sprite *);
@@ -220,8 +224,6 @@ extern const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPoint
extern const struct SpritePalette sObjectEventSpritePalettes[];
extern const struct PairedPalettes gPlayerReflectionPaletteSets[];
extern const u8 gReflectionEffectPaletteMap[];
-extern u8 sCurrentReflectionType;
-extern u16 sCurrentSpecialObjectPaletteTag;
extern const struct PairedPalettes gSpecialObjectReflectionPaletteSets[];
extern const struct SpriteTemplate gCameraSpriteTemplate;
extern void (*const gCameraObjectFuncs[3])(struct Sprite *);
@@ -340,6 +342,7 @@ extern const struct UnkStruct_083A3698 gUnknown_83A3698[];
extern const u8 gTrainerFacingDirectionMovementTypes[];
extern bool8 (*const gOppositeDirectionBlockedMetatileFuncs[])(u8);
extern bool8 (*const gDirectionBlockedMetatileFuncs[])(u8);
+extern const struct Coords16 sDirectionToVectors[];
extern const u8 gFaceDirectionMovementActions[5];
extern const u8 gWalkSlowMovementActions[5];
extern const u8 gUnknown_83A64F6[];
@@ -535,7 +538,7 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
objectEvent->movementType = template->movementType;
objectEvent->localId = template->localId;
objectEvent->mapNum = mapNum;
- //objectEvent++; objectEvent--;
+ // objectEvent++; objectEvent--; is a trick used in pokeruby and pokeemerald here
objectEvent->mapGroup = mapGroup;
objectEvent->initialCoords.x = x;
objectEvent->initialCoords.y = y;
@@ -553,7 +556,7 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection);
SetObjectEventDynamicGraphicsId(objectEvent);
/*#ifndef NONMATCHING
- asm("":::"r5", "r6");
+ asm("":::"r5", "r6"); is a trick used in pokeruby and pokeemerald here
#endif*/
if (gRangedMovementTypes[objectEvent->movementType])
{
@@ -798,63 +801,63 @@ static u8 InitObjectEventStateFromTemplate(struct ObjectEventTemplate *template,
}
#endif
-static u8 sub_805E238(struct ObjectEventTemplate *template, u8 var, s16 x, s16 y)
+static bool8 sub_805E238(struct ObjectEventTemplate *template, u8 var, s16 x, s16 y)
{
if (var)
{
if (!sub_805E27C(template, x, y))
- return 0;
+ return FALSE;
}
if (!sub_805E2E8(template, x, y))
- return 0;
+ return FALSE;
- return 1;
+ return TRUE;
}
-static u8 sub_805E27C(struct ObjectEventTemplate *template, s16 x, s16 y)
+static bool8 sub_805E27C(struct ObjectEventTemplate *template, s16 x, s16 y)
{
- if ((u8) (template->graphicsId - OBJ_EVENT_GFX_CUT_TREE) > 1)
- return 1;
+ if ((u8)(template->graphicsId - OBJ_EVENT_GFX_CUT_TREE) > 1)
+ return TRUE;
if (gSaveBlock1Ptr->pos.x < x)
{
if (gSaveBlock1Ptr->pos.x + 8 < x)
- return 1;
+ return TRUE;
if (gSaveBlock1Ptr->pos.y - 6 <= y && gSaveBlock1Ptr->pos.y + 6 >= y)
- return 0;
+ return FALSE;
}
else
{
if (gSaveBlock1Ptr->pos.x - 8 > x)
- return 1;
+ return TRUE;
if (gSaveBlock1Ptr->pos.y - 6 <= y && gSaveBlock1Ptr->pos.y + 6 >= y)
- return 0;
+ return FALSE;
}
- return 1;
+ return TRUE;
}
-static u8 sub_805E2E8(struct ObjectEventTemplate *template, s16 x, s16 y)
+static bool8 sub_805E2E8(struct ObjectEventTemplate *template, s16 x, s16 y)
{
s32 x2, y2;
if (!IsMapTypeOutdoors(GetCurrentMapType()))
- return 1;
+ return TRUE;
- x2 = gBackupMapLayout.Xsize - 16;
- y2 = gBackupMapLayout.Ysize - 15;
+ x2 = VMap.Xsize - 16;
+ y2 = VMap.Ysize - 15;
- if ((u8) (template->graphicsId - OBJ_EVENT_GFX_CUT_TREE) > 1)
- return 1;
+ if ((u8)(template->graphicsId - OBJ_EVENT_GFX_CUT_TREE) > 1)
+ return TRUE;
if (!gSaveBlock1Ptr->pos.x)
{
if (template->x <= 8)
{
sub_805E384(template);
- return 0;
+ return FALSE;
}
}
@@ -863,7 +866,7 @@ static u8 sub_805E2E8(struct ObjectEventTemplate *template, s16 x, s16 y)
if (template->x >= x2 - 8)
{
sub_805E384(template);
- return 0;
+ return FALSE;
}
}
@@ -872,7 +875,7 @@ static u8 sub_805E2E8(struct ObjectEventTemplate *template, s16 x, s16 y)
if (template->y <= 6)
{
sub_805E384(template);
- return 0;
+ return FALSE;
}
}
@@ -881,16 +884,16 @@ static u8 sub_805E2E8(struct ObjectEventTemplate *template, s16 x, s16 y)
if (template->y >= y2 - 6)
{
sub_805E384(template);
- return 0;
+ return FALSE;
}
}
- return 1;
+ return TRUE;
}
static void sub_805E384(struct ObjectEventTemplate *template)
{
- if ((u16) (template->flagId - 17) < 15)
+ if ((u16)(template->flagId - 17) < 15)
FlagSet(template->flagId);
}
@@ -1004,7 +1007,7 @@ static u8 TrySetupObjectEventSprite(struct ObjectEventTemplate *objectEventTempl
if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE)
objectEvent->invisible = TRUE;
- *(u16 *)&spriteTemplate->paletteTag = 0xFFFF;
+ *(u16 *)&spriteTemplate->paletteTag = SPRITE_INVALID_TAG;
spriteId = CreateSprite(spriteTemplate, 0, 0, 0);
if (spriteId == MAX_SPRITES)
{
@@ -1113,7 +1116,7 @@ void MakeObjectTemplateFromObjectEventGraphicsInfo(u16 graphicsId, void (*callba
spriteTemplate->callback = sub_811246C;
else
spriteTemplate->callback = callback;
- } while(0);
+ } while (0);
*subspriteTables = graphicsInfo->subspriteTables;
}
@@ -1128,14 +1131,14 @@ static void MakeObjectTemplateFromObjectEventTemplate(struct ObjectEventTemplate
MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables);
}
-u8 AddPseudoObjectEvent(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
+u8 AddPseudoObjectEvent(u16 graphicsId, SpriteCallback callback, s16 x, s16 y, u8 subpriority)
{
struct SpriteTemplate spriteTemplate;
const struct SubspriteTable *subspriteTables;
u8 spriteId;
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, callback, &spriteTemplate, &subspriteTables);
- if (spriteTemplate.paletteTag != 0xFFFF)
+ if (spriteTemplate.paletteTag != SPRITE_INVALID_TAG)
{
LoadObjectEventPalette(spriteTemplate.paletteTag);
}
@@ -1158,7 +1161,7 @@ u8 sprite_new(u8 graphicsId, u8 a1, s16 x, s16 y, u8 z, u8 direction)
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, UpdateObjectEventSpriteSubpriorityAndVisibility, &spriteTemplate, &subspriteTables);
- *(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
+ *(u16 *)&spriteTemplate.paletteTag = SPRITE_INVALID_TAG;
x += 7;
y += 7;
sub_8063BC4(&x, &y, 8, 16);
@@ -1200,7 +1203,7 @@ u8 sub_805EB44(u8 graphicsId, u8 a1, s16 x, s16 y)
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
MakeObjectTemplateFromObjectEventGraphicsInfo(graphicsId, SpriteCallbackDummy, &spriteTemplate, &subspriteTables);
- *(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
+ *(u16 *)&spriteTemplate.paletteTag = SPRITE_INVALID_TAG;
spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
if (spriteId != MAX_SPRITES)
@@ -1259,7 +1262,7 @@ void RemoveObjectEventsOutsideView(void)
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
- for (j = 0, isActiveLinkPlayer = FALSE; j < ARRAY_COUNT(gLinkPlayerObjectEvents); j++)
+ for (j = 0, isActiveLinkPlayer = FALSE; j < NELEMS(gLinkPlayerObjectEvents); j++)
{
if (gLinkPlayerObjectEvents[j].active && i == gLinkPlayerObjectEvents[j].objEventId)
isActiveLinkPlayer = TRUE;
@@ -1316,7 +1319,7 @@ static void sub_805EE3C(u8 objectEventId, s16 x, s16 y)
const struct ObjectEventGraphicsInfo *graphicsInfo;
#define i spriteId
- for (i = 0; i < ARRAY_COUNT(gLinkPlayerObjectEvents); i++)
+ for (i = 0; i < NELEMS(gLinkPlayerObjectEvents); i++)
{
if (gLinkPlayerObjectEvents[i].active && objectEventId == gLinkPlayerObjectEvents[i].objEventId)
{
@@ -1332,7 +1335,7 @@ static void sub_805EE3C(u8 objectEventId, s16 x, s16 y)
spriteFrameImage.size = graphicsInfo->size;
MakeObjectTemplateFromObjectEventGraphicsInfoWithCallbackIndex(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables);
spriteTemplate.images = &spriteFrameImage;
- *(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
+ *(u16 *)&spriteTemplate.paletteTag = SPRITE_INVALID_TAG;
if (graphicsInfo->paletteSlot == 0)
{
LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
@@ -1341,7 +1344,7 @@ static void sub_805EE3C(u8 objectEventId, s16 x, s16 y)
{
LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag1, graphicsInfo->paletteSlot);
}
- *(u16 *)&spriteTemplate.paletteTag = 0xFFFF;
+ *(u16 *)&spriteTemplate.paletteTag = SPRITE_INVALID_TAG;
spriteId = CreateSprite(&spriteTemplate, 0, 0, 0);
if (spriteId != MAX_SPRITES)
{
@@ -1803,7 +1806,7 @@ u8 AddCameraObject(u8 linkedSpriteId)
/*static*/ void ObjectCB_CameraObject(struct Sprite *sprite)
{
- void (*callbacks[ARRAY_COUNT(gCameraObjectFuncs)])(struct Sprite *);
+ void (*callbacks[NELEMS(gCameraObjectFuncs)])(struct Sprite *);
memcpy(callbacks, gCameraObjectFuncs, sizeof gCameraObjectFuncs);
callbacks[sprite->data[1]](sprite);
@@ -2170,7 +2173,7 @@ bool8 MovementType_WanderAround_Step4(struct ObjectEvent *objectEvent, struct Sp
bool8 MovementType_WanderAround_Step5(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(objectEvent->movementDirection));
- objectEvent->singleMovementActive = 1;
+ objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 6;
return TRUE;
}
@@ -2178,7 +2181,7 @@ bool8 MovementType_WanderAround_Step5(struct ObjectEvent *objectEvent, struct Sp
bool8 MovementType_WanderAround_Step5Duplicate(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
ObjectEventSetSingleMovement(objectEvent, sprite, sub_8063F2C(objectEvent->movementDirection));
- objectEvent->singleMovementActive = 1;
+ objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 6;
return TRUE;
}
@@ -2187,7 +2190,7 @@ bool8 MovementType_WanderAround_Step6(struct ObjectEvent *objectEvent, struct Sp
{
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 1;
}
return FALSE;
@@ -2463,7 +2466,7 @@ bool8 MovementType_LookAround_Step2(struct ObjectEvent *objectEvent, struct Spri
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysMedium[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -2547,7 +2550,7 @@ bool8 MovementType_WanderUpAndDown_Step4(struct ObjectEvent *objectEvent, struct
bool8 MovementType_WanderUpAndDown_Step5(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(objectEvent->movementDirection));
- objectEvent->singleMovementActive = 1;
+ objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 6;
return TRUE;
}
@@ -2556,7 +2559,7 @@ bool8 MovementType_WanderUpAndDown_Step6(struct ObjectEvent *objectEvent, struct
{
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 1;
}
return FALSE;
@@ -2616,7 +2619,7 @@ bool8 MovementType_WanderLeftAndRight_Step4(struct ObjectEvent *objectEvent, str
bool8 MovementType_WanderLeftAndRight_Step5(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(objectEvent->movementDirection));
- objectEvent->singleMovementActive = 1;
+ objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 6;
return TRUE;
}
@@ -2625,7 +2628,7 @@ bool8 MovementType_WanderLeftAndRight_Step6(struct ObjectEvent *objectEvent, str
{
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 1;
}
return FALSE;
@@ -2653,7 +2656,7 @@ bool8 MovementType_FaceDirection_Step1(struct ObjectEvent *objectEvent, struct S
bool8 MovementType_FaceDirection_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
return FALSE;
}
@@ -2678,7 +2681,7 @@ bool8 MovementType_FaceDownAndUp_Step2(struct ObjectEvent *objectEvent, struct S
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysMedium[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -2700,7 +2703,7 @@ bool8 MovementType_FaceDownAndUp_Step4(struct ObjectEvent *objectEvent, struct S
u8 directions[2];
memcpy(directions, gUpAndDownDirections, sizeof gUpAndDownDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_SOUTH);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 1];
}
@@ -2730,7 +2733,7 @@ bool8 MovementType_FaceLeftAndRight_Step2(struct ObjectEvent *objectEvent, struc
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysMedium[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -2752,7 +2755,7 @@ bool8 MovementType_FaceLeftAndRight_Step4(struct ObjectEvent *objectEvent, struc
u8 directions[2];
memcpy(directions, gLeftAndRightDirections, sizeof gLeftAndRightDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_EAST_WEST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 1];
}
@@ -2782,7 +2785,7 @@ bool8 MovementType_FaceUpAndLeft_Step2(struct ObjectEvent *objectEvent, struct S
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysShort[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -2804,7 +2807,7 @@ bool8 MovementType_FaceUpAndLeft_Step4(struct ObjectEvent *objectEvent, struct S
u8 directions[2];
memcpy(directions, gUpAndLeftDirections, sizeof gUpAndLeftDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_WEST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 1];
}
@@ -2834,7 +2837,7 @@ bool8 MovementType_FaceUpAndRight_Step2(struct ObjectEvent *objectEvent, struct
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysShort[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -2856,7 +2859,7 @@ bool8 MovementType_FaceUpAndRight_Step4(struct ObjectEvent *objectEvent, struct
u8 directions[2];
memcpy(directions, gUpAndRightDirections, sizeof gUpAndRightDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_EAST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 1];
}
@@ -2886,7 +2889,7 @@ bool8 MovementType_FaceDownAndLeft_Step2(struct ObjectEvent *objectEvent, struct
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysShort[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -2908,7 +2911,7 @@ bool8 MovementType_FaceDownAndLeft_Step4(struct ObjectEvent *objectEvent, struct
u8 directions[2];
memcpy(directions, gDownAndLeftDirections, sizeof gDownAndLeftDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_SOUTH_WEST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 1];
}
@@ -2938,7 +2941,7 @@ bool8 MovementType_FaceDownAndRight_Step2(struct ObjectEvent *objectEvent, struc
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysShort[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -2960,7 +2963,7 @@ bool8 MovementType_FaceDownAndRight_Step4(struct ObjectEvent *objectEvent, struc
u8 directions[2];
memcpy(directions, gDownAndRightDirections, sizeof gDownAndRightDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_SOUTH_EAST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 1];
}
@@ -2990,7 +2993,7 @@ bool8 MovementType_FaceDownUpAndLeft_Step2(struct ObjectEvent *objectEvent, stru
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysShort[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -3012,7 +3015,7 @@ bool8 MovementType_FaceDownUpAndLeft_Step4(struct ObjectEvent *objectEvent, stru
u8 directions[4];
memcpy(directions, gDownUpAndLeftDirections, sizeof gDownUpAndLeftDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_SOUTH_WEST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 3];
}
@@ -3042,7 +3045,7 @@ bool8 MovementType_FaceDownUpAndRight_Step2(struct ObjectEvent *objectEvent, str
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysShort[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -3064,7 +3067,7 @@ bool8 MovementType_FaceDownUpAndRight_Step4(struct ObjectEvent *objectEvent, str
u8 directions[4];
memcpy(directions, gDownUpAndRightDirections, sizeof gDownUpAndRightDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_SOUTH_EAST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 3];
}
@@ -3094,7 +3097,7 @@ bool8 MovementType_FaceUpLeftAndRight_Step2(struct ObjectEvent *objectEvent, str
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysShort[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -3116,7 +3119,7 @@ bool8 MovementType_FaceUpLeftAndRight_Step4(struct ObjectEvent *objectEvent, str
u8 directions[4];
memcpy(directions, gUpLeftAndRightDirections, sizeof gUpLeftAndRightDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_NORTH_EAST_WEST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 3];
}
@@ -3146,7 +3149,7 @@ bool8 MovementType_FaceDownLeftAndRight_Step2(struct ObjectEvent *objectEvent, s
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
SetMovementDelay(sprite, gMovementDelaysShort[Random() & 3]);
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 3;
}
return FALSE;
@@ -3168,7 +3171,7 @@ bool8 MovementType_FaceDownLeftAndRight_Step4(struct ObjectEvent *objectEvent, s
u8 directions[4];
memcpy(directions, gDownLeftAndRightDirections, sizeof gDownLeftAndRightDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_SOUTH_EAST_WEST);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[Random() & 3];
}
@@ -3212,7 +3215,7 @@ bool8 MovementType_RotateCounterclockwise_Step3(struct ObjectEvent *objectEvent,
u8 directions[5];
memcpy(directions, gCounterclockwiseDirections, sizeof gCounterclockwiseDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_ANY);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[objectEvent->facingDirection];
}
@@ -3256,7 +3259,7 @@ bool8 MovementType_RotateClockwise_Step3(struct ObjectEvent *objectEvent, struct
u8 directions[5];
memcpy(directions, gClockwiseDirections, sizeof gClockwiseDirections);
direction = TryGetTrainerEncounterDirection(objectEvent, RUNFOLLOW_ANY);
- if (direction == 0)
+ if (direction == DIR_NONE)
{
direction = directions[objectEvent->facingDirection];
}
@@ -3312,7 +3315,7 @@ bool8 MovementType_WalkBackAndForth_Step2(struct ObjectEvent *objectEvent, struc
movementActionId = GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection);
ObjectEventSetSingleMovement(objectEvent, sprite, movementActionId);
- objectEvent->singleMovementActive = 1;
+ objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 3;
return TRUE;
}
@@ -3321,7 +3324,7 @@ bool8 MovementType_WalkBackAndForth_Step3(struct ObjectEvent *objectEvent, struc
{
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 1;
}
return FALSE;
@@ -3357,7 +3360,7 @@ bool8 MoveNextDirectionInSequence(struct ObjectEvent *objectEvent, struct Sprite
movementActionId = GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection);
ObjectEventSetSingleMovement(objectEvent, sprite, movementActionId);
- objectEvent->singleMovementActive = 1;
+ objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 2;
return TRUE;
}
@@ -3366,7 +3369,7 @@ bool8 MovementType_WalkSequence_Step2(struct ObjectEvent *objectEvent, struct Sp
{
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 1;
}
return FALSE;
@@ -3710,7 +3713,7 @@ bool8 MovementType_CopyPlayer_Step2(struct ObjectEvent *objectEvent, struct Spri
{
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
sprite->data[1] = 1;
}
return FALSE;
@@ -3724,7 +3727,7 @@ bool8 CopyablePlayerMovement_None(struct ObjectEvent *objectEvent, struct Sprite
bool8 CopyablePlayerMovement_FaceDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(state_to_direction(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, playerDirection)));
- objectEvent->singleMovementActive = 1;
+ objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 2;
return TRUE;
}
@@ -3743,7 +3746,7 @@ bool8 CopyablePlayerMovement_GoSpeed0(struct ObjectEvent *objectEvent, struct Sp
{
ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
}
- objectEvent->singleMovementActive = 1;
+ objectEvent->singleMovementActive = TRUE;
sprite->data[1] = 2;
return TRUE;
}
@@ -3989,7 +3992,7 @@ bool8 MovementType_Invisible_Step1(struct ObjectEvent *objectEvent, struct Sprit
bool8 MovementType_Invisible_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
return FALSE;
}
@@ -4043,7 +4046,7 @@ bool8 sub_8063384(struct ObjectEvent *objectEvent, struct Sprite *sprite)
bool8 sub_80633A4(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
return FALSE;
}
@@ -4074,7 +4077,7 @@ bool8 sub_80633F4(struct ObjectEvent *objectEvent, struct Sprite *sprite)
static void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- objectEvent->singleMovementActive = 0;
+ objectEvent->singleMovementActive = FALSE;
objectEvent->heldMovementActive = FALSE;
objectEvent->heldMovementFinished = FALSE;
objectEvent->movementActionId = 0xFF;
@@ -4449,7 +4452,7 @@ static void GetObjectEventMovingCameraOffset(s16 *x, s16 *y)
}
if (gFieldCamera.x < 0)
{
- (*x) --;
+ (*x)--;
}
if (gFieldCamera.y > 0)
{
@@ -4457,7 +4460,7 @@ static void GetObjectEventMovingCameraOffset(s16 *x, s16 *y)
}
if (gFieldCamera.y < 0)
{
- (*y) --;
+ (*y)--;
}
}
@@ -4587,15 +4590,15 @@ void sub_8063E28(struct ObjectEvent *objectEvent, struct Sprite *sprite)
ObjectEventUpdateSubpriority(objectEvent, sprite);
}
-#define dirn_to_anim(name, table)\
-u8 name(u32 idx)\
-{\
- u8 direction;\
- u8 animIds[sizeof(table)];\
- direction = idx;\
- memcpy(animIds, (table), sizeof(table));\
- if (direction > DIR_EAST) direction = 0;\
- return animIds[direction];\
+#define dirn_to_anim(name, table) \
+u8 name(u32 idx) \
+{ \
+ u8 direction; \
+ u8 animIds[sizeof(table)]; \
+ direction = idx; \
+ memcpy(animIds, (table), sizeof(table)); \
+ if (direction > DIR_EAST) direction = DIR_NONE; \
+ return animIds[direction]; \
}
dirn_to_anim(GetFaceDirectionMovementAction, gFaceDirectionMovementActions);
@@ -4608,7 +4611,7 @@ u8 sub_8063F10(u32 idx)
direction = idx;
if (direction > DIR_EAST)
- direction = 0;
+ direction = DIR_NONE;
return gUnknown_83A64F6[direction];
}
@@ -4773,7 +4776,7 @@ void npc_apply_direction(struct ObjectEvent *objectEvent, struct Sprite *sprite,
void do_go_anim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 speed)
{
- u8 (*functions[ARRAY_COUNT(gUnknown_83A6884)])(u8);
+ u8 (*functions[NELEMS(gUnknown_83A6884)])(u8);
memcpy(functions, gUnknown_83A6884, sizeof gUnknown_83A6884);
npc_apply_direction(objectEvent, sprite, direction, speed);
@@ -5158,7 +5161,7 @@ bool8 MovementAction_WalkNormalRight_Step1(struct ObjectEvent *objectEvent, stru
void sub_8064E3C(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 speed, u8 a5)
{
- s16 displacements[ARRAY_COUNT(gUnknown_83A6958)];
+ s16 displacements[NELEMS(gUnknown_83A6958)];
s16 x;
s16 y;
@@ -5184,7 +5187,7 @@ void maybe_shadow_1(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 d
u8 sub_8064F3C(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 callback(struct Sprite *))
{
- s16 displacements[ARRAY_COUNT(gUnknown_83A695E)];
+ s16 displacements[NELEMS(gUnknown_83A695E)];
s16 x;
s16 y;
u8 result;
@@ -5242,13 +5245,13 @@ bool8 sub_8065058(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
switch (sub_8065000(objectEvent, sprite))
{
- case 255:
- return TRUE;
- case 1:
- SetObjectEventDirection(objectEvent, GetOppositeDirection(objectEvent->movementDirection));
- obj_npc_animation_step(objectEvent, sprite, GetMoveDirectionAnimNum(objectEvent->facingDirection));
- default:
- return FALSE;
+ case 0xFF:
+ return TRUE;
+ case 1:
+ SetObjectEventDirection(objectEvent, GetOppositeDirection(objectEvent->movementDirection));
+ obj_npc_animation_step(objectEvent, sprite, GetMoveDirectionAnimNum(objectEvent->facingDirection));
+ default:
+ return FALSE;
}
}
@@ -5328,7 +5331,7 @@ void sub_8065208(struct Sprite *sprite, u16 duration)
bool8 MovementAction_Delay_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- if (-- sprite->data[3] == 0)
+ if (--sprite->data[3] == 0)
{
sprite->data[2] = 2;
return TRUE;
@@ -5580,7 +5583,7 @@ void sub_80656C4(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 dire
bool8 MovementAction_WalkInPlace_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- if (-- sprite->data[3] == 0)
+ if (--sprite->data[3] == 0)
{
sprite->data[2] = 2;
sprite->animPaused = TRUE;
@@ -6257,7 +6260,7 @@ bool8 MovementAction_JumpDown_Step1(struct ObjectEvent *objectEvent, struct Spri
{
if (sub_8065028(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6274,7 +6277,7 @@ bool8 MovementAction_JumpUp_Step1(struct ObjectEvent *objectEvent, struct Sprite
{
if (sub_8065028(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6291,7 +6294,7 @@ bool8 MovementAction_JumpLeft_Step1(struct ObjectEvent *objectEvent, struct Spri
{
if (sub_8065028(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6308,7 +6311,7 @@ bool8 MovementAction_JumpRight_Step1(struct ObjectEvent *objectEvent, struct Spr
{
if (sub_8065028(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6325,7 +6328,7 @@ bool8 MovementAction_JumpInPlaceDown_Step1(struct ObjectEvent *objectEvent, stru
{
if (sub_8065028(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6342,7 +6345,7 @@ bool8 MovementAction_JumpInPlaceUp_Step1(struct ObjectEvent *objectEvent, struct
{
if (sub_8065028(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6359,7 +6362,7 @@ bool8 MovementAction_JumpInPlaceLeft_Step1(struct ObjectEvent *objectEvent, stru
{
if (sub_8065028(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6376,7 +6379,7 @@ bool8 MovementAction_JumpInPlaceRight_Step1(struct ObjectEvent *objectEvent, str
{
if (sub_8065028(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6393,7 +6396,7 @@ bool8 MovementAction_JumpInPlaceDownUp_Step1(struct ObjectEvent *objectEvent, st
{
if (sub_8065058(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6410,7 +6413,7 @@ bool8 MovementAction_JumpInPlaceUpDown_Step1(struct ObjectEvent *objectEvent, st
{
if (sub_8065058(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6427,7 +6430,7 @@ bool8 MovementAction_JumpInPlaceLeftRight_Step1(struct ObjectEvent *objectEvent,
{
if (sub_8065058(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -6444,7 +6447,7 @@ bool8 MovementAction_JumpInPlaceRightLeft_Step1(struct ObjectEvent *objectEvent,
{
if (sub_8065058(objectEvent, sprite))
{
- objectEvent->hasShadow = 0;
+ objectEvent->hasShadow = FALSE;
sprite->data[2] = 2;
return TRUE;
}
@@ -7434,17 +7437,17 @@ static void sub_8067A10(struct ObjectEvent *objectEvent, struct Sprite *sprite)
if (gSaveBlock1Ptr->location.mapGroup == 1 && gSaveBlock1Ptr->location.mapNum == 4 && objectEvent->localId == 1)
{
- var = 65504;
+ var = -32;
}
else
{
- var = 65520;
+ var = -16;
}
- if ((s16)x >= 0x100 || (s16)x2 < var)
+ if ((s16)x >= 256 || (s16)x2 < var)
{
objectEvent->offScreen = TRUE;
}
- if ((s16)y >= 0xB0 || (s16)y2 < -0x10)
+ if ((s16)y >= 176 || (s16)y2 < -16)
{
objectEvent->offScreen = TRUE;
}
@@ -7459,7 +7462,7 @@ static void UpdateObjEventSpriteVisibility(struct ObjectEvent *objectEvent, stru
}
}
-/*static*/ void GetAllGroundEffectFlags_OnSpawn(struct ObjectEvent *objEvent, u32 *flags)
+static void GetAllGroundEffectFlags_OnSpawn(struct ObjectEvent *objEvent, u32 *flags)
{
ObjectEventUpdateMetatileBehaviors(objEvent);
GetGroundEffectFlags_Reflection(objEvent, flags);
@@ -7471,7 +7474,7 @@ static void UpdateObjEventSpriteVisibility(struct ObjectEvent *objectEvent, stru
GetGroundEffectFlags_HotSprings(objEvent, flags);
}
-/*static*/ void GetAllGroundEffectFlags_OnBeginStep(struct ObjectEvent *objEvent, u32 *flags)
+static void GetAllGroundEffectFlags_OnBeginStep(struct ObjectEvent *objEvent, u32 *flags)
{
ObjectEventUpdateMetatileBehaviors(objEvent);
GetGroundEffectFlags_Reflection(objEvent, flags);
@@ -7485,7 +7488,7 @@ static void UpdateObjEventSpriteVisibility(struct ObjectEvent *objectEvent, stru
GetGroundEffectFlags_HotSprings(objEvent, flags);
}
-/*static*/ void GetAllGroundEffectFlags_OnFinishStep(struct ObjectEvent *objEvent, u32 *flags)
+static void GetAllGroundEffectFlags_OnFinishStep(struct ObjectEvent *objEvent, u32 *flags)
{
ObjectEventUpdateMetatileBehaviors(objEvent);
GetGroundEffectFlags_ShallowFlowingWater(objEvent, flags);
@@ -7554,7 +7557,7 @@ static void GetGroundEffectFlags_Tracks(struct ObjectEvent *objEvent, u32 *flags
{
*flags |= GROUND_EFFECT_FLAG_DEEP_SAND;
}
- else if (MetatileBehavior_IsSandOrDeepSand(objEvent->previousMetatileBehavior)
+ else if (MetatileBehavior_IsSand(objEvent->previousMetatileBehavior)
|| MetatileBehavior_IsFootprints(objEvent->previousMetatileBehavior))
{
*flags |= GROUND_EFFECT_FLAG_SAND;
@@ -7581,8 +7584,8 @@ static void GetGroundEffectFlags_SandHeap(struct ObjectEvent *objEvent, u32 *fla
static void GetGroundEffectFlags_ShallowFlowingWater(struct ObjectEvent *objEvent, u32 *flags)
{
- if ((MetatileBehavior_IsWaterfallBottom(objEvent->currentMetatileBehavior)
- && MetatileBehavior_IsWaterfallBottom(objEvent->previousMetatileBehavior))
+ if ((MetatileBehavior_IsShallowFlowingWater(objEvent->currentMetatileBehavior)
+ && MetatileBehavior_IsShallowFlowingWater(objEvent->previousMetatileBehavior))
|| (MetatileBehavior_IsPacifidlogLog(objEvent->currentMetatileBehavior)
&& MetatileBehavior_IsPacifidlogLog(objEvent->previousMetatileBehavior)))
{
@@ -7665,7 +7668,7 @@ static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent *objEvent, u32 *
MetatileBehavior_IsLongGrass,
MetatileBehavior_IsPuddle,
MetatileBehavior_IsSurfable,
- MetatileBehavior_IsWaterfallBottom,
+ MetatileBehavior_IsShallowFlowingWater,
MetatileBehavior_IsATile,
};
@@ -7682,7 +7685,7 @@ static void GetGroundEffectFlags_JumpLanding(struct ObjectEvent *objEvent, u32 *
{
u8 i;
- for (i = 0; i < ARRAY_COUNT(metatileFuncs); i++)
+ for (i = 0; i < NELEMS(metatileFuncs); i++)
{
if (metatileFuncs[i](objEvent->currentMetatileBehavior))
{
@@ -7765,7 +7768,7 @@ u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z)
return 0;
}
-/*static*/ void SetObjectEventSpriteOamTableForLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
+static void SetObjectEventSpriteOamTableForLongGrass(struct ObjectEvent *objEvent, struct Sprite *sprite)
{
if (objEvent->disableCoveringGroundEffects)
return;
@@ -8127,14 +8130,14 @@ static void (*const sGroundEffectFuncs[])(struct ObjectEvent *objEvent, struct S
GroundEffect_Seaweed
};
-/*static*/ void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags)
+static void DoFlaggedGroundEffects(struct ObjectEvent *objEvent, struct Sprite *sprite, u32 flags)
{
u8 i;
if (objEvent->localId == OBJ_EVENT_ID_CAMERA && objEvent->invisible)
return;
- for (i = 0; i < ARRAY_COUNT(sGroundEffectFuncs); i++, flags >>= 1)
+ for (i = 0; i < NELEMS(sGroundEffectFuncs); i++, flags >>= 1)
if (flags & 1)
sGroundEffectFuncs[i](objEvent, sprite);
}
@@ -8210,3 +8213,648 @@ static void DoGroundEffects_OnFinishStep(struct ObjectEvent *objEvent, struct Sp
objEvent->landingJump = 0;
}
}
+
+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);
+ }
+}
+
+static 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);
+}
diff --git a/src/field_specials.c b/src/field_specials.c
index ea4ed9449..5be7a4d1c 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -323,7 +323,6 @@ void AnimatePcTurnOff()
void SpawnCameraObject(void)
{
-
u8 objectEventId = SpawnSpecialObjectEventParameterized(OBJ_EVENT_GFX_YOUNGSTER, 8, OBJ_EVENT_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
gObjectEvents[objectEventId].invisible = TRUE;
CameraObjectSetFollowedObjectId(gObjectEvents[objectEventId].spriteId);
diff --git a/src/fieldmap.c b/src/fieldmap.c
index ecb9b7c3a..3d308f165 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -7,8 +7,6 @@
#include "quest_log.h"
#include "fieldmap.h"
-#define VMap gBackupMapLayout // Needed for AGB_ASSERT_EX to match
-
struct ConnectionFlags
{
u8 south:1;
@@ -29,7 +27,7 @@ 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 gBackupMapLayout;
+struct BackupMapLayout VMap;
EWRAM_DATA u16 gBackupMapData[VIRTUAL_MAP_SIZE] = {};
EWRAM_DATA struct MapHeader gMapHeader = {};
EWRAM_DATA struct Camera gCamera = {};
@@ -82,9 +80,9 @@ static void InitMapLayoutData(struct MapHeader * mapHeader)
{
const struct MapLayout * mapLayout = mapHeader->mapLayout;
CpuFastFill(0x03FF03FF, gBackupMapData, sizeof(gBackupMapData));
- gBackupMapLayout.map = gBackupMapData;
- gBackupMapLayout.Xsize = mapLayout->width + 15;
- gBackupMapLayout.Ysize = mapLayout->height + 14;
+ VMap.map = gBackupMapData;
+ VMap.Xsize = mapLayout->width + 15;
+ VMap.Ysize = mapLayout->height + 14;
AGB_ASSERT_EX(VMap.Xsize * VMap.Ysize <= VIRTUAL_MAP_SIZE, ABSPATH("fieldmap.c"), 158);
map_copy_with_padding(mapLayout->map, mapLayout->width, mapLayout->height);
mapheader_copy_mapdata_of_adjacent_maps(mapHeader);
@@ -93,8 +91,8 @@ static void InitMapLayoutData(struct MapHeader * mapHeader)
static void map_copy_with_padding(u16 *map, u16 width, u16 height)
{
s32 y;
- u16 *dest = gBackupMapLayout.map;
- dest += gBackupMapLayout.Xsize * 7 + 7;
+ u16 *dest = VMap.map;
+ dest += VMap.Xsize * 7 + 7;
for (y = 0; y < height; y++)
{
@@ -159,12 +157,12 @@ static void sub_8058B54(s32 x, s32 y, const struct MapHeader *connectedMapHeader
mapWidth = connectedMapHeader->mapLayout->width;
src = &connectedMapHeader->mapLayout->map[mapWidth * y2 + x2];
- dest = &gBackupMapLayout.map[gBackupMapLayout.Xsize * y + x];
+ dest = &VMap.map[VMap.Xsize * y + x];
for (i = 0; i < height; i++)
{
CpuCopy16(src, dest, width * 2);
- dest += gBackupMapLayout.Xsize;
+ dest += VMap.Xsize;
src += mapWidth;
}
}
@@ -185,26 +183,26 @@ static void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHea
{
x2 = -x;
x += cWidth;
- if (x < gBackupMapLayout.Xsize)
+ if (x < VMap.Xsize)
{
width = x;
}
else
{
- width = gBackupMapLayout.Xsize;
+ width = VMap.Xsize;
}
x = 0;
}
else
{
x2 = 0;
- if (x + cWidth < gBackupMapLayout.Xsize)
+ if (x + cWidth < VMap.Xsize)
{
width = cWidth;
}
else
{
- width = gBackupMapLayout.Xsize - x;
+ width = VMap.Xsize - x;
}
}
@@ -233,26 +231,26 @@ static void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHea
{
x2 = -x;
x += cWidth;
- if (x < gBackupMapLayout.Xsize)
+ if (x < VMap.Xsize)
{
width = x;
}
else
{
- width = gBackupMapLayout.Xsize;
+ width = VMap.Xsize;
}
x = 0;
}
else
{
x2 = 0;
- if (x + cWidth < gBackupMapLayout.Xsize)
+ if (x + cWidth < VMap.Xsize)
{
width = cWidth;
}
else
{
- width = gBackupMapLayout.Xsize - x;
+ width = VMap.Xsize - x;
}
}
@@ -280,26 +278,26 @@ static void fillWestConnection(struct MapHeader const *mapHeader, struct MapHead
if (y < 0)
{
y2 = -y;
- if (y + cHeight < gBackupMapLayout.Ysize)
+ if (y + cHeight < VMap.Ysize)
{
height = y + cHeight;
}
else
{
- height = gBackupMapLayout.Ysize;
+ height = VMap.Ysize;
}
y = 0;
}
else
{
y2 = 0;
- if (y + cHeight < gBackupMapLayout.Ysize)
+ if (y + cHeight < VMap.Ysize)
{
height = cHeight;
}
else
{
- height = gBackupMapLayout.Ysize - y;
+ height = VMap.Ysize - y;
}
}
@@ -325,26 +323,26 @@ static void fillEastConnection(struct MapHeader const *mapHeader, struct MapHead
if (y < 0)
{
y2 = -y;
- if (y + cHeight < gBackupMapLayout.Ysize)
+ if (y + cHeight < VMap.Ysize)
{
height = y + cHeight;
}
else
{
- height = gBackupMapLayout.Ysize;
+ height = VMap.Ysize;
}
y = 0;
}
else
{
y2 = 0;
- if (y + cHeight < gBackupMapLayout.Ysize)
+ if (y + cHeight < VMap.Ysize)
{
height = cHeight;
}
else
{
- height = gBackupMapLayout.Ysize - y;
+ height = VMap.Ysize - y;
}
}
@@ -406,9 +404,9 @@ union Block
block; \
})
-#define AreCoordsWithinMapGridBounds(x, y) (x >= 0 && x < gBackupMapLayout.Xsize && y >= 0 && y < gBackupMapLayout.Ysize)
+#define AreCoordsWithinMapGridBounds(x, y) (x >= 0 && x < VMap.Xsize && y >= 0 && y < VMap.Ysize)
-#define MapGridGetTileAt(x, y) (AreCoordsWithinMapGridBounds(x, y) ? gBackupMapLayout.map[x + gBackupMapLayout.Xsize * y] : MapGridGetBorderTileAt2(x, y))
+#define MapGridGetTileAt(x, y) (AreCoordsWithinMapGridBounds(x, y) ? VMap.map[x + VMap.Xsize * y] : MapGridGetBorderTileAt2(x, y))
u8 MapGridGetZCoordAt(s32 x, s32 y)
{
@@ -473,37 +471,37 @@ u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y)
void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatile)
{
s32 i;
- if (x >= 0 && x < gBackupMapLayout.Xsize
- && y >= 0 && y < gBackupMapLayout.Ysize)
+ if (x >= 0 && x < VMap.Xsize
+ && y >= 0 && y < VMap.Ysize)
{
- i = x + y * gBackupMapLayout.Xsize;
- gBackupMapLayout.map[i] = (gBackupMapLayout.map[i] & 0xf000) | (metatile & 0xfff);
+ i = x + y * VMap.Xsize;
+ VMap.map[i] = (VMap.map[i] & 0xf000) | (metatile & 0xfff);
}
}
void MapGridSetMetatileEntryAt(s32 x, s32 y, u16 metatile)
{
s32 i;
- if (x >= 0 && x < gBackupMapLayout.Xsize
- && y >= 0 && y < gBackupMapLayout.Ysize)
+ if (x >= 0 && x < VMap.Xsize
+ && y >= 0 && y < VMap.Ysize)
{
- i = x + gBackupMapLayout.Xsize * y;
- gBackupMapLayout.map[i] = metatile;
+ i = x + VMap.Xsize * y;
+ VMap.map[i] = metatile;
}
}
void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2)
{
- if (x >= 0 && x < gBackupMapLayout.Xsize
- && y >= 0 && y < gBackupMapLayout.Ysize)
+ if (x >= 0 && x < VMap.Xsize
+ && y >= 0 && y < VMap.Ysize)
{
if (arg2)
{
- gBackupMapLayout.map[x + gBackupMapLayout.Xsize * y] |= 0x0C00;
+ VMap.map[x + VMap.Xsize * y] |= 0x0C00;
}
else
{
- gBackupMapLayout.map[x + gBackupMapLayout.Xsize * y] &= ~0x0C00;
+ VMap.map[x + VMap.Xsize * y] &= ~0x0C00;
}
}
}
@@ -535,7 +533,7 @@ void save_serialize_map(void)
u16 *mapView;
s32 width;
mapView = gSaveBlock2Ptr->mapView;
- width = gBackupMapLayout.Xsize;
+ width = VMap.Xsize;
x = gSaveBlock1Ptr->pos.x;
y = gSaveBlock1Ptr->pos.y;
for (i = y; i < y + 14; i++)
@@ -576,7 +574,7 @@ static void LoadSavedMapView(void)
mapView = gSaveBlock2Ptr->mapView;
if (!SavedMapViewIsEmpty())
{
- width = gBackupMapLayout.Xsize;
+ width = VMap.Xsize;
x = gSaveBlock1Ptr->pos.x;
y = gSaveBlock1Ptr->pos.y;
for (i = y; i < y + 14; i++)
@@ -603,7 +601,7 @@ static void sub_8059250(u8 a1)
s32 x, y;
s32 i, j;
mapView = gSaveBlock2Ptr->mapView;
- width = gBackupMapLayout.Xsize;
+ width = VMap.Xsize;
r9 = 0;
r8 = 0;
x0 = gSaveBlock1Ptr->pos.x;
@@ -654,7 +652,7 @@ s32 GetMapBorderIdAt(s32 x, s32 y)
return -1;
}
- if (x >= gBackupMapLayout.Xsize - 8)
+ if (x >= VMap.Xsize - 8)
{
if (!gMapConnectionFlags.east)
{
@@ -672,7 +670,7 @@ s32 GetMapBorderIdAt(s32 x, s32 y)
return CONNECTION_WEST;
}
- if (y >= gBackupMapLayout.Ysize - 7)
+ if (y >= VMap.Ysize - 7)
{
if (!gMapConnectionFlags.south)
{
diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c
index 30f3a29cb..414ece873 100644
--- a/src/metatile_behavior.c
+++ b/src/metatile_behavior.c
@@ -7,7 +7,7 @@ static const bool8 sTileSurfable[METATILE_COUNT] = {
[MB_SEMI_DEEP_WATER] = TRUE,
[MB_DEEP_WATER] = TRUE,
[MB_WATERFALL] = TRUE,
- [MB_SPLASHING_WATER] = TRUE,
+ [MB_OCEAN_WATER] = TRUE,
[MB_1A] = TRUE,
[MB_1B] = TRUE,
[MB_EASTWARD_CURRENT] = TRUE,
@@ -69,17 +69,17 @@ bool8 MetatileBehavior_IsPokeGrass(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsSandOrDeepSand(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSand(u8 metatileBehavior)
{
- if(metatileBehavior == MB_21 || metatileBehavior == MB_SAND)
+ if(metatileBehavior == MB_SAND || metatileBehavior == MB_SAND_CAVE)
return TRUE;
else
return FALSE;
}
-bool8 MetatileBehavior_IsMB21OrWaterfallBottom(u8 metatileBehavior)
+bool8 MetatileBehavior_IsSandOrShallowFlowingWater(u8 metatileBehavior)
{
- if(metatileBehavior == MB_21 || metatileBehavior == MB_WATERFALL_BOTTOM)
+ if(metatileBehavior == MB_SAND || metatileBehavior == MB_SHALLOW_WATER)
return TRUE;
else
return FALSE;
@@ -490,9 +490,9 @@ bool8 MetatileBehavior_IsMB19(u8 metatileBehavior)
return FALSE;
}
-bool8 MetatileBehavior_IsWaterfallBottom(u8 metatileBehavior)
+bool8 MetatileBehavior_IsShallowFlowingWater(u8 metatileBehavior)
{
- if(metatileBehavior == MB_WATERFALL_BOTTOM)
+ if(metatileBehavior == MB_SHALLOW_WATER)
return TRUE;
else
return FALSE;
@@ -517,7 +517,7 @@ bool8 MetatileBehavior_IsCrackedIce(u8 metatileBehavior)
bool8 MetatileBehavior_IsDeepSemiDeepOrSplashingWater(u8 metatileBehavior)
{
if((metatileBehavior >= MB_SEMI_DEEP_WATER && metatileBehavior <= MB_DEEP_WATER)
- || metatileBehavior == MB_SPLASHING_WATER)
+ || metatileBehavior == MB_OCEAN_WATER)
return TRUE;
else
return FALSE;
@@ -647,7 +647,7 @@ bool8 MetatileBehavior_IsUnionRoomWarp(u8 metatileBehavior)
bool8 MetatileBehavior_IsWater(u8 metatileBehavior)
{
if((metatileBehavior >= MB_POND_WATER && metatileBehavior <= MB_DEEP_WATER)
- || metatileBehavior == MB_SPLASHING_WATER
+ || metatileBehavior == MB_OCEAN_WATER
|| (metatileBehavior >= MB_EASTWARD_CURRENT && metatileBehavior <= MB_SOUTHWARD_CURRENT))
return TRUE;
else
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index 60f5f338f..7b67ea8b0 100644
--- a/src/vs_seeker.c
+++ b/src/vs_seeker.c
@@ -633,7 +633,7 @@ void sub_810C444(void)
for (i = 0; i < gMapHeader.events->objectEventCount; i++)
{
- if ((templates[i].trainerType == 1 || templates[i].trainerType == 3) && (templates[i].movementType == 0x4D || templates[i].movementType == 0x4E || templates[i].movementType == 0x4F))
+ if ((templates[i].trainerType == 1 || templates[i].trainerType == 3) && (templates[i].movementType == MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_DOWN || templates[i].movementType == MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP || templates[i].movementType == MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT))
{
r6 = sub_810CF54();
TryGetObjectEventIdByLocalIdAndMap(templates[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &sp0);
@@ -696,7 +696,7 @@ static void sub_810C594(void)
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
struct ObjectEvent * objectEvent = &gObjectEvents[i];
- if (objectEvent->movementType == 0x4D || objectEvent->movementType == 0x4E || objectEvent->movementType == 0x4F)
+ if (objectEvent->movementType == MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_DOWN || objectEvent->movementType == MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP || objectEvent->movementType == MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT)
{
u8 r3 = sub_810CF54();
if (objectEvent->active && gSprites[objectEvent->spriteId].data[0] == i)