Merge pull request #1357 from orchidthedev/main

update and bug fix
This commit is contained in:
slweeb 2026-02-08 14:52:28 -05:00 committed by GitHub
commit 9bc10bd391
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 1881 additions and 1641 deletions

View File

@ -36,6 +36,7 @@ dependOn("orchidslibrary.js", ()=>{
for(let key in rgb){
rgb[key] += num;
}
pixel.color = `rgb(${rgb.r},${rgb.g},${rgb.b})`;
}
let multi = (pixel.temp-70)/100;
@ -982,6 +983,7 @@ dependOn("orchidslibrary.js", ()=>{
stateHigh: ["chlorine", "aluminum"],
solubility: {water: 0.458, color: ["#7a9ff0", "#7aa4ff", "#729bf2", "#6f9cfc"]},
}
elements.acid.solInfo = "acid";
elements.acid.reactions.aluminum = {elem1: "hydrogen", elem2: "aluminum_chloride"};
elements.acid.reactions.purple_gold = {elem1: ["aluminum_chloride", "aluminum_chloride", "hydrogen"], elem2: "gold"};
elements.acid.reactions.blue_gold = {elem1: ["gallium_chloride", "gallium_chloride", "hydrogen"], elem2: "gold"};
@ -1232,6 +1234,7 @@ dependOn("orchidslibrary.js", ()=>{
behavior: behaviors.LIQUID,
state: "liquid",
density: 1830,
solInfo: "acid",
reactions: {
magnesium_carbonate: {elem1: ["carbon_dioxide", "foam","foam"], elem2: "epsom_salt"},
limestone: {elem1: ["carbon_dioxide", "foam","foam"], elem2: "hardened_gypsum"},
@ -1314,14 +1317,14 @@ dependOn("orchidslibrary.js", ()=>{
promptInput("Enter the range of this machine:", (input)=>{elements.magnet.range = parseInt(input);}, "Magnet Range", elements.magnet.range);
},
onClicked: function(pixel, elem){
if(pixel.targetElems.includes(elem) && elem != "unknown" && pixel.clickCd <= 0){
if(pixel.targetElems.includes(elem) && elem != null && pixel.clickCd <= 0){
pixel.targetElems.splice(pixel.targetElems.indexOf(elem), 1);
pixel.clickCd = 20;
} else if (elem != "unknown" && pixel.clickCd <= 0) {
} else if (elem != null && pixel.clickCd <= 0) {
pixel.targetElems.push(elem);
pixel.clickCd = 20;
}
if(elem == "unknown" && pixel.clickCd <= 0){
if(elem == null && pixel.clickCd <= 0){
switch(pixel.mode){
case 0:
pixel.mode = 1; //attract
@ -1513,15 +1516,17 @@ dependOn("orchidslibrary.js", ()=>{
chance = 0.000075-(Math.min((pixel.temp-250)/20, 0)*0.00005);
if(Math.random()<chance){
let colors = [
{r:255, g:127, b:0},
{r: 255, g:200, b:0},
{r: 255, g:255, b:0},
{r:150, g:80, b:80},
{r: 150, g:100, b:80},
{r: 150, g:140, b:80},
{r:125, g:150, b:80},
{r:0, g:255, b:0},
{r:0, g:255, b:255},
{r:0, g:0, b:255},
{r:255, g:0, b:255},
{r:255, g:0, b:70},
{r:255, g:105, b:0},
{r:150, g:80, b:110}
];
let num = Math.round(Math.random()*7);
let newColorArr = [];
@ -1546,16 +1551,18 @@ dependOn("orchidslibrary.js", ()=>{
if(Math.random()<0.005 && positions.length > 0){
let lowestIndex = positions.indexOf(Math.min(...positions));
let newPos = positions[lowestIndex]+1;
let coords = coordsArr[lowestIndex], colors = pixelMap[coords[0]][coords[1]].colorArr || [
{r:255, g:127, b:0},
{r: 255, g:200, b:0},
{r: 255, g:255, b:0},
let colors = [
{r:150, g:80, b:80},
{r: 150, g:100, b:80},
{r: 150, g:140, b:80},
{r:125, g:150, b:80},
{r:0, g:255, b:0},
{r:0, g:255, b:255},
{r:0, g:0, b:255},
{r:255, g:0, b:255},
{r:255, g:0, b:70},
{r:255, g:105, b:0},
{r:150, g:80, b:110}
];
let current = ((newPos%11)/10)*colors.length;
let currentIndex = Math.floor(current);
@ -1761,4 +1768,100 @@ dependOn("orchidslibrary.js", ()=>{
elements.vinegar.solubility = {water: 1};
elements.nitric_acid.solubility = {water: 1};
elements.sulfuric_acid.solubility = {water: 1};
elements.morechem_filter = {
noMix: true,
movable: false,
color: ["#214a30", "#245435", "#1a4027", "#265235"],
category: "machines",
state: "solid",
behavior: behaviors.WALL,
properties: {
targetElems: [],
cooldown: 0,
p: null,
dir: [0,0],
},
onClicked: function(pixel, elem){
if(pixel.cooldown == 0){
if(pixel.targetElems.includes(elem)){
pixel.targetElems.splice(pixel.targetElems.indexOf(elem), 1);
let total = {r: 0, g: 0, b: 0};
let num = 0;
for(let elem of pixel.targetElems){
let c = getItem(elements[elem].color);
let rgb = getRGB(c);
total.r += rgb.r, total.g += rgb.g, total.b += rgb.b;
num++;
}
if(num == 0){
total = {r: 33, g: 74, b: 48};
num = 1;
}
let color = noiseify({r: Math.min(Math.max(total.r/num, 0), 255), g: Math.min(Math.max(total.g/num, 0), 255), b: Math.min(Math.max(total.b/num, 0), 255)}, 6);
pixel.color = color;
} else {
pixel.targetElems.push(elem);
let total = {r: 0, g: 0, b: 0};
let num = 0;
for(let elem of pixel.targetElems){
let c = getItem(elements[elem].color);
let rgb = getRGB(c);
total.r += rgb.r, total.g += rgb.g, total.b += rgb.b;
num++;
}
let color = noiseify({r: Math.min(Math.max(total.r/num, 0), 255), g: Math.min(Math.max(total.g/num, 0), 255), b: Math.min(Math.max(total.b/num, 0), 255)}, 6);
pixel.color = color;
}
pixel.cooldown = 20;
}
},
tick: function(pixel){
//if(pixel.p != null && pixel.p.del){pixel.p = null};
pixel.cooldown -= (pixel.cooldown > 0) ? 1 : 0;
for(let coords of adjacentCoords){
let p2 = getPixel(coords[0]+pixel.x, coords[1]+pixel.y);
if(p2 != null){
if(pixel.targetElems.includes(p2.element) && pixel.p == null && elements[p2.element].movable){
deletePixel(coords[0]+pixel.x, coords[1]+pixel.y);
pixel.p = p2;
pixel.dir = coords;
}
} else if (p2 == null && pixel.p != null && pixel.dir != coords){
delete pixel.p.del;
//pixel.p.del = false;
pixel.p.x = coords[0]+pixel.x, pixel.p.y = coords[1]+pixel.y;
pixelMap[coords[0]+pixel.x][coords[1]+pixel.y] = pixel.p;
currentPixels.push(pixel.p);
pixel.p = null;
}
if (p2?.element == "morechem_filter" && p2.p == undefined && pixel.p != undefined && Math.random() < 0.25 && pixel.dir != coords){
p2.p = pixel.p;
p2.dir = coords;
pixel.p = null;
pixel.dir = undefined;
}
if (p2?.element == "pipe" && !p2?.con && pixel.p != null && pixel.dir != coords){
p2.con = pixel.p;
p2.con.x = p2.x;
p2.con.y = p2.y;
pixel.p = null;
}
}
}
};
elements.hydrogen_peroxide = {
solubility: {water: 1},
reactions: {
copper: {elem1: "water", elem2: "oxidized_copper", chance: 0.05},
iron: {elem1: "water", elem2: "rust", chance: 0.05},
},
behavior: behaviors.LIQUID,
category: "liquids",
solInfo: "oxidizer",
color: ["#316be8", "#356ee8", "#3570f0", "#3c71e6"],
};
}, true);

View File

@ -1,6 +1,6 @@
/*
*Version 1.0.0
*/
function noiseify(color, range){
if(color.startsWith("#")){
color = hexToRGB(color);
@ -18,10 +18,17 @@ function is2d(arr){
return arr.some(item => Array.isArray(item));
}
function colorMix(p1, p2, bias = 0.5){
function colorMix(p1, p2, bias = 0.5, condition = undefined){
if(condition != undefined && condition(p1,p2)){
c1 = p1.color;
p1.color = interpolateRgb(getRGB(p1.color), getRGB(p2.color), bias);
p2.color = interpolateRgb(getRGB(c1), getRGB(p2.color), bias);
} else {
c1 = p1.color;
p1.color = interpolateRgb(getRGB(p1.color), getRGB(p2.color), bias);
p2.color = interpolateRgb(getRGB(c1), getRGB(p2.color), bias);
}
}
function interpolateRgb(rgb1, rgb2, ratio = 0.5) {
@ -68,3 +75,15 @@ function pixelToggle(pixel, multi = {r:1,g:1,b:1}){
function normalize(obj){
return `rgb(${obj.r},${obj.g},${obj.b})`;
}
let mixConditions = {
ifDifferent: function(p1,p2){
let res = false;
let rgb1 = getRGB(p1.color), rgb2 = getRGB(p2.color);
for(let key in rgb1){
if(rgb1[key] < rgb2[key]+6 || rgb1[key] > rgb2[key]-6){
res = true;
}
}
return res;
}
};

View File

@ -1,61 +1,10 @@
/*
*Version 2.2.1
*/
let plants;
dependOn("orchidslibrary.js", ()=>{
class growInterval {
constructor(seedPixel, pattern, basePos, c = 0.025, dieAfter = undefined, fruit = undefined, elems = undefined){
let currentLength = 0;
let chance = c;
let pos = basePos;
let interval = setInterval(()=>{
if(currentLength == pattern.length || seedPixel == undefined){
clearInterval(interval);
} else {
let x = pos[0]+pattern[currentLength][0], y = pos[1]+pattern[currentLength][1];
if(Math.random()<chance && isEmpty(x,y) && !outOfBounds(x,y) && !paused){
let elem = (elems != undefined && elems[currentLength] != undefined) ? elems[currentLength] : (elems != undefined) ? elems[0] : "fruit_leaves";
createPixel((elem == "flower") ? "fruit_leaves" : elem, x, y);
pixelMap[x][y].noBloom = (elem == "flower") ? false : true;
pixelMap[x][y].blooming = (elem == "flower");
pixelMap[x][y].fruit = fruit;
if(elem == "fruit_leaves"){
pixelMap[x][y].dieAfter = dieAfter;
}
currentLength++;
} else if (!isEmpty(x,y) && !outOfBounds(x,y)){
if(eLists.SOIL.includes(pixelMap[x][y].element)){
deletePixel(x,y);
let elem = (elems != undefined && elems[currentLength] != undefined) ? elems[currentLength] : (elems != undefined) ? elems[0] : "fruit_leaves";
createPixel((elem == "flower") ? "fruit_leaves" : elem, x, y);
pixelMap[x][y].noBloom = (elem == "flower") ? false : true;
pixelMap[x][y].blooming = (elem == "flower");
pixelMap[x][y].fruit = fruit;
if(elem == "fruit_leaves"){
pixelMap[x][y].dieAfter = dieAfter;
}
}
currentLength++;
}
}
}, 1000/tps);
this.interval = interval;
}
}
let flowerExclude = ["pineapple"];
let vineGrow = ["wood", "rock_wall", "straw", "wall", "ewall", "bush_cane", "bush_base", "fruit_branch"];
plants = {
tree: [],
vine: ["grape", "tomato"],
bush: [],
other: ["pineapple", "watermelon", "banana", "onion"],
includes: function(target){
for(item in this){
if(this[item] && Array.isArray(this[item]) && this[item].includes(target)){return true;}
}
return false;
}
}
let growthPatterns = {
pineapple1: [[-1,-1],[-2,-2],[1,-1],[2,-2],[0,-1],[0,-2],[0,-3],[0,-4],[0,-5],[0,-6],[-1,-6],[1,-6],[-1,-5],[1,-5],[-1,-4],[1,-4],[-1,-3],[1,-3],[0,-7],[-1,-8],[1,-8]],
pineapple2: [[[-1,-1],[1,-1]],[[-2,-2],[2,-2]], [0,-1],[0,-2],[0,-3],[0,-4],[0,-5],[0,-6],[[-1,-6],[1,-6]],[[-1,-5],[1,-5]],[[-1,-4],[1,-4]],[[-1,-3],[1,-3]],[[-1,-2],[1,-2]],[0,-7],[-1,-8],[1,-8]],
@ -124,6 +73,19 @@ dependOn("orchidslibrary.js", ()=>{
}
return res;
},
cucurbit: function(r, dir, min, max){
let w = Math.round(Math.random()*(max-min))+min;
let h = Math.round(w*r);
let res = [];
let pos = [0,0];
for(let i = 0; i < w; i++){
for(let ii = 0; ii < h/2; ii++){
res.push([i, ii]);
res.push([i, ii*-1]);
}
}
return res;
}
};
let growthElems = {
pineapple1: ["fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","fruit_leaves","fruit_leaves","fruit_leaves"],
@ -141,7 +103,105 @@ dependOn("orchidslibrary.js", ()=>{
"palm_5-2":["fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","flower","flower","flower","fruit_leaves","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower"],
"coconut_5-1": ["fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","fruit_leaves"],
"coconut_5-2": ["fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","fruit_leaves","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower","flower"],
cucurbit: ["fruit_leaves"],
}
class growInterval {
constructor(seedPixel, pattern, basePos, c = 0.025, dieAfter = undefined, fruit = undefined, elems = undefined){
let currentLength = 0;
let chance = c;
let pos = basePos;
let interval = setInterval(()=>{
if(currentLength == pattern.length || seedPixel == undefined){
clearInterval(interval);
} else {
if(is2d(pattern[currentLength])){
for(let coords of pattern[currentLength]){
let x = pos[0]+coords[0], y = pos[1]+coords[1];
if(Math.random()<chance && isEmpty(x,y) && !outOfBounds(x,y) && !paused){
let elem = (elems != undefined && elems[currentLength] != undefined) ? elems[currentLength] : (elems != undefined) ? elems[0] : "fruit_leaves";
createPixel((elem == "flower") ? "fruit_leaves" : elem, x, y);
pixelMap[x][y].noBloom = (elem == "flower") ? false : true;
pixelMap[x][y].blooming = (elem == "flower");
pixelMap[x][y].fruit = fruit;
if(elem == "fruit_leaves"){
pixelMap[x][y].dieAfter = dieAfter;
}
currentLength++;
} else if (!isEmpty(x,y) && !outOfBounds(x,y)){
if(eLists.SOIL.includes(pixelMap[x][y].element)){
deletePixel(x,y);
let elem = (elems != undefined && elems[currentLength] != undefined) ? elems[currentLength] : (elems != undefined) ? elems[0] : "fruit_leaves";
createPixel((elem == "flower") ? "fruit_leaves" : elem, x, y);
pixelMap[x][y].noBloom = (elem == "flower") ? false : true;
pixelMap[x][y].blooming = (elem == "flower");
pixelMap[x][y].fruit = fruit;
if(elem == "fruit_leaves"){
pixelMap[x][y].dieAfter = dieAfter;
}
}
currentLength++;
}
}
} else {
let x = pos[0]+pattern[currentLength][0], y = pos[1]+pattern[currentLength][1];
if(Math.random()<chance && isEmpty(x,y) && !outOfBounds(x,y) && !paused){
let elem = (elems != undefined && elems[currentLength] != undefined) ? elems[currentLength] : (elems != undefined) ? elems[0] : "fruit_leaves";
createPixel((elem == "flower") ? "fruit_leaves" : elem, x, y);
pixelMap[x][y].noBloom = (elem == "flower") ? false : true;
pixelMap[x][y].blooming = (elem == "flower");
pixelMap[x][y].fruit = fruit;
if(elem == "fruit_leaves"){
pixelMap[x][y].dieAfter = dieAfter;
}
currentLength++;
} else if (!isEmpty(x,y) && !outOfBounds(x,y)){
if(eLists.SOIL.includes(pixelMap[x][y].element)){
deletePixel(x,y);
let elem = (elems != undefined && elems[currentLength] != undefined) ? elems[currentLength] : (elems != undefined) ? elems[0] : "fruit_leaves";
createPixel((elem == "flower") ? "fruit_leaves" : elem, x, y);
pixelMap[x][y].noBloom = (elem == "flower") ? false : true;
pixelMap[x][y].blooming = (elem == "flower");
pixelMap[x][y].fruit = fruit;
if(elem == "fruit_leaves"){
pixelMap[x][y].dieAfter = dieAfter;
}
}
currentLength++;
}
}
}
}, 1000/tps);
this.interval = interval;
}
}
dependOn("orchidslibrary.js", ()=>{
let flowerExclude = ["pineapple"];
let vineGrow = ["wood", "rock_wall", "straw", "wall", "ewall", "bush_cane", "bush_base", "fruit_branch"];
plants = {
tree: [],
vine: ["grape", "tomato"],
bush: [],
other: ["pineapple", "watermelon", "banana", "onion"],
includes: function(target){
for(item in this){
if(this[item] && Array.isArray(this[item]) && this[item].includes(target)){return true;}
}
return false;
},
get all(){
let res = [];
for(let key in plants){
if(key != "all" && Array.isArray(plants[key])){
for(let plant of plants[key]){
res.push(plant);
}
}
}
return res;
}
}
let ethyleneChance = {
tomato: 0.000055,
orange: 0.000005,
@ -247,6 +307,8 @@ dependOn("orchidslibrary.js", ()=>{
type: "fruit",
};
isFood = true;
tempHigh = 65;
stateHigh = ["sugar", "dead_plant", "dead_plant", "dead_plant"];
constructor(name, colour, jColour, type = "tree", sColour = false, extract = false, low = false){
this.properties.fruit = name;
this.color = colour;
@ -483,6 +545,9 @@ dependOn("orchidslibrary.js", ()=>{
dir: [1,1],
bloomColor: "#FFE2E2",
},
hoverStat: function(pixel){
return pixel?.fruit || "NONE";
},
tick: function(pixel){
if(pixel.dieAfter != undefined){
let chance = (pixel.age-pixel.dieAfter)/150;
@ -589,9 +654,19 @@ dependOn("orchidslibrary.js", ()=>{
if(pixelTicks > pixel.start + 150){
if(Math.random() < chance){
if(pixel.fruit){
if(pixel.fruit == "random"){
changePixel(pixel, fruits[Math.floor(Math.random() * fruits.length)]);
} else {
if(pixel.fruit == "randomfruit"){
all = plants.all;
let elem = all[Math.round(Math.random()*all.length)];
while(elem == undefined || elements[elem] == undefined){
elem = all[Math.round(Math.random()*all.length)]
}
changePixel(pixel, elem);
}
if (pixel.pattern && pixel.growthPattern == false) {
pixel.blooming = false;
pixel.growthPattern = true;
} else if(pixel.fruit != "randomfruit") {
let c = (pixel.offspringColor) ? pixel.offspringColor : undefined;
changePixel(pixel, pixel.fruit);
if(c != undefined){
@ -622,7 +697,7 @@ dependOn("orchidslibrary.js", ()=>{
}
}
}
} else if(pixel.growthStage < growthPatterns[pixel.pattern].length) {
} else if(pixel.growthStage < [pixel.pattern].length) {
let x = pixel.x+(value[0]*pixel.dir[0]), y = pixel.y+(value[1]*pixel.dir[1]);
if(isEmpty(x,y) && !outOfBounds(x,y)){
if(growthElems[pixel.pattern][pixel.growthStage] == "flower"){
@ -835,7 +910,7 @@ dependOn("orchidslibrary.js", ()=>{
for(let i = 0; i < squareCoords.length; i++){
let x = pixel.x+squareCoords[i][0], y = pixel.y+squareCoords[i][1];
if(!isEmpty(x,y) && !outOfBounds(x,y) && pixelMap[x][y].element == pixel.element && Math.random() < 0.005){
colorMix(pixel, pixelMap[x][y]);
colorMix(pixel, pixelMap[x][y], 0.5, mixConditions.ifDifferent);
}
}
}
@ -843,7 +918,7 @@ dependOn("orchidslibrary.js", ()=>{
for(let i = 0; i < squareCoords.length; i++){
let x = pixel.x+squareCoords[i][0], y = pixel.y+squareCoords[i][1];
if(!isEmpty(x,y) && !outOfBounds(x,y) && pixelMap[x][y].element == pixel.element && Math.random() < 0.5){
colorMix(pixel, pixelMap[x][y]);
colorMix(pixel, pixelMap[x][y], 0.5, mixConditions.ifDifferent);
}
}
}
@ -851,7 +926,7 @@ dependOn("orchidslibrary.js", ()=>{
for(let i = 0; i < squareCoords.length; i++){
let x = pixel.x+squareCoords[i][0], y = pixel.y+squareCoords[i][1];
if(!isEmpty(x,y) && !outOfBounds(x,y) && pixelMap[x][y].element == pixel.element && Math.random() < 0.005){
colorMix(pixel, pixelMap[x][y]);
colorMix(pixel, pixelMap[x][y], 0.5, mixConditions.ifDifferent);
}
}
}
@ -859,7 +934,7 @@ dependOn("orchidslibrary.js", ()=>{
for(let i = 0; i < squareCoords.length; i++){
let x = pixel.x+squareCoords[i][0], y = pixel.y+squareCoords[i][1];
if(!isEmpty(x,y) && !outOfBounds(x,y) && pixelMap[x][y].element == pixel.element && Math.random() < 0.5){
colorMix(pixel, pixelMap[x][y]);
colorMix(pixel, pixelMap[x][y], 0.5, mixConditions.ifDifferent);
}
}
}
@ -868,8 +943,8 @@ dependOn("orchidslibrary.js", ()=>{
let rgb = interpolateRgb(getRGB(p1.color), getRGB(p2.color), 0.25);
changePixel(p1, "fruit_milk");
changePixel(p2, "fruit_milk");
p1.color = rgb;
p2.color = rgb;
p1.color = noiseify(rgb, 6);
p2.color = noiseify(rgb, 6);
}
};
elements.juice.reactions.carbon_dioxide = { func: function(p1,p2){
@ -1156,6 +1231,9 @@ dependOn("orchidslibrary.js", ()=>{
}
}
elements.unripe_fruit = {
desc: "Poisonous unripe fruit.",
tempHigh: 60,
stateHigh: "dead_plant",
category: "life",
breakInto: ["poison", "sugar_water", "dirty_water"],
color: ["#7ed934", "#78d42c", "#7cdb2e", "#7bde2a"],
@ -1172,6 +1250,9 @@ dependOn("orchidslibrary.js", ()=>{
}
}
elements.pineapple = {
tempHigh: 140,
stateHigh: "dead_plant",
desc: "The multiple fruit of the Ananas Cosmosus plant, a bromeliad. Known for its acidity and sweet, tropical flavour, this fruit contains bromelain, an enzyme that can and will digest your mouth.",
category: "food",
breakInto: "juice",
bloomColor: ["#ff6682", "#ff6e88", "#ff6198", "#de73a5"],
@ -1180,6 +1261,9 @@ dependOn("orchidslibrary.js", ()=>{
isFood: true,
}
elements.sugarcane = {
desc: "The canes of Saccharum species, a member of the grass family. The stalks are rich in sucrose, so sugar can be extracted from it.",
tempHigh: 110,
stateHigh: "dead_plant",
category: "life",
extract: "sugar_water",
color: ["#60d10f", "#5abf11", "#66cc1d", "#78ed24"],
@ -1213,6 +1297,8 @@ dependOn("orchidslibrary.js", ()=>{
}
}
elements.sugarcane_seed = {
tempHigh: 60,
stateHigh: "dead_plant",
category: "life",
behavior: behaviors.POWDER,
color: ["#f0e07a", "#e0d277", "#e3ca71", "#d9ba77"],
@ -1232,7 +1318,10 @@ dependOn("orchidslibrary.js", ()=>{
elements.watermelon = new fruit("watermelon", ["#0e6614", "#065c0c", "#03700b", "#109119", "#098f12"], ["#ff4242", "#ed2f2f", "#ff2e2e", "#ed2828"]);
elements.watermelon.bloomColor = ["#e9ed11", "#f1f50a", "#fbff19", "#fbff29"];
elements.watermelon.behavior = behaviors.WALL;
elements.watermelon.desc = "The berry of Citrullus Lanatus, though quite a sizeable one at that. A Cucurbit known for its watery but sweet flesh, making it a great summer treat.";
elements.watermelon_seed = {
tempHigh: 60,
stateHigh: "dead_plant",
behavior: behaviors.POWDER,
color: ["#5e4a22", "#423417", "#241b0b", "#1f1709", "#120e05"],
category: "life",
@ -1265,6 +1354,8 @@ dependOn("orchidslibrary.js", ()=>{
}
elements.tomato.bloomColor = ["#edd93e", "#fae334", "#e6dc22", "#f5ec3d"];
elements.banana_seed = {
tempHigh: 60,
stateHigh: "dead_plant",
behavior: [['XX', 'XX', 'XX'],['XX', 'XX', 'XX'],['M2', 'M1 AND ST:wood', 'M2']],
color: ["#121211", "#121211", "#0f0f0e", "#171716"],
category: "life",
@ -1313,6 +1404,9 @@ dependOn("orchidslibrary.js", ()=>{
}
elements.dead_plant.behavior = [["XX","XX","XX"],["XX","CH:dirt%0.015","XX"],["M2","M1","M2"]];
elements.banana = {
desc: "A berry produced by members of the Musa genus, although often referred to as palms, members of this genus are actually not in the palm family, Arecaceae.",
tempHigh: 110,
stateHigh: ["dead_plant","dead_plant","dead_plant","sugar"],
category: "food",
breakInto: "juice",
bloomColor: ["#6e2942", "#63293e", "#703249", "#82314f"],
@ -1321,8 +1415,11 @@ dependOn("orchidslibrary.js", ()=>{
isFood: true,
};
elements.coconut = {
desc: "The fruit of the Cocos Nucifera palm, contains a watery beverage meny people like to drink and a solid fat.",
behavior: [['XX', 'XX', 'XX'],['XX', 'XX', 'XX'],['M2', 'M1 AND ST:wood', 'M2']],
color: ["#291706", "#382007", "#2e1905", "#361d05", "#361e06"],
tempHigh: 70,
stateHigh: "dead_plant",
category: "food",
properties: {
age: 0,
@ -1377,6 +1474,7 @@ dependOn("orchidslibrary.js", ()=>{
}
}
elements.coconut_oil = {
desc: "The fat derived from the flesh of the coconut, solid at room temperature.",
behavior: behaviors.SOLID,
color: ["#f0efed", "#edeceb", "#e6e4e3", "#ebe9e8"],
category: "food",
@ -1401,9 +1499,12 @@ dependOn("orchidslibrary.js", ()=>{
lye: {elem1: "soap", elem2: "soap"},
},
tempLow: 23,
stateLow: "coconut_oil"
stateLow: "coconut_oil",
tempHigh: 200,
stateHigh: ["stench", "smoke","smoke","smoke","dioxin"]
}
elements.coconut_water = {
desc: "The clear fluid found inside of young coconuts to sustain the endosperm during development.",
color: ["#8dd6d9", "#8cd9db", "#82d6d9"],
behavior: behaviors.LIQUID,
isFood: true,
@ -1413,7 +1514,10 @@ dependOn("orchidslibrary.js", ()=>{
stateHigh: ["sugar", "steam", "steam", "steam", "potassium_salt", "salt", "epsom_salt", "steam", "steam", "steam"]
}
elements.morning_glory_seed = {
tempHigh: 50,
stateHigh: "dead_plant",
behavior: behaviors.VINEFRUIT,
desc: "Very proliferative and potentially invasive decorative vine.",
bloomColors: [["#f783f0", "#fa8cf3", "#fa96f3", "#f590ee"], ["#8d40f7", "#9a52ff", "#8041d9", "#7e3ade"], ["#ed5365", "#f0485b", "#f55b6d", "#eb3d51"], ["#f53d49", "#fa4652", "#f54e59", "#f23a46"], ["#f53d49", "#fa8cf3", "#f55b6d", "#f23a46"]],
color: ["#5c5036", "#473e29", "#4f4631", "#fcf2b8"],
properties: {
@ -1428,14 +1532,18 @@ dependOn("orchidslibrary.js", ()=>{
while(!Array.isArray(arr)){
arr = elements.morning_glory_seed.bloomColors[Math.round(Math.random()*elements.morning_glory_seed.bloomColors.length)];
}
if(Math.random()<0.1){
arr = ["#FFE108", "#F0EC1F", "#FFD208", "#FFF754"];
}
let num = 100*(10**Math.random()/10);
let newArr = false;
let newArr = [];
for(let item of arr){
let o = item;
let rgb = hexToRGB(item);
let newRGB = {r: Math.min(255, rgb.r+num), g: Math.min(255, rgb.g+num), b: Math.min(255, rgb.b+num)};
newArr = [];
newArr[arr.indexOf(item)] = RGBToHex(newRGB);
//newArr = [];
newArr.push(RGBToHex(newRGB));
//console.log(newRGB);
}
pixel.bloomColor = (newArr) ? newArr : arr;
@ -1450,6 +1558,7 @@ dependOn("orchidslibrary.js", ()=>{
elements.apricot_seed.tempHigh = 175;
elements.apricot_seed.stateHigh = "almond";
elements.almond = {
desc: "The roasted pit of a prune closely related to apricots.",
color: ["#ab9450", "#b3994d", "#a18943", "#a18c43", "#a18d47"],
behavior: behaviors.POWDER,
state: "solid",
@ -1470,6 +1579,7 @@ dependOn("orchidslibrary.js", ()=>{
}
}
elements.almond_extract = {
desc: "Benzaldehyde-rich extracts of prunes, while called \"almond extract,\" it is often made using cherry pits.",
color: ["#cfccbe", "#d6d4c7", "#c9c7bb", "#ccc9b8"],
behavior: behaviors.LIQUID,
isFood: true,
@ -1497,9 +1607,13 @@ dependOn("orchidslibrary.js", ()=>{
}
elements.onion = {
desc: "A lilioid monocot of the Ammarylidaceae family in the asparagales order, commonly used in flavouring savoury dishes.",
tempHigh: 110,
stateHigh: "dead_plant",
category: "food",
color: ["#dbaa5a", "#cc9b4b", "#bd9048", "#faebb4", "#fcf5d9", "#f2e9c7", "#7d2d50", "#ad3d6e", "#c25182"],
state: "solid",
properties: {
age: 0,
sprouted: null,
@ -1558,6 +1672,8 @@ dependOn("orchidslibrary.js", ()=>{
color: ["#0f0f0f", "#0f0f0f", "#0a0a0a", "#0a0a0a"],
category: "life",
state: "solid",
stateHigh: "dead_plant",
tempHigh: 70,
tick: function(pixel){
let inDirt = (getPixel(pixel.x,pixel.y+1) != null && eLists.SOIL.includes(pixelMap[pixel.x][pixel.y+1].element)) ? true : false;
for(let coords of adjacentCoords){
@ -1575,6 +1691,7 @@ dependOn("orchidslibrary.js", ()=>{
elements.grape.reactions.sugar_water = {elem2: "wine", chance: 0.0006};
elements.grape.reactions.water = {elem2: "wine", chance: 0.00006};
elements.wine = {
desc: "Fermented juice, can be fermented with naturally ocurring yeast on the outside of many fruits or from lab grown yeast.",
density: 992,
color: ["#381b30", "#402137", "#261321", "#38192f"],
behavior: behaviors.LIQUID,
@ -1614,3 +1731,4 @@ dependOn("orchidslibrary.js", ()=>{
}, true);