From 6af3c415d91db07914f6fc8281efc44f37a30d03 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Thu, 5 Aug 2021 22:02:26 +0200 Subject: [PATCH] Fancify blood a bit more with particles. --- language.version | 4 +-- zscript/swwm_blod.zsc | 73 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/language.version b/language.version index 66bfdba66..812e05469 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r583 \cu(Thu 5 Aug 15:39:35 CEST 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r583 \cu(2021-08-05 15:39:35)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r584 \cu(Thu 5 Aug 22:02:26 CEST 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r584 \cu(2021-08-05 22:02:26)\c-"; diff --git a/zscript/swwm_blod.zsc b/zscript/swwm_blod.zsc index 8230657f9..b2647746a 100644 --- a/zscript/swwm_blod.zsc +++ b/zscript/swwm_blod.zsc @@ -23,6 +23,15 @@ Class mkBlood : Actor if ( target.bloodcolor ) b.SetShade(Color(target.bloodcolor.r/2,target.bloodcolor.g/2,target.bloodcolor.b/2)); else b.SetShade(Color(80,0,0)); b.CopyBloodColor(target); + int numpt = Random[Blood](2,4)+str*2; + double sstr = (2.5+str)/3.; + Vector3 vdir = (cos(b.angle)*cos(b.pitch),sin(b.angle)*cos(b.pitch),-sin(b.pitch)); + for ( int i=0; i=.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); + } } override void Tick() { @@ -140,7 +149,7 @@ Class mkBloodDrop : Actor Radius 2; Height 2; Mass 1; - RenderStyle "Shaded"; + RenderStyle "Translucent"; } // try to reduce overhead as much as possible with this override void Tick() @@ -216,6 +225,15 @@ Class mkBloodDrop : Actor } else newpos = level.Vec3Offset(newpos,vel); newpos.z = clamp(newpos.z,floorz,ceilingz); + Vector3 ndiff = level.Vec3Diff(newpos,pos); + double ndist = ndiff.length(); + ndiff /= ndist; + for ( int i=0; i=.5; j-=.125 ) + A_SpawnParticle(fillcolor,0,20,10.*scale.x*FRandom[Blood](.6,1.4)*j,0,0,0,0,ndir.x*j,ndir.y*j,ndir.z*j,0,0,-.25,.5*alpha,-1,-1.*scale.x*j); + } Destroy(); return; } @@ -246,18 +274,29 @@ Class mkBloodDrop : Actor } bMISSILE = false; dead = true; + Vector3 floordir; if ( d.Hit3DFloor ) { tracksector = d.Hit3DFloor.model; trackplane = 1; + floordir = -d.Hit3DFloor.model.ceilingplane.Normal; } else { tracksector = d.HitSector; trackplane = 0; + floordir = d.HitSector.floorplane.Normal; } SWWMUtility.SetToSlope(self,FRandom[Blood](0,360)); + A_SetRenderStyle(1.,STYLE_Shaded); frame = Random[Blood](5,8); + int numpt = Random[Blood](4,8); + for ( int i=0; i=.5; j-=.125 ) + A_SpawnParticle(fillcolor,0,20,10.*scale.x*FRandom[Blood](.6,1.4)*j,0,0,0,0,ndir.x*j,ndir.y*j,ndir.z*j,0,0,-.25,.5*alpha,-1,-1.*scale.x*j); + } vel *= 0; return; } @@ -280,18 +319,29 @@ Class mkBloodDrop : Actor bMISSILE = false; dead = true; onceiling = true; + Vector3 floordir; if ( d.Hit3DFloor ) { tracksector = d.Hit3DFloor.model; trackplane = 0; + floordir = -d.Hit3DFloor.model.floorplane.Normal; } else { tracksector = d.HitSector; trackplane = 1; + floordir = d.HitSector.ceilingplane.Normal; } SWWMUtility.SetToSlope(self,FRandom[Blood](0,360),true); + A_SetRenderStyle(1.,STYLE_Shaded); frame = Random[Blood](5,8); + int numpt = Random[Blood](4,8); + for ( int i=0; i=.5; j-=.125 ) + A_SpawnParticle(fillcolor,0,20,10.*scale.x*FRandom[Blood](.6,1.4)*j,0,0,0,0,ndir.x*j,ndir.y*j,ndir.z*j,0,0,-.25,.5*alpha,-1,-1.*scale.x*j); + } vel *= 0; return; } @@ -308,6 +358,13 @@ Class mkBloodDrop : Actor SetOrigin(d.HitLocation-walldir*8,true); TraceBleedAngle(20,atan2(walldir.y,walldir.x),0); A_StartSound("misc/blooddrop",volume:.1); + int numpt = Random[Blood](4,8); + for ( int i=0; i=.5; j-=.125 ) + A_SpawnParticle(fillcolor,0,20,10.*scale.x*FRandom[Blood](.6,1.4)*j,0,0,0,0,ndir.x*j,ndir.y*j,ndir.z*j,0,0,-.25,.5*alpha,-1,-1.*scale.x*j); + } Destroy(); return; } @@ -412,6 +469,7 @@ Class mkFlyingGib : Actor bool bleeding; double rollvel; mkFlyingGib prevmeat, nextmeat; + Vector3 oldpos; override void PostBeginPlay() { @@ -443,6 +501,7 @@ Class mkFlyingGib : Actor override void Tick() { + oldpos = pos; Super.Tick(); if ( isFrozen() ) return; if ( killme ) A_FadeOut(.01); @@ -459,7 +518,17 @@ Class mkFlyingGib : Actor vel.xy *= .98; return; } - if ( bleeding && !Random[Blood](0,2) ) + if ( !bleeding ) return; + Vector3 ndiff = level.Vec3Diff(pos,oldpos); + double ndist = ndiff.length(); + ndiff /= ndist; + for ( int i=0; i