diff --git a/source/games/blood/src/animatesprite.cpp b/source/games/blood/src/animatesprite.cpp index be1cb4c36..820c80d60 100644 --- a/source/games/blood/src/animatesprite.cpp +++ b/source/games/blood/src/animatesprite.cpp @@ -120,7 +120,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF int perc = (100 * owneractor->xspr.data3) / kMaxPatrolSpotValue; int width = (94 * owneractor->xspr.data3) / kMaxPatrolSpotValue; - int top, bottom; + double top, bottom; GetSpriteExtents(pTSprite, &top, &bottom); auto pNSprite2 = viewInsertTSprite(tsprites, pTSprite->sectp, 32767, pTSprite); @@ -135,7 +135,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF if (perc >= 75) pNSprite2->pal = 0; else if (perc >= 50) pNSprite2->pal = 6; - pNSprite2->set_int_z(top - 2048); + pNSprite2->pos.Z = (top - 8); pNSprite2->shade = -128; break; } @@ -168,7 +168,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF case kViewEffectFlag: case kViewEffectBigFlag: { - int top, bottom; + double top, bottom; GetSpriteExtents(pTSprite, &top, &bottom); auto pNSprite = viewInsertTSprite(tsprites, pTSprite->sectp, 32767, pTSprite); if (!pNSprite) @@ -176,7 +176,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF pNSprite->shade = -128; pNSprite->pal = 0; - pNSprite->set_int_z(top); + pNSprite->pos.Z = top; if (nViewEffect == kViewEffectFlag) pNSprite->xrepeat = pNSprite->yrepeat = 24; else @@ -229,14 +229,14 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF if (!pNSprite) break; - int top, bottom; + double top, bottom; GetSpriteExtents(pTSprite, &top, &bottom); + pNSprite->pos.Z = top; pNSprite->shade = 26; pNSprite->pal = 0; pNSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT; pNSprite->xrepeat = pNSprite->yrepeat = 24; pNSprite->picnum = 626; - pNSprite->set_int_z(top); break; } case kViewEffectTrail: @@ -296,9 +296,9 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF if (!pNSprite) break; - int top, bottom; + double top, bottom; GetSpriteExtents(pTSprite, &top, &bottom); - pNSprite->set_int_z(top); + pNSprite->pos.Z = top; if (IsDudeSprite(pTSprite)) pNSprite->picnum = 672; else @@ -315,9 +315,9 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF if (!pNSprite) break; - int top, bottom; + double top, bottom; GetSpriteExtents(pTSprite, &top, &bottom); - pNSprite->set_int_z(bottom); + pNSprite->pos.Z = bottom; if (pTSprite->type >= kDudeBase && pTSprite->type < kDudeMax) pNSprite->picnum = 672; else @@ -334,9 +334,9 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF if (!pNSprite) break; - int top, bottom; + double top, bottom; GetSpriteExtents(pTSprite, &top, &bottom); - pNSprite->set_int_z(top); + pNSprite->pos.Z = top; pNSprite->picnum = 2101; pNSprite->shade = -128; pNSprite->xrepeat = pNSprite->yrepeat = (tileWidth(pTSprite->picnum) * pTSprite->xrepeat) / 32; @@ -348,9 +348,9 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF if (!pNSprite) break; - int top, bottom; + double top, bottom; GetSpriteExtents(pTSprite, &top, &bottom); - pNSprite->set_int_z(bottom); + pNSprite->pos.Z = bottom; pNSprite->picnum = 2101; pNSprite->shade = -128; pNSprite->xrepeat = pNSprite->yrepeat = (tileWidth(pTSprite->picnum) * pTSprite->xrepeat) / 32; @@ -361,7 +361,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF auto pNSprite = viewInsertTSprite(tsprites, pTSprite->sectp, 32767, pTSprite); if (!pNSprite) break; - pNSprite->set_int_z(getflorzofslopeptr(pTSprite->sectp, pNSprite->int_pos().X, pNSprite->int_pos().Y)); + pNSprite->pos.Z = getflorzofslopeptrf(pTSprite->sectp, pNSprite->pos); if ((pNSprite->sectp->floorpicnum >= 4080) && (pNSprite->sectp->floorpicnum <= 4095) && !VanillaMode()) // if floor has ror, find actual floor { DVector3 cPos = pNSprite->pos; diff --git a/source/games/blood/src/db.h b/source/games/blood/src/db.h index b020bd083..48e52256d 100644 --- a/source/games/blood/src/db.h +++ b/source/games/blood/src/db.h @@ -92,6 +92,14 @@ void GetSpriteExtents(spritetypebase const* const pSprite, int* top, int* bottom } } +inline void GetSpriteExtents(spritetypebase const* const actor, double* top, double* bottom) +{ + int t, b; + GetSpriteExtents(actor, &t, &b); + *top = t * zinttoworld; + *bottom = b * zinttoworld; +} + struct BloodSpawnSpriteDef : public SpawnSpriteDef { TArray xspr; diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index d3939f2c8..0ca5f82f0 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -3191,9 +3191,9 @@ void useTeleportTarget(DBloodActor* sourceactor, DBloodActor* actor) ChangeActorSect(actor, sourceactor->sector()); actor->spr.pos.XY() =sourceactor->spr.pos.XY(); - int zTop, zBot; + double zTop, zBot; GetActorExtents(sourceactor, &zTop, &zBot); - actor->set_int_z(zBot); + actor->spr.pos.Z = zBot; clampSprite(actor, 0x01); @@ -6689,22 +6689,23 @@ void useIncDecGen(DBloodActor* sourceactor, int objType, sectortype* destSect, w void sprite2sectorSlope(DBloodActor* actor, sectortype* pSector, int rel, bool forcez) { - int slope = 0, z = 0; + int slope = 0; + double z = 0; switch (rel) { default: - z = getflorzofslopeptr(actor->sector(), actor->spr.pos); + z = getflorzofslopeptrf(actor->sector(), actor->spr.pos); if ((actor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR) && actor->hasX() && actor->xspr.Touch) z--; slope = pSector->floorheinum; break; case 1: - z = getceilzofslopeptr(actor->sector(), actor->spr.pos); + z = getceilzofslopeptrf(actor->sector(), actor->spr.pos); if ((actor->spr.cstat & CSTAT_SPRITE_ALIGNMENT_FLOOR) && actor->hasX() && actor->xspr.Touch) z++; slope = pSector->ceilingheinum; break; } spriteSetSlope(actor, slope); - if (forcez) actor->set_int_z(z); + if (forcez) actor->spr.pos.Z = z; } //--------------------------------------------------------------------------- diff --git a/source/games/blood/src/warp.cpp b/source/games/blood/src/warp.cpp index c62cb1dd6..8ce45fa22 100644 --- a/source/games/blood/src/warp.cpp +++ b/source/games/blood/src/warp.cpp @@ -139,7 +139,7 @@ void warpInit(TArray& actors) actor->sector()->upperLink = actor; actor->spr.cstat |= CSTAT_SPRITE_INVISIBLE; actor->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL; - actor->set_int_z(getflorzofslopeptr(actor->sector(), actor->spr.pos)); + actor->spr.pos.Z = getflorzofslopeptrf(actor->sector(), actor->spr.pos); break; case kMarkerLowWater: case kMarkerLowStack: @@ -147,7 +147,7 @@ void warpInit(TArray& actors) actor->sector()->lowerLink = actor; actor->spr.cstat |= CSTAT_SPRITE_INVISIBLE; actor->spr.cstat &= ~CSTAT_SPRITE_BLOCK_ALL; - actor->set_int_z(getceilzofslopeptr(actor->sector(), actor->spr.pos)); + actor->spr.pos.Z = getceilzofslopeptrf(actor->sector(), actor->spr.pos); break; } }