diff --git a/language.def_base b/language.def_base index a12c29b3c..4bf74a7b5 100644 --- a/language.def_base +++ b/language.def_base @@ -608,6 +608,7 @@ SWWM_UNIT_LITER = "l"; SWWM_YOURSELF = "Yourself"; SWWM_DOKIDOKI = "The Power of Love™"; SWWM_GRAVKILL = "Gravity"; +SWWM_PARRYKILL = "Deflected Projectiles"; SWWM_SETSLOTSTRICT = "\cg!!!WARNING!!!\c-\n\cj\"setslotstrict\" is enabled. This will cause SWWM GZ weapons to not have slots assigned. Please go into Miscellaneous Options and toggle the \"Strict KEYCONF Weapons/Players\" setting.\c-"; SWWM_FCBSEL = "1.150 FCB"; SWWM_XSBSEL = "1.150 XSB"; diff --git a/language.es_base b/language.es_base index 624dd7557..e6a26cd1c 100644 --- a/language.es_base +++ b/language.es_base @@ -531,6 +531,7 @@ SWWM_TITLESCROLL = "SWWM GZ ~ Cute Robutt Whomst Love To Explode Demons\n" SWWM_YOURSELF = "Tú"; SWWM_DOKIDOKI = "El Poder del Amor™"; SWWM_GRAVKILL = "Gravedad"; +SWWM_PARRYKILL = "Proyectiles Devueltos"; SWWM_SETSLOTSTRICT = "\cg!!!ADVERTENCIA!!!\c-\n\cj\"setslotstrict\" está activado. Esto causará que las armas de SWWM GZ no tengan ranuras asignadas. Por favor, ve a Opciones Misceláneas y cambia la opción de \"KEYCONF de Armas/Jugadores estricto\".\c-"; SWWM_WIDESPREAD = "Modo Amplio"; SWWM_TIGHTSPREAD = "Modo Concentrado"; diff --git a/language.version b/language.version index 3fdc55553..324f7b20e 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r382 \cu(Sat 20 Mar 22:50:48 CET 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r382 \cu(2021-03-20 22:50:48)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r383 \cu(Sat 20 Mar 23:20:19 CET 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r383 \cu(2021-03-20 23:20:19)\c-"; diff --git a/zscript/kbase/swwm_kbase.zsc b/zscript/kbase/swwm_kbase.zsc index 6ef45cec0..ad629a5e2 100644 --- a/zscript/kbase/swwm_kbase.zsc +++ b/zscript/kbase/swwm_kbase.zsc @@ -2563,6 +2563,7 @@ Class DemolitionistMenu : GenericMenu else if ( stats.wstats[stats.favweapon].w == 'SWWMGesture' ) str = str..StringTable.Localize("$SWWM_DOKIDOKI"); else if ( stats.wstats[stats.favweapon].w == 'SWWMItemGesture' ) str = str..StringTable.Localize("$T_FROGGY"); else if ( stats.wstats[stats.favweapon].w == 'Weapon' ) str = str..StringTable.Localize("$SWWM_GRAVKILL"); + else if ( stats.wstats[stats.favweapon].w == 'DoomWeapon' ) str = str..StringTable.Localize("$SWWM_PARRYKILL"); else { let def = GetDefaultByType(stats.wstats[stats.favweapon].w); diff --git a/zscript/swwm_thinkers_player.zsc b/zscript/swwm_thinkers_player.zsc index 8cb784d99..499900622 100644 --- a/zscript/swwm_thinkers_player.zsc +++ b/zscript/swwm_thinkers_player.zsc @@ -64,8 +64,9 @@ Class SWWMStats : Thinker Class which = myplayer.ReadyWeapon?myplayer.ReadyWeapon.GetClass():null; if ( inflictor is 'Weapon' ) which = Weapon(inflictor).GetClass(); if ( which is 'DualExplodiumGun' ) which = 'ExplodiumGun'; // don't credit sister weapon + if ( inflictor.FindInventory("ParriedBuff") ) which = 'DoomWeapon'; // gross hack // properly credit some projectiles to their respective gun - if ( inflictor is 'AirBullet' ) which = 'DeepImpact'; + else if ( inflictor is 'AirBullet' ) which = 'DeepImpact'; else if ( inflictor is 'PusherProjectile' ) which = 'PusherWeapon'; else if ( (inflictor is 'ExplodiumMagArm') || (inflictor is 'ExplodiumMagProj') || (inflictor is 'ExplodiumBulletImpact') ) which = 'ExplodiumGun'; else if ( (inflictor is 'DragonBreathArm') || ((inflictor is 'SaltImpact') && !inflictor.Args[0]) || ((inflictor is 'SaltBeam') && !inflictor.Args[1]) || (inflictor is 'CorrodeDebuff') || (inflictor is 'CorrosiveFlechette') || ((inflictor is 'TheBall') && !inflictor.special1) || (inflictor is 'GoldenImpact') || (inflictor is 'GoldenSubImpact') || (inflictor is 'GoldenSubSubImpact') ) which = 'Spreadgun'; diff --git a/zscript/weapons/swwm_deepdarkimpact.zsc b/zscript/weapons/swwm_deepdarkimpact.zsc index 791407df9..c367ae08d 100644 --- a/zscript/weapons/swwm_deepdarkimpact.zsc +++ b/zscript/weapons/swwm_deepdarkimpact.zsc @@ -147,8 +147,8 @@ Class DeepImpact : SWWMWeapon dir = (x+y*cos(j)*i+z*sin(j)*i).unit(); t.hitlist.Clear(); t.hitdist.Clear(); - t.Trace(origin,level.PointInSector(origin.xy),dir,150-i*120,0); - SWWMBulletTrail.DoTrail(self,origin,dir,150-i*120,0); + t.Trace(origin,level.PointInSector(origin.xy),dir,250-i*150,0); + SWWMBulletTrail.DoTrail(self,origin,dir,250-i*150,0); for ( int i=0; i 150) || (rdir dot x < .35) ) continue; + if ( !(m.bMISSILE && !m.IsZeroDamage() && (m.target != self)) ) continue; + Vector3 rdir = level.Vec3Diff(origin,m.pos); + double rdist = rdir.length(); + if ( rdist <= 0. ) continue; + rdir /= rdist; + if ( LineTrace(atan2(rdir.y,rdir.x),rdist,asin(-rdir.z),TRF_THRUACTORS|TRF_ABSPOSITION,origin.z,origin.x,origin.y) || (rdist > 250) || (rdir dot x < .75) ) continue; m.speed = m.vel.length(); m.vel = m.speed*1.5*(-m.vel.unit()*.4+rdir).unit(); Vector3 ndir = m.vel.unit(); m.angle = atan2(ndir.y,ndir.x); m.pitch = asin(-ndir.z); - if ( m.target == self ) continue; if ( m.bSEEKERMISSILE ) m.tracer = m.target; m.target = self; + if ( !m.FindInventory("ParriedBuff") ) + { + let pb = Inventory(Spawn("ParriedBuff")); + pb.AttachToOwner(m); + } } int numpt = Random[Impact](7,12); for ( int i=0; i