Compare commits

..

1 Commits
1.6.4 ... 1.7.3

Author SHA1 Message Date
InventiveBot
498dc14359 Create/Update assets for version 1.7.3 2017-02-18 13:40:21 +00:00
706 changed files with 4578 additions and 2127 deletions

View File

@@ -1,16 +0,0 @@
_ _ ___ ______ _ _ _____ _ _ _____
| | | |/ _ \ | ___ \ \ | |_ _| \ | | __ \
| | | / /_\ \| |_/ / \| | | | | \| | | \/
| |/\| | _ || /| . ` | | | | . ` | | __
\ /\ / | | || |\ \| |\ |_| |_| |\ | |_\ \
\/ \/\_| |_/\_| \_\_| \_/\___/\_| \_/\____/
(Sorry about the cheesy 90s ASCII art.)
Everything in this folder that does not belong here will be deleted.
This folder will be kept sync with the Launcher at every run.
If you wish to modify assets/resources in any way, use Resource Packs.
Ta,
Dinnerbone of Mojang

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "antialias",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,64 @@
{
"targets": [
"0",
"1"
],
"passes": [
{
"name": "blobs2",
"intarget": "minecraft:main",
"outtarget": "0"
},
{
"name": "outline_watercolor",
"intarget": "0",
"outtarget": "minecraft:main"
},
{
"name": "blur",
"intarget": "minecraft:main",
"outtarget": "1",
"uniforms": [
{
"name": "BlurDir",
"values": [ 0.8, 0.0 ]
},
{
"name": "Radius",
"values": [ 20.0 ]
}
]
},
{
"name": "blur",
"intarget": "1",
"outtarget": "minecraft:main",
"uniforms": [
{
"name": "BlurDir",
"values": [ 0.0, 0.8 ]
},
{
"name": "Radius",
"values": [ 20.0 ]
}
]
},
{
"name": "outline_combine",
"intarget": "0",
"outtarget": "1",
"auxtargets": [
{
"name": "OutlineSampler",
"id": "minecraft:main"
}
]
},
{
"name": "blit",
"intarget": "1",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "bits",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "blobs",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "blobs2",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,37 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "blur",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{
"name": "BlurDir",
"values": [ 1.0, 0.0 ]
},
{
"name": "Radius",
"values": [ 20.0 ]
}
]
},
{
"name": "blur",
"intarget": "swap",
"outtarget": "minecraft:main",
"uniforms": [
{
"name": "BlurDir",
"values": [ 0.0, 1.0 ]
},
{
"name": "Radius",
"values": [ 20.0 ]
}
]
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "bumpy",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,20 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "color_convolve",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{ "name": "Saturation", "values": [ 1.4 ] }
]
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "deconverge",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,23 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "color_convolve",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{
"name": "Saturation",
"values": [ 0.2 ]
}
]
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "flip",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "fxaa",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,41 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "color_convolve",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{
"name": "RedMatrix",
"values": [ 0.0, 0.0, 0.0 ]
},
{
"name": "GreenMatrix",
"values": [ 0.3, 0.59, 0.11 ]
},
{
"name": "BlueMatrix",
"values": [ 0.0, 0.0, 0.0 ]
}
]
},
{
"name": "bits",
"intarget": "swap",
"outtarget": "minecraft:main"
},
{
"name": "scan_pincushion",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,23 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "invert",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{
"name": "InverseAmount",
"values": [ 0.8 ]
}
]
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,26 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "notch",
"intarget": "minecraft:main",
"outtarget": "swap",
"auxtargets": [
{
"name": "DitherSampler",
"id": "dither",
"width": 4,
"height": 4,
"bilinear": false
}
]
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,92 @@
{
"targets": [
"swap",
"swap2",
"previous"
],
"passes": [
{
"name": "ntsc_encode",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "ntsc_decode",
"intarget": "swap",
"outtarget": "swap2",
"auxtargets": [
{
"name": "BaseSampler",
"id": "minecraft:main"
}
]
},
{
"name": "color_convolve",
"intarget": "swap2",
"outtarget": "swap"
},
{
"name": "deconverge",
"intarget": "swap",
"outtarget": "minecraft:main"
},
{
"name": "blur",
"intarget": "minecraft:main",
"outtarget": "swap",
"uniforms": [
{
"name": "BlurDir",
"values": [ 1.0, 0.0 ]
},
{
"name": "Radius",
"values": [ 10.0 ]
}
]
},
{
"name": "blur",
"intarget": "swap",
"outtarget": "minecraft:main",
"uniforms": [
{
"name": "BlurDir",
"values": [ 0.0, 1.0 ]
},
{
"name": "Radius",
"values": [ 10.0 ]
}
]
},
{
"name": "scan_pincushion",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "phosphor",
"intarget": "swap",
"outtarget": "minecraft:main",
"auxtargets": [
{
"name": "PrevSampler",
"id": "previous"
}
],
"uniforms": [
{
"name": "Phosphor",
"values": [ 0.4, 0.4, 0.4 ]
}
]
},
{
"name": "blit",
"intarget": "minecraft:main",
"outtarget": "previous"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "outline",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "outline_soft",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,35 @@
{
"targets": [
"swap",
"previous"
],
"passes": [
{
"name": "phosphor",
"intarget": "minecraft:main",
"outtarget": "swap",
"auxtargets": [
{
"name": "PrevSampler",
"id": "previous"
}
],
"uniforms": [
{
"name": "Phosphor",
"values": [ 0.95, 0.95, 0.95 ]
}
]
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "previous"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "scan_pincushion",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "sobel",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,17 @@
{
"targets": [
"swap"
],
"passes": [
{
"name": "wobble",
"intarget": "minecraft:main",
"outtarget": "swap"
},
{
"name": "blit",
"intarget": "swap",
"outtarget": "minecraft:main"
}
]
}

View File

@@ -0,0 +1,29 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 c = texture2D (DiffuseSampler, texCoord);
vec4 u1 = texture2D (DiffuseSampler, texCoord + vec2 ( 0.0, -oneTexel.y ));
vec4 u2 = texture2D (DiffuseSampler, texCoord + vec2 ( 0.0, -oneTexel.y * 2.0));
vec4 d1 = texture2D (DiffuseSampler, texCoord + vec2 ( 0.0, oneTexel.y ));
vec4 d2 = texture2D (DiffuseSampler, texCoord + vec2 ( 0.0, oneTexel.y * 2.0));
vec4 l1 = texture2D (DiffuseSampler, texCoord + vec2 (-oneTexel.x, 0.0));
vec4 l2 = texture2D (DiffuseSampler, texCoord + vec2 (-oneTexel.x * 2.0, 0.0));
vec4 r1 = texture2D (DiffuseSampler, texCoord + vec2 ( oneTexel.x, 0.0));
vec4 r2 = texture2D (DiffuseSampler, texCoord + vec2 ( oneTexel.x * 2.0, 0.0));
vec4 v1 = mix (c, mix (l1, l2, 0.667), 0.75);
vec4 v2 = mix (c, mix (r1, r2, 0.667), 0.75);
vec4 v3 = mix (c, mix (u1, u2, 0.667), 0.75);
vec4 v4 = mix (c, mix (d1, d2, 0.667), 0.75);
vec4 v5 = mix (v1, v2, 0.5);
vec4 v6 = mix (v3, v4, 0.5);
vec4 color = mix (v5, v6, 0.5);
gl_FragColor = vec4(color.rgb, c.a);
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "blobs",
"fragment": "antialias",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,26 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
uniform float Resolution = 4.0;
uniform float Saturation = 1.5;
uniform float MosaicSize = 8.0;
void main() {
vec2 mosaicInSize = InSize / MosaicSize;
vec2 fractPix = fract(texCoord * mosaicInSize) / mosaicInSize;
vec4 baseTexel = texture2D(DiffuseSampler, texCoord - fractPix);
baseTexel = baseTexel - fract(baseTexel * Resolution) / Resolution;
float luma = dot(baseTexel.rgb, vec3(0.3, 0.59, 0.11));
vec3 chroma = (baseTexel.rgb - luma) * Saturation;
baseTexel = vec4(luma + chroma, baseTexel.a);
gl_FragColor = baseTexel;
}

View File

@@ -0,0 +1,21 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "bits",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "Resolution", "type": "float", "count": 1, "values": [ 4.0 ] },
{ "name": "Saturation", "type": "float", "count": 1, "values": [ 1.5 ] },
{ "name": "MosaicSize", "type": "float", "count": 1, "values": [ 8.0 ] }
]
}

View File

@@ -0,0 +1,9 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
void main(){
gl_FragColor = texture2D(DiffuseSampler, texCoord);
}

View File

@@ -0,0 +1,17 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "blit",
"fragment": "blit",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,16 @@
#version 120
attribute vec4 Position;
uniform mat4 ProjMat;
uniform vec2 OutSize;
varying vec2 texCoord;
void main(){
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
gl_Position = vec4(outPos.xy, 0.2, 1.0);
texCoord = Position.xy / OutSize;
texCoord.y = 1.0 - texCoord.y;
}

View File

@@ -0,0 +1,43 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 u = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y));
vec4 d = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y));
vec4 l = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0));
vec4 r = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0));
vec4 v1 = min(l, r);
vec4 v2 = min(u, d);
vec4 v3 = min(v1, v2);
vec4 ul = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, -oneTexel.y));
vec4 dr = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, oneTexel.y));
vec4 dl = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, oneTexel.y));
vec4 ur = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, -oneTexel.y));
vec4 v4 = min(ul, dr);
vec4 v5 = min(ur, dl);
vec4 v6 = min(v4, v5);
vec4 v7 = min(v3, v6);
vec4 uu = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y * 2.0));
vec4 dd = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y * 2.0));
vec4 ll = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x * 2.0, 0.0));
vec4 rr = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x * 2.0, 0.0));
vec4 v8 = min(uu, dd);
vec4 v9 = min(ll, rr);
vec4 v10 = min(v8, v9);
vec4 v11 = min(v7, v10);
vec4 c = texture2D(DiffuseSampler, texCoord);
vec4 color = min(c, v11);
gl_FragColor = vec4(color.rgb, c.a);
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "blobs",
"fragment": "blobs",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,17 @@
#version 120
attribute vec4 Position;
uniform mat4 ProjMat;
uniform vec2 InSize;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
gl_Position = vec4(outPos.xy, 0.2, 1.0);
oneTexel = 1.0 / InSize;
texCoord = outPos.xy * 0.5 + 0.5;
}

View File

@@ -0,0 +1,30 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform float Radius;
void main(){
vec4 c = texture2D(DiffuseSampler, texCoord);
vec4 maxVal = c;
for(float u = 0.0; u <= Radius; u += 1.0) {
for(float v = 0.0; v <= Radius; v += 1.0) {
float weight = (((sqrt(u * u + v * v) / (Radius)) > 1.0) ? 0.0 : 1.0);
vec4 s0 = texture2D(DiffuseSampler, texCoord + vec2(-u * oneTexel.x, -v * oneTexel.y));
vec4 s1 = texture2D(DiffuseSampler, texCoord + vec2( u * oneTexel.x, v * oneTexel.y));
vec4 s2 = texture2D(DiffuseSampler, texCoord + vec2(-u * oneTexel.x, v * oneTexel.y));
vec4 s3 = texture2D(DiffuseSampler, texCoord + vec2( u * oneTexel.x, -v * oneTexel.y));
vec4 o0 = max(s0, s1);
vec4 o1 = max(s2, s3);
vec4 tempMax = max(o0, o1);
maxVal = mix(maxVal, max(maxVal, tempMax), weight);
}
}
gl_FragColor = vec4(maxVal.rgb, c.a);
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "blobs",
"fragment": "blobs2",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "Radius", "type": "float", "count": 1, "values": [ 7.0 ] }
]
}

View File

@@ -0,0 +1,19 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "phosphor",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" },
{ "name": "CycleSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,23 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
uniform vec2 BlurDir;
uniform float Radius;
void main() {
vec4 blurred = vec4(0.0);
float totalStrength = 0.0;
for(float r = -Radius; r <= Radius; r += 1.0) {
float strength = abs(1.0 - r / Radius);
strength = strength * strength;
totalStrength = totalStrength + strength;
blurred = blurred + texture2D(DiffuseSampler, texCoord + oneTexel * r * BlurDir) * strength;
}
gl_FragColor = vec4(blurred.rgb / totalStrength, texture2D(DiffuseSampler, texCoord).a);
}

View File

@@ -0,0 +1,20 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "blur",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "BlurDir", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "Radius", "type": "float", "count": 1, "values": [ 5.0 ] }
]
}

View File

@@ -0,0 +1,34 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 c = texture2D(DiffuseSampler, texCoord);
vec4 u = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y));
vec4 d = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y));
vec4 l = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0));
vec4 r = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0));
vec4 nc = normalize(c);
vec4 nu = normalize(u);
vec4 nd = normalize(d);
vec4 nl = normalize(l);
vec4 nr = normalize(r);
float du = dot(nc, nu);
float dd = dot(nc, nd);
float dl = dot(nc, nl);
float dr = dot(nc, nr);
float i = 64.0;
float f = 1.0;
f += (du * i) - (dd * i);
f += (dr * i) - (dl * i);
vec4 color = c * clamp(f, 0.5, 2);
gl_FragColor = vec4(color.rgb, c.a);
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "bumpy",
"fragment": "bumpy",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,17 @@
#version 120
attribute vec4 Position;
uniform mat4 ProjMat;
uniform vec2 InSize;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
gl_Position = vec4(outPos.xy, 0.2, 1.0);
oneTexel = 1.0 / InSize;
texCoord = outPos.xy * 0.5 + 0.5;
}

View File

@@ -0,0 +1,36 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
uniform vec3 Gray = vec3(0.3, 0.59, 0.11);
uniform vec3 RedMatrix = vec3(1.0, 0.0, 0.0);
uniform vec3 GreenMatrix = vec3(0.0, 1.0, 0.0);
uniform vec3 BlueMatrix = vec3(0.0, 0.0, 1.0);
uniform vec3 Offset = vec3(0.0, 0.0, 0.0);
uniform vec3 ColorScale = vec3(1.0, 1.0, 1.0);
uniform float Saturation = 1.8;
void main() {
vec4 InTexel = texture2D(DiffuseSampler, texCoord);
// Color Matrix
float RedValue = dot(InTexel.rgb, RedMatrix);
float GreenValue = dot(InTexel.rgb, GreenMatrix);
float BlueValue = dot(InTexel.rgb, BlueMatrix);
vec3 OutColor = vec3(RedValue, GreenValue, BlueValue);
// Offset & Scale
OutColor = (OutColor * ColorScale) + Offset;
// Saturation
float Luma = dot(OutColor, Gray);
vec3 Chroma = OutColor - Luma;
OutColor = (Chroma * Saturation) + Luma;
gl_FragColor = vec4(OutColor, InTexel.a);
}

View File

@@ -0,0 +1,25 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "color_convolve",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "Gray", "type": "float", "count": 3, "values": [ 0.3, 0.59, 0.11 ] },
{ "name": "RedMatrix", "type": "float", "count": 3, "values": [ 1.0, 0.0, 0.0 ] },
{ "name": "GreenMatrix", "type": "float", "count": 3, "values": [ 0.0, 1.0, 0.0 ] },
{ "name": "BlueMatrix", "type": "float", "count": 3, "values": [ 0.0, 0.0, 1.0 ] },
{ "name": "Offset", "type": "float", "count": 3, "values": [ 0.0, 0.0, 0.0 ] },
{ "name": "ColorScale", "type": "float", "count": 3, "values": [ 1.0, 1.0, 1.0 ] },
{ "name": "Saturation", "type": "float", "count": 1, "values": [ 1.8 ] }
]
}

View File

@@ -0,0 +1,28 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
uniform vec3 ConvergeX = vec3(-1.0, 0.0, 0.5);
uniform vec3 ConvergeY = vec3( 0.0, -1.0, 0.5);
uniform vec3 RadialConvergeX = vec3(1.0, 1.0, 1.0);
uniform vec3 RadialConvergeY = vec3(1.0, 1.0, 1.0);
void main() {
vec3 CoordX = texCoord.x * RadialConvergeX;
vec3 CoordY = texCoord.y * RadialConvergeY;
CoordX += ConvergeX * oneTexel.x - (RadialConvergeX - 1.0) * 0.5;
CoordY += ConvergeY * oneTexel.y - (RadialConvergeY - 1.0) * 0.5;
float RedValue = texture2D(DiffuseSampler, vec2(CoordX.x, CoordY.x)).r;
float GreenValue = texture2D(DiffuseSampler, vec2(CoordX.y, CoordY.y)).g;
float BlueValue = texture2D(DiffuseSampler, vec2(CoordX.z, CoordY.z)).b;
float AlphaValue = texture2D(DiffuseSampler, texCoord).a;
gl_FragColor = vec4(RedValue, GreenValue, BlueValue, AlphaValue);
}

View File

@@ -0,0 +1,22 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "deconverge",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "ConvergeX", "type": "float", "count": 3, "values": [ -4.0, 0.0, 2.0 ] },
{ "name": "ConvergeY", "type": "float", "count": 3, "values": [ 0.0, -4.0, 2.0 ] },
{ "name": "RadialConvergeX", "type": "float", "count": 3, "values": [ 1.0, 1.0, 1.0 ] },
{ "name": "RadialConvergeY", "type": "float", "count": 3, "values": [ 1.0, 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,17 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
void main() {
vec3 Texel0 = texture2D(DiffuseSampler, texCoord).rgb;
vec3 Texel1 = texture2D(DiffuseSampler, texCoord + vec2(oneTexel.x, 0.0)).rgb;
vec3 Texel2 = texture2D(DiffuseSampler, texCoord + vec2(0.0, oneTexel.y)).rgb;
vec3 Texel3 = texture2D(DiffuseSampler, texCoord + oneTexel).rgb;
gl_FragColor = vec4((Texel0 + Texel1 + Texel2 + Texel3) * 0.25, Texel0.a);
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "downscale",
"fragment": "downscale",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,19 @@
#version 120
attribute vec4 Position;
uniform mat4 ProjMat;
uniform vec2 InSize;
uniform vec2 OutSize;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
gl_Position = vec4(outPos.xy, 0.2, 1.0);
oneTexel = 1.0 / InSize;
texCoord = outPos.xy * 0.5 + 0.5;
texCoord.y = 1.0 - texCoord.y;
}

View File

@@ -0,0 +1,19 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "flip",
"fragment": "blit",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "ScreenSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,22 @@
#version 120
attribute vec4 Position;
uniform mat4 ProjMat;
uniform vec2 InSize;
uniform vec2 OutSize;
uniform vec2 ScreenSize;
varying vec2 texCoord;
void main(){
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
gl_Position = vec4(outPos.xy, 0.2, 1.0);
vec2 inOutRatio = OutSize / InSize;
vec2 inScreenRatio = ScreenSize / InSize;
texCoord = Position.xy / OutSize;
texCoord.x = texCoord.x * inOutRatio.x;
texCoord.y = texCoord.y * inOutRatio.y;
texCoord.y -= 1.0 - inScreenRatio.y;
}

View File

@@ -0,0 +1,84 @@
#extension GL_EXT_gpu_shader4 : enable
uniform sampler2D DiffuseSampler;
uniform vec2 OutSize;
uniform float VxOffset;
uniform float SpanMax;
uniform float ReduceMul;
varying vec2 texCoord;
varying vec4 posPos;
#define FxaaTex(t, p) texture2D(t, p)
#if __VERSION__ >= 130
#define OffsetVec(a, b) ivec2(a, b)
#define FxaaTexOff(t, p, o, r) textureOffset(t, p, o)
#elif defined(GL_EXT_gpu_shader4)
#define OffsetVec(a, b) ivec2(a, b)
#define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)
#else
#define OffsetVec(a, b) vec2(a, b)
#define FxaaTexOff(t, p, o, r) texture2D(t, p + o * r)
#endif
vec3 FxaaPixelShader(
vec4 posPos, // Output of FxaaVertexShader interpolated across screen.
sampler2D tex, // Input texture.
vec2 rcpFrame) // Constant {1.0/frameWidth, 1.0/frameHeight}.
{
#define FXAA_REDUCE_MIN (1.0/128.0)
//#define FXAA_REDUCE_MUL (1.0/8.0)
//#define FXAA_SPAN_MAX 8.0
vec3 rgbNW = FxaaTex(tex, posPos.zw).xyz;
vec3 rgbNE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,0), rcpFrame.xy).xyz;
vec3 rgbSW = FxaaTexOff(tex, posPos.zw, OffsetVec(0,1), rcpFrame.xy).xyz;
vec3 rgbSE = FxaaTexOff(tex, posPos.zw, OffsetVec(1,1), rcpFrame.xy).xyz;
vec3 rgbM = FxaaTex(tex, posPos.xy).xyz;
vec3 luma = vec3(0.299, 0.587, 0.114);
float lumaNW = dot(rgbNW, luma);
float lumaNE = dot(rgbNE, luma);
float lumaSW = dot(rgbSW, luma);
float lumaSE = dot(rgbSE, luma);
float lumaM = dot(rgbM, luma);
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
vec2 dir;
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
float dirReduce = max(
(lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * ReduceMul),
FXAA_REDUCE_MIN);
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
dir = min(vec2( SpanMax, SpanMax),
max(vec2(-SpanMax, -SpanMax),
dir * rcpDirMin)) * rcpFrame.xy;
vec3 rgbA = (1.0/2.0) * (
FxaaTex(tex, posPos.xy + dir * vec2(1.0/3.0 - 0.5)).xyz +
FxaaTex(tex, posPos.xy + dir * vec2(2.0/3.0 - 0.5)).xyz);
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
FxaaTex(tex, posPos.xy + dir * vec2(0.0/3.0 - 0.5)).xyz +
FxaaTex(tex, posPos.xy + dir * vec2(3.0/3.0 - 0.5)).xyz);
float lumaB = dot(rgbB, luma);
if ((lumaB < lumaMin) || (lumaB > lumaMax)) {
return rgbA;
} else {
return rgbB;
}
}
void main() {
vec4 baseTexel = texture2D(DiffuseSampler, posPos.xy);
gl_FragColor = vec4(FxaaPixelShader(posPos, DiffuseSampler, 1.0 / OutSize), baseTexel.a);
}

View File

@@ -0,0 +1,20 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "fxaa",
"fragment": "fxaa",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "SpanMax", "type": "float", "count": 1, "values": [ 8.0 ] },
{ "name": "SubPixelShift", "type": "float", "count": 1, "values": [ 0.25 ] },
{ "name": "ReduceMul", "type": "float", "count": 1, "values": [ 0.125 ] }
]
}

View File

@@ -0,0 +1,21 @@
#version 120
attribute vec4 Position;
uniform mat4 ProjMat;
uniform vec2 OutSize;
uniform float SubPixelShift;
varying vec2 texCoord;
varying vec4 posPos;
void main() {
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
gl_Position = vec4(outPos.xy, 0.2, 1.0);
texCoord = Position.xy / OutSize;
texCoord.y = 1.0 - texCoord.y;
posPos.xy = texCoord.xy;
posPos.zw = texCoord.xy - (1.0/OutSize * vec2(0.5 + SubPixelShift));
}

View File

@@ -0,0 +1,14 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
uniform float InverseAmount;
void main(){
vec4 diffuseColor = texture2D(DiffuseSampler, texCoord);
vec4 invertColor = 1.0 - diffuseColor;
vec4 outColor = mix(diffuseColor, invertColor, InverseAmount);
gl_FragColor = vec4(outColor.rgb, diffuseColor.a);
}

View File

@@ -0,0 +1,19 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "blit",
"fragment": "invert",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "InverseAmount", "type": "float", "count": 1, "values": [ 0.0 ] }
]
}

View File

@@ -0,0 +1,20 @@
#version 120
attribute vec4 Position;
uniform mat4 ProjMat;
uniform vec2 InSize;
uniform vec2 OutSize;
varying vec2 texCoord;
void main(){
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
gl_Position = vec4(outPos.xy, 0.2, 1.0);
vec2 sizeRatio = OutSize / InSize;
texCoord = Position.xy / OutSize;
texCoord.x = texCoord.x * sizeRatio.x;
texCoord.y = texCoord.y * sizeRatio.y;
texCoord.y = sizeRatio.y - texCoord.y;
}

View File

@@ -0,0 +1,23 @@
#version 120
uniform sampler2D DiffuseSampler;
uniform sampler2D DitherSampler;
varying vec2 texCoord;
uniform vec2 InSize;
void main() {
vec2 halfSize = InSize * 0.5;
vec2 steppedCoord = texCoord;
steppedCoord.x = float(int(steppedCoord.x*halfSize.x)) / halfSize.x;
steppedCoord.y = float(int(steppedCoord.y*halfSize.y)) / halfSize.y;
vec4 noise = texture2D(DitherSampler, steppedCoord * halfSize / 4.0);
vec4 col = texture2D(DiffuseSampler, steppedCoord) + noise * vec4(1.0/12.0, 1.0/12.0, 1.0/6.0, 1.0);
float r = float(int(col.r*8.0))/8.0;
float g = float(int(col.g*8.0))/8.0;
float b = float(int(col.b*4.0))/4.0;
gl_FragColor = vec4(r, g, b, col.a);
}

View File

@@ -0,0 +1,19 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "notch",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" },
{ "name": "DitherSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,132 @@
#version 120
uniform sampler2D DiffuseSampler;
uniform sampler2D BaseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
const vec4 Zero = vec4(0.0);
const vec4 One = vec4(1.0);
const float Pi = 3.1415926535;
const float Pi2 = 6.283185307;
const vec4 A2 = vec4(1.0);
const vec4 B = vec4(0.5);
const float P = 1.0;
const float CCFrequency = 3.59754545;
const float NotchWidth = 2.0;
const float NotchUpperFrequency = 3.59754545 + NotchWidth;
const float NotchLowerFrequency = 3.59754545 - NotchWidth;
const float YFrequency = 6.0;
const float IFrequency = 1.2;
const float QFrequency = 0.6;
const float ScanTime = 52.6;
const vec3 YIQ2R = vec3(1.0, 0.956, 0.621);
const vec3 YIQ2G = vec3(1.0, -0.272, -0.647);
const vec3 YIQ2B = vec3(1.0, -1.106, 1.703);
const vec4 MinC = vec4(-1.1183);
const vec4 CRange = vec4(3.2366);
const float Pi2Length = Pi2 / 83.0;
const vec4 NotchOffset = vec4(0.0, 1.0, 2.0, 3.0);
const vec4 W = vec4(Pi2 * CCFrequency * ScanTime);
void main() {
vec4 YAccum = Zero;
vec4 IAccum = Zero;
vec4 QAccum = Zero;
float QuadXSize = InSize.x * 4.0;
float TimePerSample = ScanTime / QuadXSize;
// Frequency cutoffs for the individual portions of the signal that we extract.
// Y1 and Y2 are the positive and negative frequency limits of the notch filter on Y.
// Y3 is the center of the frequency response of the Y filter.
// I is the center of the frequency response of the I filter.
// Q is the center of the frequency response of the Q filter.
float Fc_y1 = NotchLowerFrequency * TimePerSample;
float Fc_y2 = NotchUpperFrequency * TimePerSample;
float Fc_y3 = YFrequency * TimePerSample;
float Fc_i = IFrequency * TimePerSample;
float Fc_q = QFrequency * TimePerSample;
float Pi2Fc_y1 = Fc_y1 * Pi2;
float Pi2Fc_y2 = Fc_y2 * Pi2;
float Pi2Fc_y3 = Fc_y3 * Pi2;
float Pi2Fc_i = Fc_i * Pi2;
float Pi2Fc_q = Fc_q * Pi2;
float Fc_y1_2 = Fc_y1 * 2.0;
float Fc_y2_2 = Fc_y2 * 2.0;
float Fc_y3_2 = Fc_y3 * 2.0;
float Fc_i_2 = Fc_i * 2.0;
float Fc_q_2 = Fc_q * 2.0;
vec4 CoordY = vec4(texCoord.y);
vec4 BaseTexel = texture2D(DiffuseSampler, texCoord);
// 83 composite samples wide, 4 composite pixels per texel
for (float n = -41.0; n < 42.0; n += 4.0)
{
vec4 n4 = n + NotchOffset;
vec4 CoordX = texCoord.x + oneTexel.x * n4 * 0.25;
vec2 TexCoord = vec2(CoordX.x, CoordY.y);
vec4 C = texture2D(DiffuseSampler, TexCoord) * CRange + MinC;
vec4 WT = W * (CoordX + A2 * CoordY * InSize.y + B);
vec4 Cosine = 0.54 + 0.46 * cos(Pi2Length * n4);
vec4 SincYIn1 = Pi2Fc_y1 * n4;
vec4 SincYIn2 = Pi2Fc_y2 * n4;
vec4 SincYIn3 = Pi2Fc_y3 * n4;
vec4 SincY1 = sin(SincYIn1) / SincYIn1;
vec4 SincY2 = sin(SincYIn2) / SincYIn2;
vec4 SincY3 = sin(SincYIn3) / SincYIn3;
// These zero-checks could be made more efficient, but we are trying to support
// downlevel GLSL
if(SincYIn1.x == 0.0) SincY1.x = 1.0;
if(SincYIn1.y == 0.0) SincY1.y = 1.0;
if(SincYIn1.z == 0.0) SincY1.z = 1.0;
if(SincYIn1.w == 0.0) SincY1.w = 1.0;
if(SincYIn2.x == 0.0) SincY2.x = 1.0;
if(SincYIn2.y == 0.0) SincY2.y = 1.0;
if(SincYIn2.z == 0.0) SincY2.z = 1.0;
if(SincYIn2.w == 0.0) SincY2.w = 1.0;
if(SincYIn3.x == 0.0) SincY3.x = 1.0;
if(SincYIn3.y == 0.0) SincY3.y = 1.0;
if(SincYIn3.z == 0.0) SincY3.z = 1.0;
if(SincYIn3.w == 0.0) SincY3.w = 1.0;
vec4 IdealY = (Fc_y1_2 * SincY1 - Fc_y2_2 * SincY2) + Fc_y3_2 * SincY3;
vec4 FilterY = Cosine * IdealY;
vec4 SincIIn = Pi2Fc_i * n4;
vec4 SincI = sin(SincIIn) / SincIIn;
if(SincIIn.x == 0.0) SincI.x = 1.0;
if(SincIIn.y == 0.0) SincI.y = 1.0;
if(SincIIn.z == 0.0) SincI.z = 1.0;
if(SincIIn.w == 0.0) SincI.w = 1.0;
vec4 IdealI = Fc_i_2 * SincI;
vec4 FilterI = Cosine * IdealI;
vec4 SincQIn = Pi2Fc_q * n4;
vec4 SincQ = sin(SincQIn) / SincQIn;
if(SincQIn.x == 0.0) SincQ.x = 1.0;
if(SincQIn.y == 0.0) SincQ.y = 1.0;
if(SincQIn.z == 0.0) SincQ.z = 1.0;
if(SincQIn.w == 0.0) SincQ.w = 1.0;
vec4 IdealQ = Fc_q_2 * SincQ;
vec4 FilterQ = Cosine * IdealQ;
YAccum += C * FilterY;
IAccum += C * cos(WT) * FilterI;
QAccum += C * sin(WT) * FilterQ;
}
float Y = dot(YAccum, One);
float I = dot(IAccum, One) * 2.0;
float Q = dot(QAccum, One) * 2.0;
vec3 YIQ = vec3(Y, I, Q);
vec3 OutRGB = vec3(dot(YIQ, YIQ2R), dot(YIQ, YIQ2G), dot(YIQ, YIQ2B));
gl_FragColor = vec4(OutRGB, BaseTexel.a);
}

View File

@@ -0,0 +1,19 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "ntsc_decode",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" },
{ "name": "BaseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,50 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
const float Pi2 = 6.283185307;
const vec4 A2 = vec4(1.0);
const vec4 B = vec4(0.5);
const float P = 1.0;
const float CCFrequency = 3.59754545;
const float ScanTime = 52.6;
const float Pi2ScanTime = Pi2 * ScanTime;
const vec4 YTransform = vec4(0.299, 0.587, 0.114, 0.0);
const vec4 ITransform = vec4(0.595716, -0.274453, -0.321263, 0.0);
const vec4 QTransform = vec4(0.211456, -0.522591, 0.31135, 0.0);
const vec4 MinC = vec4(-1.1183);
const vec4 InvCRange = vec4(1.0 / 3.2366);
void main() {
vec2 InverseP = vec2(P, 0.0) * oneTexel;
// UVs for four linearly-interpolated samples spread 0.25 texels apart
vec2 C0 = texCoord;
vec2 C1 = texCoord + InverseP * 0.25;
vec2 C2 = texCoord + InverseP * 0.50;
vec2 C3 = texCoord + InverseP * 0.75;
vec4 Cx = vec4(C0.x, C1.x, C2.x, C3.x);
vec4 Cy = vec4(C0.y, C1.y, C2.y, C3.y);
vec4 Texel0 = texture2D(DiffuseSampler, C0);
vec4 Texel1 = texture2D(DiffuseSampler, C1);
vec4 Texel2 = texture2D(DiffuseSampler, C2);
vec4 Texel3 = texture2D(DiffuseSampler, C3);
// Calculate the expected time of the sample.
vec4 T = A2 * Cy * vec4(InSize.y) + B + Cx;
vec4 W = vec4(Pi2ScanTime * CCFrequency);
vec4 TW = T * W;
vec4 Y = vec4(dot(Texel0, YTransform), dot(Texel1, YTransform), dot(Texel2, YTransform), dot(Texel3, YTransform));
vec4 I = vec4(dot(Texel0, ITransform), dot(Texel1, ITransform), dot(Texel2, ITransform), dot(Texel3, ITransform));
vec4 Q = vec4(dot(Texel0, QTransform), dot(Texel1, QTransform), dot(Texel2, QTransform), dot(Texel3, QTransform));
vec4 Encoded = Y + I * cos(TW) + Q * sin(TW);
gl_FragColor = (Encoded - MinC) * InvCRange;
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "ntsc_encode",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,21 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 center = texture2D(DiffuseSampler, texCoord);
vec4 up = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y));
vec4 down = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0));
vec4 left = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0));
vec4 right = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y));
vec4 uDiff = center - up;
vec4 dDiff = center - down;
vec4 lDiff = center - left;
vec4 rDiff = center - right;
vec4 sum = uDiff + dDiff + lDiff + rDiff;
vec3 clamped = clamp(center.rgb - sum.rgb, 0.0, 1.0);
gl_FragColor = vec4(clamped, center.a);
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "outline",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,13 @@
#version 120
uniform sampler2D DiffuseSampler;
uniform sampler2D OutlineSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 diffuseTexel = texture2D(DiffuseSampler, texCoord);
vec4 outlineTexel = texture2D(OutlineSampler, texCoord);
gl_FragColor = vec4(diffuseTexel.rgb + diffuseTexel.rgb * outlineTexel.rgb * vec3(0.75), diffuseTexel.a);
}

View File

@@ -0,0 +1,19 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "outline_combine",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" },
{ "name": "OutlineSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,46 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform float LumaRamp;
uniform float LumaLevel;
void main(){
vec4 center = texture2D(DiffuseSampler, texCoord);
vec4 up = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y));
vec4 up2 = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y) * 2.0);
vec4 down = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0));
vec4 down2 = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0) * 2.0);
vec4 left = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0));
vec4 left2 = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0) * 2.0);
vec4 right = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y));
vec4 right2 = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y) * 2.0);
vec4 uDiff = abs(center - up);
vec4 dDiff = abs(center - down);
vec4 lDiff = abs(center - left);
vec4 rDiff = abs(center - right);
vec4 u2Diff = abs(center - up2);
vec4 d2Diff = abs(center - down2);
vec4 l2Diff = abs(center - left2);
vec4 r2Diff = abs(center - right2);
vec4 sum = uDiff + dDiff + lDiff + rDiff + u2Diff + d2Diff + l2Diff + r2Diff;
vec4 gray = vec4(0.3, 0.59, 0.11, 0.0);
float sumLuma = 1.0 - dot(clamp(sum, 0.0, 1.0), gray);
// Get luminance of center pixel and adjust
float centerLuma = dot(center + (center - pow(center, vec4(LumaRamp))), gray);
// Quantize the luma value
centerLuma = centerLuma - fract(centerLuma * LumaLevel) / LumaLevel;
// Re-scale to full range
centerLuma = centerLuma * (LumaLevel / (LumaLevel - 1.0));
// Blend with outline
centerLuma = centerLuma * sumLuma;
gl_FragColor = vec4(centerLuma, centerLuma, centerLuma, center.a);
}

View File

@@ -0,0 +1,20 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "outline_soft",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "LumaRamp", "type": "float", "count": 1, "values": [ 16.0 ] },
{ "name": "LumaLevel", "type": "float", "count": 1, "values": [ 4.0 ] }
]
}

View File

@@ -0,0 +1,41 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform float LumaRamp;
void main(){
vec4 center = texture2D(DiffuseSampler, texCoord);
vec4 up = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y));
vec4 up2 = texture2D(DiffuseSampler, texCoord + vec2( 0.0, -oneTexel.y) * 2.0);
vec4 down = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0));
vec4 down2 = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, 0.0) * 2.0);
vec4 left = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0));
vec4 left2 = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, 0.0) * 2.0);
vec4 right = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y));
vec4 right2 = texture2D(DiffuseSampler, texCoord + vec2( 0.0, oneTexel.y) * 2.0);
vec4 ul = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, -oneTexel.y));
vec4 ur = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, -oneTexel.y));
vec4 bl = texture2D(DiffuseSampler, texCoord + vec2(-oneTexel.x, oneTexel.y));
vec4 br = texture2D(DiffuseSampler, texCoord + vec2( oneTexel.x, oneTexel.y));
vec4 gray = vec4(0.3, 0.59, 0.11, 0.0);
float uDiff = dot(abs(center - up), gray);
float dDiff = dot(abs(center - down), gray);
float lDiff = dot(abs(center - left), gray);
float rDiff = dot(abs(center - right), gray);
float u2Diff = dot(abs(center - up2), gray);
float d2Diff = dot(abs(center - down2), gray);
float l2Diff = dot(abs(center - left2), gray);
float r2Diff = dot(abs(center - right2), gray);
float ulDiff = dot(abs(center - ul), gray);
float urDiff = dot(abs(center - ur), gray);
float blDiff = dot(abs(center - bl), gray);
float brDiff = dot(abs(center - br), gray);
float sum = uDiff + dDiff + lDiff + rDiff + u2Diff + d2Diff + l2Diff + r2Diff + ulDiff + urDiff + blDiff + brDiff;
float sumLuma = clamp(sum, 0.0, 1.0);
gl_FragColor = vec4(sumLuma, sumLuma, sumLuma, center.a);
}

View File

@@ -0,0 +1,19 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "outline_watercolor",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "LumaRamp", "type": "float", "count": 1, "values": [ 16.0 ] }
]
}

View File

@@ -0,0 +1,26 @@
#version 120
uniform sampler2D DiffuseSampler;
uniform sampler2D OverlaySampler;
uniform vec2 InSize;
varying vec2 texCoord;
uniform float MosaicSize = 1.0;
uniform vec3 RedMatrix = vec3(1.0, 0.0, 0.0);
uniform vec3 GreenMatrix = vec3(0.0, 1.0, 0.0);
uniform vec3 BlueMatrix = vec3(0.0, 0.0, 1.0);
void main(){
vec2 mosaicInSize = InSize / MosaicSize;
vec2 fractPix = fract(texCoord * mosaicInSize) / mosaicInSize;
vec4 baseTexel = texture2D(DiffuseSampler, texCoord - fractPix);
float red = dot(baseTexel.rgb, RedMatrix);
float green = dot(baseTexel.rgb, GreenMatrix);
float blue = dot(baseTexel.rgb, BlueMatrix);
vec4 overlayTexel = texture2D(OverlaySampler, vec2(texCoord.x, 1.0 - texCoord.y));
gl_FragColor = mix(vec4(red, green, blue, baseTexel.a), overlayTexel, overlayTexel.a);
}

View File

@@ -0,0 +1,23 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "blit",
"fragment": "overlay",
"attributes": [ "Position" ],
"samplers": [
{ "name": "OverlaySampler" },
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "MosaicSize", "type": "float", "count": 1, "values": [ 1.0 ] },
{ "name": "RedMatrix", "type": "float", "count": 3, "values": [ 1.0, 0.0, 0.0 ] },
{ "name": "GreenMatrix", "type": "float", "count": 3, "values": [ 0.0, 1.0, 1.0 ] },
{ "name": "BlueMatrix", "type": "float", "count": 3, "values": [ 0.0, 0.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,19 @@
#version 120
uniform sampler2D DiffuseSampler;
uniform sampler2D PrevSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
uniform vec3 Phosphor = vec3(0.7, 0.7, 0.7);
uniform float LerpFactor = 1.0;
void main() {
vec4 CurrTexel = texture2D(DiffuseSampler, texCoord);
vec4 PrevTexel = texture2D(PrevSampler, texCoord);
gl_FragColor = vec4(max(PrevTexel.rgb * Phosphor, CurrTexel.rgb), CurrTexel.a);
}

View File

@@ -0,0 +1,20 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "phosphor",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" },
{ "name": "PrevSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "Phosphor", "type": "float", "count": 3, "values": [ 0.3, 0.3, 0.3 ] }
]
}

View File

@@ -0,0 +1,64 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
const vec4 Zero = vec4(0.0);
const vec4 Half = vec4(0.5);
const vec4 One = vec4(1.0);
const vec4 Two = vec4(2.0);
const float Pi = 3.1415926535;
const float PincushionAmount = 0.02;
const float CurvatureAmount = 0.02;
const float ScanlineAmount = 0.8;
const float ScanlineScale = 1.0;
const float ScanlineHeight = 1.0;
const float ScanlineBrightScale = 1.0;
const float ScanlineBrightOffset = 0.0;
const float ScanlineOffset = 0.0;
const vec3 Floor = vec3(0.05, 0.05, 0.05);
const vec3 Power = vec3(0.8, 0.8, 0.8);
void main() {
vec4 InTexel = texture2D(DiffuseSampler, texCoord);
vec2 PinUnitCoord = texCoord * Two.xy - One.xy;
float PincushionR2 = pow(length(PinUnitCoord), 2.0);
vec2 PincushionCurve = PinUnitCoord * PincushionAmount * PincushionR2;
vec2 ScanCoord = texCoord;
ScanCoord *= One.xy - PincushionAmount * 0.2;
ScanCoord += PincushionAmount * 0.1;
ScanCoord += PincushionCurve;
vec2 CurvatureClipCurve = PinUnitCoord * CurvatureAmount * PincushionR2;
vec2 ScreenClipCoord = texCoord;
ScreenClipCoord -= Half.xy;
ScreenClipCoord *= One.xy - CurvatureAmount * 0.2;
ScreenClipCoord += Half.xy;
ScreenClipCoord += CurvatureClipCurve;
// -- Alpha Clipping --
if (ScanCoord.x < 0.0) discard;
if (ScanCoord.y < 0.0) discard;
if (ScanCoord.x > 1.0) discard;
if (ScanCoord.y > 1.0) discard;
// -- Scanline Simulation --
float InnerSine = ScanCoord.y * InSize.y * ScanlineScale * 0.25;
float ScanBrightMod = sin(InnerSine * Pi + ScanlineOffset * InSize.y * 0.25);
float ScanBrightness = mix(1.0, (pow(ScanBrightMod * ScanBrightMod, ScanlineHeight) * ScanlineBrightScale + 1.0) * 0.5, ScanlineAmount);
vec3 ScanlineTexel = InTexel.rgb * ScanBrightness;
// -- Color Compression (increasing the floor of the signal without affecting the ceiling) --
ScanlineTexel = Floor + (One.xyz - Floor) * ScanlineTexel;
ScanlineTexel.rgb = pow(ScanlineTexel.rgb, Power);
gl_FragColor = vec4(ScanlineTexel.rgb, InTexel.a);
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "scan_pincushion",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,20 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 center = texture2D(DiffuseSampler, texCoord);
vec4 left = texture2D(DiffuseSampler, texCoord - vec2(oneTexel.x, 0.0));
vec4 right = texture2D(DiffuseSampler, texCoord + vec2(oneTexel.x, 0.0));
vec4 up = texture2D(DiffuseSampler, texCoord - vec2(0.0, oneTexel.y));
vec4 down = texture2D(DiffuseSampler, texCoord + vec2(0.0, oneTexel.y));
vec4 leftDiff = center - left;
vec4 rightDiff = center - right;
vec4 upDiff = center - up;
vec4 downDiff = center - down;
vec4 total = clamp(leftDiff + rightDiff + upDiff + downDiff, 0.0, 1.0);
gl_FragColor = vec4(total.rgb, center.a);
}

View File

@@ -0,0 +1,18 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "sobel",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] }
]
}

View File

@@ -0,0 +1,20 @@
#version 120
attribute vec4 Position;
uniform mat4 ProjMat;
uniform vec2 InSize;
uniform vec2 OutSize;
varying vec2 texCoord;
varying vec2 oneTexel;
void main(){
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
gl_Position = vec4(outPos.xy, 0.2, 1.0);
oneTexel = 1.0 / InSize;
texCoord = Position.xy / OutSize;
texCoord.y = 1.0 - texCoord.y;
}

View File

@@ -0,0 +1,58 @@
#version 120
uniform sampler2D DiffuseSampler;
varying vec2 texCoord;
varying vec2 oneTexel;
uniform vec2 InSize;
uniform float Time;
uniform vec2 Frequency;
uniform vec2 WobbleAmount;
vec3 hue(float h)
{
float r = abs(h * 6.0 - 3.0) - 1.0;
float g = 2 - abs(h * 6.0 - 2.0);
float b = 2 - abs(h * 6.0 - 4.0);
return clamp(vec3(r,g,b), 0.0, 1.0);
}
vec3 HSVtoRGB(vec3 hsv) {
return ((hue(hsv.x) - 1.0) * hsv.y + 1.0) * hsv.z;
}
vec3 RGBtoHSV(vec3 rgb) {
vec3 hsv = vec3(0.0);
hsv.z = max(rgb.r, max(rgb.g, rgb.b));
float min = min(rgb.r, min(rgb.g, rgb.b));
float c = hsv.z - min;
if (c != 0)
{
hsv.y = c / hsv.z;
vec3 delta = (hsv.z - rgb) / c;
delta.rgb -= delta.brg;
delta.rg += vec2(2.0, 4.0);
if (rgb.r >= hsv.z) {
hsv.x = delta.b;
} else if (rgb.g >= hsv.z) {
hsv.x = delta.r;
} else {
hsv.x = delta.g;
}
hsv.x = fract(hsv.x / 6.0);
}
return hsv;
}
void main() {
float xOffset = sin(texCoord.y * Frequency.x + Time * 3.1415926535 * 2.0) * WobbleAmount.x;
float yOffset = cos(texCoord.x * Frequency.y + Time * 3.1415926535 * 2.0) * WobbleAmount.y;
vec2 offset = vec2(xOffset, yOffset);
vec4 rgb = texture2D(DiffuseSampler, texCoord + offset);
vec3 hsv = RGBtoHSV(rgb.rgb);
hsv.x = fract(hsv.x + Time);
gl_FragColor = vec4(HSVtoRGB(hsv), rgb.a);
}

View File

@@ -0,0 +1,21 @@
{
"blend": {
"func": "add",
"srcrgb": "one",
"dstrgb": "zero"
},
"vertex": "sobel",
"fragment": "wobble",
"attributes": [ "Position" ],
"samplers": [
{ "name": "DiffuseSampler" }
],
"uniforms": [
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
{ "name": "InSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "OutSize", "type": "float", "count": 2, "values": [ 1.0, 1.0 ] },
{ "name": "Time", "type": "float", "count": 1, "values": [ 0.0 ] },
{ "name": "Frequency", "type": "float", "count": 2, "values": [ 512.0, 288.0 ] },
{ "name": "WobbleAmount", "type": "float", "count": 2, "values": [ 0.002, 0.002 ] }
]
}

View File

@@ -1,66 +1,66 @@
[C]§f=============== [C]§f===============
[C]§eMinecraft Credits [C]§eMinecraft Credits
[C]§f=============== [C]§f===============
§7Created by: §7Created by:
§f Markus Persson §f Markus Persson
§7Game design, programming and graphics: §7Game design, programming and graphics:
§f Markus Persson §f Markus Persson
§f Jens Bergensten §f Jens Bergensten
§f Nathan Adams §f Nathan Adams
§7Programming: §7Programming:
§f Erik Broes §f Erik Broes
§7Music and sound: §7Music and sound:
§f Daniel Rosenfeld §f Daniel Rosenfeld
§7Ingame artwork and paintings: §7Ingame artwork and paintings:
§f Kristoffer Zetterstrand §f Kristoffer Zetterstrand
§7End game narrative: §7End game narrative:
§f Julian Gough §f Julian Gough
§7Website development: §7Website development:
§f Tobias Möllstam §f Tobias Möllstam
§f Daniel Frisk §f Daniel Frisk
§f Leonard Axelsson §f Leonard Axelsson
§f Jens Bergensten §f Jens Bergensten
§f Markus Persson §f Markus Persson
§7Logo and promotional artwork: §7Logo and promotional artwork:
§f Markus Toivonen §f Markus Toivonen
§7Business and administration: §7Business and administration:
§f Carl Manneh §f Carl Manneh
§f Daniel Kaplan §f Daniel Kaplan
§7Director of fun: §7Director of fun:
§f Lydia Winters §f Lydia Winters
§7Number crunching and statistics: §7Number crunching and statistics:
§f Patrick Geuder §f Patrick Geuder
§7Additional programming: §7Additional programming:
§f Paul Spooner §f Paul Spooner
§f Ryan 'Scaevolus' Hitchman §f Ryan 'Scaevolus' Hitchman
§f Elliot 'Hippoplatimus' Segal §f Elliot 'Hippoplatimus' Segal
§7Developers of Mo' Creatures (horses etc): §7Developers of Mo' Creatures (horses etc):
§f John Olarte (DrZhark) §f John Olarte (DrZhark)
§f Kent Christian Jensen §f Kent Christian Jensen
§f Dan Roque §f Dan Roque
§7Technologies used: §7Technologies used:
§f Java by Oracle §f Java by Oracle
§f LWJGL by many talented people §f LWJGL by many talented people
§f "3d Sound System" by Paul Lamb §f "3d Sound System" by Paul Lamb
§f JOrbis by JCraft §f JOrbis by JCraft
§f"Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover." §7- Unknown §f"Twenty years from now you will be more disappointed by the things that you didn't do than by the ones you did do. So throw off the bowlines. Sail away from the safe harbor. Catch the trade winds in your sails. Explore. Dream. Discover." §7- Unknown

View File

@@ -1,151 +1,151 @@
§3I see the player you mean. §3I see the player you mean.
§2PLAYERNAME? §2PLAYERNAME?
§3Yes. Take care. It has reached a higher level now. It can read our thoughts. §3Yes. Take care. It has reached a higher level now. It can read our thoughts.
§2That doesn't matter. It thinks we are part of the game. §2That doesn't matter. It thinks we are part of the game.
§3I like this player. It played well. It did not give up. §3I like this player. It played well. It did not give up.
§2It is reading our thoughts as though they were words on a screen. §2It is reading our thoughts as though they were words on a screen.
§3That is how it chooses to imagine many things, when it is deep in the dream of a game. §3That is how it chooses to imagine many things, when it is deep in the dream of a game.
§2Words make a wonderful interface. Very flexible. And less terrifying than staring at the reality behind the screen. §2Words make a wonderful interface. Very flexible. And less terrifying than staring at the reality behind the screen.
§3They used to hear voices. Before players could read. Back in the days when those who did not play called the players witches, and warlocks. And players dreamed they flew through the air, on sticks powered by demons. §3They used to hear voices. Before players could read. Back in the days when those who did not play called the players witches, and warlocks. And players dreamed they flew through the air, on sticks powered by demons.
§2What did this player dream? §2What did this player dream?
§3This player dreamed of sunlight and trees. Of fire and water. It dreamed it created. And it dreamed it destroyed. It dreamed it hunted, and was hunted. It dreamed of shelter. §3This player dreamed of sunlight and trees. Of fire and water. It dreamed it created. And it dreamed it destroyed. It dreamed it hunted, and was hunted. It dreamed of shelter.
§2Hah, the original interface. A million years old, and it still works. But what true structure did this player create, in the reality behind the screen? §2Hah, the original interface. A million years old, and it still works. But what true structure did this player create, in the reality behind the screen?
§3It worked, with a million others, to sculpt a true world in a fold of the §f§k§a§b§3, and created a §f§k§a§b§3 for §f§k§a§b§3, in the §f§k§a§b§3. §3It worked, with a million others, to sculpt a true world in a fold of the §f§k§a§b§3, and created a §f§k§a§b§3 for §f§k§a§b§3, in the §f§k§a§b§3.
§2It cannot read that thought. §2It cannot read that thought.
§3No. It has not yet achieved the highest level. That, it must achieve in the long dream of life, not the short dream of a game. §3No. It has not yet achieved the highest level. That, it must achieve in the long dream of life, not the short dream of a game.
§2Does it know that we love it? That the universe is kind? §2Does it know that we love it? That the universe is kind?
§3Sometimes, through the noise of its thoughts, it hears the universe, yes. §3Sometimes, through the noise of its thoughts, it hears the universe, yes.
§2But there are times it is sad, in the long dream. It creates worlds that have no summer, and it shivers under a black sun, and it takes its sad creation for reality. §2But there are times it is sad, in the long dream. It creates worlds that have no summer, and it shivers under a black sun, and it takes its sad creation for reality.
§3To cure it of sorrow would destroy it. The sorrow is part of its own private task. We cannot interfere. §3To cure it of sorrow would destroy it. The sorrow is part of its own private task. We cannot interfere.
§2Sometimes when they are deep in dreams, I want to tell them, they are building true worlds in reality. Sometimes I want to tell them of their importance to the universe. Sometimes, when they have not made a true connection in a while, I want to help them to speak the word they fear. §2Sometimes when they are deep in dreams, I want to tell them, they are building true worlds in reality. Sometimes I want to tell them of their importance to the universe. Sometimes, when they have not made a true connection in a while, I want to help them to speak the word they fear.
§3It reads our thoughts. §3It reads our thoughts.
§2Sometimes I do not care. Sometimes I wish to tell them, this world you take for truth is merely §f§k§a§b§2 and §f§k§a§b§2, I wish to tell them that they are §f§k§a§b§2 in the §f§k§a§b§2. They see so little of reality, in their long dream. §2Sometimes I do not care. Sometimes I wish to tell them, this world you take for truth is merely §f§k§a§b§2 and §f§k§a§b§2, I wish to tell them that they are §f§k§a§b§2 in the §f§k§a§b§2. They see so little of reality, in their long dream.
§3And yet they play the game. §3And yet they play the game.
§2But it would be so easy to tell them... §2But it would be so easy to tell them...
§3Too strong for this dream. To tell them how to live is to prevent them living. §3Too strong for this dream. To tell them how to live is to prevent them living.
§2I will not tell the player how to live. §2I will not tell the player how to live.
§3The player is growing restless. §3The player is growing restless.
§2I will tell the player a story. §2I will tell the player a story.
§3But not the truth. §3But not the truth.
§2No. A story that contains the truth safely, in a cage of words. Not the naked truth that can burn over any distance. §2No. A story that contains the truth safely, in a cage of words. Not the naked truth that can burn over any distance.
§3Give it a body, again. §3Give it a body, again.
§2Yes. Player... §2Yes. Player...
§3Use its name. §3Use its name.
§2PLAYERNAME. Player of games. §2PLAYERNAME. Player of games.
§3Good. §3Good.
§2Take a breath, now. Take another. Feel air in your lungs. Let your limbs return. Yes, move your fingers. Have a body again, under gravity, in air. Respawn in the long dream. There you are. Your body touching the universe again at every point, as though you were separate things. As though we were separate things. §2Take a breath, now. Take another. Feel air in your lungs. Let your limbs return. Yes, move your fingers. Have a body again, under gravity, in air. Respawn in the long dream. There you are. Your body touching the universe again at every point, as though you were separate things. As though we were separate things.
§3Who are we? Once we were called the spirit of the mountain. Father sun, mother moon. Ancestral spirits, animal spirits. Jinn. Ghosts. The green man. Then gods, demons. Angels. Poltergeists. Aliens, extraterrestrials. Leptons, quarks. The words change. We do not change. §3Who are we? Once we were called the spirit of the mountain. Father sun, mother moon. Ancestral spirits, animal spirits. Jinn. Ghosts. The green man. Then gods, demons. Angels. Poltergeists. Aliens, extraterrestrials. Leptons, quarks. The words change. We do not change.
§2We are the universe. We are everything you think isn't you. You are looking at us now, through your skin and your eyes. And why does the universe touch your skin, and throw light on you? To see you, player. To know you. And to be known. I shall tell you a story. §2We are the universe. We are everything you think isn't you. You are looking at us now, through your skin and your eyes. And why does the universe touch your skin, and throw light on you? To see you, player. To know you. And to be known. I shall tell you a story.
§2Once upon a time, there was a player. §2Once upon a time, there was a player.
§3The player was you, PLAYERNAME. §3The player was you, PLAYERNAME.
§2Sometimes it thought itself human, on the thin crust of a spinning globe of molten rock. The ball of molten rock circled a ball of blazing gas that was three hundred and thirty thousand times more massive than it. They were so far apart that light took eight minutes to cross the gap. The light was information from a star, and it could burn your skin from a hundred and fifty million kilometres away. §2Sometimes it thought itself human, on the thin crust of a spinning globe of molten rock. The ball of molten rock circled a ball of blazing gas that was three hundred and thirty thousand times more massive than it. They were so far apart that light took eight minutes to cross the gap. The light was information from a star, and it could burn your skin from a hundred and fifty million kilometres away.
§2Sometimes the player dreamed it was a miner, on the surface of a world that was flat, and infinite. The sun was a square of white. The days were short; there was much to do; and death was a temporary inconvenience. §2Sometimes the player dreamed it was a miner, on the surface of a world that was flat, and infinite. The sun was a square of white. The days were short; there was much to do; and death was a temporary inconvenience.
§3Sometimes the player dreamed it was lost in a story. §3Sometimes the player dreamed it was lost in a story.
§2Sometimes the player dreamed it was other things, in other places. Sometimes these dreams were disturbing. Sometimes very beautiful indeed. Sometimes the player woke from one dream into another, then woke from that into a third. §2Sometimes the player dreamed it was other things, in other places. Sometimes these dreams were disturbing. Sometimes very beautiful indeed. Sometimes the player woke from one dream into another, then woke from that into a third.
§3Sometimes the player dreamed it watched words on a screen. §3Sometimes the player dreamed it watched words on a screen.
§2Let's go back. §2Let's go back.
§2The atoms of the player were scattered in the grass, in the rivers, in the air, in the ground. A woman gathered the atoms; she drank and ate and inhaled; and the woman assembled the player, in her body. §2The atoms of the player were scattered in the grass, in the rivers, in the air, in the ground. A woman gathered the atoms; she drank and ate and inhaled; and the woman assembled the player, in her body.
§2And the player awoke, from the warm, dark world of its mother's body, into the long dream. §2And the player awoke, from the warm, dark world of its mother's body, into the long dream.
§2And the player was a new story, never told before, written in letters of DNA. And the player was a new program, never run before, generated by a sourcecode a billion years old. And the player was a new human, never alive before, made from nothing but milk and love. §2And the player was a new story, never told before, written in letters of DNA. And the player was a new program, never run before, generated by a sourcecode a billion years old. And the player was a new human, never alive before, made from nothing but milk and love.
§3You are the player. The story. The program. The human. Made from nothing but milk and love. §3You are the player. The story. The program. The human. Made from nothing but milk and love.
§2Let's go further back. §2Let's go further back.
§2The seven billion billion billion atoms of the player's body were created, long before this game, in the heart of a star. So the player, too, is information from a star. And the player moves through a story, which is a forest of information planted by a man called Julian, on a flat, infinite world created by a man called Markus, that exists inside a small, private world created by the player, who inhabits a universe created by... §2The seven billion billion billion atoms of the player's body were created, long before this game, in the heart of a star. So the player, too, is information from a star. And the player moves through a story, which is a forest of information planted by a man called Julian, on a flat, infinite world created by a man called Markus, that exists inside a small, private world created by the player, who inhabits a universe created by...
§3Shush. Sometimes the player created a small, private world that was soft and warm and simple. Sometimes hard, and cold, and complicated. Sometimes it built a model of the universe in its head; flecks of energy, moving through vast empty spaces. Sometimes it called those flecks "electrons" and "protons". §3Shush. Sometimes the player created a small, private world that was soft and warm and simple. Sometimes hard, and cold, and complicated. Sometimes it built a model of the universe in its head; flecks of energy, moving through vast empty spaces. Sometimes it called those flecks "electrons" and "protons".
§2Sometimes it called them "planets" and "stars". §2Sometimes it called them "planets" and "stars".
§2Sometimes it believed it was in a universe that was made of energy that was made of offs and ons; zeros and ones; lines of code. Sometimes it believed it was playing a game. Sometimes it believed it was reading words on a screen. §2Sometimes it believed it was in a universe that was made of energy that was made of offs and ons; zeros and ones; lines of code. Sometimes it believed it was playing a game. Sometimes it believed it was reading words on a screen.
§3You are the player, reading words... §3You are the player, reading words...
§2Shush... Sometimes the player read lines of code on a screen. Decoded them into words; decoded words into meaning; decoded meaning into feelings, emotions, theories, ideas, and the player started to breathe faster and deeper and realised it was alive, it was alive, those thousand deaths had not been real, the player was alive §2Shush... Sometimes the player read lines of code on a screen. Decoded them into words; decoded words into meaning; decoded meaning into feelings, emotions, theories, ideas, and the player started to breathe faster and deeper and realised it was alive, it was alive, those thousand deaths had not been real, the player was alive
§3You. You. You are alive. §3You. You. You are alive.
§2and sometimes the player believed the universe had spoken to it through the sunlight that came through the shuffling leaves of the summer trees §2and sometimes the player believed the universe had spoken to it through the sunlight that came through the shuffling leaves of the summer trees
§3and sometimes the player believed the universe had spoken to it through the light that fell from the crisp night sky of winter, where a fleck of light in the corner of the player's eye might be a star a million times as massive as the sun, boiling its planets to plasma in order to be visible for a moment to the player, walking home at the far side of the universe, suddenly smelling food, almost at the familiar door, about to dream again §3and sometimes the player believed the universe had spoken to it through the light that fell from the crisp night sky of winter, where a fleck of light in the corner of the player's eye might be a star a million times as massive as the sun, boiling its planets to plasma in order to be visible for a moment to the player, walking home at the far side of the universe, suddenly smelling food, almost at the familiar door, about to dream again
§2and sometimes the player believed the universe had spoken to it through the zeros and ones, through the electricity of the world, through the scrolling words on a screen at the end of a dream §2and sometimes the player believed the universe had spoken to it through the zeros and ones, through the electricity of the world, through the scrolling words on a screen at the end of a dream
§3and the universe said I love you §3and the universe said I love you
§2and the universe said you have played the game well §2and the universe said you have played the game well
§3and the universe said everything you need is within you §3and the universe said everything you need is within you
§2and the universe said you are stronger than you know §2and the universe said you are stronger than you know
§3and the universe said you are the daylight §3and the universe said you are the daylight
§2and the universe said you are the night §2and the universe said you are the night
§3and the universe said the darkness you fight is within you §3and the universe said the darkness you fight is within you
§2and the universe said the light you seek is within you §2and the universe said the light you seek is within you
§3and the universe said you are not alone §3and the universe said you are not alone
§2and the universe said you are not separate from every other thing §2and the universe said you are not separate from every other thing
§3and the universe said you are the universe tasting itself, talking to itself, reading its own code §3and the universe said you are the universe tasting itself, talking to itself, reading its own code
§2and the universe said I love you because you are love. §2and the universe said I love you because you are love.
§3And the game was over and the player woke up from the dream. And the player began a new dream. And the player dreamed again, dreamed better. And the player was the universe. And the player was love. §3And the game was over and the player woke up from the dream. And the player began a new dream. And the player dreamed again, dreamed better. And the player was the universe. And the player was love.
§3You are the player. §3You are the player.
§2Wake up. §2Wake up.

View File

@@ -1,320 +1,322 @@
As seen on TV! As seen on TV!
Awesome! Awesome!
100% pure! 100% pure!
May contain nuts! May contain nuts!
Better than Prey! Better than Prey!
More polygons! More polygons!
Sexy! Sexy!
Limited edition! Limited edition!
Flashing letters! Flashing letters!
Made by Notch! Made by Notch!
It's here! It's here!
Best in class! Best in class!
It's finished! It's finished!
Kind of dragon free! Kind of dragon free!
Excitement! Excitement!
More than 500 sold! More than 500 sold!
One of a kind! One of a kind!
Heaps of hits on YouTube! Heaps of hits on YouTube!
Indev! Indev!
Spiders everywhere! Spiders everywhere!
Check it out! Check it out!
Holy cow, man! Holy cow, man!
It's a game! It's a game!
Made in Sweden! Made in Sweden!
Uses LWJGL! Uses LWJGL!
Reticulating splines! Reticulating splines!
Minecraft! Minecraft!
Yaaay! Yaaay!
Singleplayer! Singleplayer!
Keyboard compatible! Keyboard compatible!
Undocumented! Undocumented!
Ingots! Ingots!
Exploding creepers! Exploding creepers!
That's no moon! That's no moon!
l33t! l33t!
Create! Create!
Survive! Survive!
Dungeon! Dungeon!
Exclusive! Exclusive!
The bee's knees! The bee's knees!
Down with O.P.P.! Down with O.P.P.!
Closed source! Closed source!
Classy! Classy!
Wow! Wow!
Not on steam! Not on steam!
Oh man! Oh man!
Awesome community! Awesome community!
Pixels! Pixels!
Teetsuuuuoooo! Teetsuuuuoooo!
Kaaneeeedaaaa! Kaaneeeedaaaa!
Now with difficulty! Now with difficulty!
Enhanced! Enhanced!
90% bug free! 90% bug free!
Pretty! Pretty!
12 herbs and spices! 12 herbs and spices!
Fat free! Fat free!
Absolutely no memes! Absolutely no memes!
Free dental! Free dental!
Ask your doctor! Ask your doctor!
Minors welcome! Minors welcome!
Cloud computing! Cloud computing!
Legal in Finland! Legal in Finland!
Hard to label! Hard to label!
Technically good! Technically good!
Bringing home the bacon! Bringing home the bacon!
Indie! Indie!
GOTY! GOTY!
Ceci n'est pas une title screen! Ceci n'est pas une title screen!
Euclidian! Euclidian!
Now in 3D! Now in 3D!
Inspirational! Inspirational!
Herregud! Herregud!
Complex cellular automata! Complex cellular automata!
Yes, sir! Yes, sir!
Played by cowboys! Played by cowboys!
OpenGL 1.2! OpenGL 1.2!
Thousands of colors! Thousands of colors!
Try it! Try it!
Age of Wonders is better! Age of Wonders is better!
Try the mushroom stew! Try the mushroom stew!
Sensational! Sensational!
Hot tamale, hot hot tamale! Hot tamale, hot hot tamale!
Play him off, keyboard cat! Play him off, keyboard cat!
Guaranteed! Guaranteed!
Macroscopic! Macroscopic!
Bring it on! Bring it on!
Random splash! Random splash!
Call your mother! Call your mother!
Monster infighting! Monster infighting!
Loved by millions! Loved by millions!
Ultimate edition! Ultimate edition!
Freaky! Freaky!
You've got a brand new key! You've got a brand new key!
Water proof! Water proof!
Uninflammable! Uninflammable!
Whoa, dude! Whoa, dude!
All inclusive! All inclusive!
Tell your friends! Tell your friends!
NP is not in P! NP is not in P!
Notch <3 ez! Notch <3 ez!
Music by C418! Music by C418!
Livestreamed! Livestreamed!
Haunted! Haunted!
Polynomial! Polynomial!
Terrestrial! Terrestrial!
All is full of love! All is full of love!
Full of stars! Full of stars!
Scientific! Scientific!
Cooler than Spock! Cooler than Spock!
Collaborate and listen! Collaborate and listen!
Never dig down! Never dig down!
Take frequent breaks! Take frequent breaks!
Not linear! Not linear!
Han shot first! Han shot first!
Nice to meet you! Nice to meet you!
Buckets of lava! Buckets of lava!
Ride the pig! Ride the pig!
Larger than Earth! Larger than Earth!
sqrt(-1) love you! sqrt(-1) love you!
Phobos anomaly! Phobos anomaly!
Punching wood! Punching wood!
Falling off cliffs! Falling off cliffs!
0% sugar! 0% sugar!
150% hyperbole! 150% hyperbole!
Synecdoche! Synecdoche!
Let's danec! Let's danec!
Seecret Friday update! Seecret Friday update!
Reference implementation! Reference implementation!
Lewd with two dudes with food! Lewd with two dudes with food!
Kiss the sky! Kiss the sky!
20 GOTO 10! 20 GOTO 10!
Verlet intregration! Verlet intregration!
Peter Griffin! Peter Griffin!
Do not distribute! Do not distribute!
Cogito ergo sum! Cogito ergo sum!
4815162342 lines of code! 4815162342 lines of code!
A skeleton popped out! A skeleton popped out!
The Work of Notch! The Work of Notch!
The sum of its parts! The sum of its parts!
BTAF used to be good! BTAF used to be good!
I miss ADOM! I miss ADOM!
umop-apisdn! umop-apisdn!
OICU812! OICU812!
Bring me Ray Cokes! Bring me Ray Cokes!
Finger-licking! Finger-licking!
Thematic! Thematic!
Pneumatic! Pneumatic!
Sublime! Sublime!
Octagonal! Octagonal!
Une baguette! Une baguette!
Gargamel plays it! Gargamel plays it!
Rita is the new top dog! Rita is the new top dog!
SWM forever! SWM forever!
Representing Edsbyn! Representing Edsbyn!
Matt Damon! Matt Damon!
Supercalifragilisticexpialidocious! Supercalifragilisticexpialidocious!
Consummate V's! Consummate V's!
Cow Tools! Cow Tools!
Double buffered! Double buffered!
Fan fiction! Fan fiction!
Flaxkikare! Flaxkikare!
Jason! Jason! Jason! Jason! Jason! Jason!
Hotter than the sun! Hotter than the sun!
Internet enabled! Internet enabled!
Autonomous! Autonomous!
Engage! Engage!
Fantasy! Fantasy!
DRR! DRR! DRR! DRR! DRR! DRR!
Kick it root down! Kick it root down!
Regional resources! Regional resources!
Woo, facepunch! Woo, facepunch!
Woo, somethingawful! Woo, somethingawful!
Woo, /v/! Woo, /v/!
Woo, tigsource! Woo, tigsource!
Woo, minecraftforum! Woo, minecraftforum!
Woo, worldofminecraft! Woo, worldofminecraft!
Woo, reddit! Woo, reddit!
Woo, 2pp! Woo, 2pp!
Google anlyticsed! Google anlyticsed!
Now supports åäö! Now supports åäö!
Give us Gordon! Give us Gordon!
Tip your waiter! Tip your waiter!
Very fun! Very fun!
12345 is a bad password! 12345 is a bad password!
Vote for net neutrality! Vote for net neutrality!
Lives in a pineapple under the sea! Lives in a pineapple under the sea!
MAP11 has two names! MAP11 has two names!
Omnipotent! Omnipotent!
Gasp! Gasp!
...! ...!
Bees, bees, bees, bees! Bees, bees, bees, bees!
Jag känner en bot! Jag känner en bot!
This text is hard to read if you play the game at the default resolution, but at 1080p it's fine! This text is hard to read if you play the game at the default resolution, but at 1080p it's fine!
Haha, LOL! Haha, LOL!
Hampsterdance! Hampsterdance!
Switches and ores! Switches and ores!
Menger sponge! Menger sponge!
idspispopd! idspispopd!
Eple (original edit)! Eple (original edit)!
So fresh, so clean! So fresh, so clean!
Slow acting portals! Slow acting portals!
Try the Nether! Try the Nether!
Don't look directly at the bugs! Don't look directly at the bugs!
Oh, ok, Pigmen! Oh, ok, Pigmen!
Finally with ladders! Finally with ladders!
Scary! Scary!
Play Minecraft, Watch Topgear, Get Pig! Play Minecraft, Watch Topgear, Get Pig!
Twittered about! Twittered about!
Jump up, jump up, and get down! Jump up, jump up, and get down!
Joel is neat! Joel is neat!
A riddle, wrapped in a mystery! A riddle, wrapped in a mystery!
Huge tracts of land! Huge tracts of land!
Welcome to your Doom! Welcome to your Doom!
Stay a while, stay forever! Stay a while, stay forever!
Stay a while and listen! Stay a while and listen!
Treatment for your rash! Treatment for your rash!
"Autological" is! "Autological" is!
Information wants to be free! Information wants to be free!
"Almost never" is an interesting concept! "Almost never" is an interesting concept!
Lots of truthiness! Lots of truthiness!
The creeper is a spy! The creeper is a spy!
Turing complete! Turing complete!
It's groundbreaking! It's groundbreaking!
Let our battle's begin! Let our battle's begin!
The sky is the limit! The sky is the limit!
Jeb has amazing hair! Jeb has amazing hair!
Casual gaming! Ryan also has amazing hair!
Undefeated! Casual gaming!
Kinda like Lemmings! Undefeated!
Follow the train, CJ! Kinda like Lemmings!
Leveraging synergy! Follow the train, CJ!
This message will never appear on the splash screen, isn't that weird? Leveraging synergy!
DungeonQuest is unfair! This message will never appear on the splash screen, isn't that weird?
110813! DungeonQuest is unfair!
90210! 110813!
Check out the far lands! 90210!
Tyrion would love it! Check out the far lands!
Also try VVVVVV! Tyrion would love it!
Also try Super Meat Boy! Also try VVVVVV!
Also try Terraria! Also try Super Meat Boy!
Also try Mount And Blade! Also try Terraria!
Also try Project Zomboid! Also try Mount And Blade!
Also try World of Goo! Also try Project Zomboid!
Also try Limbo! Also try World of Goo!
Also try Pixeljunk Shooter! Also try Limbo!
Also try Braid! Also try Pixeljunk Shooter!
That's super! Also try Braid!
Bread is pain! That's super!
Read more books! Bread is pain!
Khaaaaaaaaan! Read more books!
Less addictive than TV Tropes! Khaaaaaaaaan!
More addictive than lemonade! Less addictive than TV Tropes!
Bigger than a bread box! More addictive than lemonade!
Millions of peaches! Bigger than a bread box!
Fnord! Millions of peaches!
This is my true form! Fnord!
Totally forgot about Dre! This is my true form!
Don't bother with the clones! Totally forgot about Dre!
Pumpkinhead! Don't bother with the clones!
Hobo humping slobo babe! Pumpkinhead!
Made by Jeb! Hobo humping slobo babe!
Has an ending! Made by Jeb!
Finally complete! Has an ending!
Feature packed! Finally complete!
Boots with the fur! Feature packed!
Stop, hammertime! Boots with the fur!
Testificates! Stop, hammertime!
Conventional! Testificates!
Homeomorphic to a 3-sphere! Conventional!
Doesn't avoid double negatives! Homeomorphic to a 3-sphere!
Place ALL the blocks! Doesn't avoid double negatives!
Does barrel rolls! Place ALL the blocks!
Meeting expectations! Does barrel rolls!
PC gaming since 1873! Meeting expectations!
Ghoughpteighbteau tchoghs! PC gaming since 1873!
Déjà vu! Ghoughpteighbteau tchoghs!
Déjà vu! Déjà vu!
Got your nose! Déjà vu!
Haley loves Elan! Got your nose!
Afraid of the big, black bat! Haley loves Elan!
Doesn't use the U-word! Afraid of the big, black bat!
Child's play! Doesn't use the U-word!
See you next Friday or so! Child's play!
From the streets of Södermalm! See you next Friday or so!
150 bpm for 400000 minutes! From the streets of Södermalm!
Technologic! 150 bpm for 400000 minutes!
Funk soul brother! Technologic!
Pumpa kungen! Funk soul brother!
日本ハロー! Pumpa kungen!
한국 안녕하세요! 日本ハロー!
Helo Cymru! 한국 안녕하세요!
Cześć Polsko! Helo Cymru!
你好中国! Cześć Polsko!
Привет Россия! 你好中国!
Γεια σου Ελλάδα! Привет Россия!
My life for Aiur! Γεια σου Ελλάδα!
Lennart lennart = new Lennart(); My life for Aiur!
I see your vocabulary has improved! Lennart lennart = new Lennart();
Who put it there? I see your vocabulary has improved!
You can't explain that! Who put it there?
if not ok then return end You can't explain that!
§1C§2o§3l§4o§5r§6m§7a§8t§9i§ac if not ok then return end
§kFUNKY LOL §1C§2o§3l§4o§5r§6m§7a§8t§9i§ac
SOPA means LOSER in Swedish! §kFUNKY LOL
Big Pointy Teeth! SOPA means LOSER in Swedish!
Bekarton guards the gate! Big Pointy Teeth!
Mmmph, mmph! Bekarton guards the gate!
Don't feed avocados to parrots! Mmmph, mmph!
Swords for everyone! Don't feed avocados to parrots!
Plz reply to my tweet! Swords for everyone!
.party()! Plz reply to my tweet!
Take her pillow! .party()!
Put that cookie down! Take her pillow!
Pretty scary! Put that cookie down!
I have a suggestion. Pretty scary!
Now with extra hugs! I have a suggestion.
Almost java 6! Now with extra hugs!
Woah. Now java 6!
HURNERJSGER? Woah.
What's up, Doc? HURNERJSGER?
What's up, Doc?
Now contains 32 random daily cats!

Binary file not shown.

After

Width:  |  Height:  |  Size: 740 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 823 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 668 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 727 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 698 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 466 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Some files were not shown because too many files have changed in this diff Show More