diff --git a/graphics/Particles/xflare.png b/graphics/Particles/xflare.png new file mode 100644 index 000000000..58e179d7f Binary files /dev/null and b/graphics/Particles/xflare.png differ diff --git a/graphics/Particles/xpuff0.png b/graphics/Particles/xpuff0.png new file mode 100644 index 000000000..d845e299a Binary files /dev/null and b/graphics/Particles/xpuff0.png differ diff --git a/graphics/Particles/xpuff1.png b/graphics/Particles/xpuff1.png new file mode 100644 index 000000000..ba46d97e2 Binary files /dev/null and b/graphics/Particles/xpuff1.png differ diff --git a/graphics/Particles/xpuff2.png b/graphics/Particles/xpuff2.png new file mode 100644 index 000000000..7943afe83 Binary files /dev/null and b/graphics/Particles/xpuff2.png differ diff --git a/graphics/Particles/xpuff3.png b/graphics/Particles/xpuff3.png new file mode 100644 index 000000000..09889ed48 Binary files /dev/null and b/graphics/Particles/xpuff3.png differ diff --git a/graphics/Particles/xpuff4.png b/graphics/Particles/xpuff4.png new file mode 100644 index 000000000..6a3ff1d8e Binary files /dev/null and b/graphics/Particles/xpuff4.png differ diff --git a/graphics/Particles/xpuff5.png b/graphics/Particles/xpuff5.png new file mode 100644 index 000000000..04f3de8c7 Binary files /dev/null and b/graphics/Particles/xpuff5.png differ diff --git a/graphics/Particles/xpuff6.png b/graphics/Particles/xpuff6.png new file mode 100644 index 000000000..003045785 Binary files /dev/null and b/graphics/Particles/xpuff6.png differ diff --git a/graphics/Particles/xpuff7.png b/graphics/Particles/xpuff7.png new file mode 100644 index 000000000..793f4aab7 Binary files /dev/null and b/graphics/Particles/xpuff7.png differ diff --git a/language.version b/language.version index 4e457af37..29c6c4c75 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r600 \cu(Sun 6 Nov 16:25:07 CET 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r600 \cu(2022-11-06 16:25:07)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r601 \cu(Sun 6 Nov 17:06:54 CET 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r601 \cu(2022-11-06 17:06:54)\c-"; diff --git a/zscript/items/swwm_baseitem.zsc b/zscript/items/swwm_baseitem.zsc index ac7e0a89f..e401d7f7a 100644 --- a/zscript/items/swwm_baseitem.zsc +++ b/zscript/items/swwm_baseitem.zsc @@ -124,6 +124,7 @@ Mixin Class SWWMOverlapPickupSound Class SWWMRespawnTimer : SWWMNonInteractiveActor { + TextureID flaretex; default { Args 0,3,2; @@ -153,12 +154,13 @@ Class SWWMRespawnTimer : SWWMNonInteractiveActor double str = 1.-special2/double(special1); int freq = int(clamp(30*(1.-str),3,30)); if ( (level.maptime+args[3])%freq ) return; + if ( !flaretex ) flaretex = TexMan.CheckForTexture("graphics/Particles/xflare.png"); int numpt = int(Random[ExploS](0,10)*str); 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); + A_SpawnParticleEx(b.fillcolor,pufftex[Random[Blood](0,7)],STYLE_Shaded,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); @@ -120,6 +122,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor mkBloodDrop prevblod, nextblod; Sector tracksector; int trackplane; + TextureID pufftex[8]; Default { @@ -217,7 +220,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor { if ( Random[Blood](0,2) ) continue; Vector3 ppos = level.Vec3Offset(pos,ndiff*i)-pos; - A_SpawnParticle(fillcolor,0,10,10.*scale.x*FRandom[Blood](.6,1.4),0,ppos.x,ppos.y,ppos.z,vel.x*.1+FRandom[Blood](-.1,.1),vel.y*.1+FRandom[Blood](-.1,.1),vel.z*.1+FRandom[Blood](-.1,.1),0,0,-.5,.5*alpha,-1,-1.*scale.x); + A_SpawnParticleEx(fillcolor,pufftex[Random[Blood](0,7)],STYLE_Shaded,0,10,10.*scale.x*FRandom[Blood](.6,1.4),0,ppos.x,ppos.y,ppos.z,vel.x*.1+FRandom[Blood](-.1,.1),vel.y*.1+FRandom[Blood](-.1,.1),vel.z*.1+FRandom[Blood](-.1,.1),0,0,-.5,.5*alpha,-1,-1.*scale.x); } SetOrigin(newpos,true); if ( (d.HitType == TRACE_HitFloor) || (pos.z <= floorz) ) @@ -250,7 +253,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor { Vector3 ndir = (floordir+SWWMUtility.Vec3FromAngles(FRandom[Blood](0,360),FRandom[Blood](-90,90))*.5).unit()*FRandom[Blood](.5,8.); for ( double j=1.; j>=.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); + A_SpawnParticleEx(fillcolor,pufftex[Random[Blood](0,7)],STYLE_Shaded,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; @@ -280,7 +283,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor { Vector3 ndir = (floordir+SWWMUtility.Vec3FromAngles(FRandom[Blood](0,360),FRandom[Blood](-90,90))*.5).unit()*FRandom[Blood](.5,8.); for ( double j=1.; j>=.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); + A_SpawnParticleEx(fillcolor,pufftex[Random[Blood](0,7)],STYLE_Shaded,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; @@ -325,7 +328,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor { Vector3 ndir = (floordir+SWWMUtility.Vec3FromAngles(FRandom[Blood](0,360),FRandom[Blood](-90,90))*.5).unit()*FRandom[Blood](.5,8.); for ( double j=1.; j>=.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); + A_SpawnParticleEx(fillcolor,pufftex[Random[Blood](0,7)],STYLE_Shaded,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; @@ -348,7 +351,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor { Vector3 ndir = (-(walldir.x,walldir.y,0)+SWWMUtility.Vec3FromAngles(FRandom[Blood](0,360),FRandom[Blood](-90,90))*.5).unit()*FRandom[Blood](.5,8.); for ( double j=1.; j>=.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); + A_SpawnParticleEx(fillcolor,pufftex[Random[Blood](0,7)],STYLE_Shaded,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; @@ -373,6 +376,7 @@ Class mkBloodDrop : SWWMNonInteractiveActor override void PostBeginPlay() { Super.PostBeginPlay(); + for ( int i=0; i<8; i++ ) pufftex[i] = TexMan.CheckForTexture("graphics/Particles/xpuff"..i..".png"); SWWMHandler.QueueBlod(self); int jumps = Random[Blood](0,3); state dest = ResolveState("Spawn"); @@ -453,10 +457,12 @@ Class mkFlyingGib : Actor double rollvel; mkFlyingGib prevmeat, nextmeat; Vector3 oldpos; + TextureID pufftex[8]; override void PostBeginPlay() { Super.PostBeginPlay(); + for ( int i=0; i<8; i++ ) pufftex[i] = TexMan.CheckForTexture("graphics/Particles/xpuff"..i..".png"); frame = Random[Blood](0,5); double ang = FRandom[Gibs](0,360); double pt = FRandom[Gibs](-60,20); @@ -509,7 +515,7 @@ Class mkFlyingGib : Actor { if ( Random[Blood](0,2) ) continue; Vector3 ppos = level.Vec3Offset(oldpos,ndiff*i)-pos; - A_SpawnParticle(shadecol,0,40,20.*scale.x*FRandom[Blood](.6,1.4),0,ppos.x,ppos.y,ppos.z,vel.x*.1+FRandom[Blood](-1.,1.),vel.y*.1+FRandom[Blood](-1.,1.),vel.z*.1+FRandom[Blood](-1.,1.),0,0,-.25,.5*alpha,-1,-.5*scale.x); + A_SpawnParticleEx(shadecol,pufftex[Random[Blood](0,7)],STYLE_Shaded,0,40,20.*scale.x*FRandom[Blood](.6,1.4),0,ppos.x,ppos.y,ppos.z,vel.x*.1+FRandom[Blood](-1.,1.),vel.y*.1+FRandom[Blood](-1.,1.),vel.z*.1+FRandom[Blood](-1.,1.),0,0,-.25,.5*alpha,-1,-.5*scale.x); } } diff --git a/zscript/swwm_common_fx.zsc b/zscript/swwm_common_fx.zsc index 1ef82ac02..707dc6ed0 100644 --- a/zscript/swwm_common_fx.zsc +++ b/zscript/swwm_common_fx.zsc @@ -847,6 +847,8 @@ Class SWWMTeleportSparkle : SWWMNonInteractiveActor Class SWWMTeleportDest : SWWMNonInteractiveActor { + TextureID flaretex; + override void PostBeginPlay() { special1 = Random[ExploS](0,10); @@ -861,12 +863,14 @@ Class SWWMTeleportDest : SWWMNonInteractiveActor } if ( isFrozen() ) return; if ( (level.maptime+special1)%10 ) return; + if ( !flaretex ) flaretex = TexMan.CheckForTexture("graphics/Particles/xflare.png"); int numpt = Random[ExploS](0,2); for ( int i=0; i