Skip to content

Instantly share code, notes, and snippets.

@icarito
Created March 14, 2019 22:10
Show Gist options
  • Select an option

  • Save icarito/5a4dda17f4e34960b8ae051fbc025c8d to your computer and use it in GitHub Desktop.

Select an option

Save icarito/5a4dda17f4e34960b8ae051fbc025c8d to your computer and use it in GitHub Desktop.
SCRIPT-8
// title: Runner at Sunset
initialState = {
x: 56
}
update = (state, input, elapsed) => {
state.frame += 1
state.animFrame = Math.floor(state.frame / 30) % 2
let step = 30 - (state.frame % 30)
state.flip = input.left
state.speed = input.left || input.right ? 32 : 0
if (state.speed > 0)
state.x = clamp(state.x + (step / 120) * (input.left ? -1 : 1), -2, 122)
}
draw = state => {
clear(1+clamp(Math.floor(state.frame/250),0,5))
circFill(64, 50+state.frame/30 , 30, 0)
rectFill(0, 68, 128, 128, 4)
line(0, 68, 128, 68, 2)
sprite(state.x, 60, state.animFrame + state.speed,2, state.flip)
drawMag(state)
}
// Magnifying
const mag_x = 30
const mag_y = 100
const factor = 4
const magsize = 10
const { sin, cos, tan, pi, sqrt, round } = Math
function drawMag(state) {
let origin_x = mag_x
let origin_y = mag_y
let radius = magsize*factor/2
circFill( origin_x, origin_y, radius+round(factor/2),1)
circFill( origin_x, origin_y, radius, getPixel(0,0)-1)
for (let x of range(-1, magsize)) {
for (let y of range(0, magsize)) {
let hipot = sqrt(((x-4)*factor)**2 + ((y-4)*factor)**2)
if (hipot < radius) {
let pix = getPixel(state.x + x, 60 + y)
rectFill( mag_x + (x-4) * factor - factor/2,
mag_y + (y-4) * factor - factor/2,
factor, factor, pix)
}
}
}
}
function _drawMag(state) {
rectStroke( mag_x-1, mag_y-1, (magsize+1)*factor+2, magsize*factor+2, 2)
for (let x of range(-1, magsize)) {
for (let y of range(0, magsize)) {
let pix = getPixel(state.x + x, 60 + y)
rectFill( mag_x + (1+x) * factor, mag_y + y * factor, factor, factor, pix)
}
}
}
// This is a port of Ken Perlin's Java code. The
// original Java code is at http://cs.nyu.edu/%7Eperlin/noise/.
// Note that in this version, a number from 0 to 1 is returned.
// Taken from http://asserttrue.blogspot.com/2011/12/perlin-noise-in-javascript_31.html
var PerlinNoise = new function() {
this.noise = function(x, y, z) {
var p = new Array(512)
var permutation = [ 151,160,137,91,90,15,
131,13,201,95,96,53,194,233,7,225,140,36,103,30,69,142,8,99,37,240,21,10,23,
190, 6,148,247,120,234,75,0,26,197,62,94,252,219,203,117,35,11,32,57,177,33,
88,237,149,56,87,174,20,125,136,171,168, 68,175,74,165,71,134,139,48,27,166,
77,146,158,231,83,111,229,122,60,211,133,230,220,105,92,41,55,46,245,40,244,
102,143,54, 65,25,63,161, 1,216,80,73,209,76,132,187,208, 89,18,169,200,196,
135,130,116,188,159,86,164,100,109,198,173,186, 3,64,52,217,226,250,124,123,
5,202,38,147,118,126,255,82,85,212,207,206,59,227,47,16,58,17,182,189,28,42,
223,183,170,213,119,248,152, 2,44,154,163, 70,221,153,101,155,167, 43,172,9,
129,22,39,253, 19,98,108,110,79,113,224,232,178,185, 112,104,218,246,97,228,
251,34,242,193,238,210,144,12,191,179,162,241, 81,51,145,235,249,14,239,107,
49,192,214, 31,181,199,106,157,184, 84,204,176,115,121,50,45,127, 4,150,254,
138,236,205,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180
];
for (var i=0; i < 256 ; i++)
p[256+i] = p[i] = permutation[i];
var X = Math.floor(x) & 255, // FIND UNIT CUBE THAT
Y = Math.floor(y) & 255, // CONTAINS POINT.
Z = Math.floor(z) & 255;
x -= Math.floor(x); // FIND RELATIVE X,Y,Z
y -= Math.floor(y); // OF POINT IN CUBE.
z -= Math.floor(z);
var u = fade(x), // COMPUTE FADE CURVES
v = fade(y), // FOR EACH OF X,Y,Z.
w = fade(z);
var A = p[X ]+Y, AA = p[A]+Z, AB = p[A+1]+Z, // HASH COORDINATES OF
B = p[X+1]+Y, BA = p[B]+Z, BB = p[B+1]+Z; // THE 8 CUBE CORNERS,
return scale(lerp(w, lerp(v, lerp(u, grad(p[AA ], x , y , z ), // AND ADD
grad(p[BA ], x-1, y , z )), // BLENDED
lerp(u, grad(p[AB ], x , y-1, z ), // RESULTS
grad(p[BB ], x-1, y-1, z ))),// FROM 8
lerp(v, lerp(u, grad(p[AA+1], x , y , z-1 ), // CORNERS
grad(p[BA+1], x-1, y , z-1 )), // OF CUBE
lerp(u, grad(p[AB+1], x , y-1, z-1 ),
grad(p[BB+1], x-1, y-1, z-1 )))));
}
function fade(t) { return t * t * t * (t * (t * 6 - 15) + 10); }
function lerp( t, a, b) { return a + t * (b - a); }
function grad(hash, x, y, z) {
var h = hash & 15; // CONVERT LO 4 BITS OF HASH CODE
var u = h<8 ? x : y, // INTO 12 GRADIENT DIRECTIONS.
v = h<4 ? y : h==12||h==14 ? x : z;
return ((h&1) == 0 ? u : -u) + ((h&2) == 0 ? v : -v);
}
function scale(n) { return (1 + n)/2; }
}
function OctavePerlin(x, y, z, octaves, persistence) {
let total = 0
let frequency = 1
let amplitude = 1
let maxValue = 0 // Used for normalizing result to 0.0 - 1.0
for(let i=0; i < octaves; i++) {
total += PerlinNoise.noise(x * frequency, y * frequency, z * frequency) * amplitude
maxValue += amplitude
amplitude *= persistence
frequency *= 2
}
return total / maxValue
}
{
"lines": [
24,
39,
0,
0,
0,
0,
0,
72
]
}
{
"0": [
" ",
" ",
" 7 ",
" 767 ",
" 676 ",
" 777 ",
" 575 ",
" 7 7 "
],
"1": [
" ",
" ",
" 7 ",
" 656 ",
" 676 ",
" 777 ",
" 676 ",
" 7 7 "
],
"2": [
" ",
" ",
" 7 ",
" 776 ",
" 7 7 ",
" 776 ",
" 7 77 ",
" 7 "
],
"3": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"4": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"5": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"6": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"7": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"8": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"9": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"10": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"11": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"12": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"13": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"14": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"15": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"16": [
" ",
" 7 ",
" 677 ",
" 77 ",
" 776 ",
" 767 7 ",
" ",
" "
],
"17": [
" ",
" ",
" 7 ",
" 57 ",
" 77 ",
" 7 776 ",
" 76 7 ",
" 7 "
],
"18": [
" ",
" ",
" ",
" 7 ",
" 77 ",
" 676 ",
" 777 ",
" 76 7 "
],
"19": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"20": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"21": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"22": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"23": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"24": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"25": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"26": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"27": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"28": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"29": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"30": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"31": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"32": [
" ",
" ",
" 7 ",
" 6777 ",
" 77 ",
" 77 ",
" 767 ",
" 7 "
],
"33": [
" ",
" ",
" 6 ",
" 757 ",
" 776 ",
" 77 ",
" 76 ",
" 7 "
],
"34": [
" ",
" ",
" ",
" 7 ",
" 55 ",
" 76 ",
" 776 ",
" 76 7 "
],
"35": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"36": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"37": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"38": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"39": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"40": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"41": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"42": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"43": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"44": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"45": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"46": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"47": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"48": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"49": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"50": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"51": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"52": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"53": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"54": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"55": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"56": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"57": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"58": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"59": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"60": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"61": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"62": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"63": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"64": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"65": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"66": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"67": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"68": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"69": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"70": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"71": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"72": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"73": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"74": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"75": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"76": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"77": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"78": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"79": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"80": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"81": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"82": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"83": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"84": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"85": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"86": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"87": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"88": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"89": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"90": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"91": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"92": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"93": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"94": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"95": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"96": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"97": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"98": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"99": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"100": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"101": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"102": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"103": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"104": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"105": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"106": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"107": [
" 0 ",
" 0 ",
" 0 ",
" 00 ",
" 00 ",
" 00 ",
" 00 ",
" 0 "
],
"108": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"109": [
" 0 ",
" 0 ",
" 0 ",
" 00 ",
" 00 ",
" 00 ",
" 00 ",
" 0 "
],
"110": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"111": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
],
"112": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"113": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"114": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"115": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"116": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"117": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"118": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"119": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"120": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"121": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"122": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"123": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"124": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"125": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"126": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
],
"127": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
"11111111"
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment