From e9f663c8ffab93c6dc79492a4515d260a66ce6ce Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Sun, 21 Aug 2022 16:23:13 +0200 Subject: [PATCH] The Quadravol is complete. --- language.version | 4 +- models/modelnotes.txt | 2 +- zscript/dlc1/swwm_dlcweapons_hud.zsc | 3 - zscript/dlc1/swwm_notashotgun.zsc | 93 ++++++- zscript/dlc1/swwm_notashotgun_fx.zsc | 368 ++++++++++++++++++++++++++- zscript/swwm_thinkers_player.zsc | 2 +- 6 files changed, 447 insertions(+), 25 deletions(-) diff --git a/language.version b/language.version index 801c23391..401a2ebac 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r354 \cu(Sun 21 Aug 12:44:40 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r354 \cu(2022-08-21 12:44:40)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r356 \cu(Sun 21 Aug 16:23:32 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r356 \cu(2022-08-21 16:23:32)\c-"; diff --git a/models/modelnotes.txt b/models/modelnotes.txt index da3883e36..81e6d8f65 100644 --- a/models/modelnotes.txt +++ b/models/modelnotes.txt @@ -6,7 +6,7 @@ Weapon models: - Puntzer Beta - Puntzer Gamma x Sheen HMG - ½ Quadravol + x Quadravol - Sparkster Rifle - Mortal Rifle - Ray-Khom diff --git a/zscript/dlc1/swwm_dlcweapons_hud.zsc b/zscript/dlc1/swwm_dlcweapons_hud.zsc index 475b1c067..96a84f183 100644 --- a/zscript/dlc1/swwm_dlcweapons_hud.zsc +++ b/zscript/dlc1/swwm_dlcweapons_hud.zsc @@ -93,8 +93,5 @@ extend Class Quadravol Screen.DrawTexture(BulletTex[0],false,bx-6,by-(10+i*8),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); if ( chambered ) Screen.DrawTexture(BulletTex[charged],false,bx-14,by-10,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); Screen.DrawText(ChargeFont,Font.CR_UNTRANSLATED,bx-14,by-20,String.Format("%d",chargelevel),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true); - // PLACEHOLDER - String str = "THIS WEAPON IS NOT YET FULLY IMPLEMENTED"; - Screen.DrawText(NewSmallFont,Font.CR_RED,(Screen.GetWidth()-NewSmallFont.StringWidth(str)*CleanXFac_1)/2,Screen.GetHeight()-(swwm_hudmargin*hs+NewSmallFont.GetHeight()*CleanYFac_1),str,DTA_CleanNoMove_1,true); } } diff --git a/zscript/dlc1/swwm_notashotgun.zsc b/zscript/dlc1/swwm_notashotgun.zsc index 683be2a5e..8e2b6b207 100644 --- a/zscript/dlc1/swwm_notashotgun.zsc +++ b/zscript/dlc1/swwm_notashotgun.zsc @@ -109,10 +109,13 @@ Class Quadravol : SWWMWeapon } rings += 3; } + if ( bMelee && fool ) SWWMUtility.AchievementProgressInc("roast",1,player); + if ( (bMelee && fool) || (idx>=4) ) A_StartSound("quadshot/pointblank",CHAN_WEAPON,CHANF_OVERLAP,.6+idx*.1,.4-idx*.05,1.2-idx*.05); Vector3 x2, y2, z2; [x2, y2, z2] = swwm_CoordUtil.GetAxes(BulletSlope(),angle,roll); double a, s; Actor p; + bool bExtra = ((idx>=4)&&invoker.chambered&&!invoker.charged); switch ( idx ) { default: @@ -121,7 +124,7 @@ Class Quadravol : SWWMWeapon A_SWWMFlash(); SWWMHandler.DoFlash(self,Color(64,255,192,64),5); A_AlertMonsters(swwm_uncapalert?0:2000); - SWWMUtility.DoKnockback(self,-x,1500.); + SWWMUtility.DoKnockback(self,-x,20000.); p = Spawn("QuadProj",origin); p.target = self; p.angle = atan2(x2.y,x2.x); @@ -135,7 +138,6 @@ Class Quadravol : SWWMWeapon p.special2 += bMelee?120000:40000; p.bAMBUSH = bMelee; p.ExplodeMissile(null,null); - self.DamageMobj(invoker,self,bMelee?20:40,'Fire',DMG_EXPLOSION); } break; case 1: @@ -144,7 +146,7 @@ Class Quadravol : SWWMWeapon A_SWWMFlash(); SWWMHandler.DoFlash(self,Color(64,255,192,64),7); A_AlertMonsters(swwm_uncapalert?0:3000); - SWWMUtility.DoKnockback(self,-x,2500.); + SWWMUtility.DoKnockback(self,-x,40000.); p = Spawn("QuadProj2",origin); p.target = self; p.angle = atan2(x2.y,x2.x); @@ -158,20 +160,95 @@ Class Quadravol : SWWMWeapon p.special2 = bMelee?150000:60000; p.bAMBUSH = bMelee; p.ExplodeMissile(null,null); - self.DamageMobj(invoker,self,bMelee?20:40,'Fire',DMG_EXPLOSION); } break; case 2: - A_Log("\cg// TODO - Fire Level 3\c-"); + A_QuakeEx(6,6,6,25,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.8); + A_BumpFOV(.96); + A_SWWMFlash(); + SWWMHandler.DoFlash(self,Color(64,255,192,64),8); + A_AlertMonsters(swwm_uncapalert?0:4000); + SWWMUtility.DoKnockback(self,-x,80000.); + p = Spawn("QuadProj3",origin); + p.target = self; + p.angle = atan2(x2.y,x2.x); + p.pitch = asin(-x2.z); + p.vel = x2*p.speed; + if ( pointblank || bMelee ) + { + p.tracer = self; + p.master = fool; + p.special1 = bMelee?200:100; + p.special2 = bMelee?180000:80000; + p.bAMBUSH = bMelee; + p.ExplodeMissile(null,null); + } break; case 3: - A_Log("\cg// TODO - Fire Level 4\c-"); + A_QuakeEx(7,7,7,30,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:1.2); + A_BumpFOV(.95); + A_SWWMFlash(); + SWWMHandler.DoFlash(self,Color(64,255,192,64),12); + A_AlertMonsters(swwm_uncapalert?0:6000); + SWWMUtility.DoKnockback(self,-x,150000.); + if ( pointblank || bMelee ) + { + p = Spawn("QuadProj3",origin); + p.target = self; + p.angle = atan2(x2.y,x2.x); + p.pitch = asin(-x2.z); + p.vel = x2*p.speed; + p.tracer = self; + p.master = fool; + p.special1 = bMelee?300:200; + p.special2 = bMelee?200000:100000; + p.bAMBUSH = bMelee; + p.ExplodeMissile(null,null); + } + else for ( int i=0; i<20; i++ ) + { + s = FRandom[Quadravol](0,.2); + a = (i%4)*90 + FRandom[Quadravol](-50,50)*s; + dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s); + p = Spawn("QuadProjSub2",origin); + p.target = self; + p.angle = atan2(dir.y,dir.x); + p.pitch = asin(-dir.z); + p.vel = dir*p.speed*FRandom[Quadravol](1.,1.5); + } break; case 4: - if ( !invoker.charged ) A_Log("\cg// TODO - Fire Level 5+\c-"); - else A_Log("\cg// TODO - Fire Level 5\c-"); + A_QuakeEx(8+bExtra,8+bExtra,8+bExtra,40,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:1.5+bExtra*0.25); + A_BumpFOV(.94-bExtra*.1); + A_SWWMFlash(); + SWWMHandler.DoFlash(self,Color(64,255,192,64),15+bExtra*3); + A_AlertMonsters(swwm_uncapalert?0:8000); + if ( bMelee ) SWWMUtility.DoKnockback(self,-x,600000.+bExtra*100000.); + else if ( pointblank ) SWWMUtility.DoKnockback(self,-x,1500000.+bExtra*500000.); + else SWWMUtility.DoKnockback(self,-x,400000.+bExtra*100000.); + if ( fool ) + { + SWWMUtility.DoKnockback(fool,x,1500000.+bExtra*500000.); + if ( fool.bCANBLAST && !fool.bDONTBLAST ) fool.bBLASTED = true; + } + int numpt = bExtra?15:10; + for ( int i=0; i