Boss handling in various places now accounts for enhanced vanilla bosses.

This commit is contained in:
Mari the Deer 2021-09-22 00:32:40 +02:00
commit 6dd9550d0a
8 changed files with 38 additions and 17 deletions

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.7 \cu(Tue 21 Sep 23:35:36 CEST 2021)\c-";
SWWM_SHORTVER="\cw1.1.7 \cu(2021-09-21 23:35:36)\c-";
SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.7 r1 \cu(Wed 22 Sep 00:32:40 CEST 2021)\c-";
SWWM_SHORTVER="\cw1.1.7 r1 \cu(2021-09-22 00:32:40)\c-";

View file

@ -112,7 +112,7 @@ extend Class SWWMHandler
if ( e.Damage > s.topdealt ) s.topdealt = e.Damage;
}
SWWMFlyTracker.Track(e.Thing,e.DamageSource);
if ( e.Thing.bBOSS )
if ( e.Thing.bBOSS || e.Thing.FindInventory("BossMarker") )
{
let tk = e.Thing.FindInventory("DeepImpactOnlyToken");
if ( !tk )
@ -141,7 +141,7 @@ extend Class SWWMHandler
{
if ( e.Thing.IsFriend(e.DamageSource) )
lastcombat = AddOneliner("friendhit",1,10);
else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,e.DamageSource.bBOSS?2:4) && !SWWMHDoomHandler.IsCuteGirl(e.DamageSource) ) // [HDoom] don't shout at the girls
else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,(e.DamageSource.bBOSS||e.DamageSource.FindInventory("BossMarker"))?2:4) && !SWWMHDoomHandler.IsCuteGirl(e.DamageSource) ) // [HDoom] don't shout at the girls
lastcombat = AddOneliner("gethit",1,15);
}
highesttic = gametic;
@ -180,7 +180,7 @@ extend Class SWWMHandler
{
if ( e.Thing.IsFriend(src) )
lastcombat = AddOneliner("friendkill",1,5);
else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,e.Thing.bBOSS?2:5) && !SWWMHDoomHandler.IsCuteGirl(e.Thing) ) // [HDoom] don't shout at the girls
else if ( (!lastcombat || (gametic > lastcombat+100)) && !Random[DemoLines](0,(e.Thing.bBOSS||e.Thing.FindInventory("BossMarker"))?2:5) && !SWWMHDoomHandler.IsCuteGirl(e.Thing) ) // [HDoom] don't shout at the girls
lastcombat = AddOneliner("scorekill",1,15);
}
}
@ -188,7 +188,7 @@ extend Class SWWMHandler
// achievement stuff
if ( e.Thing.IsHostile(src) )
{
if ( e.Thing.bBOSS && ((e.DamageType == 'Dash') || (e.DamageType == 'Buttslam')) )
if ( (e.Thing.bBOSS||e.Thing.FindInventory("BossMarker")) && ((e.DamageType == 'Dash') || (e.DamageType == 'Buttslam')) )
SWWMUtility.AchievementProgressInc('swwm_progress_bossdash',1,src.player);
if ( e.DamageType == 'Push' )
SWWMUtility.AchievementProgressInc('swwm_progress_sneeze',1,src.player);
@ -334,7 +334,7 @@ extend Class SWWMHandler
scr.xcnt = ++ofs;
}
}
if ( e.Thing.bBOSS )
if ( e.Thing.bBOSS || e.Thing.FindInventory("BossMarker") )
{
score += 2000;
if ( scr )

View file

@ -1,6 +1,7 @@
// vanilla boss stuff
Class EndgameBossMarker : Inventory {}
Class BossMarker : Inventory {}
extend Class SWWMHandler
{
@ -116,6 +117,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 3;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
}
bosstag = "$BT_BRUISERS";
}
@ -126,6 +128,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
}
bosstag = "$BT_CYBIE";
}
@ -136,6 +139,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 6;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
}
bosstag = "$BT_SPIDER";
@ -147,6 +151,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 4;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
}
bosstag = "$BT_SPIDER2";
}
@ -157,6 +162,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 2;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
}
bosstag = "$BT_DIMPLE";
}
@ -168,6 +174,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 40; // goodbye, instakills
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
}
if ( e.Thing is 'BossEye' )
@ -181,6 +188,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 4;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
}
bosstag = "$BT_CYBIE2";
}
@ -191,6 +199,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 4;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
}
bosstag = "$BT_LICHES";
}
@ -201,6 +210,7 @@ extend Class SWWMHandler
bossactors.Push(e.Thing);
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 3;
if ( trk ) trk.bBOSS = true;
e.Thing.GiveInventory('BossMarker',1);
}
bosstag = "$BT_MINOTAUR";
}
@ -212,6 +222,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 2;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_DSPARIL";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
}
else if ( e.Thing is 'Sorcerer2' )
@ -223,6 +234,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 8;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_DSPARIL2";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
}
}
@ -234,6 +246,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 2;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_CLERIC";
e.Thing.GiveInventory('BossMarker',1);
}
}
else if ( bossmap == MAP_HMAP36 )
@ -244,6 +257,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 2;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_FIGHTER";
e.Thing.GiveInventory('BossMarker',1);
}
}
else if ( bossmap == MAP_HMAP37 )
@ -254,6 +268,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 2;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_MAGE";
e.Thing.GiveInventory('BossMarker',1);
}
}
else if ( bossmap == MAP_HMAP12 )
@ -264,6 +279,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 4;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_DRAGON";
e.Thing.GiveInventory('BossMarker',1);
}
}
else if ( bossmap == MAP_HMAP23_HMAP27_HMAP48_HMAP55 )
@ -274,6 +290,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 8;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_HERESIARCH";
e.Thing.GiveInventory('BossMarker',1);
}
}
else if ( bossmap == MAP_HMAP40 )
@ -284,6 +301,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 10;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_KORAX";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
}
}
@ -296,6 +314,7 @@ extend Class SWWMHandler
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_DEATHKINGS";
initialized = true; // healthbar shows from the start
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
}
}
@ -307,6 +326,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_ARCHANGELUS";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
}
else if ( e.Thing.GetClassName() == "ArchangelusB" )
@ -318,6 +338,7 @@ extend Class SWWMHandler
if ( upgrademe ) e.Thing.StartHealth = e.Thing.Health *= 5;
if ( trk ) trk.bBOSS = true;
bosstag = "$BT_ARCHANGELUS";
e.Thing.GiveInventory('BossMarker',1);
e.Thing.GiveInventory('EndgameBossMarker',1);
doextramsg = true;
}

View file

@ -77,7 +77,7 @@ extend Class SWWMHandler
override void WorldThingDied( WorldEvent e )
{
if ( profiling ) curms = MSTime();
if ( e.Thing.default.bISMONSTER && ((e.Thing.default.bBOSS) || (e.Thing.GetSpawnHealth() >= 1000)) && (alreadygold.Find(e.Thing) == alreadygold.Size()) )
if ( e.Thing.default.bISMONSTER && ((e.Thing.default.bBOSS) || (e.Thing.GetSpawnHealth() >= 1000) || e.Thing.FindInventory("BossMarker")) && (alreadygold.Find(e.Thing) == alreadygold.Size()) )
{
// make sure we can't farm drops from revivable enemies
// (or cause some things to spam-spawn gold shells)

View file

@ -2345,7 +2345,7 @@ Class MykradvoTendril : Actor
{
if ( t.hitlist[i].hitactor.IsFriend(target) ) continue;
if ( (t.hitlist[i].hitactor == tracer) && bMISSILEMORE ) bMISSILEEVENMORE = true; // we split
int dmg = t.hitlist[i].hitactor.bBOSS?(GetMissileDamage(0,0)*4):max(t.hitlist[i].hitactor.Health,GetMissileDamage(0,0));
int dmg = (t.hitlist[i].hitactor.bBOSS||t.hitlist[i].hitactor.FindInventory("BossMarker"))?(GetMissileDamage(0,0)*4):max(t.hitlist[i].hitactor.Health,GetMissileDamage(0,0));
SWWMUtility.DoKnockback(t.hitlist[i].hitactor,-t.hitlist[i].x+(0,0,.5),((t.hitlist[i].hitactor.Health-dmg)<=0)?60000:8000);
t.hitlist[i].hitactor.DamageMobj(self,target,dmg,'Plasma',DMG_THRUSTLESS);
if ( t.hitlist[i].hitactor && t.hitlist[i].hitactor.bISMONSTER && !Random[Mykradvo](0,3) )
@ -2353,7 +2353,7 @@ Class MykradvoTendril : Actor
}
}
invoker.nextpos = level.Vec3Offset(pos,x*speed);
if ( !bSTANDSTILL && (!tracer || !tracer.bSHOOTABLE || (tracer.Health <= 0) || (tracer.bBOSS && !bMISSILEMORE)) )
if ( !bSTANDSTILL && (!tracer || !tracer.bSHOOTABLE || (tracer.Health <= 0) || ((tracer.bBOSS || tracer.FindInventory("BossMarker")) && !bMISSILEMORE)) )
{
ReactionTime--;
if ( ReactionTime <= 0 )
@ -2396,7 +2396,7 @@ Class MykradvoTendril : Actor
r.pitch = asin(-sdir.z);
r.target = target;
r.tracer = tracer;
if ( tracer && tracer.bBOSS ) r.ReactionTime -= Random[ExploS](5,15);
if ( tracer && (tracer.bBOSS || tracer.FindInventory("BossMarker")) ) r.ReactionTime -= Random[ExploS](5,15);
else r.ReactionTime += Random[ExploS](0,20);
}
return;
@ -2850,7 +2850,7 @@ Class Mykradvo : Inventory
Amount++;
return true;
}
if ( (targets.Size() == 1) && targets[0] && !targets[0].bBOSS )
if ( (targets.Size() == 1) && targets[0] && !targets[0].bBOSS && !targets[0].FindInventory("BossMarker") )
SWWMUtility.MarkAchievement('swwm_achievement_anone',Owner.player);
let p = Spawn("MykradvoBurst",spawnpos);
p.target = Owner;

View file

@ -518,7 +518,7 @@ Class YnykronImpact : Actor
if ( t && YnykronShot(master) )
{
YnykronShot(master).hitlist.Push(t);
if ( t.bBOSS ) YnykronShot(master).hitboss = true;
if ( t.bBOSS || t.FindInventory("BossMarker") ) YnykronShot(master).hitboss = true;
}
// spawn blast that will propagate
let b = Spawn("YnykronDelayedImpact",t.pos);
@ -705,7 +705,7 @@ Class YnykronBeam : Actor
if ( t.hitlist[i].hitactor && YnykronShot(master) )
{
YnykronShot(master).hitlist.Push(t.hitlist[i].hitactor);
if ( t.hitlist[i].hitactor.bBOSS ) YnykronShot(master).hitboss = true;
if ( t.hitlist[i].hitactor.bBOSS || t.hitlist[i].hitactor.FindInventory("BossMarker") ) YnykronShot(master).hitboss = true;
}
// spawn blast that will propagate
let b = Spawn("YnykronImpact",t.hitlist[i].hitlocation);
@ -805,7 +805,7 @@ Class YnykronBeam : Actor
if ( it.hitlist[i].hitactor && YnykronShot(master) )
{
YnykronShot(master).hitlist.Push(it.hitlist[i].hitactor);
if ( it.hitlist[i].hitactor.bBOSS ) YnykronShot(master).hitboss = true;
if ( it.hitlist[i].hitactor.bBOSS || it.hitlist[i].hitactor.FindInventory("BossMarker") ) YnykronShot(master).hitboss = true;
}
// spawn blast that will propagate
let b = Spawn("YnykronImpact",it.hitlist[i].hitlocation);

View file

@ -24,7 +24,7 @@ Class AirBullet : FastProjectile
}
override int DoSpecialDamage( Actor target, int damage, Name damagetype )
{
if ( target.bBOSS ) damage = int(damage*.4);
if ( target.bBOSS || target.FindInventory("BossMarker") ) damage = int(damage*.4);
if ( !bAMBUSH )
{
if ( target == lasthit ) return 0;

View file

@ -1220,7 +1220,7 @@ Class TheBall : Actor
}
if ( crit )
SWWMUtility.DoExplosion(self,dmg/2,25000,150,80,ignoreme:target);
if ( crit && victim && (victim.Health <= 0) && victim.bBOSS && target )
if ( crit && victim && (victim.Health <= 0) && (victim.bBOSS || victim.FindInventory("BossMarker")) && target )
SWWMUtility.MarkAchievement('swwm_achievement_clonk',target.player);
// only rip shootables
if ( (slamforce > girth) && is_schutt )