- asound.cpp, blood.cpp, db.cpp and parts of callback.cpp

This commit is contained in:
Christoph Oelckers 2021-12-22 23:45:56 +01:00
parent 40a307650d
commit a1f6b363fb
4 changed files with 30 additions and 42 deletions

View file

@ -48,23 +48,21 @@ void ambProcess(void)
BloodStatIterator it(kStatAmbience); BloodStatIterator it(kStatAmbience);
while (DBloodActor* actor = it.Next()) while (DBloodActor* actor = it.Next())
{ {
spritetype *pSprite = &actor->s(); if (actor->spr.owner < 0 || actor->spr.owner >= kMaxAmbChannel)
if (pSprite->owner < 0 || pSprite->owner >= kMaxAmbChannel)
continue; continue;
if (actor->hasX()) if (actor->hasX())
{ {
XSPRITE *pXSprite = &actor->x(); if (actor->xspr.state)
if (pXSprite->state)
{ {
int dx = pSprite->pos.X-gMe->pSprite->pos.X; int dx = actor->spr.pos.X-gMe->actor->spr.pos.X;
int dy = pSprite->pos.Y-gMe->pSprite->pos.Y; int dy = actor->spr.pos.Y-gMe->actor->spr.pos.Y;
int dz = pSprite->pos.Z-gMe->pSprite->pos.Z; int dz = actor->spr.pos.Z-gMe->actor->spr.pos.Z;
dx >>= 4; dx >>= 4;
dy >>= 4; dy >>= 4;
dz >>= 8; dz >>= 8;
int nDist = ksqrt(dx*dx+dy*dy+dz*dz); int nDist = ksqrt(dx*dx+dy*dy+dz*dz);
int vs = MulScale(pXSprite->data4, pXSprite->busy, 16); int vs = MulScale(actor->xspr.data4, actor->xspr.busy, 16);
ambChannels[pSprite->owner].distance += ClipRange(scale(nDist, pXSprite->data1, pXSprite->data2, vs, 0), 0, vs); ambChannels[actor->spr.owner].distance += ClipRange(scale(nDist, actor->xspr.data1, actor->xspr.data2, vs, 0), 0, vs);
} }
} }
} }
@ -110,24 +108,22 @@ void ambInit(void)
BloodStatIterator it(kStatAmbience); BloodStatIterator it(kStatAmbience);
while (DBloodActor* actor = it.Next()) while (DBloodActor* actor = it.Next())
{ {
spritetype* pSprite = &actor->s();
if (!actor->hasX()) continue; if (!actor->hasX()) continue;
XSPRITE* pXSprite = &actor->x(); if (actor->xspr.data1 >= actor->xspr.data2) continue;
if (pXSprite->data1 >= pXSprite->data2) continue;
int i; AMB_CHANNEL *pChannel = ambChannels; int i; AMB_CHANNEL *pChannel = ambChannels;
for (i = 0; i < nAmbChannels; i++, pChannel++) for (i = 0; i < nAmbChannels; i++, pChannel++)
if (pXSprite->data3 == pChannel->check) break; if (actor->xspr.data3 == pChannel->check) break;
if (i == nAmbChannels) { if (i == nAmbChannels) {
if (i >= kMaxAmbChannel) { if (i >= kMaxAmbChannel) {
pSprite->owner = -1; actor->spr.owner = -1;
continue; continue;
} }
int nSFX = pXSprite->data3; int nSFX = actor->xspr.data3;
auto snd = soundEngine->FindSoundByResID(nSFX); auto snd = soundEngine->FindSoundByResID(nSFX);
if (!snd) { if (!snd) {
//I_Error("Missing sound #%d used in ambient sound generator %d\n", nSFX); //I_Error("Missing sound #%d used in ambient sound generator %d\n", nSFX);
@ -143,7 +139,7 @@ void ambInit(void)
} }
pSprite->owner = i; actor->spr.owner = i;
} }
} }

View file

@ -232,15 +232,11 @@ void StartLevel(MapRecord* level, bool newgame)
int modernTypesErased = 0; int modernTypesErased = 0;
for (auto actor : actorlist) for (auto actor : actorlist)
{ {
spritetype* pSprite = &actor->s();
if (actor->exists() && actor->hasX()) if (actor->exists() && actor->hasX())
{ {
if ((actor->xspr.lSkill & (1 << gGameOptions.nDifficulty)) || (actor->xspr.lS && gGameOptions.nGameType == 0)
XSPRITE* pXSprite = &actor->x(); || (actor->xspr.lB && gGameOptions.nGameType == 2) || (actor->xspr.lT && gGameOptions.nGameType == 3)
if ((pXSprite->lSkill & (1 << gGameOptions.nDifficulty)) || (pXSprite->lS && gGameOptions.nGameType == 0) || (actor->xspr.lC && gGameOptions.nGameType == 1)) {
|| (pXSprite->lB && gGameOptions.nGameType == 2) || (pXSprite->lT && gGameOptions.nGameType == 3)
|| (pXSprite->lC && gGameOptions.nGameType == 1)) {
DeleteSprite(actor); DeleteSprite(actor);
continue; continue;

View file

@ -76,12 +76,11 @@ void FlareBurst(DBloodActor* actor, sectortype*) // 2
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
{ {
auto spawnedactor = actSpawnSprite(actor, 5); auto spawnedactor = actSpawnSprite(actor, 5);
spritetype *pSpawn = &spawnedactor->s(); spawnedactor->spr.picnum = 2424;
pSpawn->picnum = 2424; spawnedactor->spr.shade = -128;
pSpawn->shade = -128; spawnedactor->spr.xrepeat = spawnedactor->spr.yrepeat = 32;
pSpawn->xrepeat = pSpawn->yrepeat = 32; spawnedactor->spr.type = kMissileFlareAlt;
pSpawn->type = kMissileFlareAlt; spawnedactor->spr.clipdist = 2;
pSpawn->clipdist = 2;
spawnedactor->SetOwner(actor); spawnedactor->SetOwner(actor);
int nAngle2 = (i<<11)/8; int nAngle2 = (i<<11)/8;
int dx = 0; int dx = 0;
@ -600,13 +599,12 @@ void sub_76A08(DBloodActor *actor, DBloodActor *actor2, PLAYER *pPlayer) // ???
{ {
int top, bottom; int top, bottom;
auto pSprite = &actor->s(); auto pSprite = &actor->s();
auto pSprite2 = &actor2->s();
GetSpriteExtents(pSprite, &top, &bottom); GetSpriteExtents(pSprite, &top, &bottom);
pSprite->pos.X = pSprite2->pos.X; pSprite->pos.X = actor2->spr.pos.X;
pSprite->pos.Y = pSprite2->pos.Y; pSprite->pos.Y = actor2->spr.pos.Y;
pSprite->pos.Z = pSprite2->sector()->floorz-(bottom-pSprite->pos.Z); pSprite->pos.Z = actor2->spr.sector()->floorz-(bottom-pSprite->pos.Z);
pSprite->ang = pSprite2->ang; pSprite->ang = actor2->spr.ang;
ChangeActorSect(actor, pSprite2->sector()); ChangeActorSect(actor, actor2->spr.sector());
sfxPlay3DSound(actor2, 201, -1, 0); sfxPlay3DSound(actor2, 201, -1, 0);
actor->xvel = actor->yvel = actor->zvel = 0; actor->xvel = actor->yvel = actor->zvel = 0;
viewBackupSpriteLoc(actor); viewBackupSpriteLoc(actor);
@ -654,13 +652,12 @@ void DropVoodooCb(DBloodActor* actor, sectortype*) // unused
auto nextactor = it.Peek(); auto nextactor = it.Peek();
if (Owner == actor2) if (Owner == actor2)
continue; continue;
spritetype *pSprite2 = &actor2->s();
if (actor2->hasX()) if (actor2->hasX())
{ {
XSPRITE *pXSprite2 = &actor2->x(); XSPRITE *pXSprite2 = &actor2->x();
PLAYER *pPlayer2; PLAYER *pPlayer2;
if (actor2->IsPlayerActor()) if (actor2->IsPlayerActor())
pPlayer2 = &gPlayer[pSprite2->type-kDudePlayer1]; pPlayer2 = &gPlayer[actor2->spr.type-kDudePlayer1];
else else
pPlayer2 = nullptr; pPlayer2 = nullptr;
@ -687,7 +684,7 @@ void DropVoodooCb(DBloodActor* actor, sectortype*) // unused
else else
{ {
int vd = 0x2666; int vd = 0x2666;
switch (pSprite2->type) switch (actor2->spr.type)
{ {
case kDudeBoneEel: case kDudeBoneEel:
case kDudeBat: case kDudeBat:

View file

@ -41,10 +41,9 @@ BEGIN_BLD_NS
DBloodActor* InsertSprite(sectortype* pSector, int nStat) DBloodActor* InsertSprite(sectortype* pSector, int nStat)
{ {
auto act = static_cast<DBloodActor*>(::InsertActor(RUNTIME_CLASS(DBloodActor), pSector, nStat)); auto act = static_cast<DBloodActor*>(::InsertActor(RUNTIME_CLASS(DBloodActor), pSector, nStat));
auto pSprite = &act->s(); act->spr.cstat = CSTAT_SPRITE_YCENTER;
pSprite->cstat = CSTAT_SPRITE_YCENTER; act->spr.clipdist = 32;
pSprite->clipdist = 32; act->spr.xrepeat = act->spr.yrepeat = 64;
pSprite->xrepeat = pSprite->yrepeat = 64;
return act; return act;
} }