From 7358d8ff8f59fa0452181dffb1b72c97281cd222 Mon Sep 17 00:00:00 2001 From: O-01-67 <68935009+O-01-67@users.noreply.github.com> Date: Sun, 3 Jul 2022 16:11:45 -0400 Subject: [PATCH] new mod * cell that makes a lot of heat * meta-cancer * cells that eat gold --- mods/cells.js | 314 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 314 insertions(+) create mode 100644 mods/cells.js diff --git a/mods/cells.js b/mods/cells.js new file mode 100644 index 00000000..f20ada12 --- /dev/null +++ b/mods/cells.js @@ -0,0 +1,314 @@ +goldObject = { + gold: 1, + gold_coin: 1, + gold_fairy: 3 +}; + +goldObjectNameArray = Object.keys(goldObject); + +elements.cell_1 = { + color: ["#bbee00","#eeee00","#cfee00"], + behavior: [ + "XX|CL%0.5|XX", + "CL%0.5|HT:1%2|CL%0.5", + "M2%10|M1|M2%10", + ], + uwu: 0, + properties: { + uwu: 0 + }, + tick: function(pixel) { + pixel.uwu = 0; + for (let i = -1; i < 2; i++) { //neighbor count + for (let j = -1; j < 2; j++) { + if (!isEmpty(pixel.x+j,pixel.y+i) && !outOfBounds(pixel.x+j,pixel.y+i)) { + if (pixelMap[pixel.x+j][pixel.y+i].element == pixel.element) { + pixel.uwu += 1; + }; + }; + }; + }; + pixel.uwu -= 1; //exclude self + + var tempGrowthDecrease = null; + if(pixel.temp < 70) { + tempGrowthDecrease = 0; + } else if(pixel.temp > 100) { + tempGrowthDecrease = 70; + } else { + tempGrowthDecrease = pixel.temp - 70; + } + + if(pixel.uwu == undefined || pixel.uwu == null || isNaN(pixel.uwu)) { + uwu = 0; + } else { + var tempGain = pixel.uwu / 48; + var chanceGain = pixel.uwu / 96; + }; + if(Math.random() < ( (2 + chanceGain) - (tempGrowthDecrease / 30) )) { + pixel.temp += tempGain; + }; + }, + reactions: { + "infection": { "elem1":"cancer", "chance":0.01 }, + "blood": { "elem1":"blood", "chance":0.01 }, + "antibody": { "elem1":"antibody", "chance":0.01 }, + "sugar": { "elem2":"cell", "chance":0.03 }, + "sugar_water": { "elem2":"cell", "chance":0.04 }, + "alcohol": { "elem1":[null,"dna"], "chance":0.02 }, + "poison": { "elem1":null, "chance":0.02 }, + "oxygen": { "elem2":"carbon_dioxide", "chance":0.05 }, + "ammonia": { "elem2":"nitrogen", "chance":0.05 }, + }, + tempHigh: 122, + stateHigh: "steam", + tempLow: -6, + stateLow: "ice", + state: "solid", + density: 1000.2, + category: "life", + breakInto: ["water","dna","dna","dna"] +}; + +elements.cell_2 = { + color: ["#32280b","#5a4711","#87660c"], + behavior: [ + "XX|CL%1.8|XX", + "CL%1.8|XX|CL%1.8", + "M2%5|M1|M2%5", + ], + reactions: { + "cancer": { "elem2":"cell_2", "chance":0.035 }, + "cell": { "elem2":"cell_2", "chance":0.001 }, + "frog": { "elem2":"cell_2", "chance":0.001 }, + "fish": { "elem2":"cell_2", "chance":0.001 }, + "rat": { "elem2":"cell_2", "chance":0.001 }, + "bird": { "elem2":"cell_2", "chance":0.001 }, + "sugar": { "elem2":"cell_2", "chance":0.035 }, + "sugar_water": { "elem2":"cell_2", "chance":0.045 }, + "alcohol": { "elem1":[null,"dna"], "chance":0.012 }, + "poison": { "elem1":[null,null,"poison","poison","poison","dna","dirty_water"], "chance":0.03 }, + "proton": { "elem1":[null,"cancer"], "chance":0.04 }, + }, + tempHigh: 80, + stateHigh: ["steam","plague"], + state: "solid", + density: 1000.17, + category: "life", + breakInto: ["dirty_water","dna","dna","dna","dna"] +}; + +elements.cell_3 = { + color: ["#bbee00","#eeee00","#cfee00"], + behavior: [ + "XX|CL%0.5|XX", + "CL%0.5|HT:1%2|CL%0.5", + "M2%10|M1|M2%10", + ], + uwu: 0, + properties: { + uwu: 0 + }, + tick: function(pixel) { + pixel.uwu = 0; + for (let i = -1; i < 2; i++) { //neighbor count + for (let j = -1; j < 2; j++) { + if (!isEmpty(pixel.x+j,pixel.y+i) && !outOfBounds(pixel.x+j,pixel.y+i)) { + if (pixelMap[pixel.x+j][pixel.y+i].element == pixel.element) { + pixel.uwu += 1; + }; + }; + }; + }; + pixel.uwu -= 1; //exclude self + + var tempGrowthDecrease = null; + if(pixel.temp < 70) { + tempGrowthDecrease = 0; + } else if(pixel.temp > 100) { + tempGrowthDecrease = 70; + } else { + tempGrowthDecrease = pixel.temp - 70; + } + + if(pixel.uwu == undefined || pixel.uwu == null || isNaN(pixel.uwu)) { + uwu = 0; + } else { + var tempGain = pixel.uwu / 48; + var chanceGain = pixel.uwu / 96; + }; + if(Math.random() < ( (2 + chanceGain) - (tempGrowthDecrease / 30) )) { + pixel.temp += tempGain; + }; + }, + reactions: { + "infection": { "elem1":"cancer", "chance":0.01 }, + "blood": { "elem1":"blood", "chance":0.01 }, + "antibody": { "elem1":"antibody", "chance":0.01 }, + "sugar": { "elem2":"cell", "chance":0.03 }, + "sugar_water": { "elem2":"cell", "chance":0.04 }, + "alcohol": { "elem1":[null,"dna"], "chance":0.02 }, + "poison": { "elem1":null, "chance":0.02 }, + "oxygen": { "elem2":"carbon_dioxide", "chance":0.05 }, + "ammonia": { "elem2":"nitrogen", "chance":0.05 }, + }, + tempHigh: 122, + stateHigh: "steam", + tempLow: -6, + stateLow: "ice", + state: "solid", + density: 1000.2, + category: "life", + breakInto: ["water","dna","dna","dna"] +}; + +elements.cell_3 = { + color: ["#eeee00","#eecc00","#dddd00"], + behavior: [ + "XX|CL%0|XX", //CL%0 for display purposes + "CL%0|XX|CL%0", + "M2%10|M1|M2%10", + ], + reactions: { + "infection": { "elem1":"cancer", "chance":0.01 }, + "blood": { "elem1":"blood", "chance":0.01 }, + "antibody": { "elem1":"antibody", "chance":0.01 }, + "sugar": { "elem2":"cell", "chance":0.03 }, + "sugar_water": { "elem2":"cell", "chance":0.04 }, + "alcohol": { "elem1":[null,"dna"], "chance":0.02 }, + "poison": { "elem1":null, "chance":0.02 }, + "oxygen": { "elem2":"carbon_dioxide", "chance":0.05 }, + "ammonia": { "elem2":"nitrogen", "chance":0.05 }, + }, + tempHigh: 102, + stateHigh: "steam", + tempLow: -2, + stateLow: "ice", + state: "solid", + density: 1000.1, + category: "life", + breakInto: ["water","dna","dna","dna"], + gold: 0, + properties: { + gold: 0 + }, + tick: function(pixel) { + var pX = pixel.x + var pY = pixel.y + var baseEatRate = 1; + var eatRate = baseEatRate + (2 * pixel.gold * 0.01); + if(Math.random() < eatRate/100) { + var randomNeighborNumber = Math.floor(Math.random() * 4) + var oX = adjacentCoords[randomNeighborNumber][0]; + var oY = adjacentCoords[randomNeighborNumber][1]; + var checkPosX = pX+oX; + var checkPosY = pY+oY; + + if(!isEmpty(checkPosX,checkPosY,true)) { + if(goldObjectNameArray.includes(pixelMap[checkPosX][checkPosY].element)) { + pixel.gold += goldObject[pixelMap[checkPosX][checkPosY].element]; + deletePixel(checkPosX,checkPosY); + }; + }; + }; + + var baseGrowthRate = 0.5; + var growthRate = baseGrowthRate + (pixel.gold * 0.025); + + if(pixel.gold > 150) { + var chance = (pixel.gold - 150) / 20 + var baseRadius = 10 + var radius = Math.max(20,Math.round((baseRadius + (pixel.gold / 25)))) + if(Math.random() < (chance / 100)) { + explodeAt(pX,pY,10,"gold_coin"); + }; + }; + + if(Math.random() < growthRate/100) { + var randomNeighborNumber = Math.floor(Math.random() * 4) + var oX = adjacentCoords[randomNeighborNumber][0]; + var oY = adjacentCoords[randomNeighborNumber][1]; + var checkPosX = pX+oX; + var checkPosY = pY+oY; + + if(isEmpty(checkPosX,checkPosY,false)) { + var halfGold1 = pixel.gold / 2; + var halfGold2 = pixel.gold / 2; + if(halfGold1 % 1 == 0.5) { + halfGold1 = Math.ceil(halfGold1); + halfGold2 = Math.floor(halfGold2); + }; + createPixel(pixel.element,checkPosX,checkPosY); + newPixel = pixelMap[checkPosX][checkPosY]; + pixel.gold = halfGold1; + newPixel.gold = halfGold2; + }; + }; + + }, + reactions: { + "infection": { "elem1":"cancer", "chance":0.01 }, + "blood": { "elem1":"blood", "chance":0.01 }, + "antibody": { "elem1":"antibody", "chance":0.01 }, + "sugar": { "elem2":"cell", "chance":0.03 }, + "sugar_water": { "elem2":"cell", "chance":0.04 }, + "alcohol": { "elem1":[null,"dna"], "chance":0.02 }, + "poison": { "elem1":null, "chance":0.02 }, + "oxygen": { "elem2":"carbon_dioxide", "chance":0.05 }, + "ammonia": { "elem2":"nitrogen", "chance":0.05 }, + }, + tempHigh: 122, + stateHigh: "steam", + tempLow: -6, + stateLow: "ice", + state: "solid", + density: 1000.2, + category: "life", + breakInto: ["water","dna","dna","dna"] +}; + +if(enabledMods.includes("mods/fey_and_more.js")) { + + elements.gold_fairy = { + name: "gold fairy", + color: ["#cfa65b","#e6df63","#faf673"], + behavior: [ + "XX|M1|M1", + "XX|FX%5|XX", + "XX|CR:gold_coin%0.25 AND CR:fairy_dust%0.005 AND M1|M1", + ], + state: "solid", + category: "fey" + }; + + elements.fairy.reactions.gold = { elem1: "gold_fairy", "elem2": null }; + elements.fairy.reactions.gold_coin = { elem1: "gold_fairy", "elem2": null }; + if(!elements.gold.reactions) { + elements.gold.reactions = {}; + }; + if(!elements.gold_coin.reactions) { + elements.gold_coin.reactions = {}; + }; + elements.gold.reactions.fairy = { elem1: null, elem2: "gold_fairy" }; + elements.gold_coin.reactions.fairy = { elem1: null, elem2: "gold_fairy" }; + +}; + +runAfterLoad(function() { + if(enabledMods.includes("mods/fey_and_more.js")) { + //eList rebuilding { + eLists.FAIRY.push("gold_fairy"); + + elements.iron.behavior = [ + "XX|DL:"+eLists.FAIRY+"|XX", + "DL:"+eLists.FAIRY+"|XX|DL:"+eLists.FAIRY+"", + "XX|DL:"+eLists.FAIRY+"|XX" + ]; + elements.silver.behavior = [ + "XX|DL:"+eLists.FAIRY+"|XX", + "DL:"+eLists.FAIRY+"|XX|DL:"+eLists.FAIRY+"", + "XX|DL:"+eLists.FAIRY+"|XX" + ]; + //} + }; +});