From ed12e333e37334ebbfff4a85eeabb06d187ef439 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 21 Aug 2022 19:08:22 +0200 Subject: [PATCH] - RANDOM_ANGLE + move_debris --- source/games/sw/src/actor.cpp | 19 +++++++------------ source/games/sw/src/bunny.cpp | 2 +- source/games/sw/src/game.h | 1 + source/games/sw/src/jweapon.cpp | 2 +- source/games/sw/src/weapon.cpp | 6 +++--- source/games/sw/src/zombie.cpp | 4 ++-- 6 files changed, 15 insertions(+), 19 deletions(-) diff --git a/source/games/sw/src/actor.cpp b/source/games/sw/src/actor.cpp index ebb4de6c2..dd4333c81 100644 --- a/source/games/sw/src/actor.cpp +++ b/source/games/sw/src/actor.cpp @@ -127,7 +127,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) actor->user.RotNum = 0; actor->spr.xvel <<= 1; actor->user.ActorActionFunc = nullptr; - actor->set_int_ang(NORM_ANGLE(actor->int_ang() + 1024)); + actor->spr.angle += DAngle180; break; case NINJA_RUN_R0: @@ -370,9 +370,9 @@ int DoActorSectorDamage(DSWActor* actor) } -bool move_debris(DSWActor* actor, int xchange, int ychange, int zchange) +bool move_debris(DSWActor* actor, const DVector2& change) { - actor->user.coll = move_sprite(actor, xchange, ychange, zchange, + actor->user.coll = move_sprite(actor, change.X * worldtoint, change.Y * worldtoint, 0, actor->user.int_ceiling_dist(), actor->user.int_floor_dist(), 0, ACTORMOVETICS); return actor->user.coll.type == kHitNone; @@ -384,7 +384,6 @@ bool move_debris(DSWActor* actor, int xchange, int ychange, int zchange) int DoActorDebris(DSWActor* actor) { sectortype* sectp = actor->sector(); - int nx, ny; // This was move from DoActorDie so actor's can't be walked through until they are on the floor actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN); @@ -413,16 +412,12 @@ int DoActorDebris(DSWActor* actor) } else { - //nx = actor->spr.xvel * ACTORMOVETICS * bcos(actor->spr.angle) >> 14; - //ny = actor->spr.xvel * ACTORMOVETICS * bsin(actor->spr.angle) >> 14; - nx = MulScale(ACTORMOVETICS, bcos(actor->int_ang()), 14); - ny = MulScale(ACTORMOVETICS, bsin(actor->int_ang()), 14); + // todo: check correctness + DVector2 nvec(ACTORMOVETICS * maptoworld * actor->spr.angle.Cos(), ACTORMOVETICS * maptoworld * actor->spr.angle.Sin()); - //actor->spr.clipdist = (256+128)>>2; - - if (!move_debris(actor, nx, ny, 0L)) + if (!move_debris(actor, nvec)) { - actor->set_int_ang(RANDOM_P2(2048)); + actor->spr.angle = RANDOM_ANGLE(); } } diff --git a/source/games/sw/src/bunny.cpp b/source/games/sw/src/bunny.cpp index 23d6ecdfb..1c461a273 100644 --- a/source/games/sw/src/bunny.cpp +++ b/source/games/sw/src/bunny.cpp @@ -1169,7 +1169,7 @@ DSWActor* BunnyHatch2(DSWActor* actor) actorNew->spr.pos = actor->spr.pos; actorNew->spr.xrepeat = 30; // Baby size actorNew->spr.yrepeat = 24; - actorNew->set_int_ang(RANDOM_P2(2048)); + actorNew->spr.angle = RANDOM_ANGLE(); actorNew->spr.pal = 0; SetupBunny(actorNew); actorNew->spr.shade = actor->spr.shade; diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 7672fa5a4..ba8bdcd8b 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -116,6 +116,7 @@ inline int RANDOM(void) } int RANDOM_P2(int pwr_of_2) { return (RANDOM() & (pwr_of_2 - 1)); } double RANDOM_P2F(int pwr_of_2) { return (RANDOM() & (pwr_of_2 - 1)) * maptoworld; } +DAngle RANDOM_ANGLE() { return DAngle::fromBuild(RANDOM_P2(2048)); } // // Map directions/degrees diff --git a/source/games/sw/src/jweapon.cpp b/source/games/sw/src/jweapon.cpp index e988ea92f..4ffcc2553 100644 --- a/source/games/sw/src/jweapon.cpp +++ b/source/games/sw/src/jweapon.cpp @@ -1189,7 +1189,7 @@ int SpawnRadiationCloud(DSWActor* actor) //if (RANDOM_P2(1024) < 512) //actorNew->spr.cstat |= (CSTAT_SPRITE_YFLIP); - actorNew->set_int_ang(RANDOM_P2(2048)); + actorNew->spr.angle = RANDOM_ANGLE(); actorNew->spr.xvel = RANDOM_P2(32); actorNew->user.Counter = 0; diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index bdb884263..d8e012a95 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -17132,7 +17132,7 @@ int SpawnVehicleSmoke(DSWActor* actor) if (RANDOM_P2(1024) < 512) actorNew->spr.cstat |= (CSTAT_SPRITE_YFLIP); - actorNew->set_int_ang(RANDOM_P2(2048)); + actorNew->spr.angle = RANDOM_ANGLE(); actorNew->spr.xvel = RANDOM_P2(32); actorNew->user.change.X = MOVEx(actorNew->spr.xvel, actorNew->int_ang()); actorNew->user.change.Y = MOVEy(actorNew->spr.xvel, actorNew->int_ang()); @@ -17158,7 +17158,7 @@ int SpawnSmokePuff(DSWActor* actor) if (RANDOM_P2(1024) < 512) actorNew->spr.cstat |= (CSTAT_SPRITE_YFLIP); - actorNew->set_int_ang(RANDOM_P2(2048)); + actorNew->spr.angle = RANDOM_ANGLE(); actorNew->spr.xvel = RANDOM_P2(32); actorNew->user.change.X = MOVEx(actorNew->spr.xvel, actorNew->int_ang()); actorNew->user.change.Y = MOVEy(actorNew->spr.xvel, actorNew->int_ang()); @@ -17455,7 +17455,7 @@ int QueueFloorBlood(DSWActor* actor) spawnedActor->spr.clipdist = 0; spawnedActor->spr.xoffset = spawnedActor->spr.yoffset = 0; spawnedActor->spr.pos = actor->spr.pos.plusZ(1); - spawnedActor->set_int_ang(RANDOM_P2(2048)); // Just make it any old angle + spawnedActor->spr.angle = RANDOM_ANGLE(); // Just make it any old angle spawnedActor->spr.shade -= 5; // Brighten it up just a bit spawnedActor->spr.cstat |= (CSTAT_SPRITE_ALIGNMENT_FLOOR); diff --git a/source/games/sw/src/zombie.cpp b/source/games/sw/src/zombie.cpp index 35ef3297a..1d8c65d9e 100644 --- a/source/games/sw/src/zombie.cpp +++ b/source/games/sw/src/zombie.cpp @@ -779,7 +779,7 @@ void SpawnZombie(PLAYER* pp, DSWActor* weaponActor) auto actorNew = SpawnActor(STAT_ENEMY, ZOMBIE_RUN_R0, s_ZombieRun[0], pp->cursector, pp->int_ppos().X, pp->int_ppos().Y, pp->int_ppos().Z, pp->angle.ang.Buildang(), 0); SetOwner(actorNew, ownerActor); actorNew->spr.pal = actorNew->user.spal = ownerActor->user.spal; - actorNew->set_int_ang(RANDOM_P2(2048)); + actorNew->spr.angle = RANDOM_ANGLE(); SetupZombie(actorNew); actorNew->spr.shade = -10; actorNew->user.Flags2 |= (SPR2_DONT_TARGET_OWNER); @@ -826,7 +826,7 @@ void SpawnZombie2(DSWActor* actor) actorNew->user.Counter3 = 0; SetOwner(ownerActor, actorNew); actorNew->spr.pal = actorNew->user.spal = ownerActor->user.spal; - actorNew->set_int_ang(RANDOM_P2(2048)); + actorNew->spr.angle = RANDOM_ANGLE(); SetupZombie(actorNew); actorNew->spr.shade = -10; actorNew->user.Flags2 |= (SPR2_DONT_TARGET_OWNER);