A whole fat load of micro-optimizations.
Okuplok still lags like fuck, unfortunately.
This commit is contained in:
parent
825caeca29
commit
b6f631f6e9
15 changed files with 369 additions and 280 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue