diff --git a/gldefs.plasmablast b/gldefs.plasmablast index 783aee081..1a78dc461 100644 --- a/gldefs.plasmablast +++ b/gldefs.plasmablast @@ -13,3 +13,24 @@ Brightmap Texture "models/PlasmaBlast.png" { Map "models/PlasmaBlast_bright.png" } +HardwareShader Texture "models/PlasmaLED.png" +{ + Shader "shaders/glsl/CanvasProxy.fp" + Texture "scrtex" "PLASBLED" +} +HardwareShader Texture "models/PlasmaBlast_1st.png" +{ + Shader "shaders/glsl/PlasmaBlast.fp" + Texture "masktex" "models/PlasmaBlast_mask.png" + Texture "envtex" "models/envmap/iceenv.png" + Texture "rimtex" "models/envmap/icerim.png" + Define "RIM_LIGHTING" + Define "ENVFACT" = "1." + Define "RIMFACT" = "1." + Define "RIMSTEP" = "0." + Texture "fadetex" "PLASBFAD" + Texture "battex" "models/PlasmaBlast_battery.png" + Texture "chgtex" "models/PlasmaBlast_charge.png" + Texture "gradtex" "models/PlasmaBlast_grad.png" + Texture "noisetex" "textures/roughwarp.png" +} diff --git a/language.version b/language.version index 42aa648f1..c5c4c9d10 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r579 \cu(Fri 21 Oct 12:43:41 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r579 \cu(2022-10-21 12:43:41)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r580 \cu(Fri 21 Oct 20:11:59 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r580 \cu(2022-10-21 20:11:59)\c-"; diff --git a/models/canvas/NukuriFnt.png b/models/canvas/NukuriFnt.png new file mode 100644 index 000000000..3bfa518a8 Binary files /dev/null and b/models/canvas/NukuriFnt.png differ diff --git a/models/canvas/NukuriFnt.txt b/models/canvas/NukuriFnt.txt new file mode 100644 index 000000000..2451c01c1 --- /dev/null +++ b/models/canvas/NukuriFnt.txt @@ -0,0 +1,109 @@ +0,0,0,1,8 +1,9,0,5,8 +2,18,0,7,8 +3,27,0,7,8 +4,36,0,4,8 +5,45,0,7,8 +6,54,0,7,8 +7,63,0,7,8 +8,72,0,8,8 +9,81,0,5,8 +A,0,9,8,8 +E,9,9,8,8 +I,18,9,8,8 +Y,27,9,8,8 +U,36,9,8,8 +O,45,9,8,8 +H,54,9,2,8 +W,0,18,6,8 +WA,9,18,8,8 +WE,18,18,8,8 +WI,27,18,6,8 +WY,36,18,8,8 +WU,45,18,8,8 +WO,54,18,8,8 +D,0,27,6,8 +DA,9,27,8,8 +DE,18,27,8,8 +DI,27,27,6,8 +DY,36,27,8,8 +DU,45,27,8,8 +DO,54,27,8,8 +V,0,36,4,8 +VA,9,36,6,8 +VE,18,36,8,8 +VI,27,36,5,8 +VY,36,36,8,8 +VU,45,36,8,8 +VO,54,36,8,8 +Z,0,45,6,8 +ZA,9,45,8,8 +ZE,18,45,8,8 +ZI,27,45,6,8 +ZY,36,45,8,8 +ZU,45,45,8,8 +ZO,54,45,8,8 +M,0,54,6,8 +MA,9,54,8,8 +ME,18,54,8,8 +MI,27,54,6,8 +MY,36,54,8,8 +MU,45,54,8,8 +MO,54,54,8,8 +L,0,63,6,8 +LA,9,63,8,8 +LE,18,63,8,8 +LI,27,63,6,8 +LY,36,63,8,8 +LU,45,63,8,8 +LO,54,63,8,8 +B,0,72,6,8 +BA,9,72,8,8 +BE,18,72,8,8 +BI,27,72,6,8 +BY,36,72,8,8 +BU,45,72,8,8 +BO,54,72,8,8 +R,0,81,6,8 +RA,9,81,8,8 +RE,18,81,8,8 +RI,27,81,6,8 +RY,36,81,8,8 +RU,45,81,8,8 +RO,54,81,8,8 +S,0,90,6,8 +SA,9,90,8,8 +SE,18,90,8,8 +SI,27,90,6,8 +SY,36,90,8,8 +SU,45,90,8,8 +SO,54,90,8,8 +T,0,99,6,8 +TA,9,99,8,8 +TE,18,99,8,8 +TI,27,99,6,8 +TY,36,99,8,8 +TU,45,99,8,8 +TO,54,99,8,8 +N,0,108,6,8 +NA,9,108,8,8 +NE,18,108,8,8 +NI,27,108,6,8 +NY,36,108,8,8 +NU,45,108,8,8 +NO,54,108,8,8 +X,0,117,6,8 +XA,9,117,8,8 +XE,18,117,8,8 +XI,27,117,6,8 +XY,36,117,8,8 +XU,45,117,8,8 +XO,54,117,8,8 +K,0,126,6,8 +KA,9,126,8,8 +KE,18,126,8,8 +KI,27,126,6,8 +KY,36,126,8,8 +KU,45,126,8,8 +KO,54,126,8,8 +�,0,135,8,8 diff --git a/shaders/glsl/PlasmaBlast.fp b/shaders/glsl/PlasmaBlast.fp new file mode 100644 index 000000000..39be98264 --- /dev/null +++ b/shaders/glsl/PlasmaBlast.fp @@ -0,0 +1,46 @@ +// basic texture + masked equirectangular envmap + gradient rim +// + dynamic glows (Plasma Blaster specific) +#define RECIPROCAL_PI2 0.15915494 + +#ifndef RIMSTEP +#define RIMSTEP .5 +#endif +#ifndef ENVFACT +#define ENVFACT 1. +#endif +#ifndef RIMFACT +#define RIMFACT 1. +#endif + +void SetupMaterial( inout Material mat ) +{ + vec4 base = getTexel(vTexCoord.st); + float mask = texture(masktex,vTexCoord.st).x; + vec3 norm = normalize(vWorldNormal.xyz); + vec3 eye = normalize(uCameraPos.xyz-pixelpos.xyz); + vec3 rvec = normalize(reflect(eye,norm)); + vec2 uv = vec2(atan(rvec.z,rvec.x)*RECIPROCAL_PI2+.5,asin(rvec.y)*RECIPROCAL_PI2+.5); + vec2 uv2 = vec2(atan(rvec.z,abs(rvec.x))*RECIPROCAL_PI2+.5,asin(rvec.y)*RECIPROCAL_PI2+.5); + vec3 envcol = textureGrad(envtex,uv,dFdx(uv2),dFdy(uv2)).rgb*ENVFACT; +#ifdef RIM_LIGHTING + float rim = smoothstep(RIMSTEP,1.,1.-abs(dot(eye,norm))); + vec3 rimcol = texture(rimtex,vec2(.25+.5*rim,.5)).rgb; + envcol = mix(envcol,rimcol,rim*RIMFACT); +#endif + mat.Base = vec4(base.rgb+envcol*mask,base.a); + mat.Normal = ApplyNormalMap(vTexCoord.st); + if ( (uTextureMode&TEXF_Brightmap) != 0 ) + mat.Bright = texture(brighttexture,vTexCoord.st); + // status canvas tex (only need two channels) + vec2 fade = texture(fadetex,vec2(.5)).rg; + // red: battery connection led + vec3 bat = texture(battex,vTexCoord.st).rgb*fade.r; + mat.Base.rgb += bat; + mat.Bright.rgb += vec3(max(bat.r,max(bat.g,bat.b))); + // green: charge glow + float chg = texture(chgtex,vTexCoord.st).x*fade.g; + // TODO noise + vec3 grad = texture(gradtex,vec2(.25+chg*.5,.5)).rgb; + mat.Base.rgb += grad; + mat.Bright.rgb += vec3(chg); +}