- QuakeViewChange

This commit is contained in:
Christoph Oelckers 2021-12-24 17:37:27 +01:00
parent 7419c2e65b
commit 2b8b4f3fcc

View file

@ -162,8 +162,7 @@ void ProcessQuakeSpot(void)
void QuakeViewChange(PLAYERp pp, int *z_diff, int *x_diff, int *y_diff, short *ang_diff) void QuakeViewChange(PLAYERp pp, int *z_diff, int *x_diff, int *y_diff, short *ang_diff)
{ {
int i; int i;
SPRITEp sp; DSWActor* save_act = nullptr;
SPRITEp save_sp = nullptr;
int dist,save_dist = 999999; int dist,save_dist = 999999;
int dist_diff, scale_value; int dist_diff, scale_value;
int ang_amt; int ang_amt;
@ -179,47 +178,46 @@ void QuakeViewChange(PLAYERp pp, int *z_diff, int *x_diff, int *y_diff, short *a
return; return;
// find the closest quake - should be a strength value // find the closest quake - should be a strength value
DSWActor* actor = nullptr;
SWStatIterator it(STAT_QUAKE_ON); SWStatIterator it(STAT_QUAKE_ON);
while (auto actor = it.Next()) while (actor = it.Next())
{ {
sp = &actor->s(); dist = FindDistance3D(pp->pos.X - actor->spr.pos.X, pp->pos.Y - actor->spr.pos.Y, pp->pos.Z - actor->spr.pos.Z);
dist = FindDistance3D(pp->pos.X - sp->pos.X, pp->pos.Y - sp->pos.Y, pp->pos.Z - sp->pos.Z);
// shake whole level // shake whole level
if (QUAKE_TestDontTaper(sp)) if (QUAKE_TestDontTaper(actor))
{ {
save_dist = dist; save_dist = dist;
save_sp = sp; save_act = actor;
break; break;
} }
if (dist < save_dist) if (dist < save_dist)
{ {
save_dist = dist; save_dist = dist;
save_sp = sp; save_act = actor;
} }
} }
if (!save_sp) if (!save_act)
return; return;
else else
sp = save_sp; actor = save_act;
radius = QUAKE_Radius(sp) * 8L; radius = QUAKE_Radius(actor) * 8L;
if (save_dist > radius) if (save_dist > radius)
return; return;
*z_diff = Z(STD_RANDOM_RANGE(SP_TAG3(sp)) - (SP_TAG3(sp)/2)); *z_diff = Z(STD_RANDOM_RANGE(QUAKE_Zamt(actor)) - (QUAKE_Zamt(actor)/2));
ang_amt = QUAKE_AngAmt(sp) * 4L; ang_amt = QUAKE_AngAmt(actor) * 4L;
*ang_diff = STD_RANDOM_RANGE(ang_amt) - (ang_amt/2); *ang_diff = STD_RANDOM_RANGE(ang_amt) - (ang_amt/2);
pos_amt = QUAKE_PosAmt(sp) * 4L; pos_amt = QUAKE_PosAmt(actor) * 4L;
*x_diff = STD_RANDOM_RANGE(pos_amt) - (pos_amt/2); *x_diff = STD_RANDOM_RANGE(pos_amt) - (pos_amt/2);
*y_diff = STD_RANDOM_RANGE(pos_amt) - (pos_amt/2); *y_diff = STD_RANDOM_RANGE(pos_amt) - (pos_amt/2);
if (!QUAKE_TestDontTaper(sp)) if (!QUAKE_TestDontTaper(actor))
{ {
// scale values from epicenter // scale values from epicenter
dist_diff = radius - save_dist; dist_diff = radius - save_dist;