Migrate various thinkers to plain objects.

WIP: Gib models currently in progress.
WIP: IK re-rigging of Demolitionist in progress.
This commit is contained in:
Mari the Deer 2022-02-28 23:44:50 +01:00
commit a7eda2702a
22 changed files with 192 additions and 257 deletions

View file

@ -277,79 +277,39 @@ extend Class SWWMHandler
if ( e.DamageType == 'Push' )
{
score += 500;
if ( scr )
{
scr.xscore[ofs] = 0;
scr.xstr[ofs] = StringTable.Localize("$SWWM_SHAMEFUL");
scr.xcnt = ++ofs;
}
if ( scr ) scr.AppendXString(StringTable.Localize("$SWWM_SHAMEFUL"));
}
else if ( e.DamageType == 'Buttslam' )
{
score += 300;
if ( scr )
{
scr.xscore[ofs] = 0;
scr.xstr[ofs] = StringTable.Localize("$SWWM_BUTTSLAM");
scr.xcnt = ++ofs;
}
if ( scr ) scr.AppendXString(StringTable.Localize("$SWWM_BUTTSLAM"));
}
else if ( e.DamageType == 'Love' )
{
score += 600;
if ( scr )
{
scr.xscore[ofs] = 0;
scr.xtcolor[ofs] = Font.FindFontColor('BlushPink');
scr.xstr[ofs] = StringTable.Localize(((e.Thing is 'WolfensteinSS')||(e.Thing.Species=='WolfensteinSS'))?"$SWWM_LOVED_ALT":"$SWWM_LOVED");
scr.xcnt = ++ofs;
}
if ( scr ) scr.AppendXString(StringTable.Localize(((e.Thing is 'WolfensteinSS')||(e.Thing.Species=='WolfensteinSS'))?"$SWWM_LOVED_ALT":"$SWWM_LOVED"),0,Font.FindFontColor('BlushPink'));
}
else if ( e.Inflictor is 'FroggyChair' )
{
score += 1440;
if ( scr )
{
scr.xscore[ofs] = 0;
scr.xtcolor[ofs] = Font.CR_GREEN;
scr.xstr[ofs] = StringTable.Localize("$SWWM_FROGGED");
scr.xcnt = ++ofs;
}
if ( scr ) scr.AppendXString(StringTable.Localize("$SWWM_FROGGED"),0,Font.CR_GREEN);
}
Inventory pb;
if ( e.Inflictor && (pb = e.Inflictor.FindInventory('ParriedBuff')) )
{
score += 200;
if ( pb.special1&1 ) score += 200;
if ( scr )
{
scr.xscore[ofs] = 0;
if ( pb.special1&1 ) scr.xstr[ofs] = StringTable.Localize("$SWWM_PPARRY");
else scr.xstr[ofs] = StringTable.Localize("$SWWM_PARRY");
scr.xcnt = ++ofs;
}
if ( scr ) scr.AppendXString(StringTable.Localize((pb.special1&1)?"$SWWM_PPARRY":"$SWWM_PARRY"));
}
if ( (e.Damage >= e.Thing.GetSpawnHealth()*2) || (((e.Thing.Health <= e.Thing.GetGibHealth()) || (src.bEXTREMEDEATH) || (e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.DamageType == 'Extreme')) && !src.bNOEXTREMEDEATH && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH)) )
{
score *= 2;
if ( scr )
{
scr.xscore[ofs] = 0;
scr.xstr[ofs] = StringTable.Localize("$SWWM_OVERKILL");
scr.xcnt = ++ofs;
}
if ( scr ) scr.AppendXString(StringTable.Localize("$SWWM_OVERKILL"));
SWWMUtility.AchievementProgressInc("gib",1,src.player);
}
score = int(score*(1.+.5*min(multilevel[pnum],16)));
if ( (multilevel[pnum] > 0) && scr )
{
if ( scr )
{
scr.xscore[ofs] = (multilevel[pnum]>=16)?int.max:(multilevel[pnum]+1);
scr.xstr[ofs] = StringTable.Localize("$SWWM_MULTIKILL");
scr.xcnt = ++ofs;
}
}
scr.AppendXString(StringTable.Localize("$SWWM_MULTIKILL"),(multilevel[pnum]>=16)?int.max:(multilevel[pnum]+1));
spreecount[pnum]++;
if ( s && (spreecount[pnum] > s.skill) && !tookdamage[pnum] )
s.skill = spreecount[pnum];
@ -360,21 +320,12 @@ extend Class SWWMHandler
if ( spreecount[pnum] > 10 ) spreebonus = int(10*((spreecount[pnum]/10.)**.25));
score += 100+spreebonus;
if ( (spreecount[pnum] > 0) && scr )
{
scr.xscore[ofs] = spreecount[pnum];
scr.xstr[ofs] = StringTable.Localize("$SWWM_SPREEKILL");
scr.xcnt = ++ofs;
}
scr.AppendXString(StringTable.Localize("$SWWM_SPREEKILL"),spreecount[pnum]);
}
if ( e.Thing.bBOSS || e.Thing.FindInventory("BossMarker") )
{
score += 2000;
if ( scr )
{
scr.xscore[ofs] = 0;
scr.xstr[ofs] = StringTable.Localize("$SWWM_BOSSKILL");
scr.xcnt = ++ofs;
}
if ( scr ) scr.AppendXString(StringTable.Localize("$SWWM_BOSSKILL"));
}
SWWMCredits.Give(src.player,score);
if ( scr ) scr.score = score; // update final score

View file

@ -153,7 +153,13 @@ extend Class SWWMHandler
if ( swwm_notrack )
{
int n = trackers_cnt;
while ( trackers ) trackers.Destroy(); // wow that's simple, all in one line
while ( trackers )
{
let next = trackers.next;
trackers.Destroy(); // wow that's simple, all in one line
trackers = next;
}
trackers_cnt = 0;
Console.Printf("%d trackers removed.",n);
}
else
@ -717,5 +723,4 @@ extend Class SWWMHandler
}
return false;
}
}

View file

@ -223,6 +223,77 @@ extend Class SWWMHandler
SWWMUtility.MarkAchievement("wantdie",players[consoleplayer]);
}
private void UpdateHUDObjects()
{
// score objects
SWWMScoreObj so = scorenums;
SWWMScoreObj soprev = null, sonext;
while ( so )
{
sonext = so.next;
if ( so.Tick() )
{
if ( soprev ) soprev.next = sonext;
else scorenums = sonext;
so.Destroy();
scorenums_cnt--;
}
else soprev = so;
so = sonext;
}
so = damnums;
soprev = null;
while ( so )
{
sonext = so.next;
if ( so.Tick() )
{
if ( soprev ) soprev.next = sonext;
else damnums = sonext;
so.Destroy();
scorenums_cnt--;
}
else soprev = so;
so = sonext;
}
// interest markers
SWWMInterest ip = intpoints;
SWWMInterest ipprev = null, ipnext;
while ( ip )
{
ipnext = ip.next;
if ( ip.Tick() )
{
if ( ipprev ) ipprev.next = ipnext;
else intpoints = ipnext;
ip.Destroy();
intpoints_cnt--;
}
else ipprev = ip;
ip = ipnext;
}
// combat trackers
SWWMCombatTracker trk = trackers;
SWWMCombatTracker trkprev = null, trknext;
int dbar = swwm_damagetarget;
int mxdist = swwm_maxtargetdist;
while ( trk )
{
trknext = trk.next;
trk.dbar = dbar;
trk.mxdist = mxdist;
if ( trk.Tick() )
{
if ( trkprev ) trkprev.next = trknext;
else trackers = trknext;
trk.Destroy();
trackers_cnt--;
}
else trkprev = trk;
trk = trknext;
}
}
// "simple" tracking (used by the minimap)
private void SimpleTracking()
{
@ -348,9 +419,10 @@ extend Class SWWMHandler
}
}
SWWMSimpleTracker trk = strackers;
SWWMSimpleTracker prev = null, next;
while ( trk )
{
SWWMSimpleTracker next = trk.next;
next = trk.next;
// minimize lifespan of destroyed targets
if ( !trk.target ) trk.lastupdate = min(trk.lastupdate,level.maptime);
else if ( !trk.expired )
@ -366,12 +438,12 @@ extend Class SWWMHandler
// prune expired trackers
if ( trk.lastupdate+140 < level.maptime )
{
if ( !trk.prev ) strackers = trk.next;
else trk.prev.next = trk.next;
if ( trk.next ) trk.next.prev = trk.prev;
if ( !prev ) strackers = trk.next;
else prev.next = trk.next;
trk.Destroy();
strackers_cnt--;
}
else prev = trk;
trk = next;
}
}