Skip to content

Instantly share code, notes, and snippets.

@pageman
Created December 4, 2012 05:21
Show Gist options
  • Save pageman/4200892 to your computer and use it in GitHub Desktop.
Save pageman/4200892 to your computer and use it in GitHub Desktop.
Minecraft 4kby @notch
{"description":"Minecraft 4kby @notch ","endpoint":"","display":"canvas","public":true,"require":[],"tab":"edit","display_percent":0.49818548387096795,"play":true,"loop":false,"restart":false,"autoinit":true,"pause":true,"loop_type":"period","bv":false,"nclones":15,"clone_opacity":0.4,"duration":3000,"ease":"linear","dt":0.01}
var w = 400 * 1;
var h = 400 * 1;
tributary.map = new Array(64 * 64 * 64);
tributary.texmap = new Array(16 * 16 * 3 * 16);
var colors = [
parseInt("#966C4A".slice(1,7), 16),
parseInt("#7F7F7F".slice(1,7), 16),
parseInt("#6AAA40".slice(1,7), 16),
parseInt("#675231".slice(1,7), 16),
parseInt("#BC9862".slice(1,7), 16),
parseInt("#B53A15".slice(1,7), 16),
parseInt("#BCAFA5".slice(1,7), 16),
parseInt("#4040FF".slice(1,7), 16),
parseInt("#B53A15".slice(1,7), 16),
parseInt("#50D937".slice(1,7), 16)
]
tributary.init = function(ctx) {
for ( var i = 1; i < 16; i++) {
var br = 255 - ((Math.random() * 96) | 0);
for ( var y = 0; y < 16 * 3; y++) {
for ( var x = 0; x < 16; x++) {
var color = colors[0]//0x966C4A;
if (i == 4)
color = colors[1];//0x7F7F7F;
if (i != 4 || ((Math.random() * 3) | 0) == 0) {
br = 255 - ((Math.random() * 96) | 0);
}
if ((i == 1 && y < (((x * x * 3 + x * 81) >> 2) & 3) + 18)) {
color = colors[2];//0x6AAA40;
} else if ((i == 1 && y < (((x * x * 3 + x * 81) >> 2) & 3) + 19)) {
br = br * 2 / 3;
}
if (i == 7) {
color = colors[3];//0x675231;
if (x > 0 && x < 15
&& ((y > 0 && y < 15) || (y > 32 && y < 47))) {
color = colors[4];//0xBC9862;
var xd = (x - 7);
var yd = ((y & 15) - 7);
if (xd < 0)
xd = 1 - xd;
if (yd < 0)
yd = 1 - yd;
if (yd > xd)
xd = yd;
br = 196 - ((Math.random() * 32) | 0) + xd % 3 * 32;
} else if (((Math.random() * 2) | 0) == 0) {
br = br * (150 - (x & 1) * 100) / 100;
}
}
if (i == 5) {
color = colors[5];//0xB53A15;
if ((x + (y >> 2) * 4) % 8 == 0 || y % 4 == 0) {
color = colors[6];//0xBCAFA5;
}
}
if (i == 9) {
color = colors[7];//0x4040ff;
}
var brr = br;
if (y >= 32)
brr /= 2;
if (i == 8) {
color = colors[8];//0x50D937;
if (((Math.random() * 2) | 0) == 0) {
color = 0;
brr = 255;
}
}
var col = (((color >> 16) & 0xff) * brr / 255) << 16
| (((color >> 8) & 0xff) * brr / 255) << 8
| (((color) & 0xff) * brr / 255);
tributary.texmap[x + y * 16 + i * 256 * 3] = col;
}
}
}
//tributary provides you with the context
//ctx = document.getElementById('game').getContext('2d');
for ( var x = 0; x < 64; x++) {
for ( var y = 0; y < 64; y++) {
for ( var z = 0; z < 64; z++) {
var i = z << 12 | y << 6 | x;
var yd = (y - 32.5) * 0.4;
var zd = (z - 32.5) * 0.4;
tributary.map[i] = (Math.random() * 16) | 0;
if (Math.random() > Math.sqrt(Math.sqrt(yd * yd + zd * zd)) - 0.8)
tributary.map[i] = 0;
}
}
}
tributary.pixels = ctx.createImageData(w, h);
for ( var i = 0; i < w * h; i++) {
tributary.pixels.data[i * 4 + 3] = 255;
}
//setInterval(clock, 1000 / 100);
};
tributary.run = function(ctx, t) {
renderMinecraft();
ctx.putImageData(tributary.pixels, 0, 0);
};
var f = 0;
function renderMinecraft() {
var xRot = Math.sin(Date.now() % 10000 / 10000 * Math.PI * 2) * 0.4
+ Math.PI / 2;
var yRot = Math.cos(Date.now() % 10000 / 10000 * Math.PI * 2) * 0.4;
var yCos = Math.cos(yRot);
var ySin = Math.sin(yRot);
var xCos = Math.cos(xRot);
var xSin = Math.sin(xRot);
var ox = 32.5 + Date.now() % 10000 / 10000 * 64;
var oy = 34.5;
var oz = 32.5;
f++;
for ( var x = 0; x < w; x++) {
var ___xd = (x - w / 2) / h;
for ( var y = 0; y < h; y++) {
var __yd = (y - h / 2) / h;
var __zd = 1;
var ___zd = __zd * yCos + __yd * ySin;
var _yd = __yd * yCos - __zd * ySin;
var _xd = ___xd * xCos + ___zd * xSin;
var _zd = ___zd * xCos - ___xd * xSin;
var col = 0;
var br = 255;
var ddist = 0;
var closest = 32;
for ( var d = 0; d < 3; d++) {
var dimLength = _xd;
if (d == 1)
dimLength = _yd;
if (d == 2)
dimLength = _zd;
var ll = 1 / (dimLength < 0 ? -dimLength : dimLength);
var xd = (_xd) * ll;
var yd = (_yd) * ll;
var zd = (_zd) * ll;
var initial = ox - (ox | 0);
if (d == 1)
initial = oy - (oy | 0);
if (d == 2)
initial = oz - (oz | 0);
if (dimLength > 0)
initial = 1 - initial;
var dist = ll * initial;
var xp = ox + xd * initial;
var yp = oy + yd * initial;
var zp = oz + zd * initial;
if (dimLength < 0) {
if (d == 0)
xp--;
if (d == 1)
yp--;
if (d == 2)
zp--;
}
while (dist < closest) {
var tex = tributary.map[(zp & 63) << 12 | (yp & 63) << 6 | (xp & 63)];
if (tex > 0) {
var u = ((xp + zp) * 16) & 15;
var v = ((yp * 16) & 15) + 16;
if (d == 1) {
u = (xp * 16) & 15;
v = ((zp * 16) & 15);
if (yd < 0)
v += 32;
}
var cc = tributary.texmap[u + v * 16 + tex * 256 * 3];
if (cc > 0) {
col = cc;
ddist = 255 - ((dist / 32 * 255) | 0);
br = 255 * (255 - ((d + 2) % 3) * 50) / 255;
closest = dist;
}
}
xp += xd;
yp += yd;
zp += zd;
dist += ll;
}
}
var r = ((col >> 16) & 0xff) * br * ddist / (255 * 255);
var g = ((col >> 8) & 0xff) * br * ddist / (255 * 255);
var b = ((col) & 0xff) * br * ddist / (255 * 255);// + (255 -
tributary.pixels.data[(x + y * w) * 4 + 0] = r;
tributary.pixels.data[(x + y * w) * 4 + 1] = g;
tributary.pixels.data[(x + y * w) * 4 + 2] = b;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment