sandboxels/mods/real_light.js

754 lines
33 KiB
JavaScript

window.addEventListener('load', function() {
for (var element in elements) {
if (!elements[element].onPlace) {elements[element].onPlace = function(pixel) {
pixel.alphaLight = 0.1
}
}
}
});
day = false
bigCircleCoords = [
[0,-1],
[0,1],
[1,0],
[-1,0],
[1,1],
[1,-1],
[-1,1],
[-1,-1],
[0,-2],
[0,2],
[2,0],
[-2,0],
];
bigCircleCoordsShuffle = bigCircleCoords.slice();
elements.light_switch = {
color: "#d2dfd7",
behavior: [
"CR:photon|CR:photon|CR:photon",
"CR:photon|XX|CR:photon",
"CR:photon|CR:photon|CR:photon",
],
tool: function(pixel) {},
onSelect: function() {
if (day != true) {
day = true
}
else if (day != false) {
day = false
}
selectElement(prevElement);
},
category: "tools",
canPlace: false,
darkText: true,
desc: "Use on pixels to move them around."
}
elements.light = {
color: "#fffdcf",
tick: function(pixel) {
if (Math.random() < 0.01) {
deletePixel(pixel.x,pixel.y);
return;
}
if (pixel.visible < 1000) {
pixel.visible = 10000
}
if (pixel.bx===undefined) {
// choose 1, 0, or -1
pixel.bx = Math.random() < 0.5 ? 1 : Math.random() < 0.5 ? 0 : -1;
pixel.by = Math.random() < 0.5 ? 1 : Math.random() < 0.5 ? 0 : -1;
// if both are 0, make one of them 1 or -1
if (pixel.bx===0 && pixel.by===0) {
if (Math.random() < 0.5) { pixel.bx = Math.random() < 0.5 ? 1 : -1; }
else { pixel.by = Math.random() < 0.5 ? 1 : -1; }
}
}
// move and invert direction if hit
if (pixel.bx && !tryMove(pixel, pixel.x+pixel.bx, pixel.y)) {
var newX = pixel.x + pixel.bx;
if (!isEmpty(newX, pixel.y, true)) {
var newPixel = pixelMap[pixel.x+pixel.bx][pixel.y];
if (!elements[newPixel.element].insulate) {
newPixel.temp += 1;
pixelTempCheck(newPixel);
}
if (!elements.light.reactions[newPixel.element]) {
pixel.color = newPixel.color;
}
if (!newPixel.visible) { newPixel.visible = 25 }
else { newPixel.visible += 25 }
if (elements[newPixel.element].state == "liquid" && elements[newPixel.element].movable != false) {
swapPixels(pixel,newPixel)
}
else {pixel.bx = -pixel.bx;}
}
else if (outOfBounds(newX, pixel.y)) {
pixel.bx = -pixel.bx;
}
}
if (pixel.by && !tryMove(pixel, pixel.x, pixel.y+pixel.by)) {
var newY = pixel.y + pixel.by;
if (!isEmpty(pixel.x, newY, true)) {
var newPixel = pixelMap[pixel.x][pixel.y+pixel.by];
if (!elements[newPixel.element].insulate) {
newPixel.temp += 1;
pixelTempCheck(newPixel);
}
if (!elements.light.reactions[newPixel.element]) {
pixel.color = newPixel.color;
}
if (!newPixel.visible) { newPixel.visible = 25 }
else { newPixel.visible += 25 }
for (var i = 0; i < adjacentCoords.length; i++) {
var coords = adjacentCoords[i];
var x = newPixel.x + coords[0];
var y = newPixel.y + coords[1];
if (!isEmpty(x,y,true)) {
var adjacentPixel = pixelMap[x][y];
if (elements[newPixel.element].id === elements.glass.id || elements[newPixel.element].id === elements.rad_glass.id) {
if (!adjacentPixel.visible) { adjacentPixel.visible = 25 }
else { adjacentPixel.visible += 25 }
}
else {
if (!adjacentPixel.visible) { adjacentPixel.visible = 10 }
else { adjacentPixel.visible += 10 }
}
}
}
if (elements[newPixel.element].state == "liquid" && elements[newPixel.element].movable != false) {
swapPixels(pixel,newPixel)
}
else {pixel.by = -pixel.by;}
}
else if (outOfBounds(pixel.x, newY)) {
pixel.by = -pixel.by;
}
}
},
reactions: {
"glass": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"glass_shard": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"rad_glass": { "color1":["#9f6060","#9f8260","#9f9f60","#609f60","#609f9f","#60609f","#9f609f"] },
"rad_shard": { "color1":["#9f6060","#9f8260","#9f9f60","#609f60","#609f9f","#60609f","#9f609f"] },
"steam": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"rain_cloud": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"cloud": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"smog": { "color1":["#9f6060","#9f8260","#9f9f60","#609f60","#609f9f","#60609f","#9f609f"] },
"ice": { "color1":"#c2fff9" },
"rime": { "color1":"#c2fff9" },
"water": { "color1":"#a1bac9" },
"salt_water": { "color1":"#a1bac9" },
"sugar_water": { "color1":"#a1bac9" },
"dirty_water": { "color1":"#a1c9a8" },
"seltzer": { "color1":"#c2fff9" },
"diamond": { "color1":["#c2c5ff","#c2d9ff"] },
"rainbow": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"static": { "color1":["#ffffff","#bdbdbd","#808080","#424242","#1c1c1c"] }
},
properties: {
visible: 10000,
},
temp: 35,
tempLow: -273,
stateLow: ["liquid_light",null],
stateLowColorMultiplier: 0.8,
category: "energy",
state: "gas",
density: 0.00001,
ignoreAir: true,
insulate: true,
}
elements.photon = {
color: "#ffffff",
grain: 0,
tick: function(pixel) {
if (Math.random() < 0.01) {
deletePixel(pixel.x,pixel.y);
return;
}
if (pixel.visible < 1000) {
pixel.visible = 10000
}
if (pixel.bx===undefined) {
// choose 1, 0, or -1
pixel.bx = Math.random() < 0.5 ? 1 : Math.random() < 0.5 ? 0 : -1;
pixel.by = Math.random() < 0.5 ? 1 : Math.random() < 0.5 ? 0 : -1;
// if both are 0, make one of them 1 or -1
if (pixel.bx===0 && pixel.by===0) {
if (Math.random() < 0.5) { pixel.bx = Math.random() < 0.5 ? 1 : -1; }
else { pixel.by = Math.random() < 0.5 ? 1 : -1; }
}
}
// move and invert direction if hit
if (pixel.bx && !tryMove(pixel, pixel.x+pixel.bx, pixel.y)) {
var newX = pixel.x + pixel.bx;
if (!isEmpty(newX, pixel.y, true)) {
var newPixel = pixelMap[pixel.x+pixel.bx][pixel.y];
if (!newPixel.visible && elements[newPixel.element].id != elements.photon.id) { newPixel.visible = 25 }
else if (elements[newPixel.element].id != elements.photon.id) { newPixel.visible += 25 }
for (var i = 0; i < adjacentCoords.length; i++) {
var coords = adjacentCoords[i];
var x = newPixel.x + coords[0];
var y = newPixel.y + coords[1];
if (!isEmpty(x,y,true)) {
var adjacentPixel = pixelMap[x][y];
if (elements[adjacentPixel.element].id === elements.glass.id || elements[adjacentPixel.element].id === elements.rad_glass.id || elements[newPixel.element].state == "liquid" || elements[newPixel.element].state == "gas") {
if (!adjacentPixel.visible) { adjacentPixel.visible = 25 }
else { adjacentPixel.visible += 25 }
}
else {
if (!adjacentPixel.visible) { adjacentPixel.visible = 10 }
else { adjacentPixel.visible += 10 }
for (var i = 0; i < adjacentCoords.length; i++) {
var coords = adjacentCoords[i];
var x = adjacentPixel.x + coords[0];
var y = adjacentPixel.y + coords[1];
if (!isEmpty(x,y,true)) {
var adjacentPixel2 = pixelMap[x][y];
if (elements[adjacentPixel.element].id === elements.glass.id || elements[adjacentPixel.element].id === elements.rad_glass.id || elements[newPixel.element].state == "liquid" || elements[newPixel.element].state == "gas") {
if (!adjacentPixel2.visible) { adjacentPixel2.visible = 25 }
else { adjacentPixel2.visible += 25 }
}
else {
if (!adjacentPixel2.visible) { adjacentPixel2.visible = 5 }
else { adjacentPixel2.visible += 5 }
}
}
}
}
}
}
if (elements[newPixel.element].state == "liquid" && elements[newPixel.element].movable != false) {
swapPixels(pixel,newPixel)
}
else {pixel.bx = -pixel.bx;}
}
else if (outOfBounds(newX, pixel.y)) {
pixel.bx = -pixel.bx;
}
}
if (pixel.by && !tryMove(pixel, pixel.x, pixel.y+pixel.by)) {
var newY = pixel.y + pixel.by;
if (!isEmpty(pixel.x, newY, true)) {
var newPixel = pixelMap[pixel.x][pixel.y+pixel.by];
if (!newPixel.visible && elements[newPixel.element].id != elements.photon.id) { newPixel.visible = 25 }
else if (elements[newPixel.element].id != elements.photon.id) { newPixel.visible += 25 }
for (var i = 0; i < adjacentCoords.length; i++) {
var coords = adjacentCoords[i];
var x = newPixel.x + coords[0];
var y = newPixel.y + coords[1];
if (!isEmpty(x,y,true)) {
var adjacentPixel = pixelMap[x][y];
if (elements[adjacentPixel.element].id === elements.glass.id || elements[adjacentPixel.element].id === elements.rad_glass.id || elements[newPixel.element].state == "liquid" || elements[newPixel.element].state == "gas") {
if (!adjacentPixel.visible) { adjacentPixel.visible = 25 }
else { adjacentPixel.visible += 25 }
}
else {
if (!adjacentPixel.visible) { adjacentPixel.visible = 10 }
else { adjacentPixel.visible += 10 }
for (var i = 0; i < adjacentCoords.length; i++) {
var coords = adjacentCoords[i];
var x = adjacentPixel.x + coords[0];
var y = adjacentPixel.y + coords[1];
if (!isEmpty(x,y,true)) {
var adjacentPixel2 = pixelMap[x][y];
if (elements[adjacentPixel.element].id === elements.glass.id || elements[adjacentPixel.element].id === elements.rad_glass.id || elements[newPixel.element].state == "liquid" || elements[newPixel.element].state == "gas") {
if (!adjacentPixel2.visible) { adjacentPixel2.visible = 25 }
else { adjacentPixel2.visible += 25 }
}
else {
if (!adjacentPixel2.visible) { adjacentPixel2.visible = 5 }
else { adjacentPixel2.visible += 5 }
}
}
}
}
}
}
if (elements[newPixel.element].state == "liquid" && elements[newPixel.element].movable != false) {
swapPixels(pixel,newPixel)
}
else {pixel.by = -pixel.by;}
}
else if (outOfBounds(pixel.x, newY)) {
pixel.by = -pixel.by;
}
}
},
temp: 20,
stateLowColorMultiplier: 0.8,
category: "energy",
state: "gas",
density: 0,
ignoreAir: true,
insulate: true,
movable: false
}
elements.liquid_light = {
color: "#bdbc9d",
//behavior: behaviors.SUPERFLUID,
tick: function(pixel) {
if (Math.random() < 0.0001) {
deletePixel(pixel.x,pixel.y);
return;
}
if (pixel.charge && elements[pixel.element].behaviorOn) {
pixelTick(pixel)
}
if (Math.random() < 0.33) { tryMove(pixel, pixel.x, pixel.y+1) }
if (!isEmpty(pixel.x, pixel.y+1)) {
// go either left or right depending on pixel.flipX
var newx = pixel.flipX ? pixel.x-1 : pixel.x+1;
if (Math.random() < 0.5) {
if (!tryMove(pixel, newx, pixel.y)) {
if (!outOfBounds(newx, pixel.y) && !elements.liquid_light.reactions[pixelMap[newx][pixel.y].element]) {
pixel.color = pixelMap[newx][pixel.y].color;
if (!pixelMap[newx][pixel.y].visible) { pixelMap[newx][pixel.y].visible = 25 }
else { pixelMap[newx][pixel.y].visible += 25 }
}
pixel.flipX = !pixel.flipX;
if (!tryMove(pixel, newx, pixel.y+1) && !outOfBounds(newx, pixel.y+1) && !elements.liquid_light.reactions[pixelMap[newx][pixel.y+1].element]) {
pixel.color = pixelMap[newx][pixel.y+1].color;
if (!pixelMap[newx][pixel.y+1].visible) { pixelMap[newx][pixel.y+1].visible = 25 }
else { pixelMap[newx][pixel.y+1].visible += 25 }
}
}
}
else {
if (!tryMove(pixel, newx, pixel.y+1)) {
if (!outOfBounds(newx, pixel.y+1) && !elements.liquid_light.reactions[pixelMap[newx][pixel.y+1].element]) {
pixel.color = pixelMap[newx][pixel.y+1].color;
if (!pixelMap[newx][pixel.y+1].visible) { pixelMap[newx][pixel.y+1].visible = 25 }
else { pixelMap[newx][pixel.y+1].visible += 25 }
}
if (!tryMove(pixel, newx, pixel.y)) {
pixel.flipX = !pixel.flipX;
if (!outOfBounds(newx, pixel.y) && !elements.liquid_light.reactions[pixelMap[newx][pixel.y].element]) {
pixel.color = pixelMap[newx][pixel.y].color;
if (!pixelMap[newx][pixel.y].visible) { pixelMap[newx][pixel.y].visible = 25 }
else { pixelMap[newx][pixel.y].visible += 25 }
}
}
}
}
}
doDefaults(pixel);
},
reactions: {
"glass": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"glass_shard": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"rad_glass": { "color1":["#9f6060","#9f8260","#9f9f60","#609f60","#609f9f","#60609f","#9f609f"] },
"rad_shard": { "color1":["#9f6060","#9f8260","#9f9f60","#609f60","#609f9f","#60609f","#9f609f"] },
"steam": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"rain_cloud": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"cloud": { "color1":["#ff0000","#ff8800","#ffff00","#00ff00","#00ffff","#0000ff","#ff00ff"] },
"smog": { "color1":["#9f6060","#9f8260","#9f9f60","#609f60","#609f9f","#60609f","#9f609f"] },
"laser": { "color1":"#ff0000" },
},
temp: -273,
tempHigh: -272,
stateHigh: "light",
category: "energy",
state: "gas",
density: 0.00002,
ignoreAir: true,
viscosity: 0,
insulate: true,
hidden: true
}
elements.bless = {
color: ["#ffffff","#fffa9c","#00ffff"],
tool: function(pixel) {
if (elements.bless.ignore.indexOf(pixel.element) !== -1) { return; }
if (pixel.burning && !elements[pixel.element].burning) { // stop burning
delete pixel.burning;
delete pixel.burnStart;
}
if (!elements[pixel.element].insulate) {
if (pixel.temp > 100) {
pixel.temp = (pixel.temp+100)/2;
pixelTempCheck(pixel);
if (pixel.del) {return}
}
if (pixel.temp < -200) {
pixel.temp = (pixel.temp-200)/2;
pixelTempCheck(pixel);
if (pixel.del) {return}
}
}
if (pixel.origColor) {
pixel.color = "rgb("+pixel.origColor.join(",")+")";
delete pixel.origColor;
}
if (pixel.charge) {
delete pixel.charge;
pixel.chargeCD = 16;
}
if (!pixel.visible) {
pixel.visible = 10
}
else {
pixel.visible += 10
}
if (elements.bless.reactions[pixel.element] && Math.random()<0.25) {
var r = elements.bless.reactions[pixel.element];
var elem2 = r.elem2;
if (elem2 !== undefined) {
if (Array.isArray(elem2)) { elem2 = elem2[Math.floor(Math.random()*elem2.length)]; }
if (elem2 === null) { deletePixel(pixel.x,pixel.y) }
else { changePixel(pixel, elem2); }
}
if (r.func) { r.func(pixel,pixel) }
if (r.color2) { pixel.color = pixelColorPick(pixel,r.color2) }
}
},
ignore: ["sun"],
behavior: [
"M2|M1|M2",
"M1|DL%25|M1",
"M2|M1|M2",
],
reactions: {
"cancer": { elem2:null },
"rust": { elem2: "iron" },
"oxidized_copper": { elem2: "copper" },
"blood": { elem2:["antibody",null] },
"blood_ice": { elem2:"antibody_ice" },
"dirty_water": { elem2: "water" },
"plague": { elem2: null },
"virus": { func: function(pixel1,pixel2){pixel2.heal=true} },
"filler": { elem2: "wall" },
"armageddon": { elem2: null },
"lattice": { elem2: "wall" },
"vertical": { elem2: "wall" },
"horizontal": { elem2: "wall" },
"gray_goo": { elem2: "malware" },
"infection": { elem2: ["antibody",null] },
"antibody": { elem2: ["antibody",null] },
"infection_ice": { elem2: "antibody_ice" },
"poison": { elem2: "antidote" },
"poison_gas": { elem2: null },
"poison_ice": { elem2: null },
"rotten_meat": { elem2: "meat" },
"rotten_cheese": { elem2: "cheese", color2:["#B8BA9E","#CDCAB2","#C5CEC0","#7B9691","#41564B"] },
"carbon_dioxide": { elem2: "oxygen" },
"pilk": { elem2: "milk" },
"acid": { elem2: "hydrogen" },
"acid_gas": { elem2: "hydrogen" },
"acid_cloud": { elem2: "rain_cloud" },
"fire_cloud": { elem2: "cloud" },
"ash": { elem2: null },
"molten_ash": { elem2: null },
"pyrocumulus": { elem2: null },
"cyanide": { elem2: null },
"cyanide_gas": { elem2: null },
"ammonia": { elem2: null },
"liquid_ammonia": { elem2: null },
"dioxin": { elem2: null },
"stench": { elem2: null },
"liquid_stench": { elem2: null },
"fragrance": { elem2: null },
"chlorine": { elem2: null },
"anesthesia": { elem2: null },
"oil": { elem2: null },
"bleach": { elem2: null },
"soda": { elem2: "seltzer" },
"ink": { elem2: null },
"dye": { elem2: null },
"color_smoke": { elem2: null },
"spray_paint": { elem2: null },
"cancer": { elem2: null },
"rat": { elem2: null },
"flea": { elem2: null },
"termite": { elem2: null },
"smog": { elem2: "cloud" },
"mercury": { elem2: null },
"slime": { elem2: null },
"broth": { elem2: "water" },
"fire": { elem2: "bless" },
"plasma": { elem2: "bless" },
"grenade": { elem2: "metal_scrap" },
"flashbang": { elem2: "metal_scrap" },
"smoke_grenade": { elem2: "metal_scrap" },
"greek_fire": { elem2: "smoke" },
"nitro": { elem2: null },
"smoke": { elem2: null },
"lightning": { elem2: null },
"electric": { elem2: null },
"positron": { elem2: null },
"antimatter": { elem2: null },
"neutron": { elem2: null },
"proton": { elem2: null },
"radiation": { elem2: "flash" },
"uranium": { elem2: "rock" },
"molten_uranium": { elem2: "magma" },
"magma": { elem2: "rock" },
"mercury": { elem2: null },
"mercury_gas": { elem2: null },
"solid_mercury": { elem2: null },
"ice_nine": { elem2: "ice" },
"strange_matter": { elem2: "neutron" },
"frozen_frog": { elem2: "frog" },
"frozen_worm": { elem2: "worm" },
"molten_thermite": { elem2: "rock" },
"rad_glass": { elem2: "glass" },
"rad_shard": { elem2: "glass_shard" },
"rad_steam": { elem2: "steam" },
"fallout": { elem2: null },
"rad_cloud": { elem2: "rain_cloud" },
"fireball": { elem2: "ball" },
"bone_marrow": { elem2: "bone" },
"fly": { elem2: null },
"dead_bug": { elem2: null },
"dead_plant": { elem2: "plant" },
"wood": { func:function(pixel1,pixel2) {if(pixel2.wc){changePixel(pixel2,"tree_branch")}} },
"slag": { elem2: "rock" },
"molten_slag": { elem2: "magma" },
"laser": { elem2: "light" },
"light": { elem2: "flash" },
"torch": { elem2: "wood" },
"explosion": { elem2: null },
"n_explosion": { elem2: null },
"supernova": { elem2: null },
"pop": { elem2: null },
"ember": { elem2: null },
"fw_ember": { elem2: null },
"pollen": { elem2: null },
"lead": { elem2: "gold" },
"molten_lead": { elem2: "molten_gold" },
"dirt": { elem1: "grass", oneway:true },
"static": { elem2: "rainbow" },
"tornado": { elem2: null },
"tsunami": { elem2: null },
"earthquake": { elem2: null },
"blaster": { elem2: null },
"dust": { elem2: null },
"grease": { elem2: null },
"meat": { elem2: "cured_meat" },
"clay_shard": { elem2:"baked_clay" },
"porcelain_shard": { elem2:"porcelain" },
"glass_shard": { elem2:"glass" },
"gunpowder": { elem2:"charcoal" },
"ruins": { elem2:"rock_wall" },
"warp": { elem2:null },
"midas_touch": { elem2:null },
"web": { elem2:null },
"heat_ray": { elem2:null },
},
temp:20,
state: "gas",
density: 0.001,
canPlace: true,
category: "energy",
stain: -0.5
}
viewInfo[1] = { // Real Light View
name: "",
effects: true,
pixel: function(pixel,ctx) {
if (day != true) {
if (pixel.visible && elements[pixel.element].id != elements.photon.id) {
var a = (settings.textures !== 0) ? pixel.alphaLight : undefined;
if (elements[pixel.element].isGas) {
drawPlus(ctx,pixel.color,pixel.x,pixel.y,undefined,a)
if (pixel.visible > 0 && (elements[pixel.element].emit || pixel.emit) || (elements[pixel.element].glow || pixel.glow) || pixel.bright === true || pixel.charge || pixel.burning || pixel.temp > 1025) {
pixel.visible += 1
}
else if (pixel.visible > 1) {
pixel.visible -= 1
}
if (pixel.visible > 250) {
pixel.visible = 250
}
if (pixel.visible > 100 || pixel.bright || (elements[pixel.element].emit || pixel.emit) || (elements[pixel.element].glow || pixel.glow) || pixel.bright === true || pixel.charge || pixel.burning || pixel.temp > 1025) {
pixel.alphaLight = 1
}
else if (pixel.visible <= 100) {
pixel.alphaLight = (pixel.visible / 100)
if (pixel.alphaLight <= 0.05) {
for (var i = 0; i < squareCoordsShuffle.length; i++) {
var x = pixel.x+squareCoordsShuffle[i][0];
var y = pixel.y+squareCoordsShuffle[i][1];
if (isEmpty(x,y)) {
pixel.alphaLight = 0.1
}
else if (pixel.alphaLight <= 0.025 && !isEmpty(x,y, true)) {
for (var i2 = 0; i2 < bigCircleCoordsShuffle.length; i2++) {
var x2 = pixel.x+bigCircleCoordsShuffle[i2][0];
var y2 = pixel.y+bigCircleCoordsShuffle[i2][1];
if (isEmpty(x2,y2)) {
pixel.alphaLight = 0.05
}
else if (pixel.alphaLight <= 0.015) {
pixel.alphaLight = 0.025
}
}
}
}
}
}
// if (isEmpty(pixel.x+1,pixel.y) || isEmpty(pixel.x-1,pixel.y) || isEmpty(pixel.x,pixel.y+1) || isEmpty(pixel.x,pixel.y-1)) {}
}
else {
drawSquare(ctx,pixel.color,pixel.x,pixel.y,undefined,a)
if (pixel.visible > 0 && (elements[pixel.element].emit || pixel.emit) || (elements[pixel.element].glow || pixel.glow) || pixel.bright === true || pixel.charge || pixel.burning || pixel.temp > 1025) {
pixel.visible += 1
}
else if (pixel.visible > 1) {
pixel.visible -= 1
}
if (pixel.visible > 250) {
pixel.visible = 250
}
if (pixel.visible > 100 || pixel.bright || (elements[pixel.element].emit || pixel.emit) || (elements[pixel.element].glow || pixel.glow) || pixel.bright === true) {
pixel.alphaLight = 1
}
else if (pixel.visible < 0.5 && (pixel.charge || pixel.burning || pixel.temp > 1025)) {
pixel.alphaLight = 0.5
}
else if (pixel.visible <= 100) {
pixel.alphaLight = (pixel.visible / 100)
if (pixel.alphaLight <= 0.05) {
for (var i = 0; i < squareCoordsShuffle.length; i++) {
var x = pixel.x+squareCoordsShuffle[i][0];
var y = pixel.y+squareCoordsShuffle[i][1];
if (isEmpty(x,y)) {
pixel.alphaLight = 0.1
}
else if (pixel.alphaLight <= 0.025 && !isEmpty(x,y, true)) {
for (var i2 = 0; i2 < bigCircleCoordsShuffle.length; i2++) {
var x2 = pixel.x+bigCircleCoordsShuffle[i2][0];
var y2 = pixel.y+bigCircleCoordsShuffle[i2][1];
if (isEmpty(x2,y2)) {
pixel.alphaLight = 0.05
}
else if (pixel.alphaLight <= 0.015) {
pixel.alphaLight = 0.025
}
}
}
}
}
}
}
if (pixel.charge && view !== 2) { // Yellow glow on charge
if (!elements[pixel.element].colorOn) {
drawSquare(ctx,"rgba(255,255,0,0.5)",pixel.x,pixel.y);
}
}
}
else if (!pixel.visible) {
pixel.visible = 1
}
}
else {
var a = (settings.textures !== 0) ? pixel.alpha : undefined;
if (((elements[pixel.element].isGas && elements[pixel.element].glow !== false) || elements[pixel.element].glow || pixel.glow) && pixel.glow !== false) {
drawPlus(ctx,pixel.color,pixel.x,pixel.y,undefined,a)
// if (isEmpty(pixel.x+1,pixel.y) || isEmpty(pixel.x-1,pixel.y) || isEmpty(pixel.x,pixel.y+1) || isEmpty(pixel.x,pixel.y-1)) {}
}
else {
drawSquare(ctx,pixel.color,pixel.x,pixel.y,undefined,a)
}
if (pixel.charge && view !== 2) { // Yellow glow on charge
if (!elements[pixel.element].colorOn) {
drawSquare(ctx,"rgba(255,255,0,0.5)",pixel.x,pixel.y);
}
}
}
}
}
elements.light_bulb.behaviorOn = [
"XX|CR:light,photon|XX",
"CR:light,photon|XX|CR:light,photon",
"XX|CR:light,photon|XX",
]
elements.sun.tick = function(pixel) {
// minimum 1726
// maximum 7726
if (pixel.eclipse) { pixel.color = pixelColorPick(pixel,"#FD8C03"); var c=0.01}
else if (pixel.temp < 1500) { pixel.color = pixelColorPick(pixel,"#7a4e43"); }
else if (pixel.temp < 3600) { pixel.color = pixelColorPick(pixel,"#ffbdbd"); var c=0.015 }
else if (pixel.temp < 5000) { pixel.color = pixelColorPick(pixel,"#ffd5bd"); var c=0.025 }
else if (pixel.temp < 7000) { pixel.color = pixelColorPick(pixel,"#ffffbd"); var c=0.05 }
else if (pixel.temp < 11000) { pixel.color = pixelColorPick(pixel,"#f7fff5"); var c=0.1 }
else if (pixel.temp < 28000) { pixel.color = pixelColorPick(pixel,"#bde0ff"); var c=0.2 }
else { pixel.color = pixelColorPick(pixel,"#c3bdff"); var c=0.4 }
if (pixel.temp < 1500) { var c=0 }
for (var i = 0; i < adjacentCoords.length; i++) {
var x = pixel.x+adjacentCoords[i][0];
var y = pixel.y+adjacentCoords[i][1];
if (isEmpty(x,y)) {
if (Math.random() > c) {continue}
if (Math.random() > 0.75) {
createPixel("light", x, y);
pixelMap[x][y].color = pixel.color;
}
else {
createPixel("photon", x, y);
}
}
else if (!outOfBounds(x,y)) {
var newPixel = pixelMap[x][y];
if (elements[newPixel.element].id === elements.sun.id) {
if (pixel.eclipse) { newPixel.eclipse = true }
if (pixel.temp!==newPixel.temp) {
var avg = (pixel.temp + newPixel.temp)/2;
pixel.temp = avg;
newPixel.temp = avg;
pixelTempCheck(pixel);
pixelTempCheck(newPixel);
}
}
}
}
}
elements.sun.tool = function(pixel) {
if (pixel.element === "light" || pixel.element === "photon") {
deletePixel(pixel.x,pixel.y);
}
}
elements.fire.properties = { bright: true }
elements.plasma.properties = { bright: true }
elements.sun.properties = { bright: true }
elements.cold_fire.properties = { bright: true }
elements.laser.properties = { bright: true }
elements.pointer.properties = { bright: true }
elements.flash.properties = { bright: true }
elements.bless.properties = { bright: true }
elements.lightning.properties = { bright: true }
elements.neutron.properties = { bright: true }
elements.proton.properties = { bright: true }
elements.electric.properties = { bright: true }
elements.radiation.properties = { bright: true }
elements.god_ray.properties = { bright: true }
elements.heat_ray.properties = { bright: true }
elements.freeze_ray.properties = { bright: true }
elements.pop.properties = { bright: true }
elements.explosion.properties = { bright: true }
elements.n_explosion.properties = { bright: true }
elements.supernova.properties = { bright: true }
elements.positron.properties = { bright: true }
elements.fw_ember.properties = { bright: true }
elements.ember.properties = { bright: true }
elements.firebal.properties = { bright: true }
elements.blaster.properties = { bright: true }
elements.armageddon.properties = { bright: true }
elements.rad_cloud.properties = { bright: true }
elements.rad_steam.properties = { bright: true }
elements.midas_touch.properties = { bright: true }
elements.malware.properties = { bright: true }
elements.strange_matter.properties = { bright: true }