- SW: SectorExp floatified

This commit is contained in:
Christoph Oelckers 2022-08-20 10:34:51 +02:00
parent ed6adc33c4
commit 22dae296c6
3 changed files with 15 additions and 15 deletions

View file

@ -115,6 +115,7 @@ inline int RANDOM(void)
return randomseed; return randomseed;
} }
int RANDOM_P2(int pwr_of_2) { return (RANDOM() & (pwr_of_2 - 1)); } 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; }
// //
// Map directions/degrees // Map directions/degrees
@ -2068,11 +2069,16 @@ inline int ActorUpperZ(DSWActor* actor)
return (ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2)); return (ActorZOfTop(actor) + (ActorSizeZ(actor) >> 2));
} }
inline int ActorLowerZ(DSWActor* actor) inline int int_ActorLowerZ(DSWActor* actor)
{ {
return (ActorZOfBottom(actor) - (ActorSizeZ(actor) >> 2)); return (ActorZOfBottom(actor) - (ActorSizeZ(actor) >> 2));
} }
inline double ActorLowerZ(DSWActor* actor)
{
return (ActorZOfBottom(actor) - (ActorSizeZ(actor) * 0.25)) * zinttoworld;
}
// Z size of top (TOS) and bottom (BOS) part of sprite // Z size of top (TOS) and bottom (BOS) part of sprite
inline int ActorSizeToTop(DSWActor* a) inline int ActorSizeToTop(DSWActor* a)
{ {

View file

@ -841,15 +841,13 @@ int AnimateSwitch(DSWActor* actor, int tgt_value)
} }
void SectorExp(DSWActor* actor, sectortype* sectp, short orig_ang, int zh) void SectorExp(DSWActor* actor, sectortype* sectp, double zh)
{ {
int x,y,z;
actor->spr.cstat &= ~(CSTAT_SPRITE_ALIGNMENT_WALL|CSTAT_SPRITE_ALIGNMENT_FLOOR); actor->spr.cstat &= ~(CSTAT_SPRITE_ALIGNMENT_WALL|CSTAT_SPRITE_ALIGNMENT_FLOOR);
SectorMidPoint(sectp, &x, &y, &z); auto mid = SectorMidPoint(sectp);
// randomize the explosions // randomize the explosions
actor->set_int_ang(orig_ang + RANDOM_P2(256) - 128); actor->spr.angle = DAngle::fromBuild(RANDOM_P2(256) - 128);
actor->set_int_pos({ x + RANDOM_P2(256) - 128, y + RANDOM_P2(1024) - 512, zh }); actor->spr.pos = { mid.X + RANDOM_P2F(256) - 16, mid.Y + RANDOM_P2F(1024) - 64, zh };
// setup vars needed by SectorExp // setup vars needed by SectorExp
ChangeActorSect(actor, sectp); ChangeActorSect(actor, sectp);
@ -868,13 +866,8 @@ void SectorExp(DSWActor* actor, sectortype* sectp, short orig_ang, int zh)
void DoExplodeSector(short match) void DoExplodeSector(short match)
{ {
short orig_ang;
int zh;
sectortype* sectp; sectortype* sectp;
orig_ang = 0;
SWStatIterator it(STAT_EXPLODING_CEIL_FLOOR); SWStatIterator it(STAT_EXPLODING_CEIL_FLOOR);
while (auto actor = it.Next()) while (auto actor = it.Next())
{ {
@ -898,9 +891,9 @@ void DoExplodeSector(short match)
sectp->setceilingslope(SP_TAG6(actor)); sectp->setceilingslope(SP_TAG6(actor));
} }
for (zh = sectp->int_ceilingz(); zh < sectp->int_floorz(); zh += Z(60)) for (double zh = sectp->ceilingz; zh < sectp->floorz; zh += 60)
{ {
SectorExp(actor, actor->sector(), orig_ang, zh + Z(RANDOM_P2(64)) - Z(32)); SectorExp(actor, actor->sector(), zh + RANDOM_P2(64) - 32);
} }
// don't need it any more // don't need it any more

View file

@ -3728,7 +3728,8 @@ int ActorCoughItem(DSWActor* actor)
actorNew = insertActor(actor->sector(), STAT_SPAWN_ITEMS); actorNew = insertActor(actor->sector(), STAT_SPAWN_ITEMS);
actorNew->spr.cstat = 0; actorNew->spr.cstat = 0;
actorNew->spr.extra = 0; actorNew->spr.extra = 0;
actorNew->set_int_pos({ actor->int_pos().X, actor->int_pos().Y, ActorLowerZ(actor) + Z(10) }); actorNew->spr.pos.XY() = actor->spr.pos.XY();
actorNew->spr.pos.Z = ActorLowerZ(actor) + 10;
actorNew->spr.angle = actor->spr.angle; actorNew->spr.angle = actor->spr.angle;
// vel // vel