sandboxels/mods/cells.js

379 lines
11 KiB
JavaScript
Raw Normal View History

goldObject = {
gold: 1,
gold_coin: 1,
gold_fairy: 3
};
goldObjectNameArray = Object.keys(goldObject);
urlParams = new URLSearchParams(window.location.search);
if(urlParams.get('goldFairyAmount') != null) { //null check
goldFairyAmount = urlParams.get('goldFairyAmount')
if(isNaN(goldFairyAmount) || goldFairyAmount === "" || goldFairyAmount === null) { //NaN check
goldFairyAmount = 10
}
goldFairyAmount = parseInt(goldFairyAmount)
if(goldFairyAmount > 10000) {
alert("Maximum amount of additional gold fairies is 10000.\nOnly 10000 fairies were added.")
} else if(goldFairyAmount < 1) {
alert("Minimum amount of additional gold fairies is 1.\n1 fairy was added.")
}
goldFairyAmount = Math.min(10000,Math.max(goldFairyAmount,1))
} else {
goldFairyAmount = 10
}
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" };
for (var i = 2; i <= goldFairyAmount + 1; i++) {
nameVar = `gold_${i-1}-fairy`
if(i === 2) {
nameVar = "gold_fairy";
};
elements[`gold_${i}-fairy`] = {
name: `gold_${i}-fairy`,
color: ["#cfa65b","#e6df63","#faf673"],
behavior: [
"XX|M1|M1",
"XX|FX%5|XX",
"XX|CR:" + nameVar + "%0.25 AND CR:fairy_dust%0.005 AND M1|M1",
],
reactions: {
"glitter": { "elem1": `gold_${i+1}-fairy`, "elem2": null }
},
state: "solid",
excludeRandom:true,
category: "fey",
hidden: true,
}
goldObject[`gold_${i}-fairy`] = 3 * i;
if (i == goldFairyAmount) { elements[`gold_${i}-fairy`]["reactions"] = {}; }
}
};
runAfterLoad(function() {
if(enabledMods.includes("mods/fey_and_more.js")) {
//eList rebuilding {
eLists.FAIRY.push("gold_fairy");
for (var i = 2; i <= goldFairyAmount + 1; i++) {
eLists.FAIRY.push(`gold_${i}-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"
];
//}
goldObjectNameArray = Object.keys(goldObject);
};
if(enabledMods.includes("mods/fey_and_more.js") && enabledMods.includes("mods/randomness.js")) {
if(elements.tungstensteel && elements.molten_tungstensteel) {
elements.tungstensteel.behavior = [
"XX|DL:"+eLists.FAIRY+"|XX",
"DL:"+eLists.FAIRY+"|XX|DL:"+eLists.FAIRY+"",
"XX|DL:"+eLists.FAIRY+"|XX",
],
elements.molten_tungstensteel.behavior = [
"XX|DL:"+eLists.FAIRY+" AND CR:fire%2.5|XX",
"DL:"+eLists.FAIRY+" AND M2|XX|DL:"+eLists.FAIRY+" AND M2",
"M1|DL:"+eLists.FAIRY+"|M1",
]
}
};
if(!elements.rainbow.reactions) {
elements.rainbow.reactions = {}
}
elements.rainbow.reactions.gold_fairy = { "elem1": "gold_2-fairy", "elem2": null }
});