A whole fat load of micro-optimizations.

Okuplok still lags like fuck, unfortunately.
This commit is contained in:
Mari the Deer 2022-06-17 22:36:51 +02:00
commit b6f631f6e9
15 changed files with 369 additions and 280 deletions

View file

@ -66,7 +66,7 @@ extend Class SWWMHandler
bool spawnme = true;
if ( swwm_accdamage )
{
// find existing damage number
// find existing damage number (slow)
for ( SWWMScoreObj d=damnums; d; d=d.next )
{
if ( (d.starttic < level.maptime) || (d.acc != e.Thing) ) continue;
@ -76,20 +76,7 @@ extend Class SWWMHandler
break;
}
}
if ( spawnme ) SWWMScoreObj.Spawn(-e.Damage,e.Thing.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+e.Thing.Height/2),ST_Damage,e.Thing);
// update combat tracker for it
// note: don't update if it's a hostile player unless hurt by you or a friend
if ( !(e.Thing is 'BossBrain') && (!e.Thing.player || (!e.Thing.IsFriend(players[consoleplayer].mo) && e.DamageSource && e.DamageSource.IsFriend(players[consoleplayer].mo))) )
{
for ( SWWMCombatTracker t=trackers; t; t=t.next )
{
if ( t.mytarget != e.Thing ) continue;
t.updated = level.maptime+35;
break;
}
}
// fall dmg
SWWMWhoPushedMe.SetInstigator(e.Thing,e.DamageSource);
if ( spawnme ) SWWMScoreObj.SpawnFromHandler(self,-e.Damage,e.Thing.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+e.Thing.Height/2),ST_Damage,e.Thing);
// stats
if ( e.Thing.player )
{
@ -102,34 +89,34 @@ extend Class SWWMHandler
if ( e.Damage > s.toptaken ) s.toptaken = e.Damage;
}
}
if ( e.DamageSource && e.DamageSource.player )
if ( !e.DamageSource || !e.DamageSource.player ) return;
// fall dmg
SWWMWhoPushedMe.SetInstigator(e.Thing,e.DamageSource);
dealtdamage[e.DamageSource.PlayerNumber()] = true;
let s = SWWMStats.Find(e.DamageSource.player);
if ( s ) // deathmatch telefrag-on-spawn may cause this to be null
{
dealtdamage[e.DamageSource.PlayerNumber()] = true;
let s = SWWMStats.Find(e.DamageSource.player);
if ( s ) // deathmatch telefrag-on-spawn may cause this to be null
{
s.AddDamageDealt(e.Damage);
if ( e.Damage > s.topdealt ) s.topdealt = e.Damage;
}
SWWMFlyTracker.Track(e.Thing,e.DamageSource);
if ( e.Thing.bBOSS || e.Thing.FindInventory("BossMarker") )
{
let tk = e.Thing.FindInventory("DeepImpactOnlyToken");
if ( !tk )
{
tk = Inventory(Actor.Spawn("DeepImpactOnlyToken"));
tk.AttachToOwner(e.Thing);
tk.special1 = 0;
}
Inventory pb;
if ( (tk.special1 != -1) && ((e.DamageType == 'Push') || (e.Inflictor && (pb = e.Inflictor.FindInventory("ParriedBuff")) && pb.bAMBUSH)) )
tk.special1 = 1;
else tk.special1 = -1;
}
// barrel destruction
if ( (e.Thing is 'ExplosiveBarrel') && (e.Thing.Health <= 0) )
SWWMUtility.AchievementProgressInc("barrel",1,e.DamageSource.player);
s.AddDamageDealt(e.Damage);
if ( e.Damage > s.topdealt ) s.topdealt = e.Damage;
}
SWWMFlyTracker.Track(e.Thing,e.DamageSource);
if ( e.Thing.bBOSS || e.Thing.FindInventory("BossMarker") )
{
let tk = e.Thing.FindInventory("DeepImpactOnlyToken");
if ( !tk )
{
tk = Inventory(Actor.Spawn("DeepImpactOnlyToken"));
tk.AttachToOwner(e.Thing);
tk.special1 = 0;
}
Inventory pb;
if ( (tk.special1 != -1) && ((e.DamageType == 'Push') || (e.Inflictor && (pb = e.Inflictor.FindInventory("ParriedBuff")) && pb.bAMBUSH)) )
tk.special1 = 1;
else tk.special1 = -1;
}
// barrel destruction
if ( (e.Thing is 'ExplosiveBarrel') && (e.Thing.Health <= 0) )
SWWMUtility.AchievementProgressInc("barrel",1,e.DamageSource.player);
}
// combat hit chatter
@ -272,7 +259,7 @@ extend Class SWWMHandler
}
SWWMScoreObj scr = null;
if ( src.player == players[consoleplayer] )
scr = SWWMScoreObj.Spawn(score,e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
scr = SWWMScoreObj.SpawnFromHandler(self,score,e.Thing.Vec3Offset(0,0,e.Thing.Height/2));
int ofs = 0;
if ( e.DamageType == 'Push' )
{
@ -335,7 +322,7 @@ extend Class SWWMHandler
SWWMCredits.Give(src.player,1000);
if ( src.player == players[consoleplayer] ) Console.Printf(StringTable.Localize("$SWWM_LASTMONSTER"),1000);
else Console.Printf(StringTable.Localize("$SWWM_LASTMONSTERREM"),src.player.GetUserName(),1000);
SWWMScoreObj.Spawn(1000,src.Vec3Offset(0,0,src.Height/2));
SWWMScoreObj.SpawnFromHandler(self,1000,src.Vec3Offset(0,0,src.Height/2));
SWWMUtility.AchievementProgressInc("allkills",1,src.player);
}
}