Use constants for movement speeds

This commit is contained in:
cbt6
2022-08-11 12:18:04 +08:00
parent 1d4503ab46
commit 79ae1e4f14
2 changed files with 121 additions and 114 deletions
@@ -655,12 +655,12 @@ static bool8 (*const sMovementActionFuncs_x03[])(struct ObjectEvent *, struct Sp
MovementAction_PauseSpriteAnim,
};
static bool8 (*const gUnknown_83A6884[])(u8) = {
GetMoveDirectionAnimNum,
GetMoveDirectionFastAnimNum,
GetMoveDirectionFastAnimNum,
GetMoveDirectionFasterAnimNum,
GetMoveDirectionFastestAnimNum,
static bool8 (*const sDirectionAnimFuncsBySpeed[])(u8) = {
[MOVE_SPEED_NORMAL] = GetMoveDirectionAnimNum,
[MOVE_SPEED_FAST_1] = GetMoveDirectionFastAnimNum,
[MOVE_SPEED_FAST_2] = GetMoveDirectionFastAnimNum,
[MOVE_SPEED_FASTER] = GetMoveDirectionFasterAnimNum,
[MOVE_SPEED_FASTEST] = GetMoveDirectionFastestAnimNum,
};
static bool8 (*const sMovementActionFuncs_x9B[])(struct ObjectEvent *, struct Sprite *) = {
+115 -108
View File
@@ -152,6 +152,14 @@ static void MovementType_VsSeeker4E(struct Sprite *);
static void MovementType_VsSeeker4F(struct Sprite *);
static void MovementType_WanderAroundSlower(struct Sprite *);
enum {
MOVE_SPEED_NORMAL, // walking
MOVE_SPEED_FAST_1, // running / surfing / sliding (ice tile)
MOVE_SPEED_FAST_2, // water current / bicycle
MOVE_SPEED_FASTER, // going down cycling road on bicycle
MOVE_SPEED_FASTEST,
};
enum {
JUMP_DISTANCE_IN_PLACE,
JUMP_DISTANCE_NORMAL,
@@ -5346,16 +5354,15 @@ void InitNpcForMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite,
void InitMovementNormal(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 speed)
{
u8 (*functions[NELEMS(gUnknown_83A6884)])(u8);
memcpy(functions, gUnknown_83A6884, sizeof gUnknown_83A6884);
u8 (*functions[NELEMS(sDirectionAnimFuncsBySpeed)])(u8);
memcpy(functions, sDirectionAnimFuncsBySpeed, sizeof sDirectionAnimFuncsBySpeed);
InitNpcForMovement(objectEvent, sprite, direction, speed);
SetStepAnimHandleAlternation(objectEvent, sprite, functions[speed](objectEvent->facingDirection));
}
void StartRunningAnim(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction)
{
InitNpcForMovement(objectEvent, sprite, direction, 1);
InitNpcForMovement(objectEvent, sprite, direction, MOVE_SPEED_FAST_1);
SetStepAnimHandleAlternation(objectEvent, sprite, GetRunningDirectionAnimNum(objectEvent->facingDirection));
}
@@ -5671,7 +5678,7 @@ static bool8 MovementActionFunc_x0F_1(struct ObjectEvent *objectEvent, struct Sp
static bool8 MovementAction_WalkNormalDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 0);
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_NORMAL);
return MovementAction_WalkNormalDown_Step1(objectEvent, sprite);
}
@@ -5687,7 +5694,7 @@ static bool8 MovementAction_WalkNormalDown_Step1(struct ObjectEvent *objectEvent
static bool8 MovementAction_WalkNormalUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_NORTH, 0);
InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_NORMAL);
return MovementAction_WalkNormalUp_Step1(objectEvent, sprite);
}
@@ -5703,7 +5710,7 @@ static bool8 MovementAction_WalkNormalUp_Step1(struct ObjectEvent *objectEvent,
static bool8 MovementAction_WalkNormalLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_WEST, 0);
InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_NORMAL);
return MovementAction_WalkNormalLeft_Step1(objectEvent, sprite);
}
@@ -5719,7 +5726,7 @@ static bool8 MovementAction_WalkNormalLeft_Step1(struct ObjectEvent *objectEvent
static bool8 MovementAction_WalkNormalRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_EAST, 0);
InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_NORMAL);
return MovementAction_WalkNormalRight_Step1(objectEvent, sprite);
}
@@ -5952,7 +5959,7 @@ static bool8 MovementAction_Delay16_Step0(struct ObjectEvent *objectEvent, struc
static bool8 MovementAction_WalkFastDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 1);
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1);
return MovementAction_WalkFastDown_Step1(objectEvent, sprite);
}
@@ -5968,7 +5975,7 @@ static bool8 MovementAction_WalkFastDown_Step1(struct ObjectEvent *objectEvent,
static bool8 MovementAction_WalkFastUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_NORTH, 1);
InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1);
return MovementAction_WalkFastUp_Step1(objectEvent, sprite);
}
@@ -5984,7 +5991,7 @@ static bool8 MovementAction_WalkFastUp_Step1(struct ObjectEvent *objectEvent, st
static bool8 MovementAction_WalkFastLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_WEST, 1);
InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1);
return MovementAction_WalkFastLeft_Step1(objectEvent, sprite);
}
@@ -6000,7 +6007,7 @@ static bool8 MovementAction_WalkFastLeft_Step1(struct ObjectEvent *objectEvent,
static bool8 MovementAction_WalkFastRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_EAST, 1);
InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1);
return MovementAction_WalkFastRight_Step1(objectEvent, sprite);
}
@@ -6030,7 +6037,7 @@ u8 MovementActionFunc_xA0_0(struct ObjectEvent *objectEvent, struct Sprite *spri
if(objectEvent->facingDirection != DIR_SOUTH)
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_SOUTH));
InitNpcForMovement(objectEvent, sprite, DIR_SOUTH, 1);
InitNpcForMovement(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1);
return MovementActionFunc_xA0_1(objectEvent, sprite);
}
@@ -6050,7 +6057,7 @@ u8 MovementActionFunc_xA1_0(struct ObjectEvent *objectEvent, struct Sprite *spri
if(objectEvent->facingDirection != DIR_NORTH)
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_NORTH));
InitNpcForMovement(objectEvent, sprite, DIR_NORTH, 1);
InitNpcForMovement(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1);
return MovementActionFunc_xA1_1(objectEvent, sprite);
}
@@ -6070,7 +6077,7 @@ u8 MovementActionFunc_xA2_0(struct ObjectEvent *objectEvent, struct Sprite *spri
if(objectEvent->facingDirection != DIR_WEST)
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_WEST));
InitNpcForMovement(objectEvent, sprite, DIR_WEST, 1);
InitNpcForMovement(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1);
return MovementActionFunc_xA2_1(objectEvent, sprite);
}
@@ -6090,7 +6097,7 @@ u8 MovementActionFunc_xA3_0(struct ObjectEvent *objectEvent, struct Sprite *spri
if(objectEvent->facingDirection != DIR_EAST)
StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_EAST));
InitNpcForMovement(objectEvent, sprite, DIR_EAST, 1);
InitNpcForMovement(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1);
return MovementActionFunc_xA3_1(objectEvent, sprite);
}
@@ -6279,7 +6286,7 @@ static bool8 MovementAction_WalkInPlaceFastestRight_Step0(struct ObjectEvent *ob
static bool8 MovementAction_RideWaterCurrentDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 2);
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_2);
return MovementAction_RideWaterCurrentDown_Step1(objectEvent, sprite);
}
@@ -6295,7 +6302,7 @@ static bool8 MovementAction_RideWaterCurrentDown_Step1(struct ObjectEvent *objec
static bool8 MovementAction_RideWaterCurrentUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_NORTH, 2);
InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_2);
return MovementAction_RideWaterCurrentUp_Step1(objectEvent, sprite);
}
@@ -6311,7 +6318,7 @@ static bool8 MovementAction_RideWaterCurrentUp_Step1(struct ObjectEvent *objectE
static bool8 MovementAction_RideWaterCurrentLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_WEST, 2);
InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_2);
return MovementAction_RideWaterCurrentLeft_Step1(objectEvent, sprite);
}
@@ -6327,7 +6334,7 @@ static bool8 MovementAction_RideWaterCurrentLeft_Step1(struct ObjectEvent *objec
static bool8 MovementAction_RideWaterCurrentRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_EAST, 2);
InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_2);
return MovementAction_RideWaterCurrentRight_Step1(objectEvent, sprite);
}
@@ -6343,7 +6350,7 @@ static bool8 MovementAction_RideWaterCurrentRight_Step1(struct ObjectEvent *obje
static bool8 MovementAction_WalkFastestDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 3);
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FASTER);
return MovementAction_WalkFastestDown_Step1(objectEvent, sprite);
}
@@ -6359,7 +6366,7 @@ static bool8 MovementAction_WalkFastestDown_Step1(struct ObjectEvent *objectEven
static bool8 MovementAction_WalkFastestUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_NORTH, 3);
InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FASTER);
return MovementAction_WalkFastestUp_Step1(objectEvent, sprite);
}
@@ -6375,7 +6382,7 @@ static bool8 MovementAction_WalkFastestUp_Step1(struct ObjectEvent *objectEvent,
static bool8 MovementAction_WalkFastestLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_WEST, 3);
InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FASTER);
return MovementAction_WalkFastestLeft_Step1(objectEvent, sprite);
}
@@ -6391,7 +6398,7 @@ static bool8 MovementAction_WalkFastestLeft_Step1(struct ObjectEvent *objectEven
static bool8 MovementAction_WalkFastestRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_EAST, 3);
InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FASTER);
return MovementAction_WalkFastestRight_Step1(objectEvent, sprite);
}
@@ -6407,7 +6414,7 @@ static bool8 MovementAction_WalkFastestRight_Step1(struct ObjectEvent *objectEve
static bool8 MovementAction_SlideDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, 4);
InitMovementNormal(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FASTEST);
return MovementAction_SlideDown_Step1(objectEvent, sprite);
}
@@ -6423,7 +6430,7 @@ static bool8 MovementAction_SlideDown_Step1(struct ObjectEvent *objectEvent, str
static bool8 MovementAction_SlideUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_NORTH, 4);
InitMovementNormal(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FASTEST);
return MovementAction_SlideUp_Step1(objectEvent, sprite);
}
@@ -6439,7 +6446,7 @@ static bool8 MovementAction_SlideUp_Step1(struct ObjectEvent *objectEvent, struc
static bool8 MovementAction_SlideLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_WEST, 4);
InitMovementNormal(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FASTEST);
return MovementAction_SlideLeft_Step1(objectEvent, sprite);
}
@@ -6455,7 +6462,7 @@ static bool8 MovementAction_SlideLeft_Step1(struct ObjectEvent *objectEvent, str
static bool8 MovementAction_SlideRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMovementNormal(objectEvent, sprite, DIR_EAST, 4);
InitMovementNormal(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FASTEST);
return MovementAction_SlideRight_Step1(objectEvent, sprite);
}
@@ -7629,7 +7636,7 @@ void InitAcroPopWheelie(struct ObjectEvent *objectEvent, struct Sprite *sprite,
static bool8 MovementAction_AcroPopWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitAcroPopWheelie(objectEvent, sprite, DIR_SOUTH, 1);
InitAcroPopWheelie(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1);
return MovementAction_AcroPopWheelieMoveDown_Step1(objectEvent, sprite);
}
@@ -7645,7 +7652,7 @@ static bool8 MovementAction_AcroPopWheelieMoveDown_Step1(struct ObjectEvent *obj
static bool8 MovementAction_AcroPopWheelieMoveUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitAcroPopWheelie(objectEvent, sprite, DIR_NORTH, 1);
InitAcroPopWheelie(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1);
return MovementAction_AcroPopWheelieMoveUp_Step1(objectEvent, sprite);
}
@@ -7661,7 +7668,7 @@ static bool8 MovementAction_AcroPopWheelieMoveUp_Step1(struct ObjectEvent *objec
static bool8 MovementAction_AcroPopWheelieMoveLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitAcroPopWheelie(objectEvent, sprite, DIR_WEST, 1);
InitAcroPopWheelie(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1);
return MovementAction_AcroPopWheelieMoveLeft_Step1(objectEvent, sprite);
}
@@ -7677,7 +7684,7 @@ static bool8 MovementAction_AcroPopWheelieMoveLeft_Step1(struct ObjectEvent *obj
static bool8 MovementAction_AcroPopWheelieMoveRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitAcroPopWheelie(objectEvent, sprite, DIR_EAST, 1);
InitAcroPopWheelie(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1);
return MovementAction_AcroPopWheelieMoveRight_Step1(objectEvent, sprite);
}
@@ -7699,7 +7706,7 @@ void InitAcroWheelieMove(struct ObjectEvent *objectEvent, struct Sprite *sprite,
static bool8 MovementAction_AcroWheelieMoveDown_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitAcroWheelieMove(objectEvent, sprite, DIR_SOUTH, 1);
InitAcroWheelieMove(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1);
return MovementAction_AcroWheelieMoveDown_Step1(objectEvent, sprite);
}
@@ -7715,7 +7722,7 @@ static bool8 MovementAction_AcroWheelieMoveDown_Step1(struct ObjectEvent *object
static bool8 MovementAction_AcroWheelieMoveUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitAcroWheelieMove(objectEvent, sprite, DIR_NORTH, 1);
InitAcroWheelieMove(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1);
return MovementAction_AcroWheelieMoveUp_Step1(objectEvent, sprite);
}
@@ -7731,7 +7738,7 @@ static bool8 MovementAction_AcroWheelieMoveUp_Step1(struct ObjectEvent *objectEv
static bool8 MovementAction_AcroWheelieMoveLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitAcroWheelieMove(objectEvent, sprite, DIR_WEST, 1);
InitAcroWheelieMove(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1);
return MovementAction_AcroWheelieMoveLeft_Step1(objectEvent, sprite);
}
@@ -7747,7 +7754,7 @@ static bool8 MovementAction_AcroWheelieMoveLeft_Step1(struct ObjectEvent *object
static bool8 MovementAction_AcroWheelieMoveRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitAcroWheelieMove(objectEvent, sprite, DIR_EAST, 1);
InitAcroWheelieMove(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1);
return MovementAction_AcroWheelieMoveRight_Step1(objectEvent, sprite);
}
@@ -7770,7 +7777,7 @@ void InitSpin(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 directi
static bool8 MovementActionFunc_x94_0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitSpin(objectEvent, sprite, DIR_SOUTH, 1);
InitSpin(objectEvent, sprite, DIR_SOUTH, MOVE_SPEED_FAST_1);
return MovementActionFunc_x94_1(objectEvent, sprite);
}
@@ -7786,7 +7793,7 @@ static bool8 MovementActionFunc_x94_1(struct ObjectEvent *objectEvent, struct Sp
static bool8 MovementActionFunc_x95_0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitSpin(objectEvent, sprite, DIR_NORTH, 1);
InitSpin(objectEvent, sprite, DIR_NORTH, MOVE_SPEED_FAST_1);
return MovementActionFunc_x95_1(objectEvent, sprite);
}
@@ -7802,7 +7809,7 @@ static bool8 MovementActionFunc_x95_1(struct ObjectEvent *objectEvent, struct Sp
static bool8 MovementActionFunc_x96_0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitSpin(objectEvent, sprite, DIR_WEST, 1);
InitSpin(objectEvent, sprite, DIR_WEST, MOVE_SPEED_FAST_1);
return MovementActionFunc_x96_1(objectEvent, sprite);
}
@@ -7818,7 +7825,7 @@ static bool8 MovementActionFunc_x96_1(struct ObjectEvent *objectEvent, struct Sp
static bool8 MovementActionFunc_x97_0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitSpin(objectEvent, sprite, DIR_EAST, 1);
InitSpin(objectEvent, sprite, DIR_EAST, MOVE_SPEED_FAST_1);
return MovementActionFunc_x97_1(objectEvent, sprite);
}
@@ -8855,31 +8862,31 @@ void UnfreezeObjectEvents(void)
#define tSpeed data[4]
#define tStepNo data[5]
static void little_step(struct Sprite *sprite, u8 direction)
static void Step1(struct Sprite *sprite, u8 direction)
{
sprite->x += sDirectionToVectors[direction].x;
sprite->y += sDirectionToVectors[direction].y;
}
static void double_little_steps(struct Sprite *sprite, u8 direction)
static void Step2(struct Sprite *sprite, u8 direction)
{
sprite->x += 2 * (u16)sDirectionToVectors[direction].x;
sprite->y += 2 * (u16)sDirectionToVectors[direction].y;
}
static void triple_little_steps(struct Sprite *sprite, u8 direction)
static void Step3(struct Sprite *sprite, u8 direction)
{
sprite->x += 2 * (u16)sDirectionToVectors[direction].x + (u16)sDirectionToVectors[direction].x;
sprite->y += 2 * (u16)sDirectionToVectors[direction].y + (u16)sDirectionToVectors[direction].y;
}
static void quad_little_steps(struct Sprite *sprite, u8 direction)
static void Step4(struct Sprite *sprite, u8 direction)
{
sprite->x += 4 * (u16)sDirectionToVectors[direction].x;
sprite->y += 4 * (u16)sDirectionToVectors[direction].y;
}
static void oct_little_steps(struct Sprite *sprite, u8 direction)
static void Step8(struct Sprite *sprite, u8 direction)
{
sprite->x += 8 * (u16)sDirectionToVectors[direction].x;
sprite->y += 8 * (u16)sDirectionToVectors[direction].y;
@@ -8894,83 +8901,83 @@ void SetSpriteDataForNormalStep(struct Sprite *sprite, u8 direction, u8 speed)
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 sSpeedNormalStepFuncs[] = {
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1,
Step1
};
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 sSpeedFast1StepFuncs[] = {
Step2,
Step2,
Step2,
Step2,
Step2,
Step2,
Step2,
Step2
};
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 sSpeedFast2StepFuncs[] = {
Step2,
Step3,
Step3,
Step2,
Step3,
Step3
};
static const SpriteStepFunc sSpeed3[] = {
quad_little_steps,
quad_little_steps,
quad_little_steps,
quad_little_steps
static const SpriteStepFunc sSpeedFasterStepFuncs[] = {
Step4,
Step4,
Step4,
Step4
};
static const SpriteStepFunc sSpeed4[] = {
oct_little_steps,
oct_little_steps
static const SpriteStepFunc sSpeedFastestStepFuncs[] = {
Step8,
Step8
};
static const SpriteStepFunc *const sSpriteStepFuncsBySpeed[] = {
sSpeed0,
sSpeed1,
sSpeed2,
sSpeed3,
sSpeed4
static const SpriteStepFunc *const sNpcStepFuncTables[] = {
[MOVE_SPEED_NORMAL] = sSpeedNormalStepFuncs,
[MOVE_SPEED_FAST_1] = sSpeedFast1StepFuncs,
[MOVE_SPEED_FAST_2] = sSpeedFast2StepFuncs,
[MOVE_SPEED_FASTER] = sSpeedFasterStepFuncs,
[MOVE_SPEED_FASTEST] = sSpeedFastestStepFuncs,
};
static const s16 sSpriteStepCountsBySpeed[] = {
NELEMS(sSpeed0),
NELEMS(sSpeed1),
NELEMS(sSpeed2),
NELEMS(sSpeed3),
NELEMS(sSpeed4)
static const s16 sStepTimes[] = {
[MOVE_SPEED_NORMAL] = NELEMS(sSpeedNormalStepFuncs),
[MOVE_SPEED_FAST_1] = NELEMS(sSpeedFast1StepFuncs),
[MOVE_SPEED_FAST_2] = NELEMS(sSpeedFast2StepFuncs),
[MOVE_SPEED_FASTER] = NELEMS(sSpeedFasterStepFuncs),
[MOVE_SPEED_FASTEST] = NELEMS(sSpeedFastestStepFuncs),
};
bool8 NpcTakeStep(struct Sprite *sprite)
{
if (sprite->tStepNo >= sSpriteStepCountsBySpeed[sprite->tSpeed])
if (sprite->tStepNo >= sStepTimes[sprite->tSpeed])
return FALSE;
sSpriteStepFuncsBySpeed[sprite->tSpeed][sprite->tStepNo](sprite, sprite->tDirection);
sNpcStepFuncTables[sprite->tSpeed][sprite->tStepNo](sprite, sprite->tDirection);
sprite->tStepNo++;
if (sprite->tStepNo < sSpriteStepCountsBySpeed[sprite->tSpeed])
if (sprite->tStepNo < sStepTimes[sprite->tSpeed])
return FALSE;
return TRUE;
@@ -8991,7 +8998,7 @@ bool8 UpdateWalkSlowerAnim(struct Sprite *sprite)
{
if (!(sprite->tDelay & 1))
{
little_step(sprite, sprite->tDirection);
Step1(sprite, sprite->tDirection);
sprite->tStepNo++;
}
@@ -9016,7 +9023,7 @@ bool8 UpdateWalkSlowAnim(struct Sprite *sprite)
{
if (++sprite->tDelay < 3)
{
little_step(sprite, sprite->tDirection);
Step1(sprite, sprite->tDirection);
sprite->tStepNo++;
}
else
@@ -9040,7 +9047,7 @@ bool8 UpdateWalkSlowestAnim(struct Sprite *sprite)
if (++sprite->tDelay > 9)
{
sprite->tDelay = 0;
little_step(sprite, sprite->tDirection);
Step1(sprite, sprite->tDirection);
sprite->tStepNo++;
}
@@ -9061,12 +9068,12 @@ bool8 UpdateRunSlowAnim(struct Sprite *sprite)
{
if ((++sprite->tDelay) & 1)
{
little_step(sprite, sprite->tDirection);
Step1(sprite, sprite->tDirection);
sprite->tStepNo++;
}
else
{
double_little_steps(sprite, sprite->tDirection);
Step2(sprite, sprite->tDirection);
sprite->tStepNo += 2;
}
@@ -9132,7 +9139,7 @@ u8 DoJumpSpriteMovement(struct Sprite *sprite)
u8 jumpPhase = 0;
if (sprite->sJumpDistance != JUMP_DISTANCE_IN_PLACE)
little_step(sprite, sprite->tDirection);
Step1(sprite, sprite->tDirection);
sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sJumpDistance], sprite->sJumpType);
@@ -9157,7 +9164,7 @@ u8 DoJumpSpecialSpriteMovement(struct Sprite *sprite)
u8 jumpPhase = 0;
if (sprite->sJumpDistance != JUMP_DISTANCE_IN_PLACE && !(sprite->sTimer & 1))
little_step(sprite, sprite->tDirection);
Step1(sprite, sprite->tDirection);
sprite->y2 = GetJumpY(sprite->sTimer >> shifts[sprite->sJumpDistance], sprite->sJumpType);