From 5ed2cb67d9cac65e61fc00d34bb23e0cfd2d8292 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 5 Sep 2022 00:30:11 +0200 Subject: [PATCH] - handle the remaining velocity assignments in jweapon.cpp --- source/games/sw/src/game.h | 4 --- source/games/sw/src/jweapon.cpp | 49 +++++++++++++++------------------ source/games/sw/src/weapon.h | 1 + 3 files changed, 23 insertions(+), 31 deletions(-) diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 27248a21a..7109cb898 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -596,10 +596,6 @@ struct PLAYER { return { int(pos.X * worldtoint), int(pos.Y * worldtoint), int(pos.Z * zworldtoint) }; } - void add_int_ppos_XY(vec2_t z) - { - pos.XY() += { z.X * inttoworld, z.Y * inttoworld }; - } DSWActor* actor; // this may not be a TObjPtr! TObjPtr lowActor, highActor; diff --git a/source/games/sw/src/jweapon.cpp b/source/games/sw/src/jweapon.cpp index d181b1397..f393ec38c 100644 --- a/source/games/sw/src/jweapon.cpp +++ b/source/games/sw/src/jweapon.cpp @@ -1340,9 +1340,9 @@ int InitSpriteChemBomb(DSWActor* actor) actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER); actorNew->spr.cstat |= (CSTAT_SPRITE_BLOCK); - actorNew->vel.Z = -RandomRangeF(6.25 * HORIZ_MULT); + actorNew->vel.Z = (-100 - RandomRange(100)) * HORIZ_MULTF; - actorNew->spr.clipdist = 80L >> 2; + actorNew->spr.clipdist = 80 >> 2; UpdateChange(actorNew, 0.5); @@ -1381,7 +1381,7 @@ int InitChemBomb(DSWActor* actor) if (SpriteInUnderwaterArea(actorNew)) actorNew->user.Flags |= (SPR_UNDERWATER); - actorNew->vel.Z = -RandomRangeF(6.25 * HORIZ_MULT); + actorNew->vel.Z = (-100 - RandomRange(100)) * HORIZ_MULTF; actorNew->spr.clipdist = 0; if (actor->user.ID == MUSHROOM_CLOUD || actor->user.ID == 3121 || actor->user.ID == SUMO_RUN_R0) // 3121 == GRENADE_EXP @@ -1412,7 +1412,7 @@ int InitChemBomb(DSWActor* actor) int PlayerInitFlashBomb(PLAYER* pp) { unsigned int stat; - int dist, tx, ty, tmin; + short damage; DSWActor* actor = pp->actor; @@ -1429,8 +1429,8 @@ int PlayerInitFlashBomb(PLAYER* pp) if (itActor == pp->actor) break; - DISTANCE(itActor->spr.pos, actor->spr.pos, dist, tx, ty, tmin); - if (dist > 16384) // Flash radius + double dist = (itActor->spr.pos.XY() - actor->spr.pos.XY()).Length(); + if (dist > 1024) // Flash radius continue; if (!(actor->spr.cstat & CSTAT_SPRITE_BLOCK)) @@ -1477,7 +1477,6 @@ int InitFlashBomb(DSWActor* actor) { int i; unsigned int stat; - int dist, tx, ty, tmin; short damage; PLAYER* pp = Player + screenpeek; @@ -1488,8 +1487,8 @@ int InitFlashBomb(DSWActor* actor) SWStatIterator it(StatDamageList[stat]); while (auto itActor = it.Next()) { - DISTANCE(itActor->spr.pos, actor->spr.pos, dist, tx, ty, tmin); - if (dist > 16384) // Flash radius + double dist = (itActor->spr.pos.XY() - actor->spr.pos.XY()).Length(); + if (dist > 1024) // Flash radius continue; if (!(actor->spr.cstat & CSTAT_SPRITE_BLOCK)) @@ -1625,7 +1624,7 @@ int PlayerInitCaltrops(PLAYER* pp) // don't throw it as far if crawling if (pp->Flags & (PF_CRAWLING)) { - actorNew->add_int_xvel(-(actorNew->int_xvel() >> 2)); + actorNew->vel.X *= 0.75; } actorNew->user.Flags |= (SPR_XFLIP_TOGGLE); @@ -1644,7 +1643,7 @@ int PlayerInitCaltrops(PLAYER* pp) if (pp->Flags & (PF_DIVING) || SpriteInUnderwaterArea(actorNew)) actorNew->user.Flags |= (SPR_UNDERWATER); - actorNew->set_int_zvel(-pp->horizon.horiz.asq16() >> 9); + actorNew->vel.Z -= pp->horizon.horiz.asbuildf() * 0.5; oclipdist = plActor->spr.clipdist; plActor->spr.clipdist = 0; @@ -1686,11 +1685,8 @@ int InitCaltrops(DSWActor* actor) actorNew->user.ceiling_dist = 3; actorNew->user.floor_dist = 3; actorNew->user.Counter = 0; - - actorNew->set_int_zvel(short(-RandomRange(100) * HORIZ_MULT)); - - // spawnedActor->spr.clipdist = 80L>>2; - + actorNew->vel.Z = (-100 - RandomRange(100)) * HORIZ_MULTF; + UpdateChange(actorNew, 0.5); SetupSpriteForBreak(actorNew); // Put Caltrops in the break queue @@ -1726,8 +1722,7 @@ int InitPhosphorus(DSWActor* actor) actorNew->user.ceiling_dist = 3; actorNew->user.floor_dist = 3; actorNew->user.Counter = 0; - - actorNew->set_int_zvel(short(-RandomRange(100) * HORIZ_MULT)); + actorNew->vel.Z = (-100 - RandomRange(100)) * HORIZ_MULTF; UpdateChange(actorNew, 0.5); @@ -1792,7 +1787,7 @@ int InitBloodSpray(DSWActor* actor, bool dogib, short velocity) actorNew->user.floor_dist = 3; actorNew->user.Counter = 0; - actorNew->set_int_zvel(short((-10 - RandomRange(50)) * HORIZ_MULT)); + actorNew->vel.Z = (-10 - RandomRange(50)) * HORIZ_MULTF; UpdateChange(actorNew, 0.5); @@ -2139,7 +2134,7 @@ int SpawnShell(DSWActor* actor, int ShellNum) if (actor->user.PlayerP) { - actorNew->add_int_z(int(-actor->user.PlayerP->horizon.horiz.asbuildf() * HORIZ_MULT * (1. / 3.))); + actorNew->vel.Z = -actor->user.PlayerP->horizon.horiz.asbuildf() * HORIZ_MULTF * (1. / 3.); } switch (actorNew->user.ID) @@ -2153,7 +2148,7 @@ int SpawnShell(DSWActor* actor, int ShellNum) HelpMissileLateral(actorNew,2500); actorNew->spr.angle -= DAngle90; HelpMissileLateral(actorNew,1000); // Was 1500 - actorNew->set_int_ang(NORM_ANGLE(actorNew->spr.int_ang() + 712)); + actorNew->spr.angle += DAngle::fromBuild(712); // somewhat weird number... } else { @@ -2161,9 +2156,9 @@ int SpawnShell(DSWActor* actor, int ShellNum) HelpMissileLateral(actorNew,2500); actorNew->spr.angle += DAngle90; HelpMissileLateral(actorNew,1500); - actorNew->set_int_ang(NORM_ANGLE(actorNew->spr.int_ang() - 128)); + actorNew->spr.angle -= DAngle22_5; } - actorNew->add_int_ang((RANDOM_P2(128<<5)>>5) - (128 / 2)); + actorNew->spr.angle += RandomAngle(22.5) - DAngle22_5/2; actorNew->norm_ang(); // Set the shell number @@ -2176,8 +2171,8 @@ int SpawnShell(DSWActor* actor, int ShellNum) HelpMissileLateral(actorNew,2500); actorNew->spr.angle += DAngle90; HelpMissileLateral(actorNew,1300); - actorNew->set_int_ang(NORM_ANGLE(actorNew->spr.int_ang() - 128 - 64)); - actorNew->add_int_ang((RANDOM_P2(128<<5)>>5) - (128 / 2)); + actorNew->spr.angle -= DAngle22_5 * 1.5; + actorNew->spr.angle += RandomAngle(22.5) - DAngle22_5/2; actorNew->norm_ang(); // Set the shell number @@ -2188,8 +2183,8 @@ int SpawnShell(DSWActor* actor, int ShellNum) SetOwner(actor, actorNew); actorNew->spr.shade = -15; - actorNew->user.ceiling_dist = (1); - actorNew->user.floor_dist = (1); + actorNew->user.ceiling_dist = 1; + actorNew->user.floor_dist = 1; actorNew->user.Counter = 0; actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER); actorNew->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); diff --git a/source/games/sw/src/weapon.h b/source/games/sw/src/weapon.h index 37d27713a..10102ae8d 100644 --- a/source/games/sw/src/weapon.h +++ b/source/games/sw/src/weapon.h @@ -31,6 +31,7 @@ BEGIN_SW_NS #define NEW_ELECTRO 1 #define HORIZ_MULT 128 +constexpr double HORIZ_MULTF = 0.5; inline int AngToSprite(DSWActor* actor, DSWActor* other) {