diff --git a/language.version b/language.version index 18751f997..2f350d39d 100644 --- a/language.version +++ b/language.version @@ -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-"; diff --git a/zscript/handler/swwm_handler_damage.zsc b/zscript/handler/swwm_handler_damage.zsc index 062476f41..486cd6f46 100644 --- a/zscript/handler/swwm_handler_damage.zsc +++ b/zscript/handler/swwm_handler_damage.zsc @@ -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 ) diff --git a/zscript/handler/swwm_handler_vanillaboss.zsc b/zscript/handler/swwm_handler_vanillaboss.zsc index aaab3c2a6..05c0d06e5 100644 --- a/zscript/handler/swwm_handler_vanillaboss.zsc +++ b/zscript/handler/swwm_handler_vanillaboss.zsc @@ -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; } diff --git a/zscript/handler/swwm_handler_worldthings.zsc b/zscript/handler/swwm_handler_worldthings.zsc index 0d832b960..4b4973b7d 100644 --- a/zscript/handler/swwm_handler_worldthings.zsc +++ b/zscript/handler/swwm_handler_worldthings.zsc @@ -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) diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index 92813af2a..fe7991bde 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -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; diff --git a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc index 28d5821c1..f521cf587 100644 --- a/zscript/weapons/swwm_deathlydeathcannon_fx.zsc +++ b/zscript/weapons/swwm_deathlydeathcannon_fx.zsc @@ -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); diff --git a/zscript/weapons/swwm_deepdarkimpact_fx.zsc b/zscript/weapons/swwm_deepdarkimpact_fx.zsc index 0f493504f..4f56910ae 100644 --- a/zscript/weapons/swwm_deepdarkimpact_fx.zsc +++ b/zscript/weapons/swwm_deepdarkimpact_fx.zsc @@ -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; diff --git a/zscript/weapons/swwm_shot_fx.zsc b/zscript/weapons/swwm_shot_fx.zsc index 3a574d3ad..4142d0188 100644 --- a/zscript/weapons/swwm_shot_fx.zsc +++ b/zscript/weapons/swwm_shot_fx.zsc @@ -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 )