- vis.cpp

This commit is contained in:
Christoph Oelckers 2021-11-03 00:12:20 +01:00
parent 02bdba71fc
commit 411c814dc3
6 changed files with 71 additions and 74 deletions

View file

@ -1933,7 +1933,7 @@ DSWActor* DoPickTarget(DSWActor*, uint32_t max_delta_ang, int skip_targets);
void change_sprite_stat(short, short); void change_sprite_stat(short, short);
void change_actor_stat(DSWActor* actor, int stat); void change_actor_stat(DSWActor* actor, int stat);
void SetOwner(DSWActor*, DSWActor*); void SetOwner(DSWActor*, DSWActor*, bool flag = true);
void SetOwner(int a, int b); // we still need this... void SetOwner(int a, int b); // we still need this...
void ClearOwner(DSWActor* ownr); void ClearOwner(DSWActor* ownr);
DSWActor* GetOwner(DSWActor* child); DSWActor* GetOwner(DSWActor* child);

View file

@ -45,7 +45,7 @@ SPRITEp WarpPlane(int32_t* x, int32_t* y, int32_t* z, int16_t* sectnum)
void ProcessVisOn(void); void ProcessVisOn(void);
void VisViewChange(PLAYERp pp, int* vis); void VisViewChange(PLAYERp pp, int* vis);
int SpawnVis(short Parent, short sectnum, int x, int y, int z, int amt); void SpawnVis(DSWActor* Parent, short sectnum, int x, int y, int z, int amt);
enum TriggerType { TRIGGER_TYPE_REMOTE_SO }; enum TriggerType { TRIGGER_TYPE_REMOTE_SO };

View file

@ -2347,7 +2347,7 @@ pUziFire(PANEL_SPRITEp psp)
} }
else else
{ {
SpawnVis(psp->PlayerP->PlayerSprite, -1, -1, -1, -1, 32); SpawnVis(psp->PlayerP->Actor(), -1, -1, -1, -1, 32);
if (!WeaponOK(psp->PlayerP)) if (!WeaponOK(psp->PlayerP))
return; return;
@ -3007,7 +3007,7 @@ pShotgunAction(PANEL_SPRITEp psp)
void void
pShotgunFire(PANEL_SPRITEp psp) pShotgunFire(PANEL_SPRITEp psp)
{ {
SpawnVis(psp->PlayerP->PlayerSprite, -1, -1, -1, -1, 32); SpawnVis(psp->PlayerP->Actor(), -1, -1, -1, -1, 32);
InitShotgun(psp->PlayerP); InitShotgun(psp->PlayerP);
//SpawnShotgunShell(psp); //SpawnShotgunShell(psp);
} }
@ -3379,7 +3379,7 @@ pRailAction(PANEL_SPRITEp psp)
void void
pRailFire(PANEL_SPRITEp psp) pRailFire(PANEL_SPRITEp psp)
{ {
SpawnVis(psp->PlayerP->PlayerSprite, -1, -1, -1, -1, 16); SpawnVis(psp->PlayerP->Actor(), -1, -1, -1, -1, 16);
if (psp->PlayerP->WpnRailType == 0) if (psp->PlayerP->WpnRailType == 0)
InitRail(psp->PlayerP); InitRail(psp->PlayerP);
else else
@ -3788,15 +3788,15 @@ pHotheadAttack(PANEL_SPRITEp psp)
switch (psp->PlayerP->WpnFlameType) switch (psp->PlayerP->WpnFlameType)
{ {
case 0: case 0:
SpawnVis(psp->PlayerP->PlayerSprite, -1, -1, -1, -1, 32); SpawnVis(psp->PlayerP->Actor(), -1, -1, -1, -1, 32);
InitFireball(psp->PlayerP); InitFireball(psp->PlayerP);
break; break;
case 1: case 1:
SpawnVis(psp->PlayerP->PlayerSprite, -1, -1, -1, -1, 20); SpawnVis(psp->PlayerP->Actor(), -1, -1, -1, -1, 20);
InitSpellRing(psp->PlayerP); InitSpellRing(psp->PlayerP);
break; break;
case 2: case 2:
SpawnVis(psp->PlayerP->PlayerSprite, -1, -1, -1, -1, 16); SpawnVis(psp->PlayerP->Actor(), -1, -1, -1, -1, 16);
InitSpellNapalm(psp->PlayerP); InitSpellNapalm(psp->PlayerP);
break; break;
} }
@ -4339,7 +4339,7 @@ pMicroAction(PANEL_SPRITEp psp)
void void
pMicroFire(PANEL_SPRITEp psp) pMicroFire(PANEL_SPRITEp psp)
{ {
SpawnVis(psp->PlayerP->PlayerSprite, -1, -1, -1, -1, 20); SpawnVis(psp->PlayerP->Actor(), -1, -1, -1, -1, 20);
switch (psp->PlayerP->WpnRocketType) switch (psp->PlayerP->WpnRocketType)
{ {
case 0: case 0:
@ -5159,7 +5159,7 @@ pGrenadeAction(PANEL_SPRITEp psp)
void void
pGrenadeFire(PANEL_SPRITEp psp) pGrenadeFire(PANEL_SPRITEp psp)
{ {
SpawnVis(psp->PlayerP->PlayerSprite, -1, -1, -1, -1, 32); SpawnVis(psp->PlayerP->Actor(), -1, -1, -1, -1, 32);
InitGrenade(psp->PlayerP); InitGrenade(psp->PlayerP);
} }

View file

@ -583,11 +583,11 @@ STATE s_IconFlag[] =
{ICON_FLAG + 2, 32, DoGet, &s_IconFlag[0]} {ICON_FLAG + 2, 32, DoGet, &s_IconFlag[0]}
}; };
void SetOwner(DSWActor* ownr, DSWActor* child) void SetOwner(DSWActor* ownr, DSWActor* child, bool flag)
{ {
SPRITEp cp = &child->s(); SPRITEp cp = &child->s();
if (ownr != nullptr && ownr->hasU()) if (flag && ownr != nullptr && ownr->hasU())
{ {
SET(ownr->u()->Flags2, SPR2_CHILDREN); SET(ownr->u()->Flags2, SPR2_CHILDREN);
} }

View file

@ -45,13 +45,12 @@ extern short NormalVisibility; // player.c
void ProcessVisOn(void) void ProcessVisOn(void)
{ {
int i;
SPRITEp sp; SPRITEp sp;
StatIterator it(STAT_VIS_ON); SWStatIterator it(STAT_VIS_ON);
while ((i = it.NextIndex()) >= 0) while (auto actor = it.Next())
{ {
sp = &sprite[i]; sp = &actor->s();
if (VIS_VisDir(sp)) if (VIS_VisDir(sp))
{ {
@ -73,12 +72,13 @@ void ProcessVisOn(void)
if (VIS_VisCur(sp) >= NormalVisibility) if (VIS_VisCur(sp) >= NormalVisibility)
{ {
VIS_VisCur(sp) = NormalVisibility; VIS_VisCur(sp) = NormalVisibility;
if (sp->owner >= 0) auto own = GetOwner(actor);
if (own != nullptr)
{ {
ASSERT(User[sp->owner].Data()); ASSERT(own->hasU());
RESET(User[sp->owner]->Flags2, SPR2_VIS_SHADING); RESET(own->u()->Flags2, SPR2_VIS_SHADING);
} }
KillSprite(i); KillActor(actor);
} }
} }
} }
@ -86,7 +86,6 @@ void ProcessVisOn(void)
void VisViewChange(PLAYERp pp, int *vis) void VisViewChange(PLAYERp pp, int *vis)
{ {
int i;
SPRITEp sp; SPRITEp sp;
short BrightestVis = NormalVisibility; short BrightestVis = NormalVisibility;
int x,y,z; int x,y,z;
@ -96,17 +95,18 @@ void VisViewChange(PLAYERp pp, int *vis)
return; return;
// find the closest quake - should be a strength value // find the closest quake - should be a strength value
StatIterator it(STAT_VIS_ON); SWStatIterator it(STAT_VIS_ON);
while ((i = it.NextIndex()) >= 0) while (auto actor = it.Next())
{ {
sp = &sprite[i]; sp = &actor->s();
if (sp->owner >= 0) auto own = GetOwner(actor);
if (own != nullptr)
{ {
x = sprite[sp->owner].x; x = own->s().x;
y = sprite[sp->owner].y; y = own->s().y;
z = sprite[sp->owner].z; z = own->s().z;
sectnum = sprite[sp->owner].sectnum; sectnum = own->s().sectnum;
} }
else else
{ {
@ -127,57 +127,56 @@ void VisViewChange(PLAYERp pp, int *vis)
*vis = BrightestVis; *vis = BrightestVis;
} }
int SpawnVis(short Parent, short sectnum, int x, int y, int z, int amt) void SpawnVis(DSWActor* parentActor, short sectnum, int x, int y, int z, int amt)
{ {
short SpriteNum;
SPRITEp sp; SPRITEp sp;
int i; if (parentActor != nullptr)
if (Parent >= 0)
{ {
if (sector[sprite[Parent].sectnum].floorpal == PALETTE_FOG) auto psp = &parentActor->s();
return -1; auto pu = parentActor->u();
if (sector[sprite[Parent].sectnum].floorpal == PALETTE_DIVE_LAVA) if (sector[psp->sectnum].floorpal == PALETTE_FOG)
return -1; return;
if (sector[psp->sectnum].floorpal == PALETTE_DIVE_LAVA)
return;
// kill any others with the same parent // kill any others with the same parent
StatIterator it(STAT_VIS_ON); SWStatIterator it(STAT_VIS_ON);
while ((i = it.NextIndex()) >= 0) while (auto itActor = it.Next())
{ {
sp = &sprite[i]; if (GetOwner(itActor) == parentActor)
if (sp->owner == Parent)
{ {
KillSprite(i); KillActor(itActor);
} }
} }
SpriteNum = COVERinsertsprite(sprite[Parent].sectnum, STAT_VIS_ON); auto actorNew = InsertActor(psp->sectnum, STAT_VIS_ON);
sp = &sprite[SpriteNum]; sp = &actorNew->s();
SetOwner(parentActor, actorNew);
sp->owner = Parent;
ASSERT(User[Parent].Data()); ASSERT(parentActor->hasU());
SET(User[Parent]->Flags2, SPR2_CHILDREN); SET(pu->Flags2, SPR2_CHILDREN);
sp->x = sprite[Parent].x; sp->x = psp->x;
sp->y = sprite[Parent].y; sp->y = psp->y;
sp->z = sprite[Parent].z; sp->z = psp->z;
SET(User[Parent]->Flags2, SPR2_VIS_SHADING); SET(pu->Flags2, SPR2_VIS_SHADING);
} }
else else
{ {
if (sector[sectnum].floorpal == PALETTE_FOG) if (sector[sectnum].floorpal == PALETTE_FOG)
return -1; return;
SpriteNum = COVERinsertsprite(sectnum, STAT_VIS_ON); auto actorNew = InsertActor(sectnum, STAT_VIS_ON);
sp = &sprite[SpriteNum]; sp = &actorNew->s();
sp->x = x; sp->x = x;
sp->y = y; sp->y = y;
sp->z = z - Z(20); sp->z = z - Z(20);
sp->owner = -1; ClearOwner(actorNew);
} }
sp->cstat = 0; sp->cstat = 0;
@ -186,8 +185,6 @@ int SpawnVis(short Parent, short sectnum, int x, int y, int z, int amt)
VIS_VisDir(sp) = 1; VIS_VisDir(sp) = 1;
VIS_VisCur(sp) = NormalVisibility; VIS_VisCur(sp) = NormalVisibility;
VIS_VisGoal(sp) = amt; VIS_VisGoal(sp) = amt;
return SpriteNum;
} }
END_SW_NS END_SW_NS

View file

@ -10676,7 +10676,7 @@ SpawnBasicExp(int16_t Weapon)
SpawnExpZadjust(Weapon, exp, Z(15), Z(15)); SpawnExpZadjust(Weapon, exp, Z(15), Z(15));
DoExpDamageTest(expActor); DoExpDamageTest(expActor);
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 16); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 16);
return explosion; return explosion;
} }
@ -11009,7 +11009,7 @@ SpawnBoltExp(int16_t Weapon)
DoExpDamageTest(expActor); DoExpDamageTest(expActor);
SetExpQuake(explosion); // !JIM! made rocket launcher shake things SetExpQuake(explosion); // !JIM! made rocket launcher shake things
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 16); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 16);
return explosion; return explosion;
} }
@ -11072,7 +11072,7 @@ SpawnTankShellExp(int16_t Weapon)
SpawnExpZadjust(Weapon, exp, Z(40), Z(40)); SpawnExpZadjust(Weapon, exp, Z(40), Z(40));
DoExpDamageTest(expActor); DoExpDamageTest(expActor);
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 16); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 16);
return explosion; return explosion;
} }
@ -11307,7 +11307,7 @@ SpawnMicroExp(int16_t Weapon)
// //
SpawnExpZadjust(Weapon, exp, Z(20), Z(20)); SpawnExpZadjust(Weapon, exp, Z(20), Z(20));
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 16); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 16);
return explosion; return explosion;
} }
@ -11548,7 +11548,7 @@ SpawnGrenadeExp(int16_t Weapon)
DoExpDamageTest(expActor); DoExpDamageTest(expActor);
SetExpQuake(explosion); SetExpQuake(explosion);
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 0); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 0);
#if 0 #if 0
short ang; short ang;
@ -11647,7 +11647,7 @@ SpawnMineExp(int16_t Weapon)
// //
SpawnExpZadjust(Weapon, exp, Z(100), Z(20)); SpawnExpZadjust(Weapon, exp, Z(100), Z(20));
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 16); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 16);
SetExpQuake(explosion); SetExpQuake(explosion);
@ -11707,7 +11707,7 @@ SpawnSectorExp(int16_t Weapon)
DoExpDamageTest(expActor); DoExpDamageTest(expActor);
SetExpQuake(explosion); SetExpQuake(explosion);
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 16); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 16);
return explosion; return explosion;
} }
@ -11743,7 +11743,7 @@ SpawnLargeExp(int16_t Weapon)
// Should not cause other sectors to explode // Should not cause other sectors to explode
DoExpDamageTest(expActor); DoExpDamageTest(expActor);
SetExpQuake(explosion); SetExpQuake(explosion);
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 16); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 16);
return explosion; return explosion;
} }
@ -11823,7 +11823,7 @@ SpawnLittleExp(int16_t Weapon)
RESET(exp->cstat, CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); RESET(exp->cstat, CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN);
eu->Radius = DamageData[DMG_BASIC_EXP].radius; eu->Radius = DamageData[DMG_BASIC_EXP].radius;
DoExpDamageTest(expActor); DoExpDamageTest(expActor);
SpawnVis(-1, exp->sectnum, exp->x, exp->y, exp->z, 16); SpawnVis(nullptr, exp->sectnum, exp->x, exp->y, exp->z, 16);
return explosion; return explosion;
} }
@ -18254,7 +18254,7 @@ InitSobjGun(PLAYERp pp)
{ {
case 32: case 32:
case 0: case 0:
SpawnVis(short(sp - sprite), -1, -1, -1, -1, 8); SpawnVis(actor, -1, -1, -1, -1, 8);
SpawnBigGunFlames(short(sp - sprite), pp->PlayerSprite, pp->sop); SpawnBigGunFlames(short(sp - sprite), pp->PlayerSprite, pp->sop);
SetGunQuake(short(sp - sprite)); SetGunQuake(short(sp - sprite));
InitTankShell(short(sp - sprite), pp); InitTankShell(short(sp - sprite), pp);
@ -18264,7 +18264,7 @@ InitSobjGun(PLAYERp pp)
pp->FirePause = SP_TAG5(sp); pp->FirePause = SP_TAG5(sp);
break; break;
case 1: case 1:
SpawnVis(short(sp - sprite), -1, -1, -1, -1, 32); SpawnVis(actor, -1, -1, -1, -1, 32);
SpawnBigGunFlames(-short(sp - sprite), pp->PlayerSprite, pp->sop); SpawnBigGunFlames(-short(sp - sprite), pp->PlayerSprite, pp->sop);
InitSobjMachineGun(short(sp - sprite), pp); InitSobjMachineGun(short(sp - sprite), pp);
if (!SP_TAG5(sp)) if (!SP_TAG5(sp))
@ -18274,7 +18274,7 @@ InitSobjGun(PLAYERp pp)
break; break;
case 2: case 2:
if (SW_SHAREWARE) break; if (SW_SHAREWARE) break;
SpawnVis(short(sp - sprite), -1, -1, -1, -1, 32); SpawnVis(actor, -1, -1, -1, -1, 32);
InitTurretLaser(short(sp - sprite), pp); InitTurretLaser(short(sp - sprite), pp);
if (!SP_TAG5(sp)) if (!SP_TAG5(sp))
pp->FirePause = 120; pp->FirePause = 120;
@ -18283,7 +18283,7 @@ InitSobjGun(PLAYERp pp)
break; break;
case 3: case 3:
if (SW_SHAREWARE) break; if (SW_SHAREWARE) break;
SpawnVis(short(sp - sprite), -1, -1, -1, -1, 32); SpawnVis(actor, -1, -1, -1, -1, 32);
InitTurretRail(short(sp - sprite), pp); InitTurretRail(short(sp - sprite), pp);
if (!SP_TAG5(sp)) if (!SP_TAG5(sp))
pp->FirePause = 120; pp->FirePause = 120;
@ -18292,7 +18292,7 @@ InitSobjGun(PLAYERp pp)
break; break;
case 4: case 4:
if (SW_SHAREWARE) break; if (SW_SHAREWARE) break;
SpawnVis(short(sp - sprite), -1, -1, -1, -1, 32); SpawnVis(actor, -1, -1, -1, -1, 32);
InitTurretFireball(short(sp - sprite), pp); InitTurretFireball(short(sp - sprite), pp);
if (!SP_TAG5(sp)) if (!SP_TAG5(sp))
pp->FirePause = 20; pp->FirePause = 20;
@ -18301,7 +18301,7 @@ InitSobjGun(PLAYERp pp)
break; break;
case 5: case 5:
if (SW_SHAREWARE) break; if (SW_SHAREWARE) break;
SpawnVis(short(sp - sprite), -1, -1, -1, -1, 32); SpawnVis(actor, -1, -1, -1, -1, 32);
InitTurretRocket(short(sp - sprite), pp); InitTurretRocket(short(sp - sprite), pp);
if (!SP_TAG5(sp)) if (!SP_TAG5(sp))
pp->FirePause = 100; pp->FirePause = 100;
@ -18310,7 +18310,7 @@ InitSobjGun(PLAYERp pp)
break; break;
case 6: case 6:
if (SW_SHAREWARE) break; if (SW_SHAREWARE) break;
SpawnVis(short(sp - sprite), -1, -1, -1, -1, 32); SpawnVis(actor, -1, -1, -1, -1, 32);
InitTurretMicro(short(sp - sprite), pp); InitTurretMicro(short(sp - sprite), pp);
if (!SP_TAG5(sp)) if (!SP_TAG5(sp))
pp->FirePause = 100; pp->FirePause = 100;