Add PP shaders when submerged.

This commit is contained in:
Mari the Deer 2020-09-01 18:10:34 +02:00
commit 058a85e274
11 changed files with 146 additions and 16 deletions

View file

@ -1,4 +1,31 @@
HardwareShader PostProcess beforebloom 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" Name "ZoomBlur"
Shader "shaders/glsl/ZoomBlur.fp" 330 Shader "shaders/glsl/ZoomBlur.fp" 330

View file

@ -1,2 +1,2 @@
[default] [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)";

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Before After
Before After

26
shaders/glsl/LavaWarp.fp Normal file
View file

@ -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.);
}

26
shaders/glsl/SlimeWarp.fp Normal file
View file

@ -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.);
}

26
shaders/glsl/WaterWarp.fp Normal file
View file

@ -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.);
}

BIN
textures/lavawarp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
textures/slimewarp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
textures/warptex.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

BIN
textures/wetwarp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View file

@ -371,6 +371,19 @@ Class SWWMHandler : EventHandler
return (al+ah+bl+bh)*.25; 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 // level end stats
override void WorldUnloaded( WorldEvent e ) override void WorldUnloaded( WorldEvent e )
{ {
@ -378,13 +391,7 @@ Class SWWMHandler : EventHandler
SWWMStats s; SWWMStats s;
while ( s = SWWMStats(ti.Next()) ) while ( s = SWWMStats(ti.Next()) )
s.AddLevelStats(); s.AddLevelStats();
PlayerInfo p = players[consoleplayer]; ClearAllShaders(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);
} }
override void WorldLoaded( WorldEvent e ) override void WorldLoaded( WorldEvent e )
@ -474,13 +481,7 @@ Class SWWMHandler : EventHandler
Demolitionist(players[i].mo).CheckUnderwaterAmb(true); Demolitionist(players[i].mo).CheckUnderwaterAmb(true);
} }
} }
PlayerInfo p = players[consoleplayer]; ClearAllShaders(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);
} }
override void PlayerDied( PlayerEvent e ) override void PlayerDied( PlayerEvent e )
@ -1648,6 +1649,27 @@ Class SWWMHandler : EventHandler
if ( pc && (mo is 'Demolitionist') && useshaders.GetBool() ) if ( pc && (mo is 'Demolitionist') && useshaders.GetBool() )
{ {
let demo = Demolitionist(mo); 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 lastdmg = (demo.Health>0)?demo.lastdamage:Random[Flicker](60,80);
int lastdmgtic = (demo.Health>0)?demo.lastdamagetic:(gametic+Random[Flicker](30,20)); 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); double noiz = min(lastdmg*.09*max(0,(lastdmgtic-(gametic+e.Fractic))/35.),.5);
@ -1691,6 +1713,9 @@ Class SWWMHandler : EventHandler
} }
else else
{ {
Shader.SetEnabled(p,"WaterWarp",false);
Shader.SetEnabled(p,"LavaWarp",false);
Shader.SetEnabled(p,"SlimeWarp",false);
Shader.SetEnabled(p,"Glitch",false); Shader.SetEnabled(p,"Glitch",false);
Shader.SetEnabled(p,"Grain",false); Shader.SetEnabled(p,"Grain",false);
Shader.SetEnabled(p,"ZoomBlur",false); Shader.SetEnabled(p,"ZoomBlur",false);