From 9da39ce34e631e8e9912bb68b258073685019d4a Mon Sep 17 00:00:00 2001 From: Nekonico <163950752+DBNekonico@users.noreply.github.com> Date: Wed, 26 Feb 2025 17:10:36 -0800 Subject: [PATCH] "realistic" lighting mod --- mods/real_light.js | 754 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 754 insertions(+) create mode 100644 mods/real_light.js diff --git a/mods/real_light.js b/mods/real_light.js new file mode 100644 index 00000000..ada59bc1 --- /dev/null +++ b/mods/real_light.js @@ -0,0 +1,754 @@ +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 } \ No newline at end of file