diff --git a/source/core/maptypes.h b/source/core/maptypes.h index c2dd0ec83..15f4298d3 100644 --- a/source/core/maptypes.h +++ b/source/core/maptypes.h @@ -148,6 +148,7 @@ 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_BIT1 = 4096, }; diff --git a/source/games/blood/src/_polymost.cpp b/source/games/blood/src/_polymost.cpp index 6a6d5c18c..80577df0e 100644 --- a/source/games/blood/src/_polymost.cpp +++ b/source/games/blood/src/_polymost.cpp @@ -142,7 +142,7 @@ RORHACK: } else { - gView->pSprite->cstat |= 514; + gView->pSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP; } renderDrawRoomsQ16(cX, cY, cZ, cA.asq16(), cH.asq16() + deliriumPitchI, nSectnum, false); @@ -267,7 +267,7 @@ void DrawMirrors(int x, int y, int z, fixed_t a, fixed_t horiz, int smooth, int } else { - gPlayer[viewPlayer].pSprite->cstat |= 514; + gPlayer[viewPlayer].pSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP; } } renderDrawRoomsQ16(x + mirror[i].dx, y + mirror[i].dy, z + mirror[i].dz, a, horiz, nSector, true); @@ -299,7 +299,7 @@ void DrawMirrors(int x, int y, int z, fixed_t a, fixed_t horiz, int smooth, int } else { - gPlayer[viewPlayer].pSprite->cstat |= 514; + gPlayer[viewPlayer].pSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP; } } renderDrawRoomsQ16(x + mirror[i].dx, y + mirror[i].dy, z + mirror[i].dz, a, horiz, nSector, true); diff --git a/source/games/blood/src/actor.cpp b/source/games/blood/src/actor.cpp index c512394d5..f0c84993f 100644 --- a/source/games/blood/src/actor.cpp +++ b/source/games/blood/src/actor.cpp @@ -2474,7 +2474,7 @@ static void actInitDudes() { case kDudeModernCustom: case kDudeModernCustomBurning: - pSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_HITSCAN | CSTAT_SPRITE_BLOCK; + pSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_ALL; seqStartId = genDudeSeqStartId(act); // Custom Dude stores its SEQ in data2 pXSprite->sysData1 = pXSprite->data3; // move sndStartId to sysData1, because data3 used by the game; pXSprite->data3 = 0; @@ -2485,12 +2485,12 @@ static void actInitDudes() [[fallthrough]]; default: pSprite->clipdist = dudeInfo[nType].clipdist; - pSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_HITSCAN | CSTAT_SPRITE_BLOCK; + pSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_ALL; break; } #else pSprite->clipdist = dudeInfo[nType].clipdist; - pSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_HITSCAN | CSTAT_SPRITE_BLOCK; + pSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_ALL; #endif act->xvel = act->yvel = act->zvel = 0; diff --git a/source/games/blood/src/aiunicult.cpp b/source/games/blood/src/aiunicult.cpp index 70298c07d..fc5d0478a 100644 --- a/source/games/blood/src/aiunicult.cpp +++ b/source/games/blood/src/aiunicult.cpp @@ -361,11 +361,11 @@ static void ThrowThing(DBloodActor* actor, bool impact) case kModernThingThrowableRock: pSpawned->picnum = gCustomDudeDebrisPics[Random(5)]; pSpawned->xrepeat = pSpawned->yrepeat = 24 + Random(42); - pSpawned->cstat |= 0x0001; + pSpawned->cstat |= CSTAT_SPRITE_BLOCK; pSpawned->pal = 5; - if (Chance(0x5000)) pSpawned->cstat |= 0x0004; - if (Chance(0x5000)) pSpawned->cstat |= 0x0008; + if (Chance(0x5000)) pSpawned->cstat |= CSTAT_SPRITE_XFLIP; + if (Chance(0x5000)) pSpawned->cstat |= CSTAT_SPRITE_YFLIP; if (pSpawned->xrepeat > 60) pXSpawned->data1 = 43; else if (pSpawned->xrepeat > 40) pXSpawned->data1 = 33; @@ -1956,7 +1956,8 @@ DBloodActor* genDudeSpawn(DBloodActor* source, DBloodActor* actor, int nDist) pDude->type = nType; pDude->ang = nAngle; vec3_t pos = { x, y, z }; SetActor(spawned, &pos); - pDude->cstat |= 0x1101; pDude->clipdist = dudeInfo[nType - kDudeBase].clipdist; + pDude->cstat |= CSTAT_SPRITE_BLOCK_ALL | CSTAT_SPRITE_BLOOD_BIT1; + pDude->clipdist = dudeInfo[nType - kDudeBase].clipdist; // inherit weapon, seq and sound settings. pXDude->data1 = pXSource->data1; diff --git a/source/games/blood/src/animatesprite.cpp b/source/games/blood/src/animatesprite.cpp index a9a9dfc4d..dbe95c5e5 100644 --- a/source/games/blood/src/animatesprite.cpp +++ b/source/games/blood/src/animatesprite.cpp @@ -283,7 +283,7 @@ static tspritetype *viewAddEffect(tspritetype* tsprite, int& spritesortcnt, int pNSprite->picnum = pTSprite->picnum; pNSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT; if (i < 2) - pNSprite->cstat |= 514; + pNSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP; pNSprite->shade = ClipLow(pTSprite->shade-16, -128); pNSprite->xrepeat = pTSprite->xrepeat; pNSprite->yrepeat = pTSprite->yrepeat; @@ -420,7 +420,7 @@ static tspritetype *viewAddEffect(tspritetype* tsprite, int& spritesortcnt, int pNSprite->shade = ((pTSprite->z-pSector->ceilingz)>>8)-64; pNSprite->pal = 2; pNSprite->xrepeat = pNSprite->yrepeat = 64; - pNSprite->cstat |= 106; + pNSprite->cstat |= CSTAT_SPRITE_ONE_SIDE | CSTAT_SPRITE_ALIGNMENT_FLOOR | CSTAT_SPRITE_YFLIP | CSTAT_SPRITE_TRANSLUCENT; pNSprite->ang = pTSprite->ang; pNSprite->ownerActor = pTSprite->ownerActor; break; @@ -440,7 +440,7 @@ static tspritetype *viewAddEffect(tspritetype* tsprite, int& spritesortcnt, int pNSprite->shade = nShade-32; pNSprite->pal = 2; pNSprite->xrepeat = pNSprite->yrepeat = nShade; - pNSprite->cstat |= 98; + pNSprite->cstat |= CSTAT_SPRITE_ONE_SIDE | CSTAT_SPRITE_ALIGNMENT_FLOOR | CSTAT_SPRITE_TRANSLUCENT; pNSprite->ang = pTSprite->ang; pNSprite->ownerActor = pTSprite->ownerActor; break; @@ -453,7 +453,7 @@ static tspritetype *viewAddEffect(tspritetype* tsprite, int& spritesortcnt, int pNSprite->z = pTSprite->z; if (gDetail > 1) - pNSprite->cstat |= 514; + pNSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP; pNSprite->shade = ClipLow(pTSprite->shade-32, -128); pNSprite->xrepeat = pTSprite->xrepeat; pNSprite->yrepeat = 64; @@ -483,7 +483,7 @@ static tspritetype *viewAddEffect(tspritetype* tsprite, int& spritesortcnt, int if (cl_showweapon == 2 && r_voxels && nVoxel != -1) { pNSprite->ang = (gView->pSprite->ang + 512) & 2047; // always face viewer - pNSprite->cstat |= 48; + pNSprite->cstat |= CSTAT_SPRITE_ALIGNMENT_SLAB; pNSprite->cstat &= ~CSTAT_SPRITE_YFLIP; pNSprite->picnum = nVoxel; if (pPlayer->curWeapon == kWeapLifeLeech) // position lifeleech behind player @@ -626,8 +626,8 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in { if ((pTSprite->flags&kHitagRespawn) == 0) { - pTSprite->cstat |= 48; - pTSprite->cstat &= ~(4|8); + pTSprite->cstat |= CSTAT_SPRITE_ALIGNMENT_SLAB; + pTSprite->cstat &= ~(CSTAT_SPRITE_XFLIP | CSTAT_SPRITE_YFLIP); pTSprite->yoffset += tileTopOffset(pTSprite->picnum); pTSprite->picnum = voxelIndex[pTSprite->picnum]; if ((picanm[nTile].extra&7) == 7) @@ -701,7 +701,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in pTSprite->yrepeat = 48; pTSprite->shade = -128; pTSprite->picnum = 2272 + 2*pTXSprite->respawnPending; - pTSprite->cstat &= ~514; + pTSprite->cstat &= ~(CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP); if (((IsItemSprite(pTSprite) || IsAmmoSprite(pTSprite)) && gGameOptions.nItemSettings == 2) || (IsWeaponSprite(pTSprite) && gGameOptions.nWeaponSettings == 3)) { @@ -770,11 +770,11 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in break; case kItemFlagA: pTSprite->pal = 10; - pTSprite->cstat |= 1024; + pTSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT2; break; case kItemFlagB: pTSprite->pal = 7; - pTSprite->cstat |= 1024; + pTSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT2; break; default: if (pTSprite->type >= kItemKeySkull && pTSprite->type < kItemKeyMax) @@ -789,7 +789,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in switch (pTSprite->type) { case kMissileTeslaAlt: pTSprite->yrepeat = 128; - pTSprite->cstat |= 32; + pTSprite->cstat |= CSTAT_SPRITE_ALIGNMENT_FLOOR; break; case kMissileTeslaRegular: viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectTesla); diff --git a/source/games/blood/src/callback.cpp b/source/games/blood/src/callback.cpp index 036a62173..185f84d18 100644 --- a/source/games/blood/src/callback.cpp +++ b/source/games/blood/src/callback.cpp @@ -252,7 +252,7 @@ void Respawn(DBloodActor* actor, sectortype*) // 9 { int nType = pSprite->type-kDudeBase; pSprite->pos = actor->basePoint; - pSprite->cstat |= 0x1101; + pSprite->cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_ALL; #ifdef NOONE_EXTENSIONS if (!gModernMap || pXSprite->sysData2 <= 0) pXSprite->health = dudeInfo[pSprite->type - kDudeBase].startHealth << 4; else pXSprite->health = ClipRange(pXSprite->sysData2 << 4, 1, 65535); @@ -283,7 +283,7 @@ void Respawn(DBloodActor* actor, sectortype*) // 9 pXSprite->key = 0; } else if (pSprite->type == kThingTNTBarrel) { pSprite->cstat |= CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN; - pSprite->cstat &= (unsigned short)~CSTAT_SPRITE_INVISIBLE; + pSprite->cstat &= ~CSTAT_SPRITE_INVISIBLE; } gFX.fxSpawnActor(FX_29, pSprite->sector(), pSprite->x, pSprite->y, pSprite->z, 0); diff --git a/source/games/blood/src/fx.cpp b/source/games/blood/src/fx.cpp index fac6491e5..078aade25 100644 --- a/source/games/blood/src/fx.cpp +++ b/source/games/blood/src/fx.cpp @@ -42,7 +42,7 @@ struct FXDATA { int16_t picnum; // picnum uint8_t xrepeat; // xrepeat uint8_t yrepeat; // yrepeat - int16_t cstat; // cstat + ESpriteFlags cstat; // cstat int8_t shade; // shade uint8_t pal; // pal }; @@ -71,10 +71,10 @@ FXDATA gFXData[] = { { kCallbackNone, 1, 0, 3, 58254, 1024, 480, 3269, 32, 32, 0, 0, 0 }, { kCallbackNone, 1, 0, 3, 58254, 1024, 480, 3273, 32, 32, 0, 0, 0 }, { kCallbackNone, 1, 0, 3, 58254, 1024, 480, 3277, 32, 32, 0, 0, 0 }, - { kCallbackNone, 2, 0, 1, -27962, 8192, 600, 1128, 16, 16, 514, -16, 0 }, // bubble 1 - { kCallbackNone, 2, 0, 1, -18641, 8192, 600, 1128, 12, 12, 514, -16, 0 }, // bubble 2 - { kCallbackNone, 2, 0, 1, -9320, 8192, 600, 1128, 8, 8, 514, -16, 0 }, // bubble 3 - { kCallbackNone, 2, 0, 1, -18641, 8192, 600, 1131, 32, 32, 514, -16, 0 }, + { kCallbackNone, 2, 0, 1, -27962, 8192, 600, 1128, 16, 16, CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP, -16, 0 }, // bubble 1 + { kCallbackNone, 2, 0, 1, -18641, 8192, 600, 1128, 12, 12, CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP, -16, 0 }, // bubble 2 + { kCallbackNone, 2, 0, 1, -9320, 8192, 600, 1128, 8, 8, CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP, -16, 0 }, // bubble 3 + { kCallbackNone, 2, 0, 1, -18641, 8192, 600, 1131, 32, 32, CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP, -16, 0 }, { kCallbackFXBloodBits, 2, 0, 3, 27962, 4096, 480, 733, 32, 32, 0, -16, 0 }, { kCallbackNone, 1, 0, 3, 18641, 4096, 120, 2261, 12, 12, 0, -128, 0 }, { kCallbackNone, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, @@ -84,14 +84,14 @@ FXDATA gFXData[] = { { kCallbackNone, 1, 56, 1, -13981, 5120, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackNone, 1, 57, 1, 0, 2048, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackNone, 1, 58, 1, 0, 2048, 0, 0, 0, 0, 0, 0, 0 }, - { kCallbackNone, 2, 0, 0, 0, 0, 960, 956, 32, 32, 610, 0, 0 }, + { kCallbackNone, 2, 0, 0, 0, 0, 960, 956, 32, 32, CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP | CSTAT_SPRITE_ONE_SIDE | CSTAT_SPRITE_ALIGNMENT_FLOOR, 0, 0 }, { kCallbackFXBouncingSleeve, 2, 62, 0, 46603, 1024, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackFXBouncingSleeve, 2, 63, 0, 46603, 1024, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackFXBouncingSleeve, 2, 64, 0, 46603, 1024, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackFXBouncingSleeve, 2, 65, 0, 46603, 1024, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackFXBouncingSleeve, 2, 66, 0, 46603, 1024, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackFXBouncingSleeve, 2, 67, 0, 46603, 1024, 0, 0, 0, 0, 0, 0, 0 }, - { kCallbackNone, 1, 0, 3, 0, 0, 0, 838, 16, 16, 80, -8, 0 }, + { kCallbackNone, 1, 0, 3, 0, 0, 0, 838, 16, 16, CSTAT_SPRITE_ONE_SIDE | CSTAT_SPRITE_ALIGNMENT_WALL, -8, 0 }, { kCallbackNone, 0, 0, 3, 34952, 8192, 0, 2078, 64, 64, 0, -8, 0 }, { kCallbackNone, 0, 0, 3, 34952, 8192, 0, 1106, 64, 64, 0, -8, 0 }, { kCallbackNone, 0, 0, 3, 58254, 3328, 480, 2406, 48, 48, 0, 0, 0 }, @@ -100,10 +100,10 @@ FXDATA gFXData[] = { { kCallbackNone, 2, 11, 3, -256, 8192, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackNone, 2, 11, 3, 0, 8192, 0, 0, 0, 0, 0, 0, 0 }, { kCallbackNone, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, - { kCallbackNone, 1, 30, 3, 0, 0, 0, 0, 40, 40, 80, -8, 0 }, + { kCallbackNone, 1, 30, 3, 0, 0, 0, 0, 40, 40, CSTAT_SPRITE_ONE_SIDE | CSTAT_SPRITE_ALIGNMENT_WALL, -8, 0 }, { kCallbackFXPodBloodSplat, 2, 0, 3, 27962, 4096, 480, 4023, 32, 32, 0, -16, 0 }, { kCallbackFXPodBloodSplat, 2, 0, 3, 27962, 4096, 480, 4028, 32, 32, 0, -16, 0 }, - { kCallbackNone, 2, 0, 0, 0, 0, 480, 926, 32, 32, 610, -12, 0 }, + { kCallbackNone, 2, 0, 0, 0, 0, 480, 926, 32, 32, CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP | CSTAT_SPRITE_ONE_SIDE | CSTAT_SPRITE_ALIGNMENT_FLOOR, -12, 0 }, { kCallbackNone, 1, 70, 1, -13981, 5120, 0, 0, 0, 0, 0, 0, 0 } }; diff --git a/source/games/blood/src/nnexts.cpp b/source/games/blood/src/nnexts.cpp index 679aa813d..94075de0f 100644 --- a/source/games/blood/src/nnexts.cpp +++ b/source/games/blood/src/nnexts.cpp @@ -285,7 +285,7 @@ static DBloodActor* nnExtSpawnDude(DBloodActor* sourceActor, DBloodActor* origin pDude->type = nType; pDude->ang = angle; - pDude->cstat |= 0x1101; + pDude->cstat |= CSTAT_SPRITE_BLOOD_BIT1 | CSTAT_SPRITE_BLOCK_ALL; pDude->clipdist = getDudeInfo(nType)->clipdist; pXDude->respawn = 1;