Version 1.13.1 - December 18, 2025 - G&G Hotfix
~ This is a quick group of bug fixes and improvements following yesterday's update.
+ More Shift-Select functionality:
+ Fuse can turn into an element after charged
+ Filler can turn into an element after cloning itself
+ Heat and Cool tools can specify limits
+ Paint tool can specify a specific element to paint
+ Udder can dispense a specific element
~ Distinct border for Shift-Selected element buttons
~ Chlorine Ice kills Virus like gaseous and liquid forms
~ When window is shortened vertically, canvas will shrink to fit screen
[Bug Fixes]
~ Fixed: 2- and 4-wide brushes aren't possible with scroll wheel
~ Fixed: Tea doesn't stain Paper very well
~ Fixed: Fireflies change the color of any pixel they touch
~ Fixed: Slow Cloner can't clone more than one element with Shift-Select
~ Fixed: Slow Cloner doesn't immediately grab element
~ Fixed: E-cloners can clone Walls
~ Fixed: Outline View uses white outline with custom URL backgrounds
~ Fixed: Heaters, Coolers, and Cloners can be mixed without holding Shift
~ Fixed: Language isn't autoselected for Brazilian Portuguese or Chinese
[Technical]
+ chargePixel(pixel, amount?) helper function to easily shock a pixel
+ burnPixel(pixel) helper function to easily ignite a pixel
This commit is contained in:
parent
4dbdc48bbd
commit
342504b04c
|
|
@ -113,6 +113,33 @@
|
||||||
<p>The original <a href="https://sandboxels.R74n.com/changelog.txt">plain text version</a> of this is still maintained.</p>
|
<p>The original <a href="https://sandboxels.R74n.com/changelog.txt">plain text version</a> of this is still maintained.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h2 id="1.13.1">[Version 1.13.1 - December 18, 2025 - G&G Hotfix]</h2>
|
||||||
|
<ul>
|
||||||
|
<li>~ This is a quick group of bug fixes and improvements following yesterday's update.</li>
|
||||||
|
<li>+ More Shift-Select functionality:</li>
|
||||||
|
<li> + Fuse can turn into an element after charged</li>
|
||||||
|
<li> + Filler can turn into an element after cloning itself</li>
|
||||||
|
<li> + Heat and Cool tools can specify limits</li>
|
||||||
|
<li> + Paint tool can specify a specific element to paint</li>
|
||||||
|
<li> + Udder can dispense a specific element</li>
|
||||||
|
<li> ~ Distinct border for Shift-Selected element buttons</li>
|
||||||
|
<li>~ Chlorine Ice kills Virus like gaseous and liquid forms</li>
|
||||||
|
<li>~ When window is shortened vertically, canvas will shrink to fit screen</li>
|
||||||
|
<li>[Bug Fixes]</li>
|
||||||
|
<li>~ Fixed: 2- and 4-wide brushes aren't possible with scroll wheel</li>
|
||||||
|
<li>~ Fixed: Tea doesn't stain Paper very well</li>
|
||||||
|
<li>~ Fixed: Fireflies change the color of any pixel they touch</li>
|
||||||
|
<li>~ Fixed: Slow Cloner can't clone more than one element with Shift-Select</li>
|
||||||
|
<li>~ Fixed: Slow Cloner doesn't immediately grab element</li>
|
||||||
|
<li>~ Fixed: E-cloners can clone Walls</li>
|
||||||
|
<li>~ Fixed: Outline View uses white outline with custom URL backgrounds</li>
|
||||||
|
<li>~ Fixed: Heaters, Coolers, and Cloners can be mixed without holding Shift</li>
|
||||||
|
<li>~ Fixed: Language isn't autoselected for Brazilian Portuguese or Chinese</li>
|
||||||
|
<li>[Technical]</li>
|
||||||
|
<li>+ chargePixel(pixel, amount?) helper function to easily shock a pixel</li>
|
||||||
|
<li>+ burnPixel(pixel) helper function to easily ignite a pixel</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h2 id="1.13">[Version 1.13 - December 17, 2025 - Gizmos & Gadgets]</h2>
|
<h2 id="1.13">[Version 1.13 - December 17, 2025 - Gizmos & Gadgets]</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>+ Filter</li>
|
<li>+ Filter</li>
|
||||||
|
|
@ -146,7 +173,7 @@
|
||||||
<li>~ Drag tool is faster and smoother</li>
|
<li>~ Drag tool is faster and smoother</li>
|
||||||
<li>~ Pixelated and colorful button borders</li>
|
<li>~ Pixelated and colorful button borders</li>
|
||||||
<li>+ Translations for Swedish</li>
|
<li>+ Translations for Swedish</li>
|
||||||
<li>+ Parital translations for Japanese, Thai, Arabic, Hebrew, and Viossa</li>
|
<li>+ Partial translations for Japanese, Thai, Arabic, Hebrew, and Viossa</li>
|
||||||
<li>[Changes]</li>
|
<li>[Changes]</li>
|
||||||
<li>+ Pipes can transport pixels directly with Filter and Gate</li>
|
<li>+ Pipes can transport pixels directly with Filter and Gate</li>
|
||||||
<li>~ Pipes no longer conduct heat</li>
|
<li>~ Pipes no longer conduct heat</li>
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,31 @@ See sneak peaks for upcoming updates on the Discord: https://discord.gg/ejUc6YPQ
|
||||||
|
|
||||||
A fancier version of this changelog can be found here: https://sandboxels.R74n.com/changelog
|
A fancier version of this changelog can be found here: https://sandboxels.R74n.com/changelog
|
||||||
|
|
||||||
|
[Version 1.13.1 - December 18, 2025 - G&G Hotfix]
|
||||||
|
~ This is a quick group of bug fixes and improvements following yesterday's update.
|
||||||
|
+ More Shift-Select functionality:
|
||||||
|
+ Fuse can turn into an element after charged
|
||||||
|
+ Filler can turn into an element after cloning itself
|
||||||
|
+ Heat and Cool tools can specify limits
|
||||||
|
+ Paint tool can specify a specific element to paint
|
||||||
|
+ Udder can dispense a specific element
|
||||||
|
~ Distinct border for Shift-Selected element buttons
|
||||||
|
~ Chlorine Ice kills Virus like gaseous and liquid forms
|
||||||
|
~ When window is shortened vertically, canvas will shrink to fit screen
|
||||||
|
[Bug Fixes]
|
||||||
|
~ Fixed: 2- and 4-wide brushes aren't possible with scroll wheel
|
||||||
|
~ Fixed: Tea doesn't stain Paper very well
|
||||||
|
~ Fixed: Fireflies change the color of any pixel they touch
|
||||||
|
~ Fixed: Slow Cloner can't clone more than one element with Shift-Select
|
||||||
|
~ Fixed: Slow Cloner doesn't immediately grab element
|
||||||
|
~ Fixed: E-cloners can clone Walls
|
||||||
|
~ Fixed: Outline View uses white outline with custom URL backgrounds
|
||||||
|
~ Fixed: Heaters, Coolers, and Cloners can be mixed without holding Shift
|
||||||
|
~ Fixed: Language isn't autoselected for Brazilian Portuguese or Chinese
|
||||||
|
[Technical]
|
||||||
|
+ chargePixel(pixel, amount?) helper function to easily shock a pixel
|
||||||
|
+ burnPixel(pixel) helper function to easily ignite a pixel
|
||||||
|
|
||||||
[Version 1.13 - December 17, 2025 - Gizmos & Gadgets]
|
[Version 1.13 - December 17, 2025 - Gizmos & Gadgets]
|
||||||
+ Filter
|
+ Filter
|
||||||
+ Only allows the first element it touches to pass
|
+ Only allows the first element it touches to pass
|
||||||
|
|
@ -36,7 +61,7 @@ A fancier version of this changelog can be found here: https://sandboxels.R74n.c
|
||||||
~ Drag tool is faster and smoother
|
~ Drag tool is faster and smoother
|
||||||
~ Pixelated and colorful button borders
|
~ Pixelated and colorful button borders
|
||||||
+ Translations for Swedish
|
+ Translations for Swedish
|
||||||
+ Parital translations for Japanese, Thai, Arabic, Hebrew, and Viossa
|
+ Partial translations for Japanese, Thai, Arabic, Hebrew, and Viossa
|
||||||
[Changes]
|
[Changes]
|
||||||
+ Pipes can transport pixels directly with Filter and Gate
|
+ Pipes can transport pixels directly with Filter and Gate
|
||||||
~ Pipes no longer conduct heat
|
~ Pipes no longer conduct heat
|
||||||
|
|
|
||||||
208
index.html
208
index.html
|
|
@ -49,7 +49,7 @@
|
||||||
<meta name="twitter:creator:id" content="1436857621827530753">
|
<meta name="twitter:creator:id" content="1436857621827530753">
|
||||||
|
|
||||||
<script> // versioning info
|
<script> // versioning info
|
||||||
currentversion = "1.13";
|
currentversion = "1.13.1";
|
||||||
saveVersion = 6;
|
saveVersion = 6;
|
||||||
standalone = false;
|
standalone = false;
|
||||||
standaloneType = null;
|
standaloneType = null;
|
||||||
|
|
@ -877,10 +877,21 @@ SEEDRISE: function(pixel) {
|
||||||
"HT:2|HT:2|HT:2",
|
"HT:2|HT:2|HT:2",
|
||||||
"HT:2|HT:2|HT:2"
|
"HT:2|HT:2|HT:2"
|
||||||
],
|
],
|
||||||
|
onShiftSelect: function(element) {
|
||||||
|
promptInput("Enter a maximum temperature (Celsius).", function(r) {
|
||||||
|
r = parseFloat(r);
|
||||||
|
if (isNaN(r)) return;
|
||||||
|
currentElementProp = { max:r }
|
||||||
|
}, elemTitleCase(elements[element].name || element));
|
||||||
|
},
|
||||||
tool: function(pixel) {
|
tool: function(pixel) {
|
||||||
|
if (currentElementProp && pixel.temp >= currentElementProp.max) return;
|
||||||
|
|
||||||
if (shiftDown) {pixel.temp += elements.heat.temp+(Math.random()*elements.heat.temp*1.5)*20;}
|
if (shiftDown) {pixel.temp += elements.heat.temp+(Math.random()*elements.heat.temp*1.5)*20;}
|
||||||
else {pixel.temp += elements.heat.temp+(Math.random()*elements.heat.temp*1.5);}
|
else {pixel.temp += elements.heat.temp+(Math.random()*elements.heat.temp*1.5);}
|
||||||
pixelTempCheck(pixel);
|
pixelTempCheck(pixel);
|
||||||
|
|
||||||
|
if (currentElementProp && pixel.temp > currentElementProp.max) pixel.temp = currentElementProp.max
|
||||||
},
|
},
|
||||||
temp: 2,
|
temp: 2,
|
||||||
category: "tools",
|
category: "tools",
|
||||||
|
|
@ -895,10 +906,21 @@ SEEDRISE: function(pixel) {
|
||||||
"CO:2|CO:2|CO:2",
|
"CO:2|CO:2|CO:2",
|
||||||
"CO:2|CO:2|CO:2"
|
"CO:2|CO:2|CO:2"
|
||||||
],
|
],
|
||||||
|
onShiftSelect: function(element) {
|
||||||
|
promptInput("Enter a minimum temperature (Celsius).", function(r) {
|
||||||
|
r = parseFloat(r);
|
||||||
|
if (isNaN(r)) return;
|
||||||
|
currentElementProp = { min:r }
|
||||||
|
}, elemTitleCase(elements[element].name || element));
|
||||||
|
},
|
||||||
tool: function(pixel) {
|
tool: function(pixel) {
|
||||||
|
if (currentElementProp && pixel.temp <= currentElementProp.min) return;
|
||||||
|
|
||||||
if (shiftDown) {pixel.temp += elements.cool.temp+(Math.random()*elements.cool.temp*1.5)*20;}
|
if (shiftDown) {pixel.temp += elements.cool.temp+(Math.random()*elements.cool.temp*1.5)*20;}
|
||||||
else {pixel.temp += elements.cool.temp+(Math.random()*elements.cool.temp*1.5);}
|
else {pixel.temp += elements.cool.temp+(Math.random()*elements.cool.temp*1.5);}
|
||||||
pixelTempCheck(pixel);
|
pixelTempCheck(pixel);
|
||||||
|
|
||||||
|
if (currentElementProp && pixel.temp < currentElementProp.min) pixel.temp = currentElementProp.min;
|
||||||
},
|
},
|
||||||
temp: -2,
|
temp: -2,
|
||||||
category: "tools",
|
category: "tools",
|
||||||
|
|
@ -1078,11 +1100,7 @@ SEEDRISE: function(pixel) {
|
||||||
for (var j = 0; j < (shiftDown ? 5 : 1); j++) {
|
for (var j = 0; j < (shiftDown ? 5 : 1); j++) {
|
||||||
if (Math.random() < con) { // If random number is less than conductivity
|
if (Math.random() < con) { // If random number is less than conductivity
|
||||||
if (!pixel.charge && !pixel.chargeCD) {
|
if (!pixel.charge && !pixel.chargeCD) {
|
||||||
pixel.charge = 1;
|
chargePixel(pixel);
|
||||||
pixel.chargeStart = pixelTicks;
|
|
||||||
if (elements[pixel.element].colorOn) {
|
|
||||||
pixel.color = pixelColorPick(pixel);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (elements[pixel.element].insulate !== true) { // Otherwise heat the pixel (Resistance simulation)
|
else if (elements[pixel.element].insulate !== true) { // Otherwise heat the pixel (Resistance simulation)
|
||||||
|
|
@ -1098,7 +1116,17 @@ SEEDRISE: function(pixel) {
|
||||||
},
|
},
|
||||||
"paint": {
|
"paint": {
|
||||||
color: ["#c27070","#c29c70","#c2c270","#70c270","#70c2c2","#7070c2","#c270c2"],
|
color: ["#c27070","#c29c70","#c2c270","#70c270","#70c2c2","#7070c2","#c270c2"],
|
||||||
|
onShiftSelect: function(element) {
|
||||||
|
promptInput("Enter an element to only paint. Enter multiple elements separated by commas.", function(r) {
|
||||||
|
r = validateElementList(r);
|
||||||
|
if (!r) return;
|
||||||
|
currentElementProp = { filter:r }
|
||||||
|
}, elemTitleCase(elements[element].name || element));
|
||||||
|
},
|
||||||
tool: function(pixel) {
|
tool: function(pixel) {
|
||||||
|
if (currentElementProp && currentElementProp.filter && !currentElementProp.filter.split(",").includes(pixel.element)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (!shiftDown) {
|
if (!shiftDown) {
|
||||||
pixel.color = pixelColorPick(pixel,currentColorMap.paint)
|
pixel.color = pixelColorPick(pixel,currentColorMap.paint)
|
||||||
}
|
}
|
||||||
|
|
@ -2432,11 +2460,24 @@ SEEDRISE: function(pixel) {
|
||||||
"SH|XX|SH",
|
"SH|XX|SH",
|
||||||
"XX|SH|XX"
|
"XX|SH|XX"
|
||||||
],
|
],
|
||||||
|
// tick: function(pixel) {
|
||||||
|
// doDefaults(pixel);
|
||||||
|
// for (var i = 0; i < adjacentCoords.length; i++) {
|
||||||
|
// var coords = adjacentCoords[i];
|
||||||
|
// var x = pixel.x + coords[0];
|
||||||
|
// var y = pixel.y + coords[1];
|
||||||
|
// if (!isEmpty(x,y,true)) {
|
||||||
|
// var newPixel = pixelMap[x][y];
|
||||||
|
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// },
|
||||||
category: "machines",
|
category: "machines",
|
||||||
tempHigh: 1455.5,
|
tempHigh: 1455.5,
|
||||||
stateHigh: ["molten_steel","explosion","acid_gas"],
|
stateHigh: ["molten_steel","explosion","acid_gas"],
|
||||||
hardness: 0.8,
|
hardness: 0.8,
|
||||||
breakInto: ["metal_scrap","acid"]
|
breakInto: ["metal_scrap","acid"],
|
||||||
|
movable: false
|
||||||
},
|
},
|
||||||
"cloner": {
|
"cloner": {
|
||||||
color: "#dddd00",
|
color: "#dddd00",
|
||||||
|
|
@ -2447,7 +2488,8 @@ SEEDRISE: function(pixel) {
|
||||||
category:"machines",
|
category:"machines",
|
||||||
insulate:true,
|
insulate:true,
|
||||||
hardness: 1,
|
hardness: 1,
|
||||||
darkText: true
|
darkText: true,
|
||||||
|
movable: false
|
||||||
},
|
},
|
||||||
"sensor": {
|
"sensor": {
|
||||||
color: "#bebfa3",
|
color: "#bebfa3",
|
||||||
|
|
@ -2500,7 +2542,8 @@ SEEDRISE: function(pixel) {
|
||||||
},
|
},
|
||||||
temp: 22,
|
temp: 22,
|
||||||
category:"machines",
|
category:"machines",
|
||||||
insulate:true
|
insulate:true,
|
||||||
|
movable: false
|
||||||
},
|
},
|
||||||
"cooler": {
|
"cooler": {
|
||||||
color: "#111188",
|
color: "#111188",
|
||||||
|
|
@ -2521,7 +2564,8 @@ SEEDRISE: function(pixel) {
|
||||||
},
|
},
|
||||||
temp: 18,
|
temp: 18,
|
||||||
category:"machines",
|
category:"machines",
|
||||||
insulate:true
|
insulate:true,
|
||||||
|
movable: false
|
||||||
},
|
},
|
||||||
"random": {
|
"random": {
|
||||||
color: ["#28BCD1","#9335E6","#E13294"],
|
color: ["#28BCD1","#9335E6","#E13294"],
|
||||||
|
|
@ -2784,7 +2828,23 @@ SEEDRISE: function(pixel) {
|
||||||
},
|
},
|
||||||
"filler": {
|
"filler": {
|
||||||
color: "#ae4cd9",
|
color: "#ae4cd9",
|
||||||
behavior: behaviors.FILL,
|
onShiftSelect: behaviors.CLONER_SHIFT_SELECT,
|
||||||
|
tick: function(pixel) {
|
||||||
|
doDefaults(pixel);
|
||||||
|
|
||||||
|
for (var i = 0; i < adjacentCoords.length; i++) {
|
||||||
|
var coords = adjacentCoords[i];
|
||||||
|
var x = pixel.x + coords[0];
|
||||||
|
var y = pixel.y + coords[1];
|
||||||
|
if (isEmpty(x,y)) {
|
||||||
|
createPixel(pixel.element, x, y);
|
||||||
|
if (pixel.clone) pixelMap[x][y].clone = pixel.clone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pixel.clone !== undefined && pixelTicks - pixel.start >= 2) {
|
||||||
|
changePixel(pixel, choose(pixel.clone.split(",")));
|
||||||
|
}
|
||||||
|
},
|
||||||
category:"special",
|
category:"special",
|
||||||
excludeRandom: true,
|
excludeRandom: true,
|
||||||
reactions: {
|
reactions: {
|
||||||
|
|
@ -2794,7 +2854,8 @@ SEEDRISE: function(pixel) {
|
||||||
"positron": { elem1:"vertical" },
|
"positron": { elem1:"vertical" },
|
||||||
"plasma": { elem1:"armageddon", tempMin:500, charged:true }
|
"plasma": { elem1:"armageddon", tempMin:500, charged:true }
|
||||||
},
|
},
|
||||||
density: 1834
|
density: 1834,
|
||||||
|
movable: false
|
||||||
},
|
},
|
||||||
"lattice": {
|
"lattice": {
|
||||||
color: "#cb4cd9",
|
color: "#cb4cd9",
|
||||||
|
|
@ -3480,7 +3541,7 @@ SEEDRISE: function(pixel) {
|
||||||
pixel.emit = false;
|
pixel.emit = false;
|
||||||
}
|
}
|
||||||
behaviors.FLY(pixel,function(firefly,newfly){
|
behaviors.FLY(pixel,function(firefly,newfly){
|
||||||
if (newfly) {
|
if (newfly && newfly.element === "firefly") {
|
||||||
newfly.fff = firefly.fff;
|
newfly.fff = firefly.fff;
|
||||||
newfly.color = newfly.ffc||pixelColorPick(newfly,"#684841");
|
newfly.color = newfly.ffc||pixelColorPick(newfly,"#684841");
|
||||||
newfly.glow = false;
|
newfly.glow = false;
|
||||||
|
|
@ -4909,10 +4970,17 @@ SEEDRISE: function(pixel) {
|
||||||
},
|
},
|
||||||
"fuse": {
|
"fuse": {
|
||||||
color: "#825d38",
|
color: "#825d38",
|
||||||
|
onShiftSelect: function(element) {
|
||||||
|
promptInput("Enter an element to turn into once charged.", function(r) {
|
||||||
|
r = validateElementList(r);
|
||||||
|
if (!r) return;
|
||||||
|
currentElementProp = { clone:r }
|
||||||
|
}, elemTitleCase(elements[element].name || element));
|
||||||
|
},
|
||||||
tick: function(pixel) {
|
tick: function(pixel) {
|
||||||
doDefaults(pixel);
|
doDefaults(pixel);
|
||||||
if (pixel.charge < 1) {
|
if (pixel.charge < 1) {
|
||||||
changePixel(pixel,"flash");
|
changePixel(pixel,pixel.clone ? choose(pixel.clone.split(",")) : "flash");
|
||||||
pixel.charge = 0;
|
pixel.charge = 0;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -4981,6 +5049,7 @@ SEEDRISE: function(pixel) {
|
||||||
},
|
},
|
||||||
"udder": {
|
"udder": {
|
||||||
color: "#ecb3f5",
|
color: "#ecb3f5",
|
||||||
|
onShiftSelect: behaviors.CLONER_SHIFT_SELECT,
|
||||||
tick: function(pixel) {
|
tick: function(pixel) {
|
||||||
if (!isEmpty(pixel.x+1,pixel.y,true)) {
|
if (!isEmpty(pixel.x+1,pixel.y,true)) {
|
||||||
let pixel2 = pixelMap[pixel.x+1][pixel.y];
|
let pixel2 = pixelMap[pixel.x+1][pixel.y];
|
||||||
|
|
@ -5747,8 +5816,7 @@ SEEDRISE: function(pixel) {
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
tick: function(pixel) {
|
tick: function(pixel) {
|
||||||
if (pixel.temp > 500 && !pixel.burning) {
|
if (pixel.temp > 500 && !pixel.burning) {
|
||||||
pixel.burning = true;
|
burnPixel(pixel);
|
||||||
pixel.burnStart = pixelTicks;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
reactions: {
|
reactions: {
|
||||||
|
|
@ -7083,7 +7151,7 @@ SEEDRISE: function(pixel) {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onClicked: behaviors.CLONE_ON_CLICK,
|
onClicked: behaviors.CLONE_ON_CLICK,
|
||||||
ignore: ["cloner","slow_cloner","clone_powder","floating_cloner","wire","ewall","sensor","battery","fuse"],
|
ignore: ["cloner","slow_cloner","clone_powder","floating_cloner","wire","wall","ewall","sensor","battery","fuse"],
|
||||||
ignoreConduct:["fuse"],
|
ignoreConduct:["fuse"],
|
||||||
category:"machines",
|
category:"machines",
|
||||||
insulate:true,
|
insulate:true,
|
||||||
|
|
@ -7094,17 +7162,17 @@ SEEDRISE: function(pixel) {
|
||||||
},
|
},
|
||||||
"slow_cloner": {
|
"slow_cloner": {
|
||||||
color: "#888800",
|
color: "#888800",
|
||||||
behavior: [
|
tick: function(pixel) {
|
||||||
"XX|CF%10|XX",
|
doDefaults(pixel);
|
||||||
"CF%10|XX|CF%10",
|
behaviors.CLONER(pixel, 0.1);
|
||||||
"XX|CF%10|XX"
|
},
|
||||||
],
|
|
||||||
onClicked: behaviors.CLONE_ON_CLICK,
|
onClicked: behaviors.CLONE_ON_CLICK,
|
||||||
onShiftSelect: behaviors.CLONER_SHIFT_SELECT,
|
onShiftSelect: behaviors.CLONER_SHIFT_SELECT,
|
||||||
ignore: ["cloner","ecloner","clone_powder","floating_cloner","wall","ewall"],
|
ignore: ["cloner","ecloner","clone_powder","floating_cloner","wall","ewall"],
|
||||||
category:"machines",
|
category:"machines",
|
||||||
insulate:true,
|
insulate:true,
|
||||||
hardness: 1
|
hardness: 1,
|
||||||
|
movable: false
|
||||||
},
|
},
|
||||||
"clone_powder": {
|
"clone_powder": {
|
||||||
color: "#f0f000",
|
color: "#f0f000",
|
||||||
|
|
@ -7172,6 +7240,7 @@ SEEDRISE: function(pixel) {
|
||||||
reactions: {
|
reactions: {
|
||||||
"chlorine": { elem1:null },
|
"chlorine": { elem1:null },
|
||||||
"liquid_chlorine": { elem1:null },
|
"liquid_chlorine": { elem1:null },
|
||||||
|
"chlorine_ice": { elem1:null },
|
||||||
"light": { elem1:null, chance:0.1 },
|
"light": { elem1:null, chance:0.1 },
|
||||||
"liquid_light": { elem1:null, chance:0.1 },
|
"liquid_light": { elem1:null, chance:0.1 },
|
||||||
"electric": { elem2:"malware" }
|
"electric": { elem2:"malware" }
|
||||||
|
|
@ -10249,6 +10318,7 @@ SEEDRISE: function(pixel) {
|
||||||
state: "liquid",
|
state: "liquid",
|
||||||
density: 1001,
|
density: 1001,
|
||||||
stain: -0.1,
|
stain: -0.1,
|
||||||
|
ignore: ["paper"],
|
||||||
hidden: true,
|
hidden: true,
|
||||||
isFood: true
|
isFood: true
|
||||||
},
|
},
|
||||||
|
|
@ -11483,8 +11553,7 @@ SEEDRISE: function(pixel) {
|
||||||
behavior: behaviors.LIQUID,
|
behavior: behaviors.LIQUID,
|
||||||
tick: function(pixel) {
|
tick: function(pixel) {
|
||||||
if (!pixel.burning && pixel.temp >= 232) {
|
if (!pixel.burning && pixel.temp >= 232) {
|
||||||
pixel.burning = true;
|
burnPixel(pixel);
|
||||||
pixel.burnStart = pixelTicks;
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
reactions: {
|
reactions: {
|
||||||
|
|
@ -12645,8 +12714,7 @@ SEEDRISE: function(pixel) {
|
||||||
tool: function(pixel) {
|
tool: function(pixel) {
|
||||||
pixel.temp += 10000;
|
pixel.temp += 10000;
|
||||||
if (!pixel.burning && elements[pixel.element].burn) {
|
if (!pixel.burning && elements[pixel.element].burn) {
|
||||||
pixel.burning = true;
|
burnPixel(pixel)
|
||||||
pixel.burnStart = pixelTicks;
|
|
||||||
}
|
}
|
||||||
pixelTempCheck(pixel);
|
pixelTempCheck(pixel);
|
||||||
},
|
},
|
||||||
|
|
@ -12821,8 +12889,7 @@ SEEDRISE: function(pixel) {
|
||||||
color: "#c44f45",
|
color: "#c44f45",
|
||||||
tick: function(pixel) {
|
tick: function(pixel) {
|
||||||
if ((pixel.temp > 1000 || pixel.charge) && !pixel.burning) {
|
if ((pixel.temp > 1000 || pixel.charge) && !pixel.burning) {
|
||||||
pixel.burning = true;
|
burnPixel(pixel);
|
||||||
pixel.burnStart = pixelTicks;
|
|
||||||
}
|
}
|
||||||
if (pixel.burning) {
|
if (pixel.burning) {
|
||||||
if (!tryMove(pixel, pixel.x, pixel.y-1)) {
|
if (!tryMove(pixel, pixel.x, pixel.y-1)) {
|
||||||
|
|
@ -13523,10 +13590,7 @@ SEEDRISE: function(pixel) {
|
||||||
var x = coordsToShock[i][0];
|
var x = coordsToShock[i][0];
|
||||||
var y = coordsToShock[i][1];
|
var y = coordsToShock[i][1];
|
||||||
if (!isEmpty(x,y,true)) {
|
if (!isEmpty(x,y,true)) {
|
||||||
var newpixel = pixelMap[x][y];
|
chargePixel(pixelMap[x][y]);
|
||||||
if (elements[newpixel.element].conduct) {
|
|
||||||
newpixel.charge = 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -14077,7 +14141,11 @@ else if (!standalone && settings.lang !== null) {
|
||||||
try {
|
try {
|
||||||
// try auto-setting language
|
// try auto-setting language
|
||||||
let code = navigator.languages ? navigator.languages[0] : navigator.language;
|
let code = navigator.languages ? navigator.languages[0] : navigator.language;
|
||||||
if (code && !code.match(/^en-?/)) {
|
if (code.match(/^en-?/)) { /*do nothing*/ }
|
||||||
|
else if (code === "pt-BR") langCode = "pt_br";
|
||||||
|
else if (code === "zh-CN") langCode = "zh_cn";
|
||||||
|
else if (code === "zh-HK" || code === "zh-TW") langCode = "zh_hant";
|
||||||
|
else if (code) {
|
||||||
langCode = code.toLowerCase().split("-")[0];
|
langCode = code.toLowerCase().split("-")[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -14364,8 +14432,7 @@ function langKey(key,fallback,template) {
|
||||||
pixel.start = pixelTicks;
|
pixel.start = pixelTicks;
|
||||||
var elementInfo = elements[element];
|
var elementInfo = elements[element];
|
||||||
if (elementInfo.burning == true) {
|
if (elementInfo.burning == true) {
|
||||||
pixel.burning = true;
|
burnPixel(pixel);
|
||||||
pixel.burnStart = pixelTicks;
|
|
||||||
}
|
}
|
||||||
else if (pixel.burning && !elementInfo.burn) {
|
else if (pixel.burning && !elementInfo.burn) {
|
||||||
delete pixel.burning;
|
delete pixel.burning;
|
||||||
|
|
@ -14564,6 +14631,27 @@ function langKey(key,fallback,template) {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
function chargePixel(pixel,amount=1) {
|
||||||
|
var con = elements[pixel.element].conduct;
|
||||||
|
if (con !== undefined) {
|
||||||
|
if (Math.random() < con) { // If random number is less than conductivity
|
||||||
|
if (elements[pixel.element].ignore && elements[pixel.element].ignore.indexOf(pixel.element) !== -1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!pixel.charge && !pixel.chargeCD) {
|
||||||
|
pixel.charge = amount;
|
||||||
|
if (elements[pixel.element].colorOn) {
|
||||||
|
pixel.color = pixelColorPick(pixel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function burnPixel(pixel) {
|
||||||
|
if (!elements[pixel.element].burn || pixel.burning) return;
|
||||||
|
pixel.burning = true;
|
||||||
|
pixel.burnStart = pixelTicks;
|
||||||
|
}
|
||||||
function pixelDistance(x1, y1, x2, y2) {
|
function pixelDistance(x1, y1, x2, y2) {
|
||||||
let a = x1 - x2;
|
let a = x1 - x2;
|
||||||
let b = y1 - y2;
|
let b = y1 - y2;
|
||||||
|
|
@ -14932,20 +15020,10 @@ behaviorRules = {
|
||||||
"SH": function() {
|
"SH": function() {
|
||||||
if (!isEmpty(btemp.newCoords.x, btemp.newCoords.y, true)) {
|
if (!isEmpty(btemp.newCoords.x, btemp.newCoords.y, true)) {
|
||||||
var newPixel = pixelMap[btemp.newCoords.x][btemp.newCoords.y];
|
var newPixel = pixelMap[btemp.newCoords.x][btemp.newCoords.y];
|
||||||
var con = elements[newPixel.element].conduct;
|
chargePixel(newPixel, parseFloat(btemp.arg) || 1);
|
||||||
if (con !== undefined) {
|
if (btemp.arg !== null && newPixel.element !== btemp.arg) {
|
||||||
if (Math.random() < con) { // If random number is less than conductivity
|
|
||||||
if (btemp.info.ignore && btemp.info.ignore.indexOf(newPixel.element) !== -1) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!newPixel.charge && !newPixel.chargeCD && (btemp.arg === null || newPixel.element == btemp.arg)) {
|
|
||||||
newPixel.charge = (parseFloat(btemp.arg) || 1);
|
|
||||||
if (elements[newPixel.element].colorOn) {
|
|
||||||
newPixel.color = pixelColorPick(newPixel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ST": function() {
|
"ST": function() {
|
||||||
|
|
@ -15392,8 +15470,7 @@ behaviorRules = {
|
||||||
var newPixel = pixelMap[x][y];
|
var newPixel = pixelMap[x][y];
|
||||||
if (elements[newPixel.element].burn && !newPixel.burning) {
|
if (elements[newPixel.element].burn && !newPixel.burning) {
|
||||||
if (Math.floor(Math.random()*100) < elements[newPixel.element].burn) {
|
if (Math.floor(Math.random()*100) < elements[newPixel.element].burn) {
|
||||||
newPixel.burning = true;
|
burnPixel(newPixel);
|
||||||
newPixel.burnStart = pixelTicks;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (elements[newPixel.element].extinguish && elements[pixel.element].burning !== true) {
|
if (elements[newPixel.element].extinguish && elements[pixel.element].burning !== true) {
|
||||||
|
|
@ -16275,8 +16352,7 @@ behaviorRules = {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (damage > 0.75 && info.burn) {
|
if (damage > 0.75 && info.burn) {
|
||||||
pixel.burning = true;
|
burnPixel(pixel);
|
||||||
pixel.burnStart = pixelTicks;
|
|
||||||
}
|
}
|
||||||
pixel.temp += damage*radius*power;
|
pixel.temp += damage*radius*power;
|
||||||
pixelTempCheck(pixel);
|
pixelTempCheck(pixel);
|
||||||
|
|
@ -17178,13 +17254,13 @@ behaviorRules = {
|
||||||
var deltaY = e.deltaY;
|
var deltaY = e.deltaY;
|
||||||
if (settings.invertscroll) {
|
if (settings.invertscroll) {
|
||||||
if (deltaY > 0) { deltaY = 1; }
|
if (deltaY > 0) { deltaY = 1; }
|
||||||
else { deltaY = -1.5; }
|
else { deltaY = -1; }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (deltaY < 0) { deltaY = 1; }
|
if (deltaY < 0) { deltaY = 1; }
|
||||||
else { deltaY = -1.5; }
|
else { deltaY = -1; }
|
||||||
}
|
}
|
||||||
mouseSize += Math.round(deltaY*1.5);
|
mouseSize += Math.round(deltaY);
|
||||||
checkMouseSize(true);
|
checkMouseSize(true);
|
||||||
}
|
}
|
||||||
function chooseElementPrompt() {
|
function chooseElementPrompt() {
|
||||||
|
|
@ -17199,6 +17275,12 @@ behaviorRules = {
|
||||||
selectCategory(elements[es].category);
|
selectCategory(elements[es].category);
|
||||||
if (shiftDown && elements[currentElement].onShiftSelect) {
|
if (shiftDown && elements[currentElement].onShiftSelect) {
|
||||||
elements[currentElement].onShiftSelect(currentElement);
|
elements[currentElement].onShiftSelect(currentElement);
|
||||||
|
if (promptState) promptState.after = function() {
|
||||||
|
if (currentElementProp) {
|
||||||
|
let btn = document.getElementById("elementButton-"+currentElement);
|
||||||
|
if (btn) btn.setAttribute("modified", "true");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
@ -17312,7 +17394,10 @@ behaviorRules = {
|
||||||
elements[currentElement].onUnselect();
|
elements[currentElement].onUnselect();
|
||||||
}
|
}
|
||||||
var e1 = document.getElementById("elementButton-"+currentElement);
|
var e1 = document.getElementById("elementButton-"+currentElement);
|
||||||
if (e1 !== null) { e1.setAttribute("current","false"); }
|
if (e1 !== null) {
|
||||||
|
e1.setAttribute("current","false");
|
||||||
|
e1.setAttribute("modified","false");
|
||||||
|
}
|
||||||
prevElement = currentElement;
|
prevElement = currentElement;
|
||||||
currentElement = element;
|
currentElement = element;
|
||||||
currentElementProp = null;
|
currentElementProp = null;
|
||||||
|
|
@ -17420,6 +17505,12 @@ behaviorRules = {
|
||||||
selectElement(this.getAttribute("element"));
|
selectElement(this.getAttribute("element"));
|
||||||
if (shiftDown && elements[currentElement].onShiftSelect) {
|
if (shiftDown && elements[currentElement].onShiftSelect) {
|
||||||
elements[currentElement].onShiftSelect(currentElement);
|
elements[currentElement].onShiftSelect(currentElement);
|
||||||
|
if (promptState) promptState.after = function() {
|
||||||
|
if (currentElementProp) {
|
||||||
|
let btn = document.getElementById("elementButton-"+currentElement);
|
||||||
|
if (btn) btn.setAttribute("modified", "true");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -19191,6 +19282,7 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
|
||||||
if (!url) return;
|
if (!url) return;
|
||||||
if (!url.startsWith("http")) url = "https://"+url;
|
if (!url.startsWith("http")) url = "https://"+url;
|
||||||
setCanvasBackground(url);
|
setCanvasBackground(url);
|
||||||
|
settings.bg = "#616161";
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
@ -19359,9 +19451,13 @@ for (var k = 0; k < b0.split(" AND ").length; k++) {
|
||||||
if (!promptState) return;
|
if (!promptState) return;
|
||||||
if (!promptState.wasPaused && paused) togglePause();
|
if (!promptState.wasPaused && paused) togglePause();
|
||||||
let handler = promptState.handler;
|
let handler = promptState.handler;
|
||||||
|
let after = promptState.after;
|
||||||
closeMenu();
|
closeMenu();
|
||||||
promptState = null;
|
promptState = null;
|
||||||
if (handler) handler(result);
|
if (handler) handler(result);
|
||||||
|
if (after) {
|
||||||
|
after();
|
||||||
|
}
|
||||||
if (promptState && showingMenu !== "prompt") {
|
if (promptState && showingMenu !== "prompt") {
|
||||||
showPromptScreen();
|
showPromptScreen();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,7 @@
|
||||||
<tr><td>classic_textures.js</td><td>Use textures from early versions of the game</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
<tr><td>classic_textures.js</td><td>Use textures from early versions of the game</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
||||||
<tr><td>color_everything.js</td><td>Allows every element to have a custom color</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
<tr><td>color_everything.js</td><td>Allows every element to have a custom color</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
||||||
<tr><td>death_count.js</td><td>Messages counting when Humans die</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
<tr><td>death_count.js</td><td>Messages counting when Humans die</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
||||||
<tr><td>devsnacks.js</td><td>Extra food ingredients and recipes; Only Tea stuff currently</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
<tr><td>devsnacks.js</td><td>Extra food ingredients and recipes</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
||||||
<tr><td>devtests.js</td><td>Experimental features from the Sandboxels developer</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
<tr><td>devtests.js</td><td>Experimental features from the Sandboxels developer</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
||||||
<tr><td>edible_everything.js</td><td>Allows every element to be mixed into Batter and Dough</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
<tr><td>edible_everything.js</td><td>Allows every element to be mixed into Batter and Dough</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
||||||
<tr><td>fools.js</td><td>Re-adds FOOLS Mode</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
<tr><td>fools.js</td><td>Re-adds FOOLS Mode</td><td><a href="https://R74n.com" class="R74nLink">R74n</a></td></tr>
|
||||||
|
|
|
||||||
13
style.css
13
style.css
|
|
@ -84,6 +84,10 @@ a:hover { text-decoration: underline; }
|
||||||
#game {
|
#game {
|
||||||
image-rendering: pixelated;
|
image-rendering: pixelated;
|
||||||
max-width: 100vw;
|
max-width: 100vw;
|
||||||
|
max-height: 100vh;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
left: 50%;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
#bottomInfoBox { /* place under the game canvas */
|
#bottomInfoBox { /* place under the game canvas */
|
||||||
margin: 1.5em 50px 0px 50px;
|
margin: 1.5em 50px 0px 50px;
|
||||||
|
|
@ -458,6 +462,9 @@ input[type="button"]:active, input[type="button"]:active:hover {
|
||||||
border-color:#5ee05e!important;
|
border-color:#5ee05e!important;
|
||||||
box-shadow: 0px 1px 15px rgba(0, 255, 0, .75);
|
box-shadow: 0px 1px 15px rgba(0, 255, 0, .75);
|
||||||
}
|
}
|
||||||
|
#controls .elementButton[modified="true"] {
|
||||||
|
border-color:#0d62ff!important;
|
||||||
|
}
|
||||||
#controls button.bright[current="true"] {
|
#controls button.bright[current="true"] {
|
||||||
color: rgba(0, 0, 0, 1);
|
color: rgba(0, 0, 0, 1);
|
||||||
}
|
}
|
||||||
|
|
@ -791,7 +798,8 @@ button, input { /*Disable double tap zoom on mobile devices*/
|
||||||
}
|
}
|
||||||
#canvasDiv {
|
#canvasDiv {
|
||||||
position:relative;
|
position:relative;
|
||||||
overflow-x:hidden
|
overflow-x:hidden;
|
||||||
|
background-color: var(--theme-opac75);
|
||||||
}
|
}
|
||||||
#colorSelector {
|
#colorSelector {
|
||||||
position:absolute;
|
position:absolute;
|
||||||
|
|
@ -1069,3 +1077,6 @@ img {
|
||||||
#controls .elementButton[current="true"]::after {
|
#controls .elementButton[current="true"]::after {
|
||||||
background: #5ee05e;
|
background: #5ee05e;
|
||||||
}
|
}
|
||||||
|
#controls .elementButton[modified="true"]::after {
|
||||||
|
background: #0d62ff;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue