diff --git a/language.version b/language.version index 986f51e68..ea2461632 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r591 \cu(Tue 10 Aug 22:23:08 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r591 \cu(2021-08-10 22:23:08)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r592 \cu(Tue 10 Aug 23:41:54 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r592 \cu(2021-08-10 23:41:54)\c-"; diff --git a/zscript/handler/swwm_handler_damage.zsc b/zscript/handler/swwm_handler_damage.zsc index cc1680081..14eb7c039 100644 --- a/zscript/handler/swwm_handler_damage.zsc +++ b/zscript/handler/swwm_handler_damage.zsc @@ -35,6 +35,7 @@ extend Class SWWMHandler if ( !b ) return; mkGibber(a).gibbed = e.Thing; mkGibber(a).delay = 40; + a.special1 = 1; a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); return; } @@ -44,6 +45,7 @@ extend Class SWWMHandler if ( !b ) return; mkGibber(a).gibbed = e.Thing; mkGibber(a).delay = 60; + a.special1 = 1; a.A_SetSize(e.Thing.default.radius,e.Thing.default.height); } else if ( gotgibbed ) diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index b2647746a..609484a38 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -32,6 +32,10 @@ Class mkBlood : Actor for ( double j=1.; j>=.5; j-=.125 ) A_SpawnParticle(b.fillcolor,0,int(12*sstr),2.*str*FRandom[Blood](.6,1.4)*j,0,0,0,0,ndir.x*j,ndir.y*j,ndir.z*j,0,0,-.25,.75,-1,-.02*sstr*j); } + let s = Spawn("mkBloodSmoke",pos); + s.SetShade(b.fillcolor); + s.scale *= .4*str; + s.special1 += str-1; } override void Tick() { @@ -416,6 +420,7 @@ Class mkBloodSmoke : Actor +NOINTERACTION; +NOTELEPORT; +FORCEXYBILLBOARD; + +ROLLSPRITE; Scale .5; Alpha .35; RenderStyle "Shaded"; @@ -425,16 +430,18 @@ Class mkBloodSmoke : Actor int jumps = Random[Blood](0,19); state dest = ResolveState("Spawn"); SetState(dest+jumps); + roll = FRandom[Blood](0,360); } override void Tick() { if ( isFrozen() ) return; - SetOrigin(level.Vec3Offset(pos,vel),true); + Vector3 newp = level.Vec3Offset(pos,vel); + if ( level.IsPointInLevel(newp) ) SetOrigin(newp,true); UpdateWaterLevel(); if ( waterlevel > 0 ) A_FadeOut(); - A_FadeOut(.03); - A_SetScale(scale.x*1.02); - vel *= .98; + A_FadeOut(.04/max(1.,special1)); + A_SetScale(scale.x*(1.+.04/max(1.,special1))); + vel *= 1.-.04/max(1.,special1); if ( tics > 0 ) tics--; while ( !tics ) { @@ -445,8 +452,8 @@ Class mkBloodSmoke : Actor States { Spawn: - BSMK ABCDEFGHIJKLMNOPQRST 2; - Loop; + BSMK ABCDEFGHIJKLMNOPQRST -1; + Stop; } } @@ -478,10 +485,10 @@ Class mkFlyingGib : Actor double ang = FRandom[Gibs](0,360); double pt = FRandom[Gibs](-60,20); Vector3 dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt)); - vel += dir*FRandom[Gibs](5.,15.); + vel += dir*FRandom[Gibs](4.,8.); if ( master ) { - vel += master.vel*1.5; + vel += master.vel; CopyBloodColor(master); } rollvel = FRandom[Gibs](10,50)*RandomPick[Gibs](-1,1)*clamp(vel.length()/10.,.25,4.); @@ -532,6 +539,7 @@ Class mkFlyingGib : Actor { let s = Spawn("mkBloodSmoke",pos); s.SetShade(shadecol); + s.special1 += Random[Gibs](1,2); } } @@ -543,6 +551,15 @@ Class mkFlyingGib : Actor action void A_Bleed() { + if ( vel.length() < .5 ) ExplodeMissile(null,null); + else + { + Vector3 dir = vel; + double spd = dir.length(); + dir /= spd; + dir = (dir+(FRandom[Blood](-.3,.3),FRandom[Blood](-.3,.3),FRandom[Blood](-.3,.3))).unit(); + vel = dir*spd; + } invoker.rollvel = FRandom[Gibs](10,50)*RandomPick[Gibs](-1,1)*clamp(vel.length()/10.,.25,4.); if ( invoker.lastbleed > level.maptime ) return; invoker.lastbleed = level.maptime+5; @@ -568,7 +585,7 @@ Class mkFlyingGib : Actor Radius 4; Height 4; Mass 10; - Scale .65; + Scale .75; Gravity .5; BounceType "Doom"; BounceFactor .2; @@ -576,7 +593,8 @@ Class mkFlyingGib : Actor +DROPOFF; +NOBLOCKMAP; +USEBOUNCESTATE; - +BOUNCEONCEILINGS; + +CANBOUNCEWATER; + -BOUNCEAUTOOFF; +MOVEWITHSECTOR; +THRUACTORS; +NOTELEPORT; @@ -619,6 +637,7 @@ Class mkGibber : Actor int gibcount, gibsize; int delay; color shadecol; + Class gibtype; // allow custom gib types (will be used for monster pack) virtual void BurstGibs() { @@ -626,25 +645,35 @@ Class mkGibber : Actor double ang, pt; Vector3 dir; bool dummy; - for ( int i=0; i<2*gibsize; i++ ) + for ( int i=0; i 2. ) a.vel = a.vel.unit()*2.; + a.vel += dir*FRandom[Gibs](.2,.8); a.SetShade(shadecol); + a.special1 += Random[Gibs](1,3); } for ( int i=0; i