mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-20 18:42:26 +00:00
- the rest of Blood's flags.
This commit is contained in:
parent
092cb1e5a3
commit
13186cec6d
6 changed files with 29 additions and 21 deletions
|
@ -148,8 +148,11 @@ enum ESpriteBits // names mostly from SW.
|
|||
CSTAT_SPRITE_BREAKABLE = CSTAT_SPRITE_BLOCK_HITSCAN|CSTAT_SPRITE_BLOCK_MISSILE,
|
||||
|
||||
// Blood flags
|
||||
CSTAT_SPRITE_BLOOD_BIT2 = 1024,
|
||||
CSTAT_SPRITE_BLOOD_BIT2 = 1024, // Both of these get set but not checked directly, so no idea what they mean...
|
||||
CSTAT_SPRITE_BLOOD_BIT1 = 4096,
|
||||
CSTAT_SPRITE_MOVE_FORWARD = 8192,
|
||||
CSTAT_SPRITE_MOVE_REVERSE = 16384,
|
||||
CSTAT_SPRITE_MOVE_MASK = CSTAT_SPRITE_MOVE_FORWARD | CSTAT_SPRITE_MOVE_REVERSE,
|
||||
};
|
||||
|
||||
typedef TFlags<ESpriteBits, uint16_t> ESpriteFlags;
|
||||
|
|
|
@ -135,7 +135,7 @@ RORHACK:
|
|||
ror_status[i] = testgotpic(4080 + i);
|
||||
fixed_t deliriumPitchI = interpolatedvalue(IntToFixed(deliriumPitchO), IntToFixed(deliriumPitch), gInterpolate);
|
||||
DrawMirrors(cX, cY, cZ, cA.asq16(), cH.asq16() + deliriumPitchI, int(gInterpolate), gViewIndex);
|
||||
int bakCstat = gView->pSprite->cstat;
|
||||
auto bakCstat = gView->pSprite->cstat;
|
||||
if (gViewPos == 0)
|
||||
{
|
||||
gView->pSprite->cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||
|
@ -257,10 +257,10 @@ void DrawMirrors(int x, int y, int z, fixed_t a, fixed_t horiz, int smooth, int
|
|||
{
|
||||
r_rorphase = 1;
|
||||
int nSector = mirror[i].link;
|
||||
int bakCstat = 0;
|
||||
ESpriteFlags bakCstat = 0;
|
||||
if (viewPlayer >= 0)
|
||||
{
|
||||
bakCstat = gPlayer[viewPlayer].pSprite->cstat;
|
||||
bakCstat = ESpriteFlags::FromInt(gPlayer[viewPlayer].pSprite->cstat);
|
||||
if (gViewPos == 0)
|
||||
{
|
||||
gPlayer[viewPlayer].pSprite->cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||
|
@ -289,10 +289,10 @@ void DrawMirrors(int x, int y, int z, fixed_t a, fixed_t horiz, int smooth, int
|
|||
{
|
||||
r_rorphase = 1;
|
||||
int nSector = mirror[i].link;
|
||||
int bakCstat = 0;
|
||||
ESpriteFlags bakCstat = 0;
|
||||
if (viewPlayer >= 0)
|
||||
{
|
||||
bakCstat = gPlayer[viewPlayer].pSprite->cstat;
|
||||
bakCstat = ESpriteFlags::FromInt(gPlayer[viewPlayer].pSprite->cstat);
|
||||
if (gViewPos == 0)
|
||||
{
|
||||
gPlayer[viewPlayer].pSprite->cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||
|
|
|
@ -413,14 +413,14 @@ int VectorScan(DBloodActor *actor, int nOffset, int nZOffset, int dx, int dy, in
|
|||
spritetype *pOther = &gHitInfo.actor()->s();
|
||||
if ((pOther->flags & 8) && !(ac & 1))
|
||||
return 3;
|
||||
if ((pOther->cstat & 0x30) != 0)
|
||||
if ((pOther->cstat & CSTAT_SPRITE_ALIGNMENT_MASK) != 0)
|
||||
return 3;
|
||||
int nPicnum = pOther->picnum;
|
||||
if (tileWidth(nPicnum) == 0 || tileHeight(nPicnum) == 0)
|
||||
return 3;
|
||||
int height = (tileHeight(nPicnum)*pOther->yrepeat)<<2;
|
||||
int otherZ = pOther->z;
|
||||
if (pOther->cstat & 0x80)
|
||||
if (pOther->cstat & CSTAT_SPRITE_YCENTER)
|
||||
otherZ += height / 2;
|
||||
int nOffset = tileTopOffset(nPicnum);
|
||||
if (nOffset)
|
||||
|
|
|
@ -706,13 +706,14 @@ void nnExtInitModernStuff(TArray<DBloodActor*>& actors)
|
|||
pXSprite->targetX = pXSprite->targetY = pXSprite->targetZ = pXSprite->sysData2 = -1;
|
||||
actor->SetTarget(nullptr);
|
||||
ChangeActorStat(actor, kStatModernCondition);
|
||||
int oldStat = pSprite->cstat; pSprite->cstat = 0x30;
|
||||
auto oldStat = pSprite->cstat;
|
||||
pSprite->cstat = CSTAT_SPRITE_ALIGNMENT_SLOPE;
|
||||
|
||||
if (oldStat & CSTAT_SPRITE_BLOCK)
|
||||
pSprite->cstat |= CSTAT_SPRITE_BLOCK;
|
||||
|
||||
if (oldStat & 0x2000) pSprite->cstat |= 0x2000;
|
||||
else if (oldStat & 0x4000) pSprite->cstat |= 0x4000;
|
||||
if (oldStat & CSTAT_SPRITE_MOVE_FORWARD) pSprite->cstat |= CSTAT_SPRITE_MOVE_FORWARD;
|
||||
else if (oldStat & CSTAT_SPRITE_MOVE_REVERSE) pSprite->cstat |= CSTAT_SPRITE_MOVE_REVERSE;
|
||||
|
||||
pSprite->cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||
break;
|
||||
|
@ -1869,7 +1870,7 @@ void debrisMove(int listIndex)
|
|||
else if (floorColl.type == kHitSprite)
|
||||
{
|
||||
|
||||
if ((floorColl.actor()->s().cstat & 0x30) == 0)
|
||||
if ((floorColl.actor()->s().cstat & CSTAT_SPRITE_ALIGNMENT_MASK) == 0)
|
||||
{
|
||||
actor->xvel += MulScale(4, pSprite->x - floorColl.actor()->s().x, 2);
|
||||
actor->yvel += MulScale(4, pSprite->y - floorColl.actor()->s().y, 2);
|
||||
|
@ -2805,16 +2806,19 @@ void usePropertiesChanger(DBloodActor* sourceactor, int objType, sectortype* pSe
|
|||
// data4 = sprite cstat
|
||||
if (valueIsBetween(pXSource->data4, -1, 65535))
|
||||
{
|
||||
old = pSprite->cstat;
|
||||
auto old = pSprite->cstat;
|
||||
|
||||
// set new cstat
|
||||
if ((pSource->flags & kModernTypeFlag1)) pSprite->cstat |= pXSource->data4; // relative
|
||||
else pSprite->cstat = pXSource->data4 & 0xffff; // absolute
|
||||
|
||||
// and handle exceptions
|
||||
if ((old & 0x1000) && !(pSprite->cstat & 0x1000)) pSprite->cstat |= 0x1000; //kSpritePushable
|
||||
if ((old & CSTAT_SPRITE_YCENTER) && !(pSprite->cstat & CSTAT_SPRITE_YCENTER)) pSprite->cstat |= CSTAT_SPRITE_YCENTER;
|
||||
if ((old & CSTAT_SPRITE_BLOOD_BIT1)) pSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT1; //kSpritePushable
|
||||
if ((old & CSTAT_SPRITE_YCENTER)) pSprite->cstat |= CSTAT_SPRITE_YCENTER;
|
||||
|
||||
pSprite->cstat |= (old & CSTAT_SPRITE_MOVE_MASK);
|
||||
#if 0
|
||||
// looks very broken.
|
||||
if (old & 0x6000)
|
||||
{
|
||||
if (!(pSprite->cstat & 0x6000))
|
||||
|
@ -2824,6 +2828,7 @@ void usePropertiesChanger(DBloodActor* sourceactor, int objType, sectortype* pSe
|
|||
else if ((old & 0x2000) && !(pSprite->cstat & 0x2000)) pSprite->cstat |= 0x2000; // kSpriteMoveForward, kSpriteMoveFloor
|
||||
else if ((old & 0x4000) && !(pSprite->cstat & 0x4000)) pSprite->cstat |= 0x4000; // kSpriteMoveReverse, kSpriteMoveCeiling
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -3241,8 +3246,8 @@ void useSectorWindGen(DBloodActor* sourceactor, sectortype* pSector)
|
|||
pSource->ang = nnExtRandom(-kAng360, kAng360) & 2047;
|
||||
}
|
||||
}
|
||||
else if (pSource->cstat & 0x2000) pSource->ang += pXSource->data4;
|
||||
else if (pSource->cstat & 0x4000) pSource->ang -= pXSource->data4;
|
||||
else if (pSource->cstat & CSTAT_SPRITE_MOVE_FORWARD) pSource->ang += pXSource->data4;
|
||||
else if (pSource->cstat & CSTAT_SPRITE_MOVE_REVERSE) pSource->ang -= pXSource->data4;
|
||||
else if (pXSource->sysData1 == 0)
|
||||
{
|
||||
if ((ang += pXSource->data4) >= kAng180) pXSource->sysData1 = 1;
|
||||
|
@ -3323,7 +3328,7 @@ void useSpriteDamager(DBloodActor* sourceactor, int objType, sectortype* targSec
|
|||
GetActorExtents(sourceactor, &top, &bottom);
|
||||
floor = (bottom >= pSector->floorz);
|
||||
ceil = (top <= pSector->ceilingz);
|
||||
wall = (pSource->cstat & 0x10);
|
||||
wall = (pSource->cstat & CSTAT_SPRITE_ALIGNMENT_WALL);
|
||||
enter = (!floor && !ceil && !wall);
|
||||
BloodSectIterator it(targSect);
|
||||
while (auto iactor = it.Next())
|
||||
|
|
|
@ -684,7 +684,7 @@ void playerStart(int nPlayer, int bNewLevel)
|
|||
pXSprite->burnTime = 0;
|
||||
actor->SetBurnSource(nullptr);
|
||||
pPlayer->pXSprite->health = pDudeInfo->startHealth<<4;
|
||||
pPlayer->pSprite->cstat &= (unsigned short)~32768;
|
||||
pPlayer->pSprite->cstat &= ~CSTAT_SPRITE_INVISIBLE;
|
||||
pPlayer->bloodlust = 0;
|
||||
pPlayer->horizon.horiz = pPlayer->horizon.horizoff = q16horiz(0);
|
||||
pPlayer->slope = 0;
|
||||
|
|
|
@ -170,7 +170,7 @@ void CalcOtherPosition(spritetype *pSprite, int *pX, int *pY, int *pZ, sectortyp
|
|||
int vY = MulScale(-Sin(nAng), 1280, 30);
|
||||
int vZ = FixedToInt(MulScale(zm, 1280, 3))-(16<<8);
|
||||
int bakCstat = pSprite->cstat;
|
||||
pSprite->cstat &= ~256;
|
||||
pSprite->cstat &= ~CSTAT_SPRITE_BLOCK_HITSCAN;
|
||||
assert(validSectorIndex(*vsectnum));
|
||||
FindSector(*pX, *pY, *pZ, vsectnum);
|
||||
int nHSector;
|
||||
|
@ -669,7 +669,7 @@ void viewDrawScreen(bool sceneonly)
|
|||
if (testnewrenderer)
|
||||
{
|
||||
fixedhoriz deliriumPitchI = q16horiz(interpolatedvalue(IntToFixed(deliriumPitchO), IntToFixed(deliriumPitch), gInterpolate));
|
||||
int bakCstat = gView->pSprite->cstat;
|
||||
auto bakCstat = gView->pSprite->cstat;
|
||||
gView->pSprite->cstat |= (gViewPos == 0) ? CSTAT_SPRITE_INVISIBLE : CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP;
|
||||
render_drawrooms(gView->pSprite, { cX, cY, cZ }, sectnum(pSector), cA, cH + deliriumPitchI, rotscrnang, gInterpolate);
|
||||
gView->pSprite->cstat = bakCstat;
|
||||
|
|
Loading…
Reference in a new issue