- xsprite in animatesprite.cpp.

This commit is contained in:
Christoph Oelckers 2021-12-23 00:26:52 +01:00
parent 773d7d118f
commit 91214b5350
2 changed files with 21 additions and 28 deletions

View file

@ -131,9 +131,8 @@ static tspritetype *viewAddEffect(tspritetype* tsprite, int& spritesortcnt, int
switch (nViewEffect) switch (nViewEffect)
{ {
case kViewEffectSpotProgress: { case kViewEffectSpotProgress: {
XSPRITE* pXSprite = &owneractor->x(); int perc = (100 * owneractor->xspr.data3) / kMaxPatrolSpotValue;
int perc = (100 * pXSprite->data3) / kMaxPatrolSpotValue; int width = (94 * owneractor->xspr.data3) / kMaxPatrolSpotValue;
int width = (94 * pXSprite->data3) / kMaxPatrolSpotValue;
int top, bottom; int top, bottom;
GetSpriteExtents(pTSprite, &top, &bottom); GetSpriteExtents(pTSprite, &top, &bottom);
@ -520,16 +519,11 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
{ {
tspritetype *pTSprite = &tsprite[nTSprite]; tspritetype *pTSprite = &tsprite[nTSprite];
auto owneractor = static_cast<DBloodActor*>(pTSprite->ownerActor); auto owneractor = static_cast<DBloodActor*>(pTSprite->ownerActor);
XSPRITE *pTXSprite = NULL;
if (owneractor->spr.detail > gDetail) if (owneractor->spr.detail > gDetail)
{ {
pTSprite->xrepeat = 0; pTSprite->xrepeat = 0;
continue; continue;
} }
if (owneractor->hasX())
{
pTXSprite = &owneractor->x();
}
int nTile = pTSprite->picnum; int nTile = pTSprite->picnum;
if (nTile < 0 || nTile >= kMaxTiles) if (nTile < 0 || nTile >= kMaxTiles)
{ {
@ -553,14 +547,14 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
int nAnim = 0; int nAnim = 0;
switch (picanm[nTile].extra & 7) { switch (picanm[nTile].extra & 7) {
case 0: case 0:
if (pTXSprite == nullptr) break; if (!owneractor->hasX()) break;
switch (pTSprite->type) { switch (pTSprite->type) {
case kSwitchToggle: case kSwitchToggle:
case kSwitchOneWay: case kSwitchOneWay:
if (pTXSprite->state) nAnim = 1; if (owneractor->xspr.state) nAnim = 1;
break; break;
case kSwitchCombo: case kSwitchCombo:
nAnim = pTXSprite->data1; nAnim = owneractor->xspr.data1;
break; break;
} }
break; break;
@ -601,7 +595,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
} }
case 3: case 3:
{ {
if (pTXSprite) if (owneractor->hasX())
{ {
if (owneractor->hit.florhit.type == kHitNone) if (owneractor->hit.florhit.type == kHitNone)
nAnim = 1; nAnim = 1;
@ -694,13 +688,12 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
} }
nShade += tileShade[pTSprite->picnum]; nShade += tileShade[pTSprite->picnum];
pTSprite->shade = ClipRange(nShade, -128, 127); pTSprite->shade = ClipRange(nShade, -128, 127);
if ((pTSprite->flags&kHitagRespawn) && pTSprite->ownerActor->spr.owner == 3) // Where does this 3 come from? Nothing sets it. if ((pTSprite->flags&kHitagRespawn) && pTSprite->ownerActor->spr.owner == 3 && owneractor->hasX()) // Where does this 3 come from? Nothing sets it.
{ {
assert(pTXSprite != NULL);
pTSprite->xrepeat = 48; pTSprite->xrepeat = 48;
pTSprite->yrepeat = 48; pTSprite->yrepeat = 48;
pTSprite->shade = -128; pTSprite->shade = -128;
pTSprite->picnum = 2272 + 2*pTXSprite->respawnPending; pTSprite->picnum = 2272 + 2* owneractor->xspr.respawnPending;
pTSprite->cstat &= ~(CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP); pTSprite->cstat &= ~(CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP);
if (((IsItemSprite(pTSprite) || IsAmmoSprite(pTSprite)) && gGameOptions.nItemSettings == 2) if (((IsItemSprite(pTSprite) || IsAmmoSprite(pTSprite)) && gGameOptions.nItemSettings == 2)
|| (IsWeaponSprite(pTSprite) && gGameOptions.nWeaponSettings == 3)) || (IsWeaponSprite(pTSprite) && gGameOptions.nWeaponSettings == 3))
@ -713,7 +706,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
} }
} }
if (spritesortcnt >= MAXSPRITESONSCREEN) continue; if (spritesortcnt >= MAXSPRITESONSCREEN) continue;
if (pTXSprite && pTXSprite->burnTime > 0) if (owneractor->hasX() && owneractor->xspr.burnTime > 0)
{ {
pTSprite->shade = ClipRange(pTSprite->shade-16-QRandom(8), -128, 127); pTSprite->shade = ClipRange(pTSprite->shade-16-QRandom(8), -128, 127);
} }
@ -733,7 +726,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
case kStatDecoration: { case kStatDecoration: {
switch (pTSprite->type) { switch (pTSprite->type) {
case kDecorationCandle: case kDecorationCandle:
if (!pTXSprite || pTXSprite->state == 1) { if (!owneractor->hasX() || owneractor->xspr.state == 1) {
pTSprite->shade = -128; pTSprite->shade = -128;
viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectPhase); viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectPhase);
} else { } else {
@ -741,7 +734,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
} }
break; break;
case kDecorationTorch: case kDecorationTorch:
if (!pTXSprite || pTXSprite->state == 1) { if (!owneractor->hasX() || owneractor->xspr.state == 1) {
pTSprite->picnum++; pTSprite->picnum++;
viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectTorchHigh); viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectTorchHigh);
} else { } else {
@ -757,13 +750,13 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
case kStatItem: { case kStatItem: {
switch (pTSprite->type) { switch (pTSprite->type) {
case kItemFlagABase: case kItemFlagABase:
if (pTXSprite && pTXSprite->state > 0 && gGameOptions.nGameType == 3) { if (owneractor->hasX() && owneractor->xspr.state > 0 && gGameOptions.nGameType == 3) {
auto pNTSprite = viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectBigFlag); auto pNTSprite = viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectBigFlag);
if (pNTSprite) pNTSprite->pal = 10; if (pNTSprite) pNTSprite->pal = 10;
} }
break; break;
case kItemFlagBBase: case kItemFlagBBase:
if (pTXSprite && pTXSprite->state > 0 && gGameOptions.nGameType == 3) { if (owneractor->hasX() && owneractor->xspr.state > 0 && gGameOptions.nGameType == 3) {
auto pNTSprite = viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectBigFlag); auto pNTSprite = viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectBigFlag);
if (pNTSprite) pNTSprite->pal = 7; if (pNTSprite) pNTSprite->pal = 7;
} }
@ -826,7 +819,7 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
} }
case kStatDude: case kStatDude:
{ {
if (pTSprite->type == kDudeHand && pTXSprite->aiState == &hand13A3B4) if (pTSprite->type == kDudeHand && owneractor->hasX() && owneractor->xspr.aiState == &hand13A3B4)
{ {
auto target = owneractor->GetTarget(); auto target = owneractor->GetTarget();
if (target && target->IsPlayerActor()) if (target && target->IsPlayerActor())
@ -896,22 +889,22 @@ void viewProcessSprites(tspritetype* tsprite, int& spritesortcnt, int32_t cX, in
} }
} }
if (gModernMap) { // add target spot indicator for patrol dudes if (gModernMap && owneractor->hasX()) { // add target spot indicator for patrol dudes
if (pTXSprite->dudeFlag4 && aiInPatrolState(pTXSprite->aiState) && pTXSprite->data3 > 0 && pTXSprite->data3 <= kMaxPatrolSpotValue) if (owneractor->xspr.dudeFlag4 && aiInPatrolState(owneractor->xspr.aiState) && owneractor->xspr.data3 > 0 && owneractor->xspr.data3 <= kMaxPatrolSpotValue)
viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectSpotProgress); viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectSpotProgress);
} }
break; break;
} }
case kStatTraps: { case kStatTraps: {
if (pTSprite->type == kTrapSawCircular) { if (pTSprite->type == kTrapSawCircular) {
if (pTXSprite->state) { if (owneractor->xspr.state) {
if (pTXSprite->data1) { if (owneractor->xspr.data1) {
pTSprite->picnum = 772; pTSprite->picnum = 772;
if (pTXSprite->data2) if (owneractor->xspr.data2)
viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectSpear); viewAddEffect(tsprite, spritesortcnt, nTSprite, kViewEffectSpear);
} }
} }
else if (pTXSprite->data1) pTSprite->picnum = 773; else if (owneractor->xspr.data1) pTSprite->picnum = 773;
else pTSprite->picnum = 656; else pTSprite->picnum = 656;
} }

View file

@ -147,7 +147,7 @@ TArray<DBloodActor*> SpawnActors(BloodSpawnSpriteDef& sprites)
if (sprites.sprites[i].extra > 0) if (sprites.sprites[i].extra > 0)
{ {
actor->addX(); actor->addX();
actor->x() = sprites.xspr[i]; actor->xspr = sprites.xspr[i];
} }
} }
return spawns; return spawns;