From c518bb2616c19e6116366749a8ee57777f1686fd Mon Sep 17 00:00:00 2001 From: DarkGod <darkgod@net-core.org> Date: Thu, 15 Aug 2013 04:47:49 +0200 Subject: [PATCH] even better --- .../tome/data/gfx/particles/fireflash.lua | 6 +- .../modules/tome/data/gfx/particles/flame.lua | 4 +- .../gfx/particles_images/arcaneshockwave.png | Bin 0 -> 4236 bytes .../gfx/particles_images/flamesshockwave.png | Bin 0 -> 4262 bytes .../tome/data/gfx/shaders/shockwave.frag | 188 ++++++++++++++++++ .../tome/data/gfx/shaders/shockwave.lua | 37 ++++ 6 files changed, 230 insertions(+), 5 deletions(-) create mode 100644 game/modules/tome/data/gfx/particles_images/arcaneshockwave.png create mode 100644 game/modules/tome/data/gfx/particles_images/flamesshockwave.png create mode 100644 game/modules/tome/data/gfx/shaders/shockwave.frag create mode 100644 game/modules/tome/data/gfx/shaders/shockwave.lua diff --git a/game/modules/tome/data/gfx/particles/fireflash.lua b/game/modules/tome/data/gfx/particles/fireflash.lua index c9396dca79..c1a44039ee 100644 --- a/game/modules/tome/data/gfx/particles/fireflash.lua +++ b/game/modules/tome/data/gfx/particles/fireflash.lua @@ -21,7 +21,7 @@ -- Advanced shaders -------------------------------------------------------------------------------------- if core.shader.active(4) then -use_shader = {type="fireboom"} +use_shader = {type="shockwave"} base_size = 64 local nb = 0 @@ -41,7 +41,7 @@ return { r = 1, rv = 0, ra = 0, g = 1, gv = 0, ga = 0, b = 1, bv = 0, ba = 0, - a = 1, av = -1 / 16, aa = 0, + a = 0.7, av = 0, aa = 0, } end, }, function(self) @@ -50,7 +50,7 @@ function(self) end nb = nb + 1 end, -1, "particles_images/fireboom" +1, "particles_images/flamesshockwave" -------------------------------------------------------------------------------------- diff --git a/game/modules/tome/data/gfx/particles/flame.lua b/game/modules/tome/data/gfx/particles/flame.lua index 8ae0ab9f70..f8acc6f9d9 100644 --- a/game/modules/tome/data/gfx/particles/flame.lua +++ b/game/modules/tome/data/gfx/particles/flame.lua @@ -21,7 +21,7 @@ -- Advanced shaders -------------------------------------------------------------------------------------- if core.shader.active(4) then -use_shader = {type="fireball"} +use_shader = {type="fireboom"} base_size = 64 local nb = 0 @@ -50,7 +50,7 @@ function(self) end nb = nb + 1 end, -1 +1, "particles_images/fireball" -------------------------------------------------------------------------------------- -- Default diff --git a/game/modules/tome/data/gfx/particles_images/arcaneshockwave.png b/game/modules/tome/data/gfx/particles_images/arcaneshockwave.png new file mode 100644 index 0000000000000000000000000000000000000000..634a0d25c7597d22eeb64387783cf59118bb9ac5 GIT binary patch literal 4236 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 K>Q-tyNBs|($qOq0 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/particles_images/flamesshockwave.png b/game/modules/tome/data/gfx/particles_images/flamesshockwave.png new file mode 100644 index 0000000000000000000000000000000000000000..c36da463868cfedc3f6c229334c3d7573b07cf16 GIT binary patch literal 4262 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 literal 0 HcmV?d00001 diff --git a/game/modules/tome/data/gfx/shaders/shockwave.frag b/game/modules/tome/data/gfx/shaders/shockwave.frag new file mode 100644 index 0000000000..4180a9193b --- /dev/null +++ b/game/modules/tome/data/gfx/shaders/shockwave.frag @@ -0,0 +1,188 @@ +uniform sampler2D tex; +uniform float tick; +uniform float tick_start; +uniform float time_factor; + +uniform float shockwaveSpeed; +uniform float shockwaveWidth; +uniform float flameIntensity; + +uniform vec2 ellipsoidalFactor = vec2(1.0, 1.0); //(1.0, 1.0) is perfect circle, (2.0, 1.0) is vertical ellipse, (1.0, 2.0) is horizontal ellipse + +vec4 permute( vec4 x ) { + + return mod( ( ( x * 34.0 ) + 1.0 ) * x, 289.0 ); + +} + +vec4 taylorInvSqrt( vec4 r ) { + + return 1.79284291400159 - 0.85373472095314 * r; + +} + +float snoise( vec3 v ) { + + const vec2 C = vec2( 1.0 / 6.0, 1.0 / 3.0 ); + const vec4 D = vec4( 0.0, 0.5, 1.0, 2.0 ); + + // First corner + + vec3 i = floor( v + dot( v, C.yyy ) ); + vec3 x0 = v - i + dot( i, C.xxx ); + + // Other corners + + vec3 g = step( x0.yzx, x0.xyz ); + vec3 l = 1.0 - g; + vec3 i1 = min( g.xyz, l.zxy ); + vec3 i2 = max( g.xyz, l.zxy ); + + vec3 x1 = x0 - i1 + 1.0 * C.xxx; + vec3 x2 = x0 - i2 + 2.0 * C.xxx; + vec3 x3 = x0 - 1. + 3.0 * C.xxx; + + // Permutations + + i = mod( i, 289.0 ); + vec4 p = permute( permute( permute( + i.z + vec4( 0.0, i1.z, i2.z, 1.0 ) ) + + i.y + vec4( 0.0, i1.y, i2.y, 1.0 ) ) + + i.x + vec4( 0.0, i1.x, i2.x, 1.0 ) ); + + // Gradients + // ( N*N points uniformly over a square, mapped onto an octahedron.) + + float n_ = 1.0 / 7.0; // N=7 + + vec3 ns = n_ * D.wyz - D.xzx; + + vec4 j = p - 49.0 * floor( p * ns.z *ns.z ); // mod(p,N*N) + + vec4 x_ = floor( j * ns.z ); + vec4 y_ = floor( j - 7.0 * x_ ); // mod(j,N) + + vec4 x = x_ *ns.x + ns.yyyy; + vec4 y = y_ *ns.x + ns.yyyy; + vec4 h = 1.0 - abs( x ) - abs( y ); + + vec4 b0 = vec4( x.xy, y.xy ); + vec4 b1 = vec4( x.zw, y.zw ); + + + vec4 s0 = floor( b0 ) * 2.0 + 1.0; + vec4 s1 = floor( b1 ) * 2.0 + 1.0; + vec4 sh = -step( h, vec4( 0.0 ) ); + + vec4 a0 = b0.xzyw + s0.xzyw * sh.xxyy; + vec4 a1 = b1.xzyw + s1.xzyw * sh.zzww; + + vec3 p0 = vec3( a0.xy, h.x ); + vec3 p1 = vec3( a0.zw, h.y ); + vec3 p2 = vec3( a1.xy, h.z ); + vec3 p3 = vec3( a1.zw, h.w ); + + // Normalise gradients + + vec4 norm = taylorInvSqrt( vec4( dot( p0, p0 ), dot( p1, p1 ), dot( p2, p2 ), dot( p3, p3 ) ) ); + p0 *= norm.x; + p1 *= norm.y; + p2 *= norm.z; + p3 *= norm.w; + + // Mix final noise value + + vec4 m = max( 0.6 - vec4( dot( x0, x0 ), dot( x1, x1 ), dot( x2, x2 ), dot( x3, x3 ) ), 0.0 ); + m = m * m; + return 42.0 * dot( m*m, vec4( dot( p0, x0 ), dot( p1, x1 ), + dot( p2, x2 ), dot( p3, x3 ) ) ); + +} + +vec2 snoise2(vec3 pos) +{ + return vec2(snoise(pos), snoise(pos + vec3(0.0, 0.0, 1.0))); +} + +float GetFireDelta(float currTime, vec2 pos, float freqMult, float stretchMult, float scrollSpeed, float evolutionSpeed) +{ + //firewall + float delta = 0; +// pos.y += (1.0 - pos.y) * 0.5; + //pos.y += 0.5; + pos.y /= stretchMult; + pos *= freqMult; + pos.y += currTime * scrollSpeed; +// pos.y -= currTime * 3.0; + + delta += snoise(vec3(pos * 1.0, currTime * 1.0 * evolutionSpeed)) * 1.5; + delta += snoise(vec3(pos * 2.0, currTime * 2.0 * evolutionSpeed)) * 1.5; + delta += snoise(vec3(pos * 4.0, currTime * 4.0 * evolutionSpeed)) * 1.5; + delta += snoise(vec3(pos * 8.0, currTime * 8.0 * evolutionSpeed)) * 1.5; + delta += snoise(vec3(pos * 16.0, currTime * 16.0 * evolutionSpeed)) * 0.5; + + return delta; +} +vec4 GetFireColor(float currTime, vec2 pos, float freqMult, float stretchMult, float ampMult) +{ + float delta = GetFireDelta(currTime, pos, freqMult, stretchMult, 3.0, 0.1); + delta *= min(1.0, max(0.0, 1.0 * (1.0 - pos.y))); + delta *= min(1.0, max(0.0, 1.0 * (0.0 + pos.y))); + vec2 displacedPoint = pos + vec2(0, delta * ampMult); + displacedPoint.y = min(0.99, displacedPoint.y); + displacedPoint.y = max(0.01, displacedPoint.y); + + return texture2D(tex, displacedPoint); +} + +vec4 GetFireRingColor(float currTime, vec2 pos, float freqMult, float stretchMult, float ampMult, float power, float radius1, float radius2, float scrollSpeed, float paletteCoord) +{ + float pi = 3.141592; + float ang = atan(pos.y, pos.x) + pi; + + vec2 planarPos = vec2(ang / (2.0 * pi), 1.0 - (length(pos) - radius1) / (radius2 - radius1)); + planarPos.y = pow(abs(planarPos.y), power); + + float delta = + GetFireDelta(currTime, planarPos + vec2(currTime * scrollSpeed, 0.0), freqMult, stretchMult, 1.5, 0.5) * (1.0 - planarPos.x) + + GetFireDelta(currTime, vec2(planarPos.x + currTime * scrollSpeed - 1.0, planarPos.y), freqMult, stretchMult, 1.5, 0.5) * planarPos.x; + + delta *= min(1.0, max(0.0, 1.0 * (1.0 - planarPos.y))); + delta *= min(1.0, max(0.0, 1.0 * (0.0 + planarPos.y))); + + float verticalPos = planarPos.y + delta * ampMult; + verticalPos = min(0.99, verticalPos); + verticalPos = max(0.01, verticalPos); + + return texture2D(tex, vec2(paletteCoord, verticalPos)); +} + +void main(void) +{ + vec2 radius = gl_TexCoord[0].xy - vec2(0.5, 0.5); + + radius *= ellipsoidalFactor; + + float radiusLen = length(radius); + + + float ringRadius = 0.5 * max(0.0, min(1.0, ((tick - tick_start) / time_factor * shockwaveSpeed))); + float ringWidth = shockwaveWidth / 2.0; + + vec2 dir = radius / radiusLen; + + + vec4 c; + if(radiusLen > ringRadius - ringWidth && radiusLen < ringRadius) + { + c = GetFireRingColor(tick / time_factor + 0.0 , radius, 6.0, 15.0, flameIntensity, 1.0, ringRadius, ringRadius - ringWidth, 0.0, 0.5); + }else + { + c = vec4(0.0, 0.0, 0.0, 0.0); + } + c.a *= min(1.0, max(0.0, 20.0 * (1.0 - (radiusLen - (ringRadius - ringWidth)) / ringWidth))); + c.a *= gl_Color.a; + + + gl_FragColor = c; +} diff --git a/game/modules/tome/data/gfx/shaders/shockwave.lua b/game/modules/tome/data/gfx/shaders/shockwave.lua new file mode 100644 index 0000000000..17a2d827a4 --- /dev/null +++ b/game/modules/tome/data/gfx/shaders/shockwave.lua @@ -0,0 +1,37 @@ +-- ToME - Tales of Maj'Eyal +-- Copyright (C) 2009, 2010, 2011, 2012, 2013 Nicolas Casalini +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see <http://www.gnu.org/licenses/>. +-- +-- Nicolas Casalini "DarkGod" +-- darkgod@te4.org + +return { + frag = "shockwave", + vert = nil, + args = { + tex = { texture = 0 }, + time_factor = time_factor or 4000, + + shockwaveWidth = shockwaveWidth or 0.5, --0.1 is very thin wave, 0.9 is thick + shockwaveSpeed = shockwaveSpeed or 7.0, + flameIntensity = flameIntensity or 0.4, + + ellipsoidalFactor = {1.0, 1.0}, --1 is perfect circle, >1 is ellipsoidal + }, + resetargs = { + tick_start = function() return core.game.getTime() end, + }, + clone = false, +} -- GitLab