diff --git a/graphics/hud/IconSaw.png b/graphics/hud/IconSaw.png index e78dceb..ace5ba1 100644 Binary files a/graphics/hud/IconSaw.png and b/graphics/hud/IconSaw.png differ diff --git a/graphics/hud/IconTrns.png b/graphics/hud/IconTrns.png index d04dc13..e9b474a 100644 Binary files a/graphics/hud/IconTrns.png and b/graphics/hud/IconTrns.png differ diff --git a/graphics/hud/UseSaw.png b/graphics/hud/UseSaw.png index 7ec8b14..6a58018 100644 Binary files a/graphics/hud/UseSaw.png and b/graphics/hud/UseSaw.png differ diff --git a/graphics/hud/UseTrns.png b/graphics/hud/UseTrns.png index 153d255..c18115c 100644 Binary files a/graphics/hud/UseTrns.png and b/graphics/hud/UseTrns.png differ diff --git a/modeldef.chainsaw b/modeldef.chainsaw index 77cca6e..0e40780 100644 --- a/modeldef.chainsaw +++ b/modeldef.chainsaw @@ -22,3 +22,84 @@ Model "UTChainsaw" FrameIndex CSWP B 1 0 } + +Model "UTChainsaw" +{ + Path "models" + Model 0 "chainsawM_d.3d" + SurfaceSkin 0 0 "Jchainsaw1.png" + SurfaceSkin 0 1 "Jchainsaw2.png" + SurfaceSkin 0 2 "Jchainsaw3.png" + SurfaceSkin 0 3 "Jchainsaw4.png" + Scale 0.2 0.16 0.18 + Offset 3.5 -12.8 -7.2 + AngleOffset 268 + PitchOffset 90 + + // select + FrameIndex CSWS A 0 2 + FrameIndex CSWS B 0 3 + FrameIndex CSWS C 0 4 + FrameIndex CSWS D 0 5 + FrameIndex CSWS E 0 6 + FrameIndex CSWS F 0 7 + FrameIndex CSWS G 0 8 + FrameIndex CSWS H 0 9 + FrameIndex CSWS I 0 10 + FrameIndex CSWS J 0 11 + FrameIndex CSWS K 0 12 + FrameIndex CSWS L 0 13 + FrameIndex CSWS M 0 14 + FrameIndex CSWS N 0 15 + FrameIndex CSWS O 0 16 + // idle + FrameIndex CSWI A 0 17 + FrameIndex CSWI B 0 18 + FrameIndex CSWI C 0 19 + FrameIndex CSWI D 0 20 + FrameIndex CSWI E 0 21 + FrameIndex CSWI F 0 22 + FrameIndex CSWI G 0 23 + FrameIndex CSWI H 0 24 + FrameIndex CSWI I 0 25 + FrameIndex CSWI J 0 26 + // swipe + FrameIndex CSWA A 0 27 + FrameIndex CSWA B 0 28 + FrameIndex CSWA C 0 29 + FrameIndex CSWA D 0 30 + FrameIndex CSWA E 0 31 + FrameIndex CSWA F 0 32 + FrameIndex CSWA G 0 33 + FrameIndex CSWA H 0 34 + FrameIndex CSWA I 0 35 + FrameIndex CSWA J 0 36 + FrameIndex CSWA K 0 37 + // jab + FrameIndex CSWJ A 0 42 + FrameIndex CSWJ B 0 43 + FrameIndex CSWJ C 0 44 + FrameIndex CSWJ D 0 45 + FrameIndex CSWJ E 0 46 + FrameIndex CSWJ F 0 47 + FrameIndex CSWJ G 0 48 + FrameIndex CSWJ H 0 49 + FrameIndex CSWJ I 0 50 + FrameIndex CSWJ J 0 51 + FrameIndex CSWJ K 0 52 + FrameIndex CSWJ L 0 53 + FrameIndex CSWJ M 0 54 + FrameIndex CSWJ N 0 55 + FrameIndex CSWJ O 0 56 + FrameIndex CSWJ P 0 57 + FrameIndex CSWJ Q 0 58 + FrameIndex CSWJ R 0 59 + FrameIndex CSWJ S 0 60 + // down + FrameIndex CSWD A 0 62 + FrameIndex CSWD B 0 63 + FrameIndex CSWD C 0 64 + FrameIndex CSWD D 0 65 + FrameIndex CSWD E 0 66 + FrameIndex CSWD F 0 67 +} \ No newline at end of file diff --git a/modeldef.warhead b/modeldef.warhead index aa4a4ce..40cbf14 100644 --- a/modeldef.warhead +++ b/modeldef.warhead @@ -79,10 +79,10 @@ Model "WarheadLauncher" SurfaceSkin 0 1 "jwarhead2.png" SurfaceSkin 0 2 "jwarhead3.png" SurfaceSkin 0 3 "jwarhead4.png" - Scale 0.1 0.06 0.1 + Scale 0.2 0.12 0.2 PitchOffset 2.8125 RollOffset 22.5 - Offset 4.5 -7.8 -4.2 + Offset 7.9 -15.6 -9.2 // select FrameIndex WARS A 0 0 diff --git a/models/Jwarhead3.png b/models/Jwarhead3.png index 2a363c3..872949d 100644 Binary files a/models/Jwarhead3.png and b/models/Jwarhead3.png differ diff --git a/readme.txt b/readme.txt index 561c442..fa3582f 100644 --- a/readme.txt +++ b/readme.txt @@ -30,10 +30,10 @@ Currently implemented: - Searchlight (light amplification visor) - Enhanced Shock Rifle (slot 4, limited ammo, invulnerability sphere) - UT HUD + - Impact Hammer (slot 1) In progress: - - Impact Hammer (slot 1) - Chainsaw (slot 1) - Translocator (slot 1) - Enforcer (slot 2) diff --git a/sndinfo.txt b/sndinfo.txt index 9b5a997..7639193 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -126,6 +126,11 @@ impact/loop imploop impact/release impaltrl impact/fire impfire +chainsaw/select chainpck +chainsaw/idle chainidl +chainsaw/lower chainpdn +chainsaw/fire sawhit + ges/hit gelhit ges/select gelselec ges/fire gelshot diff --git a/textures.chainsaw b/textures.chainsaw index eee2ecc..758f2db 100644 --- a/textures.chainsaw +++ b/textures.chainsaw @@ -1,2 +1,63 @@ Sprite "CSWPA0",1,1{} Sprite "CSWPB0",1,1{} +Sprite "CSWSA0",1,1{} +Sprite "CSWSB0",1,1{} +Sprite "CSWSC0",1,1{} +Sprite "CSWSD0",1,1{} +Sprite "CSWSE0",1,1{} +Sprite "CSWSF0",1,1{} +Sprite "CSWSG0",1,1{} +Sprite "CSWSH0",1,1{} +Sprite "CSWSI0",1,1{} +Sprite "CSWSJ0",1,1{} +Sprite "CSWSK0",1,1{} +Sprite "CSWSL0",1,1{} +Sprite "CSWSM0",1,1{} +Sprite "CSWSN0",1,1{} +Sprite "CSWSO0",1,1{} +Sprite "CSWIA0",1,1{} +Sprite "CSWIB0",1,1{} +Sprite "CSWIC0",1,1{} +Sprite "CSWID0",1,1{} +Sprite "CSWIE0",1,1{} +Sprite "CSWIF0",1,1{} +Sprite "CSWIG0",1,1{} +Sprite "CSWIH0",1,1{} +Sprite "CSWII0",1,1{} +Sprite "CSWIJ0",1,1{} +Sprite "CSWAA0",1,1{} +Sprite "CSWAB0",1,1{} +Sprite "CSWAC0",1,1{} +Sprite "CSWAD0",1,1{} +Sprite "CSWAE0",1,1{} +Sprite "CSWAF0",1,1{} +Sprite "CSWAG0",1,1{} +Sprite "CSWAH0",1,1{} +Sprite "CSWAI0",1,1{} +Sprite "CSWAJ0",1,1{} +Sprite "CSWAK0",1,1{} +Sprite "CSWJA0",1,1{} +Sprite "CSWJB0",1,1{} +Sprite "CSWJC0",1,1{} +Sprite "CSWJD0",1,1{} +Sprite "CSWJE0",1,1{} +Sprite "CSWJF0",1,1{} +Sprite "CSWJG0",1,1{} +Sprite "CSWJH0",1,1{} +Sprite "CSWJI0",1,1{} +Sprite "CSWJJ0",1,1{} +Sprite "CSWJK0",1,1{} +Sprite "CSWJL0",1,1{} +Sprite "CSWJM0",1,1{} +Sprite "CSWJN0",1,1{} +Sprite "CSWJO0",1,1{} +Sprite "CSWJP0",1,1{} +Sprite "CSWJQ0",1,1{} +Sprite "CSWJR0",1,1{} +Sprite "CSWJS0",1,1{} +Sprite "CSWDA0",1,1{} +Sprite "CSWDB0",1,1{} +Sprite "CSWDC0",1,1{} +Sprite "CSWDD0",1,1{} +Sprite "CSWDE0",1,1{} +Sprite "CSWDF0",1,1{} diff --git a/zscript/biorifle.zsc b/zscript/biorifle.zsc index 4952d90..7556e40 100644 --- a/zscript/biorifle.zsc +++ b/zscript/biorifle.zsc @@ -398,7 +398,7 @@ Class BioRifle : UTWeapon UTMainHandler.DoFlash(self,Color(48,0,255,0),1); A_AlertMonsters(); if ( alt ) A_QuakeEx(1+0.5*invoker.charge,1+0.5*invoker.charge,1+0.5*invoker.charge,5+1.2*invoker.charge,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05+0.01*invoker.charge); - else A_QuakeEx(1,1,1,5,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); + else A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); Vector3 x, y, z; double a, s; [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); diff --git a/zscript/chainsaw.zsc b/zscript/chainsaw.zsc index d31f649..abc78cc 100644 --- a/zscript/chainsaw.zsc +++ b/zscript/chainsaw.zsc @@ -1,5 +1,20 @@ Class UTChainsaw : UTWeapon replaces Chainsaw { + double sawcnt; + + action void A_SawHit() + { + A_QuakeEx(3,3,3,2,0,1,"",QF_RELATIVE,rollIntensity:0.15); + invoker.sawcnt += 1./TICRATE; + if ( invoker.sawcnt < 0.15 ) return; + invoker.sawcnt = 0; + invoker.FireEffect(); + } + action void A_SawSwipe() + { + A_QuakeEx(3,3,3,3,0,1,"",QF_RELATIVE,rollIntensity:0.15); + invoker.FireEffect(); + } Default { Tag "Chainsaw"; @@ -16,5 +31,75 @@ Class UTChainsaw : UTWeapon replaces Chainsaw Stop; CSWP B -1; Stop; + Select: + CSWS A 1 A_Raise(int.max); + Wait; + Ready: + CSWS ABCDEFGHIJLMNO 1 A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE,rollIntensity:0.1); + Idle: + CSWI A 0 A_PlaySound("chainsaw/idle",CHAN_6,looping:true); + CSWI ABCDEFGHIJ 1 + { + A_WeaponReady(); + A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE,rollIntensity:0.1); + } + Goto Idle+1; + Fire: + CSWJ A 1 A_PlaySound("chainsaw/fire",CHAN_6,looping:true); + CSWJ BCDEF 1 A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE,rollIntensity:0.1); + Hold: + CSWJ G 1 A_SawHit(); + CSWJ H 0 A_Refire(1); + Goto Release; + CSWJ H 1 A_SawHit(); + CSWJ I 0 A_Refire(1); + Goto Release; + CSWJ I 1 A_SawHit(); + CSWJ J 0 A_Refire(1); + Goto Release; + CSWJ J 1 A_SawHit(); + CSWJ K 0 A_Refire(1); + Goto Release; + CSWJ K 1 A_SawHit(); + CSWJ L 0 A_Refire(1); + Goto Release; + CSWJ L 1 A_SawHit(); + CSWJ M 0 A_Refire(1); + Goto Release; + CSWJ M 1 A_SawHit(); + CSWJ N 0 A_Refire(1); + Goto Release; + CSWJ N 1 A_SawHit(); + CSWJ O 0 A_Refire(1); + Goto Release; + CSWJ O 1 A_SawHit(); + CSWJ P 0 A_Refire(1); + Goto Release; + CSWJ P 1 A_SawHit(); + CSWJ Q 0 A_Refire(1); + Goto Release; + CSWJ Q 1 A_SawHit(); + CSWJ R 0 A_Refire(1); + Goto Release; + CSWJ R 1 A_SawHit(); + CSWJ S 0 A_Refire(1); + Goto Release; + CSWJ S 1 A_SawHit(); + CSWJ G 0 A_Refire("Hold"); + Release: + CSWJ FEDCBA 1 A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE,rollIntensity:0.1); + Goto Idle; + AltFire: + CSWA A 0 A_PlaySound("chainsaw/fire",CHAN_6); + CSWA ABCDEFG 2 A_QuakeEx(3,3,3,3,0,1,"",QF_RELATIVE,rollIntensity:0.15); + CSWA H 2 A_SawSwipe(); + CSWA IJK 2 A_QuakeEx(3,3,3,3,0,1,"",QF_RELATIVE,rollIntensity:0.15); + CSWA K 0 A_PlaySound("chainsaw/idle",CHAN_6,looping:true); + Goto Ready; + Deselect: + CSWD A 0 A_PlaySound("chainsaw/lower",CHAN_6); + CSWD ABCDEF 2; + CSWD F 1 A_Lower(int.max); + Wait; } } diff --git a/zscript/flakcannon.zsc b/zscript/flakcannon.zsc index cd8c6fc..c46cd2c 100644 --- a/zscript/flakcannon.zsc +++ b/zscript/flakcannon.zsc @@ -469,7 +469,7 @@ Class FlakCannon : UTWeapon invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(160,255,96,0),1); A_AlertMonsters(); - A_QuakeEx(1,1,1,3,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); + A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); Vector3 x, y, z; double a, s; [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); @@ -507,7 +507,7 @@ Class FlakCannon : UTWeapon invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,255,96,0),1); A_AlertMonsters(); - A_QuakeEx(2,2,2,6,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); + A_QuakeEx(2,2,2,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); Vector3 x, y, z; double a, s; [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); diff --git a/zscript/impacthammer.zsc b/zscript/impacthammer.zsc index a73954f..f7975fa 100644 --- a/zscript/impacthammer.zsc +++ b/zscript/impacthammer.zsc @@ -66,7 +66,7 @@ Class ImpactHammer : UTWeapon replaces Fist if ( d.HitType == TRACE_HitActor ) { d.HitActor.DamageMobj(invoker,self,60*realcharge,'impact'); - d.HitActor.vel += x*(1000/d.HitActor.mass)*realcharge; + d.HitActor.vel = x*(1000/d.HitActor.mass)*realcharge; if ( d.HitActor.bNOBLOOD ) { let p = Spawn("HammerImpact",d.HitLocation-d.HitDir*4); @@ -81,7 +81,7 @@ Class ImpactHammer : UTWeapon replaces Fist } else if ( d.HitType != TRACE_HitNone ) { - realcharge = max(1.0,invoker.chargesize); + realcharge = max(1.0,realcharge); DamageMobj(invoker,self,24*realcharge,'impact'); // It's a flat damage of 36 on UT, but I think it's more fair for it to scale TraceBleed(24*realcharge,invoker); vel -= x*(1200/mass)*realcharge; @@ -90,8 +90,8 @@ Class ImpactHammer : UTWeapon replaces Fist p.pitch = asin(-d.HitDir.z); if ( d.HitType == TRACE_HitWall ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation-d.HitDir*4); } - A_QuakeEx(realcharge*4,realcharge*4,realcharge*4,12,0,96,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:realcharge*0.2); - realcharge = max(1.0,invoker.chargesize); + A_QuakeEx(realcharge*6,realcharge*6,realcharge*6,16,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:realcharge*0.2); + realcharge = max(1.0,realcharge); int numpt = Random[Impact](20,40); for ( int i=0; i