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){ for(let key in rgb){
rgb[key] += num; rgb[key] += num;
} }
pixel.color = `rgb(${rgb.r},${rgb.g},${rgb.b})`; pixel.color = `rgb(${rgb.r},${rgb.g},${rgb.b})`;
} }
let multi = (pixel.temp-70)/100; let multi = (pixel.temp-70)/100;
@ -982,6 +983,7 @@ dependOn("orchidslibrary.js", ()=>{
stateHigh: ["chlorine", "aluminum"], stateHigh: ["chlorine", "aluminum"],
solubility: {water: 0.458, color: ["#7a9ff0", "#7aa4ff", "#729bf2", "#6f9cfc"]}, 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.aluminum = {elem1: "hydrogen", elem2: "aluminum_chloride"};
elements.acid.reactions.purple_gold = {elem1: ["aluminum_chloride", "aluminum_chloride", "hydrogen"], elem2: "gold"}; 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"}; elements.acid.reactions.blue_gold = {elem1: ["gallium_chloride", "gallium_chloride", "hydrogen"], elem2: "gold"};
@ -1232,6 +1234,7 @@ dependOn("orchidslibrary.js", ()=>{
behavior: behaviors.LIQUID, behavior: behaviors.LIQUID,
state: "liquid", state: "liquid",
density: 1830, density: 1830,
solInfo: "acid",
reactions: { reactions: {
magnesium_carbonate: {elem1: ["carbon_dioxide", "foam","foam"], elem2: "epsom_salt"}, magnesium_carbonate: {elem1: ["carbon_dioxide", "foam","foam"], elem2: "epsom_salt"},
limestone: {elem1: ["carbon_dioxide", "foam","foam"], elem2: "hardened_gypsum"}, 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); promptInput("Enter the range of this machine:", (input)=>{elements.magnet.range = parseInt(input);}, "Magnet Range", elements.magnet.range);
}, },
onClicked: function(pixel, elem){ 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.targetElems.splice(pixel.targetElems.indexOf(elem), 1);
pixel.clickCd = 20; pixel.clickCd = 20;
} else if (elem != "unknown" && pixel.clickCd <= 0) { } else if (elem != null && pixel.clickCd <= 0) {
pixel.targetElems.push(elem); pixel.targetElems.push(elem);
pixel.clickCd = 20; pixel.clickCd = 20;
} }
if(elem == "unknown" && pixel.clickCd <= 0){ if(elem == null && pixel.clickCd <= 0){
switch(pixel.mode){ switch(pixel.mode){
case 0: case 0:
pixel.mode = 1; //attract pixel.mode = 1; //attract
@ -1513,15 +1516,17 @@ dependOn("orchidslibrary.js", ()=>{
chance = 0.000075-(Math.min((pixel.temp-250)/20, 0)*0.00005); chance = 0.000075-(Math.min((pixel.temp-250)/20, 0)*0.00005);
if(Math.random()<chance){ if(Math.random()<chance){
let colors = [ let colors = [
{r:255, g:127, b:0}, {r:150, g:80, b:80},
{r: 255, g:200, b:0}, {r: 150, g:100, b:80},
{r: 255, g:255, b:0}, {r: 150, g:140, b:80},
{r:0, g:255, b:0}, {r:125, g:150, b:80},
{r:0, g:255, b:0},
{r:0, g:255, b:255}, {r:0, g:255, b:255},
{r:0, g:0, b:255}, {r:0, g:0, b:255},
{r:255, g:0, b:255}, {r:255, g:0, b:255},
{r:255, g:0, b:70}, {r:255, g:0, b:70},
{r:255, g:105, b:0}, {r:255, g:105, b:0},
{r:150, g:80, b:110}
]; ];
let num = Math.round(Math.random()*7); let num = Math.round(Math.random()*7);
let newColorArr = []; let newColorArr = [];
@ -1546,17 +1551,19 @@ dependOn("orchidslibrary.js", ()=>{
if(Math.random()<0.005 && positions.length > 0){ if(Math.random()<0.005 && positions.length > 0){
let lowestIndex = positions.indexOf(Math.min(...positions)); let lowestIndex = positions.indexOf(Math.min(...positions));
let newPos = positions[lowestIndex]+1; let newPos = positions[lowestIndex]+1;
let coords = coordsArr[lowestIndex], colors = pixelMap[coords[0]][coords[1]].colorArr || [ let colors = [
{r:255, g:127, b:0}, {r:150, g:80, b:80},
{r: 255, g:200, b:0}, {r: 150, g:100, b:80},
{r: 255, g:255, b:0}, {r: 150, g:140, b:80},
{r:0, g:255, b:0}, {r:125, g:150, b:80},
{r:0, g:255, b:255}, {r:0, g:255, b:0},
{r:0, g:0, b:255}, {r:0, g:255, b:255},
{r:255, g:0, b:255}, {r:0, g:0, b:255},
{r:255, g:0, b:70}, {r:255, g:0, b:255},
{r:255, g:105, b:0}, {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 current = ((newPos%11)/10)*colors.length;
let currentIndex = Math.floor(current); let currentIndex = Math.floor(current);
let d = current-currentIndex; let d = current-currentIndex;
@ -1761,4 +1768,100 @@ dependOn("orchidslibrary.js", ()=>{
elements.vinegar.solubility = {water: 1}; elements.vinegar.solubility = {water: 1};
elements.nitric_acid.solubility = {water: 1}; elements.nitric_acid.solubility = {water: 1};
elements.sulfuric_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); }, true);

View File

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

File diff suppressed because it is too large Load Diff