mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 17:01:51 +00:00
- consolidation of Blood rotation code.
24x the same pattern merged into a subfunction.
This commit is contained in:
parent
b5c679f228
commit
39109de22f
10 changed files with 159 additions and 268 deletions
|
@ -241,4 +241,5 @@ void actBuildMissile(DBloodActor* spawned, DBloodActor* actor);
|
|||
|
||||
extern const int16_t DudeDifficulty[];
|
||||
|
||||
|
||||
END_BLD_NS
|
||||
|
|
|
@ -319,18 +319,13 @@ static void batMoveForward(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if ((unsigned int)Random(64) < 32 && nDist <= 0x200)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += nAccel;
|
||||
else
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += FixedToFloat(nAccel);
|
||||
else
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
}
|
||||
|
||||
static void batMoveSwoop(DBloodActor* actor)
|
||||
|
@ -350,15 +345,10 @@ static void batMoveSwoop(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x600) && nDist <= 0x200)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel) * 0.5;
|
||||
});
|
||||
actor->set_int_bvel_z(0x44444);
|
||||
}
|
||||
|
||||
|
@ -379,15 +369,9 @@ static void batMoveFly(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x4000) && nDist <= 0x200)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel) * 0.5;
|
||||
});
|
||||
actor->set_int_bvel_z(-0x2d555);
|
||||
}
|
||||
|
||||
|
|
|
@ -422,18 +422,12 @@ static void sub_628A0(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Random(64) < 32 && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += nAccel;
|
||||
else
|
||||
t1 += nAccel >> 2;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += FixedToFloat(nAccel);
|
||||
else
|
||||
t1 += FixedToFloat(nAccel * 0.25);
|
||||
});
|
||||
}
|
||||
|
||||
static void sub_62AE0(DBloodActor* actor)
|
||||
|
@ -458,15 +452,10 @@ static void sub_62AE0(DBloodActor* actor)
|
|||
int dz = z2 - z;
|
||||
if (Chance(0x600) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel);
|
||||
});
|
||||
|
||||
actor->set_int_bvel_z(-dz);
|
||||
}
|
||||
|
||||
|
@ -492,15 +481,10 @@ static void sub_62D7C(DBloodActor* actor)
|
|||
int dz = (z2 - z) << 3;
|
||||
if (Chance(0x4000) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
|
||||
actor->set_int_bvel_z(dz);
|
||||
}
|
||||
|
||||
|
|
|
@ -331,18 +331,13 @@ static void eelMoveForward(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (nDist <= 0x399)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += nAccel;
|
||||
else
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += FixedToFloat(nAccel);
|
||||
else
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
static void eelMoveSwoop(DBloodActor* actor)
|
||||
|
@ -359,15 +354,10 @@ static void eelMoveSwoop(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x8000) && nDist <= 0x399)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
|
||||
actor->set_int_bvel_z(0x22222);
|
||||
}
|
||||
|
||||
|
@ -385,15 +375,10 @@ static void eelMoveAscend(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x4000) && nDist <= 0x399)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
|
||||
actor->set_int_bvel_z(-0x8000);
|
||||
}
|
||||
|
||||
|
|
|
@ -290,18 +290,13 @@ static void sub_65D04(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Random(64) < 32 && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += nAccel;
|
||||
else
|
||||
t1 += nAccel >> 2;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += FixedToFloat(nAccel);
|
||||
else
|
||||
t1 += FixedToFloat(nAccel * 0.25);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
static void sub_65F44(DBloodActor* actor)
|
||||
|
@ -327,15 +322,10 @@ static void sub_65F44(DBloodActor* actor)
|
|||
int dz = z2 - z;
|
||||
if (Chance(0x600) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel);
|
||||
});
|
||||
|
||||
actor->set_int_bvel_z(-dz);
|
||||
}
|
||||
|
||||
|
@ -362,15 +352,10 @@ static void sub_661E0(DBloodActor* actor)
|
|||
int dz = (z2 - z) << 3;
|
||||
if (Chance(0x4000) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
|
||||
actor->set_int_bvel_z(dz);
|
||||
}
|
||||
|
||||
|
|
|
@ -532,18 +532,13 @@ static void gargMoveForward(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if ((unsigned int)Random(64) < 32 && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += nAccel;
|
||||
else
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += FixedToFloat(nAccel);
|
||||
else
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
static void gargMoveSlow(DBloodActor* actor)
|
||||
|
@ -566,16 +561,11 @@ static void gargMoveSlow(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x600) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 = nAccel >> 1;
|
||||
t2 >>= 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
t2 *= 0.5;
|
||||
});
|
||||
|
||||
switch (actor->spr.type) {
|
||||
case kDudeGargoyleFlesh:
|
||||
actor->set_int_bvel_z(0x44444);
|
||||
|
@ -606,23 +596,19 @@ static void gargMoveSwoop(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x600) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
switch (actor->spr.type) {
|
||||
case kDudeGargoyleFlesh:
|
||||
actor->set_int_bvel_z(t1);
|
||||
break;
|
||||
case kDudeGargoyleStone:
|
||||
actor->set_int_bvel_z(t1);
|
||||
break;
|
||||
}
|
||||
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
switch (actor->spr.type) {
|
||||
case kDudeGargoyleFlesh:
|
||||
actor->vel.Z = t1;
|
||||
break;
|
||||
case kDudeGargoyleStone:
|
||||
actor->vel.Z = t1;
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
static void gargMoveFly(DBloodActor* actor)
|
||||
|
@ -645,23 +631,19 @@ static void gargMoveFly(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x4000) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
switch (actor->spr.type) {
|
||||
case kDudeGargoyleFlesh:
|
||||
actor->set_int_bvel_z(-t1);
|
||||
break;
|
||||
case kDudeGargoyleStone:
|
||||
actor->set_int_bvel_z(-t1);
|
||||
break;
|
||||
}
|
||||
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
switch (actor->spr.type) {
|
||||
case kDudeGargoyleFlesh:
|
||||
actor->vel.Z = -t1;
|
||||
break;
|
||||
case kDudeGargoyleStone:
|
||||
actor->vel.Z = -t1;
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
END_BLD_NS
|
||||
|
|
|
@ -428,18 +428,12 @@ static void ghostMoveForward(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if ((unsigned int)Random(64) < 32 && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += nAccel;
|
||||
else
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += FixedToFloat(nAccel);
|
||||
else
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
}
|
||||
|
||||
static void ghostMoveSlow(DBloodActor* actor)
|
||||
|
@ -462,16 +456,10 @@ static void ghostMoveSlow(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x600) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 = nAccel >> 1;
|
||||
t2 >>= 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
t2 *= 0.5;
|
||||
});
|
||||
switch (actor->spr.type) {
|
||||
case kDudePhantasm:
|
||||
actor->set_int_bvel_z(0x44444);
|
||||
|
@ -499,20 +487,14 @@ static void ghostMoveSwoop(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x600) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
switch (actor->spr.type) {
|
||||
case kDudePhantasm:
|
||||
actor->set_int_bvel_z(t1);
|
||||
break;
|
||||
}
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
switch (actor->spr.type) {
|
||||
case kDudePhantasm:
|
||||
actor->vel.Z = t1;
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static void ghostMoveFly(DBloodActor* actor)
|
||||
|
@ -535,20 +517,14 @@ static void ghostMoveFly(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Chance(0x4000) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
switch (actor->spr.type) {
|
||||
case kDudePhantasm:
|
||||
actor->set_int_bvel_z(-t1);
|
||||
break;
|
||||
}
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
switch (actor->spr.type) {
|
||||
case kDudePhantasm:
|
||||
actor->vel.Z = -t1;
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
END_BLD_NS
|
||||
|
|
|
@ -277,18 +277,13 @@ static void sub_6CB00(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if (Random(64) < 32 && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += nAccel;
|
||||
else
|
||||
t1 += nAccel >> 2;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += FixedToFloat(nAccel);
|
||||
else
|
||||
t1 += FixedToFloat(nAccel * 0.25);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
static void sub_6CD74(DBloodActor* actor)
|
||||
|
@ -313,15 +308,10 @@ static void sub_6CD74(DBloodActor* actor)
|
|||
int dz = z2 - z;
|
||||
if (Chance(0x600) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel);
|
||||
});
|
||||
|
||||
actor->set_int_bvel_z(-dz);
|
||||
}
|
||||
|
||||
|
@ -347,15 +337,10 @@ static void sub_6D03C(DBloodActor* actor)
|
|||
int dz = (z2 - z) << 3;
|
||||
if (Chance(0x4000) && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
|
||||
actor->set_int_bvel_z(dz);
|
||||
}
|
||||
|
||||
|
|
|
@ -1126,18 +1126,13 @@ void aiGenDudeMoveForward(DBloodActor* actor)
|
|||
int nDist = approxDist(dvec);
|
||||
if ((unsigned int)Random(64) < 32 && nDist <= 0x400)
|
||||
return;
|
||||
int nCos = Cos(actor->int_ang());
|
||||
int nSin = Sin(actor->int_ang());
|
||||
int vx = actor->int_vel().X;
|
||||
int vy = actor->int_vel().Y;
|
||||
int t1 = DMulScale(vx, nCos, vy, nSin, 30);
|
||||
int t2 = DMulScale(vx, nSin, -vy, nCos, 30);
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += nAccel;
|
||||
else
|
||||
t1 += nAccel >> 1;
|
||||
actor->set_int_bvel_x(DMulScale(t1, nCos, t2, nSin, 30));
|
||||
actor->set_int_bvel_y(DMulScale(t1, nSin, -t2, nCos, 30));
|
||||
AdjustVelocity(actor, ADJUSTER{
|
||||
if (actor->GetTarget() == nullptr)
|
||||
t1 += FixedToFloat(nAccel);
|
||||
else
|
||||
t1 += FixedToFloat(nAccel * 0.5);
|
||||
});
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -174,5 +174,19 @@ inline bool IsTargetTeammate(DBloodActor* pSource, DBloodActor* pTarget)
|
|||
return IsTargetTeammate(pSourcePlayer, pTarget);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void AdjustVelocity(DBloodActor *actor, T adjuster)
|
||||
{
|
||||
double nCos = actor->spr.angle.Cos();
|
||||
double nSin = actor->spr.angle.Sin();
|
||||
double t1 = actor->vel.X * nCos + actor->vel.Y * nSin;
|
||||
double t2 = actor->vel.X * nSin - actor->vel.Y * nCos;
|
||||
adjuster(actor, t1, t2);
|
||||
actor->vel.X = t1 * nCos + t2 * nSin;
|
||||
actor->vel.Y = t1 * nSin - t2 * nCos;
|
||||
}
|
||||
|
||||
// just so we don't have to type this out several dozen times
|
||||
#define ADJUSTER [=](DBloodActor* actor, double& t1, double& t2)
|
||||
|
||||
END_BLD_NS
|
||||
|
|
Loading…
Reference in a new issue