diff --git a/modeldef.pulse b/modeldef.pulse index d8c0ff0..6008490 100644 --- a/modeldef.pulse +++ b/modeldef.pulse @@ -13,8 +13,8 @@ Model "PulseBolt" { Path "models" Model 0 "PBolt_d.3d" - Offset 20.25 0 0 - Scale 0.2025 0.10125 0.1215 + Offset 40.5 0 0 + Scale 0.405 0.2025 0.243 AngleOffset 90 DONTCULLBACKFACES USEACTORPITCH @@ -35,9 +35,9 @@ Model "PulseBolt" Model "StarterBolt" { Path "models" - Model 0 "PBolt_d.3d" - Offset 20.25 0 0 - Scale 0.2025 0.10125 0.1215 + Model 0 "SBolt_d.3d" + Offset 40.5 0 0 + Scale 0.405 0.2025 0.243 AngleOffset 90 DONTCULLBACKFACES USEACTORPITCH diff --git a/models/PBolt_d.3d b/models/PBolt_d.3d index b63b0d1..f3a60f4 100644 Binary files a/models/PBolt_d.3d and b/models/PBolt_d.3d differ diff --git a/models/SBolt_a.3d b/models/SBolt_a.3d new file mode 100644 index 0000000..6a726c3 Binary files /dev/null and b/models/SBolt_a.3d differ diff --git a/models/SBolt_d.3d b/models/SBolt_d.3d new file mode 100644 index 0000000..88fd58f Binary files /dev/null and b/models/SBolt_d.3d differ diff --git a/models/sbolt0.png b/models/sbolt0.png index 9ecf551..e1ec9ed 100644 Binary files a/models/sbolt0.png and b/models/sbolt0.png differ diff --git a/models/sbolt1.png b/models/sbolt1.png index cfd622f..4799655 100644 Binary files a/models/sbolt1.png and b/models/sbolt1.png differ diff --git a/models/sbolt2.png b/models/sbolt2.png index fe911d3..ad587a0 100644 Binary files a/models/sbolt2.png and b/models/sbolt2.png differ diff --git a/models/sbolt3.png b/models/sbolt3.png index c6cec48..c028198 100644 Binary files a/models/sbolt3.png and b/models/sbolt3.png differ diff --git a/models/sbolt4.png b/models/sbolt4.png index 39a05db..9ccef7a 100644 Binary files a/models/sbolt4.png and b/models/sbolt4.png differ diff --git a/zscript/biorifle.zsc b/zscript/biorifle.zsc index 17a545c..641b433 100644 --- a/zscript/biorifle.zsc +++ b/zscript/biorifle.zsc @@ -409,7 +409,7 @@ Class BioGel : Actor s.args[3] = int(s.args[3]*Scale.x); invoker.deadtimer = -2; if ( invoker.atline ) invoker.atline.RemoteActivate(target,invoker.atside,SPAC_Impact,pos); - A_Explode(int(Random[GES](20,40)*Scale.x),Min(150,int(Scale.x*25))); + A_Explode(int(Random[GES](10,15)*max(1,(Scale.x-1)**2)),Min(150,int(Scale.x*25))); A_PlaySound("ges/explode",CHAN_VOICE); int numpt = Min(300,int(Scale.x*30))+Random[GES](-10,10); for ( int i=0; i= (d.HitActor.pos.z+d.HitActor.height*0.8) ) dmg = d.HitActor.DamageMobj(invoker,self,dmg*2,'Decapitated',DMG_USEANGLE,atan2(d.HitDir.y,d.HitDir.x)); else dmg = d.HitActor.DamageMobj(invoker,self,dmg,'slashed',DMG_USEANGLE,atan2(d.HitDir.y,d.HitDir.x)); @@ -130,6 +131,7 @@ Class UTChainsaw : UTWeapon p.pitch = asin(-d.HitDir.z); if ( d.HitType == TRACE_HitWall ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation-d.HitDir*4); } + invoker.sawcnt += 0.2; } override void DetachFromOwner() { @@ -139,6 +141,7 @@ Class UTChainsaw : UTWeapon } action void A_Vibrate( bool bAlt = false ) { + invoker.sawcnt = 0; A_AlertMonsters(); if ( bAlt ) A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE,rollIntensity:0.4); else A_QuakeEx(0,0,0,2,0,1,"",QF_RELATIVE,rollIntensity:0.2); @@ -239,9 +242,9 @@ Class UTChainsaw : UTWeapon Goto Idle; AltFire: CSWA A 0 A_PlaySound("chainsaw/fire",CHAN_6); - CSWA ABCDEFG 2 A_Vibrate(true); - CSWA H 2 A_SawSwipe(); - CSWA IJK 2 A_Vibrate(true); + CSWA ABCDE 2 A_Vibrate(true); + CSWA FGHIJ 2 A_SawSwipe(); + CSWA K 2 A_Vibrate(true); CSWA K 0 A_PlaySound("chainsaw/idle",CHAN_6,looping:true); Goto Ready; Deselect: diff --git a/zscript/enforcer.zsc b/zscript/enforcer.zsc index 3a81d26..938889e 100644 --- a/zscript/enforcer.zsc +++ b/zscript/enforcer.zsc @@ -312,7 +312,7 @@ Class Enforcer : UTWeapon replaces Pistol LineTrace(atan2(dir.y,dir.x),10000,asin(-dir.z),TRF_ABSPOSITION,origin.z,origin.x,origin.y,d); if ( d.HitType == TRACE_HitActor ) { - int dmg = Random[Enforcer](15,20); + int dmg = Random[Enforcer](12,17); dmg = d.HitActor.DamageMobj(invoker,self,dmg,'shot',DMG_USEANGLE,atan2(d.HitDir.y,d.HitDir.x)); if ( d.HitActor.bNOBLOOD ) { @@ -458,18 +458,20 @@ Class Enforcer : UTWeapon replaces Pistol Hold: ENFF A 0 A_EnforcerFire(); ENFF ABCDEFGHIJ 1; + ENFF J 5; ENFF J 0 A_EnforcerRefire(); ENFF J 2; ENFI A 0; Goto Idle; LeftFire: 2NFI A 0 A_Overlay(-9998,"Null"); - 2NFI A 1 A_SetTics(Random[Enforcer](5,6)); + 2NFI A 8; 2NFI A 0 A_EnforcerRefire(1,true); Goto LeftIdle; LeftHold: 2NFF A 0 A_EnforcerFire(false,true); 2NFF ABCDEFGHIJ 1; + 2NFF J 5; 2NFF J 0 A_EnforcerRefire("LeftHold",true); 2NFF J 2; 2NFI A 0; @@ -480,18 +482,20 @@ Class Enforcer : UTWeapon replaces Pistol AltHold: ENFA G 0 A_EnforcerFire(true); ENFA GHIJKLMN 1; + ENFA N 3; ENFA G 0 A_EnforcerRefire(); ENFA OPQRSTU 1; Goto Idle; LeftAltFire: 2NFI A 0 A_Overlay(-9998,"Null"); - 2NFI A 1 A_SetTics(Random[Enforcer](5,6)); + 2NFI A 7; 2NFI A 0 A_EnforcerRefire(1,true); Goto LeftIdle; 2NFA ABCDEF 1; LeftAltHold: 2NFA G 0 A_EnforcerFire(true,true); 2NFA GHIJKLMN 1; + 2NFA N 3; 2NFA G 0 A_EnforcerRefire("LeftAltHold",true); 2NFA OPQRSTU 1; Goto LeftIdle; diff --git a/zscript/flakcannon.zsc b/zscript/flakcannon.zsc index a5fb33e..bef6d6e 100644 --- a/zscript/flakcannon.zsc +++ b/zscript/flakcannon.zsc @@ -140,7 +140,7 @@ Class FlakChunk : Actor Radius 2; Height 2; Speed 50; - DamageFunction Random[Flak](25,35); + DamageFunction int(Random[Flak](15,20)*max(0.1,1.0-lifetime*4.1)); DamageType 'Shredded'; BounceType "Doom"; BounceFactor 0.8; @@ -189,7 +189,7 @@ Class FlakChunk : Actor if ( frame < 11 ) frame++; } lifetime += lifespeed; - if ( (waterlevel <= 0) && (frame < 10) ) + if ( (waterlevel <= 0) && (frame < 10) && !(lifetics%2) ) { let s = Spawn("UTSmoke",pos); s.vel = (FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1),FRandom[Flak](-0.1,0.1)); @@ -212,7 +212,7 @@ Class FlakChunk : Actor { invoker.hasbounced = true; A_SprayDecal("WallCrack",-8); - int numpt = Random[Flak](3,6); + int numpt = Random[Flak](2,3); if ( frame < 10 ) { for ( int i=0; i 0.16 ) + if ( accdamage > 0.17 ) { - t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](70,80)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x)); + t.Results.HitActor.DamageMobj(self,target,int(Random[Pulse](70,90)*accdamage),'zapped',DMG_USEANGLE,atan2(x.y,x.x)); accdamage = 0; } } @@ -450,7 +450,7 @@ Class PulseBolt : Actor accdamage = 0; damagedactor = null; } - if ( position >= 19 ) + if ( position >= 9 ) { int numpt = Random[Pulse](5,10)*!Random[Pulse](0,5); for ( int i=0; i olddmgradius) || (dir dot a.vel < 0) ) + if ( (dist > olddmgradius-a.radius) || (dir dot a.vel <= 0) ) { if ( !a.bDONTTHRUST ) a.vel += dir*((moscale+20)/a.mass); a.DamageMobj(self,target,int(moscale),'RedeemerDeath',DMG_THRUSTLESS); } + if ( a.player ) UTMainHandler.DoFlash(a,Color(32,255,255,255),80); } olddmgradius = dmgradius; }