Several optimizations on non-interactive actors.

This commit is contained in:
Mari the Deer 2022-10-14 21:45:21 +02:00
commit 4bb3a1e85a
32 changed files with 336 additions and 1867 deletions

View file

@ -68,7 +68,7 @@ Class RedShell16 : RedShell
}
}
Class GoldShellSparkle : Actor
Class GoldShellSparkle : SWWMNonInteractiveActor
{
override void PostBeginPlay()
{
@ -86,14 +86,7 @@ Class GoldShellSparkle : Actor
{
RenderStyle "Add";
Scale 0.05;
+NOGRAVITY;
+NOBLOCKMAP;
+NOINTERACTION;
+SYNCHRONIZED;
+DONTSPLASH;
+NOTELEPORT;
+FORCEXYBILLBOARD;
FloatBobPhase 0;
}
States
{

View file

@ -155,16 +155,10 @@ Mixin Class SWWMOverlapPickupSound
}
}
Class SWWMRespawnTimer : Actor
Class SWWMRespawnTimer : SWWMNonInteractiveActor
{
default
{
+NOGRAVITY;
+NOINTERACTION;
+DONTSPLASH;
+NOTELEPORT;
Radius .1;
Height 0.;
Args 0,3,2;
}
override void PostBeginPlay()
@ -195,12 +189,6 @@ Class SWWMRespawnTimer : Actor
A_SpawnParticle(Color(args[0]*85,args[1]*85,args[2]*85),SPF_FULLBRIGHT,Random[ExploS](30,60),FRandom[ExploS](1.,2.),0,0,0,16,FRandom[ExploS](-.8,.8),FRandom[ExploS](-.8,.8),FRandom[ExploS](-.8,.8),0,0,0,FRandom[ExploS](.45,.9)*str,-1,FRandom[ExploS](-.04,-.02)*str);
}
}
States
{
Spawn:
TNT1 A -1;
Stop;
}
}
Mixin Class SWWMPickupGlow
@ -219,6 +207,35 @@ Mixin Class SWWMPickupGlow
}
}
Class SWWMItemOverlay : SWWMNonInteractiveActor
{
Default
{
RenderStyle "Add";
+FLOATBOB;
FloatBobStrength .25;
}
override void Tick()
{
if ( !target )
{
Destroy();
return;
}
prev = target.prev;
if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+target.vel,true);
if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE);
FloatBobPhase = target.FloatBobPhase;
bInvisible = target.bInvisible||Inventory(target).Owner;
}
States
{
Spawn:
XZW1 A -1 Bright;
Stop;
}
}
Mixin Class SWWMRespawn
{
override void Hide()

View file

@ -283,19 +283,11 @@ Class SWWMFlag : Actor
}
// oof
Class SWWMGasCloudSpawner : Actor
Class SWWMGasCloudSpawner : SWWMNonInteractiveActor
{
Default
{
Radius .1;
Height 0.;
+NOBLOCKMAP;
+NOTELEPORT;
+DONTSPLASH;
+NOINTERACTION;
}
override void Tick()
{
if ( isFrozen() ) return;
if ( !(special1%5) )
{
Vector3 x, y, z;
@ -309,20 +301,15 @@ Class SWWMGasCloudSpawner : Actor
}
}
Class SWWMGasCloud : Actor
Class SWWMGasCloud : SWWMNonInteractiveActor
{
Default
{
Radius .1;
Height 0.;
+NOBLOCKMAP;
+NOTELEPORT;
+DONTSPLASH;
+NOINTERACTION;
+FORCERADIUSDMG;
}
override void Tick()
{
if ( isFrozen() ) return;
for ( int i=0; i<2; i++ )
{
let e = Spawn("SWWMFart",level.Vec3Offset(pos,specialf1*SWWMUtility.Vec3FromAngles(FRandom[ExploS](0,360),FRandom[ExploS](-90,90))*20.));
@ -352,7 +339,7 @@ Class SWWMFart : SWWMHalfSmoke
}
// yay!
Class FancyConfetti : Actor
Class FancyConfetti : SWWMNonInteractiveActor
{
int deadtimer;
bool dead;
@ -362,20 +349,10 @@ Class FancyConfetti : Actor
Default
{
Radius 2;
Height 2;
+NOBLOCKMAP;
+DROPOFF;
+THRUACTORS;
+NOTELEPORT;
+DONTSPLASH;
+INTERPOLATEANGLES;
+ROLLSPRITE;
+ROLLCENTER;
+NOINTERACTION;
+SYNCHRONIZED;
Gravity 0.05;
FloatBobPhase 0;
}
override void PostBeginPlay()
{
@ -522,20 +499,13 @@ Class FancyConfetti : Actor
Stop;
}
}
Class SuperFancyTrail : Actor
Class SuperFancyTrail : SWWMNonInteractiveActor
{
Default
{
RenderStyle "Add";
Radius .1;
Height 0.;
XScale 24.;
+FORCEXYBILLBOARD;
+NOGRAVITY;
+NOBLOCKMAP;
+NOINTERACTION;
+DONTSPLASH;
+NOTELEPORT;
}
override void Tick()
{
@ -550,24 +520,16 @@ Class SuperFancyTrail : Actor
Stop;
}
}
Class SuperFancySparkle : Actor
Class SuperFancySparkle : SWWMNonInteractiveActor
{
Default
{
RenderStyle "Add";
Radius 0.1;
Height 0;
Scale .25;
+NOGRAVITY;
+NOBLOCKMAP;
+DONTSPLASH;
+ROLLSPRITE;
+ROLLCENTER;
+INTERPOLATEANGLES;
+FORCEXYBILLBOARD;
+NOINTERACTION;
+SYNCHRONIZED;
FloatBobPhase 0;
}
override void PostBeginPlay()
{
@ -583,8 +545,8 @@ Class SuperFancySparkle : Actor
}
override void Tick()
{
if ( isFrozen() ) return;
prev = pos;
if ( isFrozen() ) return;
A_SetScale(scale.x*specialf1);
A_SetRoll(roll+special1,SPF_INTERPOLATE);
A_FadeOut(specialf2);
@ -641,19 +603,10 @@ Class SuperPartyLight : PaletteLight
SetOrigin(level.Vec3Offset(pos,vel),true);
}
}
Class PartyTime : Actor
Class PartyTime : SWWMNonInteractiveActor
{
bool ignite;
Default
{
Radius .1;
Height 0.;
+NOBLOCKMAP;
+NOTELEPORT;
+DONTSPLASH;
+NOINTERACTION;
}
override void PostBeginPlay()
{
if ( target ) specialf1 = target.Height/2.;

View file

@ -236,14 +236,8 @@ Mixin Class SWWMShadedPowerup
}
}
Class GhostSnd : Actor
Class GhostSnd : SWWMNonInteractiveActor
{
Default
{
+NOBLOCKMAP;
+NOGRAVITY;
+NOINTERACTION;
}
override void Tick()
{
if ( !target || !master )
@ -405,44 +399,7 @@ Class GhostPower : PowerInvisibility
}
}
Class GhostArtifactX : Actor
{
SpriteID bsprite;
Default
{
RenderStyle "Add";
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOINTERACTION;
Radius .1;
Height 0;
+FLOATBOB;
FloatBobStrength 0.25;
}
override void Tick()
{
if ( !target )
{
Destroy();
return;
}
prev = target.prev;
vel = target.vel;
if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true);
if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE);
FloatBobPhase = target.FloatBobPhase;
if ( !bsprite ) bsprite = GetSpriteIndex('XZW1');
bInvisible = target.bInvisible||(target.sprite!=bsprite);
}
States
{
Spawn:
XZW1 A -1 Bright;
Stop;
}
}
Class GhostArtifactX : SWWMItemOverlay {}
Class GhostArtifact : Inventory
{
@ -521,14 +478,8 @@ Class GhostArtifact : Inventory
}
}
Class GravSnd : Actor
Class GravSnd : SWWMNonInteractiveActor
{
Default
{
+NOBLOCKMAP;
+NOGRAVITY;
+NOINTERACTION;
}
override void Tick()
{
if ( !target || !master )
@ -614,7 +565,7 @@ Class GravityPower : Powerup
}
Class GravityX : GhostArtifactX
Class GravityX : SWWMItemOverlay
{
Default
{
@ -717,14 +668,8 @@ Class InvinciballLight : PointLightAttenuated
bDORMANT = Powerup(master).isBlinking();
}
}
Class InvinciSnd : Actor
Class InvinciSnd : SWWMNonInteractiveActor
{
Default
{
+NOBLOCKMAP;
+NOGRAVITY;
+NOINTERACTION;
}
override void Tick()
{
if ( !target || !master )
@ -854,7 +799,7 @@ Class InvinciballPower : Powerup
}
}
Class InvinciballX : GhostArtifactX
Class InvinciballX : SWWMItemOverlay
{
Default
{
@ -967,14 +912,8 @@ Class RagekitLight : PointLightAttenuated
}
}
Class RageSnd : Actor
Class RageSnd : SWWMNonInteractiveActor
{
Default
{
+NOBLOCKMAP;
+NOGRAVITY;
+NOINTERACTION;
}
override void Tick()
{
if ( !target || !master )
@ -1140,7 +1079,7 @@ Class RagekitPower : Powerup
}
}
Class RagekitX : GhostArtifactX
Class RagekitX : SWWMItemOverlay
{
Default
{
@ -2002,14 +1941,8 @@ Class BarrierLight : PointLightAttenuated
bDORMANT = Powerup(master).isBlinking();
}
}
Class BarrierSnd : Actor
Class BarrierSnd : SWWMNonInteractiveActor
{
Default
{
+NOBLOCKMAP;
+NOGRAVITY;
+NOINTERACTION;
}
override void Tick()
{
if ( !target || !master )
@ -2273,9 +2206,7 @@ Class EBarrier : Inventory
}
}
Class EBarrierX : GhostArtifactX
{
}
Class EBarrierX : SWWMItemOverlay {}
Class TendrilTracer : LineTracer
{
@ -2308,7 +2239,7 @@ Class TendrilTracer : LineTracer
}
// main heatseeker
Class MykradvoTendril : Actor
Class MykradvoTendril : SWWMNonInteractiveActor
{
Vector3 nextpos, nextdir;
@ -2446,15 +2377,8 @@ Class MykradvoTendril : Actor
DamageFunction 100;
ReactionTime 8;
Speed 64;
Radius .1;
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+INTERPOLATEANGLES;
+NOTELEPORT;
+FOILINVUL;
+NOINTERACTION;
+MISSILEMORE;
}
States
@ -2622,7 +2546,7 @@ Class MykradvoBurstLight : PaletteLight
}
// 'splode
Class MykradvoBurst : Actor
Class MykradvoBurst : SWWMNonInteractiveActor
{
Array<Actor> targets;
int nstep;
@ -2630,11 +2554,7 @@ Class MykradvoBurst : Actor
Default
{
RenderStyle "Add";
+NOBLOCKMAP;
+NOGRAVITY;
+FORCEXYBILLBOARD;
+NOTELEPORT;
+NOINTERACTION;
Scale 1.4;
}
void FlashPlayer( int str, double rad )
@ -2955,7 +2875,7 @@ Class Mykradvo : Inventory
}
}
Class MykradvoX : GhostArtifactX
Class MykradvoX : SWWMItemOverlay
{
Default
{
@ -2976,14 +2896,12 @@ Class MykradvoX : GhostArtifactX
return;
}
prev = target.prev;
vel = target.vel;
if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true);
if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE);
FloatBobPhase = target.FloatBobPhase;
A_SetScale(.16+.01*sin(GetAge()*4));
if ( !bsprite ) bsprite = GetSpriteIndex('XZW0');
bool bOldInvis = bInvisible;
bInvisible = target.bInvisible||(target.sprite!=bsprite);
bInvisible = target.bInvisible||Inventory(target).Owner;
if ( bInvisible != bOldInvis )
{
SetState(SpawnState+bInvisible);
@ -2999,7 +2917,7 @@ Class MykradvoX : GhostArtifactX
}
}
Class MykradvoX2 : GhostArtifactX
Class MykradvoX2 : SWWMItemOverlay
{
Default
{
@ -3018,16 +2936,14 @@ Class MykradvoX2 : GhostArtifactX
return;
}
prev = target.prev;
vel = target.vel;
if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true);
if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE);
FloatBobPhase = target.FloatBobPhase;
A_SetPitch(sin(GetAge()*special1*8)*5,SPF_INTERPOLATE);
A_SetRoll(cos(GetAge()*special1*8)*5,SPF_INTERPOLATE);
FloatBobPhase = target.FloatBobPhase;
A_SetScale(1.+.05*cos(GetAge()*4)*special1);
if ( !bsprite ) bsprite = GetSpriteIndex('XZW0');
bool bOldInvis = bInvisible;
bInvisible = target.bInvisible||(target.sprite!=bsprite);
bInvisible = target.bInvisible||Inventory(target).Owner;
if ( bInvisible != bOldInvis )
SetState(SpawnState+bInvisible);
}
@ -3194,14 +3110,8 @@ Class AngeryLight : PointLightAttenuated
bDORMANT = Powerup(master).isBlinking();
}
}
Class AngerySnd : Actor
Class AngerySnd : SWWMNonInteractiveActor
{
Default
{
+NOBLOCKMAP;
+NOGRAVITY;
+NOINTERACTION;
}
override void Tick()
{
if ( !target || !master )
@ -3394,7 +3304,7 @@ Class AngerySigil : Inventory
Stop;
}
}
Class AngerySigilX : GhostArtifactX
Class AngerySigilX : SWWMItemOverlay
{
Default
{
@ -3417,13 +3327,11 @@ Class AngerySigilX : GhostArtifactX
return;
}
prev = target.prev;
vel = target.vel;
if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true);
if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE);
FloatBobPhase = target.FloatBobPhase;
if ( !bsprite ) bsprite = GetSpriteIndex('XZW1');
bool bOldInvis = bInvisible;
bInvisible = target.bInvisible||(target.sprite!=bsprite);
bInvisible = target.bInvisible||Inventory(target).Owner;
if ( bInvisible != bOldInvis )
{
SetState(SpawnState+bInvisible);
@ -3464,14 +3372,8 @@ Class DivineSpriteLight : PointLightAttenuated
args[LIGHT_INTENSITY] = Random[Invinciball](10,12)*10;
}
}
Class DivineSpriteSnd : Actor
Class DivineSpriteSnd : SWWMNonInteractiveActor
{
Default
{
+NOBLOCKMAP;
+NOGRAVITY;
+NOINTERACTION;
}
override void Tick()
{
if ( !target || !master )
@ -3668,7 +3570,7 @@ Class DivineSprite : Inventory
Stop;
}
}
Class DivineSpriteX : GhostArtifactX
Class DivineSpriteX : SWWMItemOverlay
{
Default
{
@ -3689,13 +3591,11 @@ Class DivineSpriteX : GhostArtifactX
return;
}
prev = target.prev;
vel = target.vel;
if ( (target.pos != pos) || (target.vel != (0,0,0)) ) SetOrigin(target.pos+vel,true);
if ( angle != target.angle ) A_SetAngle(target.angle,SPF_INTERPOLATE);
FloatBobPhase = target.FloatBobPhase;
if ( !bsprite ) bsprite = GetSpriteIndex('XZW1');
bool bOldInvis = bInvisible;
bInvisible = target.bInvisible||(target.sprite!=bsprite);
bInvisible = target.bInvisible||Inventory(target).Owner;
if ( bOldInvis != bInvisible )
{
SetState(SpawnState+bInvisible);
@ -3713,18 +3613,8 @@ Class DivineSpriteX : GhostArtifactX
// TBD 1.4 Ballsy Bomb
Class BallImpact : Actor
Class BallImpact : SWWMNonInteractiveActor
{
Default
{
Radius 0.1;
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOINTERACTION;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
@ -4061,24 +3951,18 @@ Class SaltLight2 : PaletteLight
}
}
Class SaltImpact : Actor
Class SaltImpact : SWWMNonInteractiveActor
{
Default
{
Obituary "$O_SALTSHOT";
DamageType "Salt";
RenderStyle "Add";
Radius 0.1;
Height 0;
Scale 1.8;
+NOGRAVITY;
+NOBLOCKMAP;
+NODAMAGETHRUST;
+FORCERADIUSDMG;
+FORCEXYBILLBOARD;
+NOTELEPORT;
+FOILINVUL;
+NOINTERACTION;
}
override void PostBeginPlay()
{
@ -4117,17 +4001,6 @@ Class SaltImpact : Actor
}
Spawn("SaltLight2",pos);
}
override void Tick()
{
if ( isFrozen() ) return;
if ( !CheckNoDelay() || (tics == -1) ) return;
if ( tics > 0 ) tics--;
while ( !tics )
{
if ( !SetState(CurState.NextState) )
return;
}
}
States
{
Spawn:
@ -4144,27 +4017,20 @@ Class SaltImpact : Actor
}
}
Class SaltBeam : Actor
Class SaltBeam : SWWMNonInteractiveActor
{
Default
{
Obituary "$O_SALTSHOT";
DamageType "Salt";
RenderStyle "Add";
Radius 0.1;
Height 0;
Stamina 9;
Speed 32;
+NOGRAVITY;
+NOBLOCKMAP;
+DONTSPLASH;
+NOTELEPORT;
+ROLLSPRITE;
+ROLLCENTER;
+NODAMAGETHRUST;
+FORCERADIUSDMG;
+FOILINVUL;
+NOINTERACTION;
}
void SpreadOut()