- RANDOM_ANGLE + move_debris

This commit is contained in:
Christoph Oelckers 2022-08-21 19:08:22 +02:00
parent 834f833298
commit ed12e333e3
6 changed files with 15 additions and 19 deletions

View file

@ -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();
}
}

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -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);

View file

@ -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);