Merge pull request #275 from theenchantedsword/main

morechemistry.js v1.5.0 more machinery
This commit is contained in:
slweeb 2024-01-12 14:14:54 -05:00 committed by GitHub
commit 1b72086851
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 230 additions and 13 deletions

View File

@ -1,5 +1,19 @@
//This mod was made by Alex the transfem, https://discord.com/users/778753696804765696 on discord and https://www.tiktok.com/@alextheagenenby?_t=8hoCVI3NRhu&_r=1 on tiktok. //This mod was made by Alex the transfem, https://discord.com/users/778753696804765696 on discord and https://www.tiktok.com/@alextheagenenby?_t=8hoCVI3NRhu&_r=1 on tiktok.
//version 1.4.2: added incinerator, E-incinerator and improved mixer to be compatible with nousersthings.js and to have a range of effect. function pixelInRange(pixel, range){
let i = 0;
while (i < range.length) {
if (pixel.x === range[i][0] && pixel.y === range[i][1]) {
i++;
return true;
} else {
i++;
}
}
return false;
}
function customExplosion(pixel1, pixel2, radius, list) { function customExplosion(pixel1, pixel2, radius, list) {
let x = pixel1.x; let x = pixel1.x;
let y = pixel1.y; let y = pixel1.y;
@ -966,11 +980,129 @@ elements.morechemmixer = {
} }
}, },
tick: function(pixel) { tick: function(pixel) {
pixel.clone = `range: ${num}`; if(pixel.start == pixelTicks) {
let range = mouseRange(pixel.x, pixel.y, num); pixel.range = num;
}
let range = mouseRange(pixel.x, pixel.y, pixel.range);
mix(range); mix(range);
} }
} }
let num1 = 0;
elements.morechemsmasher = {
name: "MoreChemSmasher",
behavior: behaviors.WALL,
category: "machines",
noMix: true,
onSelect: function(pixel) {
let item = prompt("enter range for smashing.");
if(/^\d+$/.test(item)){
num1 = parseInt(item);
} else {
alert("that is not an integer.");
}
},
tick: function(pixel) {
if(pixel.start == pixelTicks) {
pixel.range = num1;
}
let range = mouseRange(pixel.x, pixel.y, pixel.range);
smash(range);
}
}
let num2 = 0;
let exclude = [];
elements.specialsmasher = {
name: "SpecialSmasher",
behavior: behaviors.WALL,
category: "machines",
noMix: true,
onSelect: function(pixel) {
let item = prompt("enter range for smashing.");
exclude = prompt("Enter elements to exclude, seperate them with commas.").replace(/\s/g, "").split(",");
if(/^\d+$/.test(item)){
num2 = parseInt(item);
} else {
alert("that is not an integer.");
}
},
tick: function(pixel) {
if(pixel.start == pixelTicks) {
pixel.range = num2;
}
let range = mouseRange(pixel.x, pixel.y, pixel.range);
smash(range, exclude);
}
}
let num3 = 0;
let exclude1 = [];
elements.specialmixer = {
name: "SpecialMixer",
behavior: behaviors.WALL,
category: "machines",
noMix: true,
onSelect: function(pixel) {
let item = prompt("enter range for mixing.");
exclude = prompt("Enter elements to exclude, seperate them with commas.").replace(/\s/g, "").split(",");
if(/^\d+$/.test(item)){
num3 = parseInt(item);
} else {
alert("that is not an integer.");
}
},
tick: function(pixel) {
if(pixel.start == pixelTicks) {
pixel.range = num3;
}
let range = mouseRange(pixel.x, pixel.y, pixel.range);
mix(range, exclude);
}
}
let num4 = 0;
let exclude2 = [];
let property1 = "";
let value2 = "";
elements.propmachine = {
name: "PropMachine",
behavior: behaviors.WALL,
category: "machines",
noMix: true,
onSelect: function(pixel) {
let item = prompt("enter range for prop changing.");
if(/^\d+$/.test(item)){
num4 = parseInt(item);
} else {
alert("that is not an integer.");
}
exclude2 = prompt("Enter elements to exclude, seperate them with commas.").replace(/\s/g, "").split(",");
exclude2.push("propmachine");
var answer1 = prompt("Warning - This tool may break the simulator if used incorrectly.\n\nEnter a pixel attribute to modify:",(currentProp||undefined));
if (!answer1) { return }
var answer2 = prompt("Now, enter a value for "+answer1+":",(currentPropValue||undefined));
if (!answer2) { return }
var valueL = answer2.toLowerCase();
if (valueL === "true") { answer2 = true }
else if (valueL === "false") { answer2 = false }
else if (valueL === "null") { answer2 = null }
else if (valueL === "undefined") { answer2 = undefined }
else if (answer1 === "color" && valueL[0] === "#") {
var rgb = hexToRGB(valueL);
answer2 = "rgb("+rgb.r+","+rgb.g+","+rgb.b+")";
}
currentProp = answer1;
var num = parseFloat(answer2);
if (!isNaN(num)) { answer2 = num }
currentPropValue = answer2;
logMessage("Prop: "+currentProp);
logMessage("Value: "+currentPropValue);
},
tick: function(pixel) {
if(pixel.start == pixelTicks) {
pixel.range = num4;
}
let range = mouseRange(pixel.x, pixel.y, pixel.range);
prop({ property: property1, value: value2 },range, exclude2);
}
}
let item = ""; let item = "";
elements.improvedsensor = { elements.improvedsensor = {
behavior: behaviors.WALL, behavior: behaviors.WALL,
@ -1064,14 +1196,42 @@ elements.incinerator = {
color: 'rgb(255, 50, 0)', color: 'rgb(255, 50, 0)',
noMix: true, noMix: true,
} }
function mix(range){ function prop(obj, range, exclude = []){
for (var i = 0; i < range.length; i++) {
if (!isEmpty(range[i][0], range[i][1], true)) {
var pixel = pixelMap[range[i][0]][range[i][1]];
if (!exclude.includes(pixel.element)){
if(/^\d+$/.test(obj.value)){
obj.value = parseInt(obj.value);
}
if (!currentProp) { return }
if (pixel[currentProp] !== undefined && typeof pixel[currentProp] !== typeof currentPropValue) {
logMessage("Error: "+currentProp+" type is "+typeof pixel[currentProp]+", not "+typeof currentPropValue+".");
currentProp = null;
currentPropValue = null;
return;
}
if (currentProp === "element") {
changePixel(pixel, currentPropValue);
return;
}
if (currentProp === "burning" && currentPropValue === "true") {
pixel.burnStart = pixelTicks;
return;
}
pixel[currentProp] = currentPropValue;
}
}
}
}
function mix(range, exclude = []){
let mixlist = []; let mixlist = [];
for (var i = 0; i < range.length; i++) { for (var i = 0; i < range.length; i++) {
var x = range[i][0]; var x = range[i][0];
var y = range[i][1]; var y = range[i][1];
if (!isEmpty(x,y,true)) { if (!isEmpty(x,y,true)) {
var pixel = pixelMap[x][y]; var pixel = pixelMap[x][y];
if (elements[pixel.element].noMix !== true || shiftDown) { if (elements[pixel.element].noMix !== true) {
mixlist.push(pixel); mixlist.push(pixel);
} }
} }
@ -1079,14 +1239,71 @@ function mix(range){
for (var i = 0; i < mixlist.length; i++) { for (var i = 0; i < mixlist.length; i++) {
var pixel1 = mixlist[Math.floor(Math.random()*mixlist.length)]; var pixel1 = mixlist[Math.floor(Math.random()*mixlist.length)];
var pixel2 = mixlist[Math.floor(Math.random()*mixlist.length)]; var pixel2 = mixlist[Math.floor(Math.random()*mixlist.length)];
swapPixels(pixel1,pixel2); if (exclude.includes(pixel1.element) || exclude.includes(pixel2.element)){
mixlist.splice(mixlist.indexOf(pixel1),1); mixlist.splice(mixlist.indexOf(pixel1),1);
mixlist.splice(mixlist.indexOf(pixel2),1); mixlist.splice(mixlist.indexOf(pixel2),1);
if (elements[pixel1.element].onMix) { } else {
elements[pixel1.element].onMix(pixel1,pixel2); swapPixels(pixel1,pixel2);
} mixlist.splice(mixlist.indexOf(pixel1),1);
if (elements[pixel2.element].onMix) { mixlist.splice(mixlist.indexOf(pixel2),1);
elements[pixel2.element].onMix(pixel2,pixel1); if (elements[pixel1.element].onMix) {
elements[pixel1.element].onMix(pixel1,pixel2);
}
if (elements[pixel2.element].onMix ) {
elements[pixel2.element].onMix(pixel2,pixel1);
}
} }
} }
} }
function smash(range, exclude = []){
let smashlist = [];
for (var i = 0; i < range.length; i++) {
var x = range[i][0];
var y = range[i][1];
if (!isEmpty(x,y,true)) {
var pixel = pixelMap[x][y];
if (elements[pixel.element].noMix !== true) {
smashlist.push(pixel);
}
}
}
for (var i = 0; i < smashlist.length; i++) {
var pixel1 = smashlist[Math.floor(Math.random()*smashlist.length)];
smashlist.splice(smashlist.indexOf(pixel1),1);
if (elements[pixel1.element].breakInto && !exclude.includes(pixel1.element)) {
if (Array.isArray(elements[pixel1.element].breakInto)){
changePixel(pixelMap[pixel1.x][pixel1.y], elements[pixel1.element].breakInto[Math.floor(Math.random()*elements[pixel1.element].breakInto.length)])
} else {
changePixel(pixelMap[pixel1.x][pixel1.y], elements[pixel1.element].breakInto)
}
}
}
}
function pull(range, pixel1, include = []){
let pulllist = [];
for (var i = 0; i < range.length; i++) {
var x = range[i][0];
var y = range[i][1];
if (!isEmpty(x,y,true)) {
var pixel = pixelMap[x][y];
if (elements[pixel.element].noMix !== true) {
pulllist.push(pixel);
}
}
}
for (var i = 0; i < pulllist.length; i++) {
var pixel = pulllist[Math.floor(Math.random()*pulllist.length)];
pulllist.splice(pulllist.indexOf(pixel),1);
if (elements[pixel.element].movable != false && include.includes(pixel.element)) {
for (var i = 0; i < pulllist.length; i++) {
if (pixelInRange(pulllist[i], range)) {
let Xdistance = pixel1.x - pixel.x;
let Ydistance = pixel1.y - pixel.y;
let newX = (Xdistance > pixel.x ? pixel.x + 3 : pixel.x + 1);
let newY = (Ydistance > pixel.y ? pixel.y + 3 : pixel.y + 1);
tryMove(pixel, newX, newY, undefined, false);
}
}
}
}
}