diff --git a/gldefs.pp b/gldefs.pp index 18a126f0f..a4a3c4f57 100644 --- a/gldefs.pp +++ b/gldefs.pp @@ -1,4 +1,31 @@ HardwareShader PostProcess beforebloom +{ + Name "WaterWarp" + Shader "shaders/glsl/WaterWarp.fp" 330 + Texture warptex "textures/warptex.png" + Texture fluidtex "textures/wetwarp.png" + Uniform float dfact + Uniform float timer +} +HardwareShader PostProcess beforebloom +{ + Name "LavaWarp" + Shader "shaders/glsl/LavaWarp.fp" 330 + Texture warptex "textures/warptex.png" + Texture fluidtex "textures/lavawarp.png" + Uniform float dfact + Uniform float timer +} +HardwareShader PostProcess beforebloom +{ + Name "SlimeWarp" + Shader "shaders/glsl/SlimeWarp.fp" 330 + Texture warptex "textures/warptex.png" + Texture fluidtex "textures/slimewarp.png" + Uniform float dfact + Uniform float timer +} +HardwareShader PostProcess beforebloom { Name "ZoomBlur" Shader "shaders/glsl/ZoomBlur.fp" 330 @@ -55,4 +82,4 @@ HardwareShader PostProcess scene Uniform float Timer Uniform float ni Texture NoiseTexture "textures/rgbnoise.png" -} \ No newline at end of file +} diff --git a/language.version b/language.version index 5eb66f882..0d9e2b563 100644 --- a/language.version +++ b/language.version @@ -1,2 +1,2 @@ [default] -SWWM_MODVER="\chSWWM \cwGZ\c- r514 (Tue 1 Sep 16:47:23 CEST 2020)"; +SWWM_MODVER="\chSWWM \cwGZ\c- r515 (Tue 1 Sep 18:10:34 CEST 2020)"; diff --git a/models/extra/DarkRaysStartEnd.png b/models/extra/DarkRaysStartEnd.png index 4759d57b2..51794dafa 100644 Binary files a/models/extra/DarkRaysStartEnd.png and b/models/extra/DarkRaysStartEnd.png differ diff --git a/shaders/glsl/LavaWarp.fp b/shaders/glsl/LavaWarp.fp new file mode 100644 index 000000000..fccdf44ff --- /dev/null +++ b/shaders/glsl/LavaWarp.fp @@ -0,0 +1,26 @@ +vec2 calcdist( vec2 duv ) +{ + vec2 uv = vec2(0.); + vec2 dist = 2.*texture(warptex,duv*.2).xy-1.; + dist.x *= abs(mod(dist.y+timer*0.34536,4.)-2.)-1.; + uv.x += dist.x*.02*dfact; + dist = 2.*texture(warptex,(duv+uv)*.3).xy-1.; + dist.y *= abs(mod(dist.x+timer*0.25363,4.)-2.)-1.; + uv.y -= dist.y*.03*dfact; + return uv; +} + +void main() +{ + vec2 uv = TexCoord+calcdist(TexCoord-vec2(0.,timer*.02)); + vec2 bresl = textureSize(InputTexture,0); + vec2 sr = vec2(1.,bresl.y/bresl.x); + float p = distance(uv,vec2(.5)); + uv = (uv-.5)*(1.-dfact*.07)+.5; + vec4 res = texture(InputTexture,uv); + vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.02,timer*.01)); + res.rgb += flood.rgb*dfact*.4; + flood = texture(fluidtex,uv*sr*2.+vec2(-timer*.03,timer*.04)); + res.rgb += flood.rgb*dfact*.6; + FragColor = vec4(res.rgb,1.); +} diff --git a/shaders/glsl/SlimeWarp.fp b/shaders/glsl/SlimeWarp.fp new file mode 100644 index 000000000..4ff66b18c --- /dev/null +++ b/shaders/glsl/SlimeWarp.fp @@ -0,0 +1,26 @@ +vec2 calcdist( vec2 duv ) +{ + vec2 uv = vec2(0.); + vec2 dist = 2.*texture(warptex,duv*.4).xy-1.; + dist.x *= abs(mod(dist.y+timer*0.24536,4.)-2.)-1.; + uv.x += dist.x*.02*dfact; + dist = 2.*texture(warptex,(duv+uv)*.3).xy-1.; + dist.y *= abs(mod(dist.x+timer*0.15363,4.)-2.)-1.; + uv.y -= dist.y*.03*dfact; + return uv; +} + +void main() +{ + vec2 uv = TexCoord+calcdist(TexCoord-vec2(0.,timer*.08)); + vec2 bresl = textureSize(InputTexture,0); + vec2 sr = vec2(1.,bresl.y/bresl.x); + float p = distance(uv,vec2(.5)); + uv = (uv-.5)*(1.-dfact*.11)+.5; + vec4 res = texture(InputTexture,uv); + vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.02,timer*.05)); + res.rgb += flood.rgb*dfact*.3; + flood = texture(fluidtex,uv*sr*2.+vec2(-timer*.04,timer*.08)); + res.rgb += flood.rgb*dfact*.4; + FragColor = vec4(res.rgb,1.); +} diff --git a/shaders/glsl/WaterWarp.fp b/shaders/glsl/WaterWarp.fp new file mode 100644 index 000000000..027240e39 --- /dev/null +++ b/shaders/glsl/WaterWarp.fp @@ -0,0 +1,26 @@ +vec2 calcdist( vec2 duv ) +{ + vec2 uv = vec2(0.); + vec2 dist = 2.*texture(warptex,duv*.2).xy-1.; + dist.x *= abs(mod(dist.y+timer*0.34536,4.)-2.)-1.; + uv.x += dist.x*.03*dfact; + dist = 2.*texture(warptex,(duv+uv)*.3).xy-1.; + dist.y *= abs(mod(dist.x+timer*0.45363,4.)-2.)-1.; + uv.y -= dist.y*.02*dfact; + return uv; +} + +void main() +{ + vec2 uv = TexCoord+calcdist(TexCoord-vec2(0.,timer*.2)); + vec2 bresl = textureSize(InputTexture,0); + vec2 sr = vec2(1.,bresl.y/bresl.x); + float p = distance(uv,vec2(.5)); + uv = (uv-.5)*(1.-dfact*.12)+.5; + vec4 res = texture(InputTexture,uv); + vec4 flood = texture(fluidtex,uv*sr+vec2(timer*.01,timer*.02)); + res.rgb += flood.rgb*dfact*.3; + flood = texture(fluidtex,uv*sr*2.+vec2(-timer*.04,timer*.08)); + res.rgb += flood.rgb*dfact*.2; + FragColor = vec4(res.rgb,1.); +} diff --git a/textures/lavawarp.png b/textures/lavawarp.png new file mode 100644 index 000000000..da1013b8c Binary files /dev/null and b/textures/lavawarp.png differ diff --git a/textures/slimewarp.png b/textures/slimewarp.png new file mode 100644 index 000000000..06baecda4 Binary files /dev/null and b/textures/slimewarp.png differ diff --git a/textures/warptex.png b/textures/warptex.png new file mode 100644 index 000000000..de45a9d0d Binary files /dev/null and b/textures/warptex.png differ diff --git a/textures/wetwarp.png b/textures/wetwarp.png new file mode 100644 index 000000000..fea9858be Binary files /dev/null and b/textures/wetwarp.png differ diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index ccbe83d14..2ba415405 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -371,6 +371,19 @@ Class SWWMHandler : EventHandler return (al+ah+bl+bh)*.25; } + static clearscope void ClearAllShaders( PlayerInfo p ) + { + Shader.SetEnabled(p,"WaterWarp",false); + Shader.SetEnabled(p,"LavaWarp",false); + Shader.SetEnabled(p,"SlimeWarp",false); + Shader.SetEnabled(p,"ZoomBlur",false); + Shader.SetEnabled(p,"RagekitShader",false); + Shader.SetEnabled(p,"GhostShader",false); + Shader.SetEnabled(p,"InvinciShader",false); + Shader.SetEnabled(p,"Glitch",false); + Shader.SetEnabled(p,"Grain",false); + } + // level end stats override void WorldUnloaded( WorldEvent e ) { @@ -378,13 +391,7 @@ Class SWWMHandler : EventHandler SWWMStats s; while ( s = SWWMStats(ti.Next()) ) s.AddLevelStats(); - PlayerInfo p = players[consoleplayer]; - Shader.SetEnabled(p,"ZoomBlur",false); - Shader.SetEnabled(p,"RagekitShader",false); - Shader.SetEnabled(p,"GhostShader",false); - Shader.SetEnabled(p,"InvinciShader",false); - Shader.SetEnabled(p,"Glitch",false); - Shader.SetEnabled(p,"Grain",false); + ClearAllShaders(players[consoleplayer]); } override void WorldLoaded( WorldEvent e ) @@ -474,13 +481,7 @@ Class SWWMHandler : EventHandler Demolitionist(players[i].mo).CheckUnderwaterAmb(true); } } - PlayerInfo p = players[consoleplayer]; - Shader.SetEnabled(p,"ZoomBlur",false); - Shader.SetEnabled(p,"RagekitShader",false); - Shader.SetEnabled(p,"GhostShader",false); - Shader.SetEnabled(p,"InvinciShader",false); - Shader.SetEnabled(p,"Glitch",false); - Shader.SetEnabled(p,"Grain",false); + ClearAllShaders(players[consoleplayer]); } override void PlayerDied( PlayerEvent e ) @@ -1648,6 +1649,27 @@ Class SWWMHandler : EventHandler if ( pc && (mo is 'Demolitionist') && useshaders.GetBool() ) { let demo = Demolitionist(mo); + if ( demo.lastunder == Demolitionist.UNDER_WATER ) + { + Shader.SetEnabled(p,"WaterWarp",true); + Shader.SetUniform1f(p,"WaterWarp","timer",(gametic+e.FracTic)/Thinker.TICRATE); + Shader.SetUniform1f(p,"WaterWarp","dfact",coat?.25:1.); + } + else Shader.SetEnabled(p,"WaterWarp",false); + if ( demo.lastunder == Demolitionist.UNDER_LAVA ) + { + Shader.SetEnabled(p,"LavaWarp",true); + Shader.SetUniform1f(p,"LavaWarp","timer",(gametic+e.FracTic)/Thinker.TICRATE); + Shader.SetUniform1f(p,"LavaWarp","dfact",coat?.25:1.); + } + else Shader.SetEnabled(p,"LavaWarp",false); + if ( demo.lastunder == Demolitionist.UNDER_SLIME ) + { + Shader.SetEnabled(p,"SlimeWarp",true); + Shader.SetUniform1f(p,"SlimeWarp","timer",(gametic+e.FracTic)/Thinker.TICRATE); + Shader.SetUniform1f(p,"SlimeWarp","dfact",coat?.25:1.); + } + else Shader.SetEnabled(p,"SlimeWarp",false); int lastdmg = (demo.Health>0)?demo.lastdamage:Random[Flicker](60,80); int lastdmgtic = (demo.Health>0)?demo.lastdamagetic:(gametic+Random[Flicker](30,20)); double noiz = min(lastdmg*.09*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.5); @@ -1691,6 +1713,9 @@ Class SWWMHandler : EventHandler } else { + Shader.SetEnabled(p,"WaterWarp",false); + Shader.SetEnabled(p,"LavaWarp",false); + Shader.SetEnabled(p,"SlimeWarp",false); Shader.SetEnabled(p,"Glitch",false); Shader.SetEnabled(p,"Grain",false); Shader.SetEnabled(p,"ZoomBlur",false);