diff --git a/language.version b/language.version index 80a91b798..4716b4df2 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.23 r1 \cu(Mon 11 Oct 18:28:40 CEST 2021)\c-"; -SWWM_SHORTVER="\cw1.1.23 r1 \cu(2021-10-11 18:28:40)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw1.1.24 \cu(Mon 11 Oct 18:29:23 CEST 2021)\c-"; +SWWM_SHORTVER="\cw1.1.24 \cu(2021-10-11 18:29:23)\c-"; diff --git a/zscript/weapons/swwm_danmaku.zsc b/zscript/weapons/swwm_danmaku.zsc index d32151618..50418b30b 100644 --- a/zscript/weapons/swwm_danmaku.zsc +++ b/zscript/weapons/swwm_danmaku.zsc @@ -119,17 +119,17 @@ Class Eviscerator : SWWMWeapon [x2, y2, z2] = swwm_CoordUtil.GetAxes(BulletSlope(),angle,roll); origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+4*y-5*z); int trail = CVar.GetCVar('swwm_funtrails',player).GetInt(); - for ( int i=0; i<20; i++ ) + for ( int i=0; i<25; i++ ) { a = FRandom[Eviscerator](0,360); - s = FRandom[Eviscerator](0,invoker.extended?.06:.3); + s = FRandom[Eviscerator](0,invoker.extended?.03:.2); dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit(); let p = EvisceratorChunk(Spawn("EvisceratorChunk",origin)); p.target = self; p.angle = atan2(dir.y,dir.x); p.pitch = asin(-dir.z); p.vel = dir*p.speed*FRandom[Eviscerator](.9,1.1); - if ( invoker.extended ) p.vel *= 1.4; + if ( invoker.extended ) p.vel *= 1.5; if ( trail < 8 ) p.trailcolor = max(0,trail); else if ( trail == 8 ) p.trailcolor = (i%6)+2; else if ( trail == 9 ) @@ -195,7 +195,7 @@ Class Eviscerator : SWWMWeapon p.target = self; p.angle = atan2(dir.y,dir.x); p.pitch = asin(-dir.z); - p.vel = dir*p.speed*(invoker.extended?1.6:.8); + p.vel = dir*p.speed*(invoker.extended?1.75:.75); for ( int i=0; i<6; i++ ) { let s = Spawn("SWWMSmoke",origin); diff --git a/zscript/weapons/swwm_danmaku_fx.zsc b/zscript/weapons/swwm_danmaku_fx.zsc index 2d8d50f82..33cde0c44 100644 --- a/zscript/weapons/swwm_danmaku_fx.zsc +++ b/zscript/weapons/swwm_danmaku_fx.zsc @@ -148,7 +148,7 @@ Class EvisceratorChunk : Actor Radius 2; Height 4; Speed 50; - DamageFunction int(clamp((vel.length()-8)*.2+max(0,1.-lifetime)*2.,0,15)); + DamageFunction int(clamp((vel.length()-10)*.1,0,15)+(max(0,1-lifetime)**5)*10); DamageType 'shot'; BounceFactor 1.0; WallBounceFactor 1.0; @@ -175,7 +175,7 @@ Class EvisceratorChunk : Actor let t = Spawn("EvisceratorChunkGlow",pos); t.target = self; lifetime = 0; - lifespeed = FRandom[Eviscerator](0.01,0.02); + lifespeed = FRandom[Eviscerator](0.01,0.02)*clamp((vel.length()/75.)**2,1.,2.); anglevel = FRandom[Eviscerator](50,100)*RandomPick[Eviscerator](-1,1); pitchvel = FRandom[Eviscerator](50,100)*RandomPick[Eviscerator](-1,1); rollvel = FRandom[Eviscerator](50,100)*RandomPick[Eviscerator](-1,1); @@ -281,7 +281,8 @@ Class EvisceratorChunk : Actor vel = oldvel; // re-do the bounce with our formula Vector3 RealHitNormal = HitNormal; - HitNormal = (HitNormal+(FRandom[Eviscerator](-.1,.1),FRandom[Eviscerator](-.1,.1),FRandom[Eviscerator](-.1,.1))).unit(); + double dfact = clamp((oldvel.length()/75.)**2.,.02,.6); + HitNormal = (HitNormal+(FRandom[Eviscerator](-dfact,dfact),FRandom[Eviscerator](-dfact,dfact),FRandom[Eviscerator](-dfact,dfact))).unit(); if ( (HitNormal dot RealHitNormal) < 0 ) HitNormal *= -.5; vel = FRandom[Eviscerator](.8,.95)*((vel dot HitNormal)*HitNormal*(FRandom[Eviscerator](-1.8,-1.))+vel); bHITOWNER = true; @@ -454,7 +455,7 @@ Class EvisceratorProj : Actor Radius 2; Height 4; Gravity 0.35; - Speed 50; + Speed 60; PROJECTILE; -NOGRAVITY; +EXPLODEONWATER; @@ -504,7 +505,7 @@ Class EvisceratorProj : Actor } int trail = 0; if ( target && target.player ) trail = CVar.GetCVar('swwm_funtrails',target.player).GetInt(); - for ( int i=0; i<20; i++ ) + for ( int i=0; i<25; i++ ) { p = EvisceratorChunk(Spawn("EvisceratorChunk",level.Vec3Offset(pos,spawnofs))); p.bHITOWNER = true;