moddable views, black holes are no longer affected by maxSize

This commit is contained in:
An Orbit 2024-06-25 20:11:50 -04:00 committed by GitHub
parent 94bf5e9cea
commit 0446d3178b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 231 additions and 184 deletions

View File

@ -3249,6 +3249,36 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
return coords
};
function mouseLikeRange(x,y,size,shape="square",skipEmpties=false) {
var coords = [];
var offset = Math.trunc(size/2);
var topLeft = [x-offset,y-offset];
var bottomRight = [x+offset,y+offset];
if(size % 2 == 0) {
bottomRight[0]--;
bottomRight[1]--;
};
var exclusionFunction = shapeExclusionConditions[shape] ?? null;
if((shape !== "square") && (exclusionFunction == null)) {
logMessage(`Shape ${shape} not recognized!`)
return []
};
// Starting at the top left, go through each pixel
for (var _x = topLeft[0]; _x <= bottomRight[0]; _x++) {
for (var _y = topLeft[1]; _y <= bottomRight[1]; _y++) {
if(skipEmpties && isEmpty(_x,_y,true)) {
continue
};
if((shape !== "square") && exclusionFunction?.(_x,_y,size,x,y,topLeft,bottomRight)) {
continue
};
coords.push([_x,_y]);
}
};
return coords
};
//this part defines basically all of the keybinds
function addKeyboardListeners() {
document.addEventListener("keydown", function(e) {
@ -5117,6 +5147,197 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
//I hate overwriting drawPixels
tempScale = 1;
tempScaleOffset = 20;
normalColorFunction = function(pixel) {
var colorOut = pixel.color;
for(var sry4thelag in specialProperties) {
if(pixel[sry4thelag] !== undefined && specialProperties[sry4thelag].specialColorFunction) {
colorOut = specialProperties[sry4thelag].specialColorFunction(pixel,oldColor=colorOut)
}
}
return colorOut;
}
viewColorFunctions = { //PENIS
2: function(pixel) {
// set the color to pixel.temp, from hottest at -66 (294.1875) hue to coldest 265 hue, with the minimum being -273, max being 7755
var a0 = (settings.abszero ?? -273.15);
var temp = ((pixel.temp - tempScaleOffset) * tempScale) - tempScaleOffset;
temp = Math.min(Math.max(temp + 900,a0),55530000000000);
var hue,sat,lig;
sat = 100;
lig = 50;
if(temp <= 7755) {
hue = 265 - (Math.min(7755,temp)/6000)*265;
if (hue < 0) {hue += (360 * Math.ceil(hue / -360))}
if (temp < 0 && hue > 285) {hue = 285}
} else if(temp <= 9255) {
hue = 294.1875;
lig = 50 + (Math.max(0,temp - 7755) * (50/1500));
} else if(temp <= 11255) {
hue = 294.1875;
sat = 0;
lig = 100 - (Math.max(0,temp - 9255) * (100 / 2000));
} else if(temp <= 11755) {
hue = 265;
lig = (Math.max(0,temp - 11255) * (25 / 500));
} else if(temp <= 19510) {
hue = 265 - (Math.min(19510,Math.max(0,temp - 11755))/6000)*265;
if (hue < 0) {hue += (360 * Math.ceil(hue / -360))}
lig = 25;
} else if(temp <= 20510) {
hue = 294.1875
//lig = scale(temp,19510,20010,25,75);
//hue = scale(temp,19510,20010,294.1875,585) % 360;
sat = scale(temp,19510,20510,100,50);
lig = scale(temp,19510,20510,25,75);
} else if(temp <= 28265) {
hue = scale(temp,20510,28265,294.1875,585) % 360;
sat = 50;
lig = 75;
} else if(temp <= 29265) {
hue = 265;
sat = scale(temp,28265,29265,50,40);
lig = scale(temp,28265,29265,75,87.5);
} else if(temp <= 37020) {
hue = scale(temp,29265,37020,265,654.1875) % 360;
sat = 40;
lig = 87.5;
} else if(temp <= 39020) {
hue = 294.1875;
sat = 40;
lig = scale(temp,37020,39020,87.5,50);
} else if(temp <= 46775) { //46775
hue = scale(temp,39020,46775,294.1875,585) % 360;
sat = 40;
lig = 50;
} else if(temp <= 47775) {
hue = 265;
sat = scale(temp,46775,47775,40,20);
lig = 50;
} else if(temp <= 55530) {
hue = scale(temp,47775,55530,265,654.1875) % 360;
sat = 20;
lig = 50;
} else {
hue = 294;
sat = 20 + (12 * Math.log10(temp / 55530));
lig = 50 + (4 * Math.log10(temp / 55530));
};
return "hsl("+hue+","+sat+"%,"+lig+"%)";
},
4: function(pixel) { // smooth view, average of surrounding pixels
// E/N: i'm too scared to do smooth view
var colorlist = [];
// check adjacent coords on the pixelMap, add the color to the list if the pixel is not empty and the color indexOf "rgb" is not -1
for (var j = 0; j < biCoords.length; j++) {
var x = pixel.x + biCoords[j][0];
var y = pixel.y + biCoords[j][1];
if (isEmpty(x,y,true) || elements[pixelMap[x][y].element].state !== elements[pixel.element].state) {continue}
var color = pixelMap[x][y].color;
if (color.indexOf("rgb") !== -1) {
colorlist.push(color.match(/\d+/g));
}
}
if (colorlist.length === 0) {
return pixel.color;
}
else {
return averageRGB(colorlist);
}
},
5: function(pixel) { // velocity view
var data = elements[pixel.element];
var vx = pixel.vx ?? 0;
var vy = pixel.vy ?? 0;
/*
var pseudoVelocity = 0;
var coordsToCheck;
var behaviorCoordsToCheck;
if(Array.isArray(data.behavior)) {
switch((pixel.r ?? 0) % 4) {
default:
case 0:
coordsToCheck = [0,1];
behaviorCoordsToCheckOffset = [2,1];
break;
case 1:
coordsToCheck = [-1,0];
behaviorCoordsToCheckOffset = [1,0];
break;
case 2:
coordsToCheck = [0,-1];
behaviorCoordsToCheckOffset = [0,1];
break;
case 3:
coordsToCheck = [1,0];
behaviorCoordsToCheckOffset = [1,2];
break;
};
if(data.behavior[behaviorCoordsToCheckOffset[0]][behaviorCoordsToCheckOffset[1]] == "M1") {
if(isEmpty(pixel.x+coordsToCheck[0],pixel.y+coordsToCheck[1])) {
pseudoVelocity = 1;
} else {
if(!(isEmpty(pixel.x+behaviorCoordsToCheckOffset[0],pixel.y+behaviorCoordsToCheckOffset[1],true))) {
newPixel = pixelMap[pixel.x+behaviorCoordsToCheckOffset[0]][pixel.y+behaviorCoordsToCheckOffset[1]];
newData = elements[newPixel.element];
if(newData.id !== data.id && typeof(data.density) === "number" && typeof(newData.density) === "number") {
var chance = (data.density - newData.density)/(data.density + newData.density);
pseudoVelocity = chance
}
}
}
};
if(pseudoVelocity) {
switch((pixel.r ?? 0) % 4) {
default:
case 0:
vy += pseudoVelocity;
break;
case 1:
vx -= pseudoVelocity;
break;
case 2:
vy -= pseudoVelocity;
break;
case 3:
vx += pseudoVelocity;
break;
}
};
} else {
if(data.tick && [behaviors.POWDER,behaviors.LIQUID].includes(data.tick)) {
pseudoVelocity = 1;
} else if(data.tick == behaviors.UL_UR_OPTIMIZED) {
pseudoVelocity = -1;
} else if(pixel.element == "hail") {
pseudoVelocity = 2;
};
vy += pseudoVelocity;
};
*/
if(vx === 0 && vy === 0) {
return "rgb(15,15,15)"
} else {
var magnitude = Math.sqrt ((vx ** 2) + (vy ** 2));
var direction = Math.atan2(pixel.vy ?? 0,pixel.vx ?? 0)*180/Math.PI;
if(direction < 0) { direction = scale(direction,-180,0,360,180) };
hue = direction;
sat = 100;
lig = bound(scale(magnitude,0,100,10,100),0,100);
return "hsl("+hue+","+sat+"%,"+lig+"%)";
}
},
6: function(pixel) {
var data = elements[pixel.element] ?? elements.unknown;
var originalColor = data.colorObject;
if(Array.isArray(originalColor)) {
originalColor = randomChoice(originalColor)
};
return convertColorFormats(originalColor,"rgb");
}
};
runAfterAutogen(function() {
//rAA because velocity.js already puts its redef in a rAL and rAA comes after that
drawPixels = function(forceTick=false) {
@ -5185,184 +5406,8 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
var pixel = pixelDrawList[i];
if (pixelMap[pixel.x][pixel.y] == undefined) {continue}
if (pixel.con) { pixel = pixel.con }
if (view===null || view===3) {
var colorOut = pixel.color;
for(var sry4thelag in specialProperties) {
if(pixel[sry4thelag] !== undefined && specialProperties[sry4thelag].specialColorFunction) {
colorOut = specialProperties[sry4thelag].specialColorFunction(pixel,oldColor=colorOut)
}
}
ctx.fillStyle = colorOut;
}
else if (view === 2) { // thermal view
// set the color to pixel.temp, from hottest at -66 (294.1875) hue to coldest 265 hue, with the minimum being -273, max being 7755
var a0 = (settings.abszero ?? -273.15);
var temp = ((pixel.temp - tempScaleOffset) * tempScale) - tempScaleOffset;
temp = Math.min(Math.max(temp + 900,a0),55530000000000);
var hue,sat,lig;
sat = 100;
lig = 50;
if(temp <= 7755) {
hue = 265 - (Math.min(7755,temp)/6000)*265;
if (hue < 0) {hue += (360 * Math.ceil(hue / -360))}
if (temp < 0 && hue > 285) {hue = 285}
} else if(temp <= 9255) {
hue = 294.1875;
lig = 50 + (Math.max(0,temp - 7755) * (50/1500));
} else if(temp <= 11255) {
hue = 294.1875;
sat = 0;
lig = 100 - (Math.max(0,temp - 9255) * (100 / 2000));
} else if(temp <= 11755) {
hue = 265;
lig = (Math.max(0,temp - 11255) * (25 / 500));
} else if(temp <= 19510) {
hue = 265 - (Math.min(19510,Math.max(0,temp - 11755))/6000)*265;
if (hue < 0) {hue += (360 * Math.ceil(hue / -360))}
lig = 25;
} else if(temp <= 20510) {
hue = 294.1875
//lig = scale(temp,19510,20010,25,75);
//hue = scale(temp,19510,20010,294.1875,585) % 360;
sat = scale(temp,19510,20510,100,50);
lig = scale(temp,19510,20510,25,75);
} else if(temp <= 28265) {
hue = scale(temp,20510,28265,294.1875,585) % 360;
sat = 50;
lig = 75;
} else if(temp <= 29265) {
hue = 265;
sat = scale(temp,28265,29265,50,40);
lig = scale(temp,28265,29265,75,87.5);
} else if(temp <= 37020) {
hue = scale(temp,29265,37020,265,654.1875) % 360;
sat = 40;
lig = 87.5;
} else if(temp <= 39020) {
hue = 294.1875;
sat = 40;
lig = scale(temp,37020,39020,87.5,50);
} else if(temp <= 46775) { //46775
hue = scale(temp,39020,46775,294.1875,585) % 360;
sat = 40;
lig = 50;
} else if(temp <= 47775) {
hue = 265;
sat = scale(temp,46775,47775,40,20);
lig = 50;
} else if(temp <= 55530) {
hue = scale(temp,47775,55530,265,654.1875) % 360;
sat = 20;
lig = 50;
} else {
hue = 294;
sat = 20 + (12 * Math.log10(temp / 55530));
lig = 50 + (4 * Math.log10(temp / 55530));
};
ctx.fillStyle = "hsl("+hue+","+sat+"%,"+lig+"%)";
}
else if (view === 4) { // smooth view, average of surrounding pixels
// E/N: i'm too scared to do smooth view
var colorlist = [];
// check adjacent coords on the pixelMap, add the color to the list if the pixel is not empty and the color indexOf "rgb" is not -1
for (var j = 0; j < biCoords.length; j++) {
var x = pixel.x + biCoords[j][0];
var y = pixel.y + biCoords[j][1];
if (isEmpty(x,y,true) || elements[pixelMap[x][y].element].state !== elements[pixel.element].state) {continue}
var color = pixelMap[x][y].color;
if (color.indexOf("rgb") !== -1) {
colorlist.push(color.match(/\d+/g));
}
}
if (colorlist.length === 0) {
ctx.fillStyle = pixel.color;
}
else {
ctx.fillStyle = averageRGB(colorlist);
}
}
else if (view === 5) { // velocity view
var data = elements[pixel.element];
var vx = pixel.vx ?? 0;
var vy = pixel.vy ?? 0;
/*
var pseudoVelocity = 0;
var coordsToCheck;
var behaviorCoordsToCheck;
if(Array.isArray(data.behavior)) {
switch((pixel.r ?? 0) % 4) {
default:
case 0:
coordsToCheck = [0,1];
behaviorCoordsToCheckOffset = [2,1];
break;
case 1:
coordsToCheck = [-1,0];
behaviorCoordsToCheckOffset = [1,0];
break;
case 2:
coordsToCheck = [0,-1];
behaviorCoordsToCheckOffset = [0,1];
break;
case 3:
coordsToCheck = [1,0];
behaviorCoordsToCheckOffset = [1,2];
break;
};
if(data.behavior[behaviorCoordsToCheckOffset[0]][behaviorCoordsToCheckOffset[1]] == "M1") {
if(isEmpty(pixel.x+coordsToCheck[0],pixel.y+coordsToCheck[1])) {
pseudoVelocity = 1;
} else {
if(!(isEmpty(pixel.x+behaviorCoordsToCheckOffset[0],pixel.y+behaviorCoordsToCheckOffset[1],true))) {
newPixel = pixelMap[pixel.x+behaviorCoordsToCheckOffset[0]][pixel.y+behaviorCoordsToCheckOffset[1]];
newData = elements[newPixel.element];
if(newData.id !== data.id && typeof(data.density) === "number" && typeof(newData.density) === "number") {
var chance = (data.density - newData.density)/(data.density + newData.density);
pseudoVelocity = chance
}
}
}
};
if(pseudoVelocity) {
switch((pixel.r ?? 0) % 4) {
default:
case 0:
vy += pseudoVelocity;
break;
case 1:
vx -= pseudoVelocity;
break;
case 2:
vy -= pseudoVelocity;
break;
case 3:
vx += pseudoVelocity;
break;
}
};
} else {
if(data.tick && [behaviors.POWDER,behaviors.LIQUID].includes(data.tick)) {
pseudoVelocity = 1;
} else if(data.tick == behaviors.UL_UR_OPTIMIZED) {
pseudoVelocity = -1;
} else if(pixel.element == "hail") {
pseudoVelocity = 2;
};
vy += pseudoVelocity;
};
*/
if(vx === 0 && vy === 0) {
ctx.fillStyle = "rgb(15,15,15)"
} else {
var magnitude = Math.sqrt ((vx ** 2) + (vy ** 2));
var direction = Math.atan2(pixel.vy ?? 0,pixel.vx ?? 0)*180/Math.PI;
if(direction < 0) { direction = scale(direction,-180,0,360,180) };
hue = direction;
sat = 100;
lig = bound(scale(magnitude,0,100,10,100),0,100);
ctx.fillStyle = "hsl("+hue+","+sat+"%,"+lig+"%)";
}
}
var colorFunction = viewColorFunctions[view] ?? normalColorFunction;
ctx.fillStyle = colorFunction(pixel);
if(find) { //if find and matching, override fill style with the find coloration
if(findElement instanceof Array ? findElement.includes(pixel.element) : pixel.element === findElement) {
ctx.fillStyle = "rgb(255," + marasi(findColorPulseTimer / 10) + ",0)";
@ -5385,7 +5430,7 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
acidOffset2 = 0
};
if ((view === null || view === 4) && elements[pixel.element].isGas) {
//gas rendering
//gas rendering //PENIS
switch(mode) {
case "circles":
ctx.globalAlpha = 0.66;
@ -5517,7 +5562,8 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
2: "thermal",
3: "basic",
4: "smooth",
5: "velocity"
5: "velocity",
6: "element"
};
function setView(n) {
if (viewKey[n]) { // range of number keys with valid views
@ -8640,7 +8686,7 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
pixel.range ??= 15;
if(pixel.range <= 0) { deletePixel(pixel.x,pixel.y); return };
var range = (pixel.range ?? 15) * 2;
var targets = mouseRange(pixel.x,pixel.y,range,"circle",true);
var targets = mouseLikeRange(pixel.x,pixel.y,range,"circle",true);
shuffleArray(targets);
for (var i = 0; i < targets.length; i++) {
var newPixel = pixelMap[targets[i][0]]?.[targets[i][1]];
@ -8673,6 +8719,7 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
}
if (best) {
tryMove(newPixel, x + best[0], y + best[1], undefined, true);
if(haseuliteSpreadWhitelist.includes(newPixel.element)) { newPixel.value += ((15 + (distanceComplement / (distanceProportion ** 2))) * 3) };
heatNeighbors(newPixel,20);
pixel.temp += 20;
}
@ -8718,7 +8765,7 @@ color1 and color2 spread through striped paint like dye does with itself. <u>col
pixel.range ??= 15;
if(pixel.range <= 0) { deletePixel(pixel.x,pixel.y); return };
var range = (pixel.range ?? 30) * 2;
var targets = mouseRange(pixel.x,pixel.y,range,"circle",true);
var targets = mouseLikeRange(pixel.x,pixel.y,range,"circle",true);
shuffleArray(targets);
for (var i = 0; i < targets.length; i++) {
var newPixel = pixelMap[targets[i][0]]?.[targets[i][1]];
@ -18447,7 +18494,7 @@ Pixel size (rendering only): <input id="pixelSize"> (Use if the save looks cut o
if(pixel.oldColor === null) { pixel.oldColor = pixel.color };
if(isNaN(pixel.value)) { pixel.value = 0 };
pixel.color = lightenColor(pixel.oldColor,pixel.value / 3);
var mVal = elements[pixel.element].haseulitoidMaxValue ?? 800;
var mVal = elements[pixel.element].haseulitoidMaxValue ?? 350;
if(pixel.value >= mVal) {
var coldBoomChance = Math.max(0.008 * ((pixel.value - mVal) / (mVal * 2/7)), 0.001);
if(Math.random() < coldBoomChance) {
@ -37747,7 +37794,7 @@ Make sure to save your command in a file if you want to add this preset again.`
if(pixel.oldColor === undefined) { pixel.oldColor = pixelColorPick(pixel) };
if(pixel.oldColor === null) { pixel.oldColor = pixel.color };
pixel.color = lightenColor(pixel.oldColor,pixel.value / 3);
var mVal = elements[pixel.element].haseulitoidMaxValue ?? 350;
var mVal = elements[pixel.element].haseulitoidMaxValue ?? 800;
if(pixel.value >= mVal) {
var coldBoomChance = Math.max(0.006 * ((pixel.value - mVal) / (400/3)), 0.000075);
if(Math.random() < coldBoomChance) {