Version 1.13.2 - January 11, 2026

+ Edit Mode
    ~ Moved Special tools to the edit tab
    ~ Expect more tools in the future
+ Relations - Multiple pixels as a single entity
    + Group and Ungroup tool in edit tab
    + Grouped pixels fall and move as one structure
    + Grouped pixels are ungrouped when broken or changing states
    + Grouped pixels can displace fluids (Experimental)
+ More Shift-Select functionality:
    + Battery can set a frequency to create timers
    + Image tool can set element
~ Fire begins more yellow and gets redder quicker
+ Icing (Hidden) made with Butter and Sugar
~ Liquids and Gases appear less grainy
~ Settings changes
    + Speed option in Settings to replace TPS button
    + Keybind: T to change TPS
    ~ Renamed E button to Elem button
~ Improved simulation speeds
- Removed World Gen
    ~ We recommend the PRNGworldgenlib.js mod, a much better world generator
- Removed Cheerful Mode
[Changes]
+ Escape can be pressed to cancel while drawing a line
+ Fillers can be painted and will fight other colors
+ Portals show destination lines when hovered over or selected
+ Portal In can be selected with the Elem button by typing 'Portal'
+ Lightning placed near certain elements will change color
+ Worms can break down Flour, Dough, Adobe, Paper, Confetti, Cellulose, Cheese, and Potato
+ Worms can move through Mulch
+ Radiation will radiate Batter
+ Rad Steam causes Cheese to rot
~ Filters and Gates are Acid-resistant
~ Portals no longer teleport Fuse
~ Ruler measures diagonal lines as a pixel count instead of hypotenuse
~ Unique flame colors for Nickel, Iron, and Mercury
~ Rearranged Special category
~ Opening the Info, Mods, or Settings menus will pause the game
~ Steam: All canvas sizes now stretch to the full screen width
+ Assigned densities to many solids
+ Keybind: Quote (") to toggle Edit Mode
[Bug Fixes]
~ Fixed: Dragging pixels through Filters creates ghost pixels
~ Fixed: Filters can break when transporting to Gates or Pipes
~ Fixed: Pixels are rendered in incorrect position when mixing with Pipe, Filter, or Gate
~ Fixed: Broken modded saves are loaded every bootup
~ Fixed: Precision Dot is misaligned with 2- and 4-wide brushes
~ Fixed: Portals can't transmit electricity if surrounded by pixels
~ Fixed: E-cloner can't be set to Fuse by clicking on it
~ Fixed: Some saves throw TypeError "Cannot set properties of undefined"
~ Fixed: Prop tool always unpauses after dialog
~ Fixed: Z and Backspace keys select Heat by default instead of Sand
~ Fixed: Random can't place Fire, Plasma, Ink, Bless, Rock Wall, Cold Fire, Sun, Pointer, or Art
~ Fixed: Elem dialog doesn't close if button is pressed again
~ Fixed: Wrong font when language set to Italian
~ Fixed: Magnesium melts at a much lower temperature than expected
~ Fixed: Shift-selecting Random and inputting 'random' causes errors
[Technical]
~ Note: Optimizations mean a lot of code was rewritten, please report any issues and be patient
~ Note: Don't pass an 'rgba' color to drawSquare, use the 'alpha' argument instead
+ Pixel relations system
    + Used to group pixels together
    + '_r' pixel property to identify its relation (should be an integer)
+ 'trackPaint' element property (boolean)
    + 'painted' pixel property (color code) given to these elements when painted
+ "Failed to load" message instead of hanging forever
~ 'con' contents only render if element has existing 'canContain' property
~ 'onMouseDown' element event only triggers with left clicks
~ Acid Gas 'ignore' property is now identical to Acid
~ Elements with a set density but no state are set to solid
~ Fuse no longer shows hidden element
~ Save version is now sb7
This commit is contained in:
slweeb 2026-01-11 13:52:44 -05:00
parent 3188e0249d
commit a2a3731cdd
13 changed files with 1759 additions and 1029 deletions

View File

@ -102,3 +102,130 @@
if (elements[key].breakInto[i]!==null && !elements[elements[key].breakInto]) { delete elements[key].breakInto; }
}
}
let xstart = x-1;
let ystart = y-1;
let xsize = pixelSize3;
let ysize = pixelSize3;
if (!isEmpty(x-1, y)) {
xstart ++;
xsize -= pixelSize;
}
if (!isEmpty(x+1, y)) {
xsize -= pixelSize;
}
if (!isEmpty(x, y-1)) {
ystart ++;
ysize -= pixelSize;
}
if (!isEmpty(x, y+1)) {
ysize -= pixelSize;
}
ctx.fillRect(canvasCoord(xstart), canvasCoord(y), xsize, pixelSize);
ctx.fillRect(canvasCoord(x), canvasCoord(ystart), pixelSize, ysize);
if (Math.random() < 0.5) {
let trapped = true;
for (let i = 0; i < adjacentCoords.length; i++) {
const coord = adjacentCoords[i];
const x = pixel.x + coord[0];
const y = pixel.y + coord[1];
if (!(y > height-currentSaveData.border || y < currentSaveData.border || x > width-currentSaveData.border || x < currentSaveData.border) &&
(pixelMap[x][y] === undefined ||
elements[pixelMap[x][y].element].id !== info.id)
) {
trapped = false;
break;
}
}
if (trapped === true) {
pixel.opti = pixelTicks;
return false;
}
}
function worldGen(worldtype) {
var complexity = worldtype.complexity || 20;
var heightVariance = worldtype.heightVariance || 0.5;
var baseHeight = height-(height*(worldtype.baseHeight || 0.5));
var layers = worldtype.layers || {0:"rock"};
var yoffsets = generateTerrainHeights(width,heightVariance,complexity);
// 2D world vertical generator
for (var x = 0; x <= width; x++) {
var yoffset = yoffsets[x];
var worldHeight = baseHeight+yoffset;
for (var y = 0; y <= height; y++) {
// Change element type based on y, from grass > dirt > rock > basalt
if (y > worldHeight) {
// distance from the bottom of worldHeight
var frombottom = worldHeight-(y-worldHeight);
var element = null;
for (var i in layers) {
var layer = layers[i];
if (layer[0] == 0 && yoffset < 0) {
layer[0] = yoffset;
}
if (frombottom > worldHeight*layer[0] && Math.random() < (layer[2] || 1)) {
if (elements[layer[1]]) {
element = layer[1];
break
}
}
}
if (y >= height && (currentSaveData.voidY || currentSaveData.loopY)) {
element = currentSaveData.borderElem ? null : "wall";
}
if ((x >= width || x === 0) && (currentSaveData.voidX || currentSaveData.loopX)) {
element = currentSaveData.borderElem ? null : "wall";
}
if (element) {
createPixel(element,x,y);
if (worldtype.temperature) {
pixelMap[x][y].temp = worldtype.temperature;
}
}
}
}
}
// decor
if (worldtype.decor) {
for (var i = 0; i < worldtype.decor.length; i++) {
var decor = worldtype.decor[i];
var element = decor[0];
var chance = decor[1];
for (var x = 1; x < width; x++) {
var y = decor[2] || 5;
// add or subtract worldtype.decorVariance from y
y += Math.round(Math.random()*(worldtype.decorVariance||2) - (worldtype.decorVariance||2)/2);
if (Math.random() < chance && isEmpty(x,y)) {
createPixel(element,x,y);
if (worldtype.temperature) {
pixelMap[x][y].temp = worldtype.temperature;
}
if (decor[3]) {
pixelMap[x][y].color = pixelColorPick(pixelMap[x][y],decor[3])
}
}
}
}
}
}
// Generate worldgen options
// Loop through the worldgentypes object, add the key to the #worldgenselect select as an option with the value of the key and the name of the key capitalized and underscores replaced with spaces
for (var key in worldgentypes) {
document.getElementById("worldgenselect").innerHTML += "<option value='" + key + "'>" + key.replace(/_/g, " ").replace(/\b\w/g, l => l.toUpperCase()) + "</option>";
}
if (settings["worldgen"] && !worldgentypes[settings["worldgen"]]) {
settings["worldgen"] = "off";
}

View File

@ -113,6 +113,82 @@
<p>The original <a href="https://sandboxels.R74n.com/changelog.txt">plain text version</a> of this is still maintained.</p>
</div>
<h2 id="1.13.2">[Version 1.13.2 - January 11, 2026]</h2>
<ul>
<li>+ Edit Mode</li>
<li> ~ Moved Special tools to the edit tab</li>
<li> ~ Expect more tools in the future</li>
<li>+ Relations - Multiple pixels as a single entity</li>
<li> + Group and Ungroup tool in edit tab</li>
<li> + Grouped pixels fall and move as one structure</li>
<li> + Grouped pixels are ungrouped when broken or changing states</li>
<li> + Grouped pixels can displace fluids (Experimental)</li>
<li>+ More Shift-Select functionality:</li>
<li> + Battery can set a frequency to create timers</li>
<li> + Image tool can set element</li>
<li>~ Fire begins more yellow and gets redder quicker</li>
<li>+ Icing (Hidden) made with Butter and Sugar</li>
<li>~ Liquids and Gases appear less grainy</li>
<li>~ Settings changes</li>
<li> + Speed option in Settings to replace TPS button</li>
<li> + Keybind: T to change TPS</li>
<li> ~ Renamed E button to Elem button</li>
<li>~ Improved simulation speeds</li>
<li>- Removed World Gen</li>
<li> ~ We recommend the PRNGworldgenlib.js mod, a much better world generator</li>
<li>- Removed Cheerful Mode</li>
<li>[Changes]</li>
<li>+ Escape can be pressed to cancel while drawing a line</li>
<li>+ Fillers can be painted and will fight other colors</li>
<li>+ Portals show destination lines when hovered over or selected</li>
<li>+ Portal In can be selected with the Elem button by typing 'Portal'</li>
<li>+ Lightning placed near certain elements will change color</li>
<li>+ Worms can break down Flour, Dough, Adobe, Paper, Confetti, Cellulose, Cheese, and Potato</li>
<li>+ Worms can move through Mulch</li>
<li>+ Radiation will radiate Batter</li>
<li>+ Rad Steam causes Cheese to rot</li>
<li>~ Filters and Gates are Acid-resistant</li>
<li>~ Portals no longer teleport Fuse</li>
<li>~ Ruler measures diagonal lines as a pixel count instead of hypotenuse</li>
<li>~ Unique flame colors for Nickel, Iron, and Mercury</li>
<li>~ Rearranged Special category</li>
<li>~ Opening the Info, Mods, or Settings menus will pause the game</li>
<li>~ Steam: All canvas sizes now stretch to the full screen width</li>
<li>+ Assigned densities to many solids</li>
<li>+ Keybind: Quote (") to toggle Edit Mode</li>
<li>[Bug Fixes]</li>
<li>~ Fixed: Dragging pixels through Filters creates ghost pixels</li>
<li>~ Fixed: Filters can break when transporting to Gates or Pipes</li>
<li>~ Fixed: Pixels are rendered in incorrect position when mixing with Pipe, Filter, or Gate</li>
<li>~ Fixed: Broken modded saves are loaded every bootup</li>
<li>~ Fixed: Precision Dot is misaligned with 2- and 4-wide brushes</li>
<li>~ Fixed: Portals can't transmit electricity if surrounded by pixels</li>
<li>~ Fixed: E-cloner can't be set to Fuse by clicking on it</li>
<li>~ Fixed: Some saves throw TypeError "Cannot set properties of undefined"</li>
<li>~ Fixed: Prop tool always unpauses after dialog</li>
<li>~ Fixed: Z and Backspace keys select Heat by default instead of Sand</li>
<li>~ Fixed: Random can't place Fire, Plasma, Ink, Bless, Rock Wall, Cold Fire, Sun, Pointer, or Art</li>
<li>~ Fixed: Elem dialog doesn't close if button is pressed again</li>
<li>~ Fixed: Wrong font when language set to Italian</li>
<li>~ Fixed: Magnesium melts at a much lower temperature than expected</li>
<li>~ Fixed: Shift-selecting Random and inputting 'random' causes errors</li>
<li>[Technical]</li>
<li>~ Note: Optimizations mean a lot of code was rewritten, please report any issues and be patient</li>
<li>~ Note: Don't pass an 'rgba' color to drawSquare, use the 'alpha' argument instead</li>
<li>+ Pixel relations system</li>
<li> + Used to group pixels together</li>
<li> + '_r' pixel property to identify its relation (should be an integer)</li>
<li>+ 'trackPaint' element property (boolean)</li>
<li> + 'painted' pixel property (color code) given to these elements when painted</li>
<li>+ "Failed to load" message instead of hanging forever</li>
<li>~ 'con' contents only render if element has existing 'canContain' property</li>
<li>~ 'onMouseDown' element event only triggers with left clicks</li>
<li>~ Acid Gas 'ignore' property is now identical to Acid</li>
<li>~ Elements with a set density but no state are set to solid</li>
<li>~ Fuse no longer shows hidden element</li>
<li>~ Save version is now sb7</li>
</ul>
<h2 id="1.13.1">[Version 1.13.1 - December 18, 2025 - G&amp;G Hotfix]</h2>
<ul>
<li>~ This is a quick group of bug fixes and improvements following yesterday's update.</li>

View File

@ -4,6 +4,80 @@ 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
[Version 1.13.2 - January 11, 2026]
+ Edit Mode
~ Moved Special tools to the edit tab
~ Expect more tools in the future
+ Relations - Multiple pixels as a single entity
+ Group and Ungroup tool in edit tab
+ Grouped pixels fall and move as one structure
+ Grouped pixels are ungrouped when broken or changing states
+ Grouped pixels can displace fluids (Experimental)
+ More Shift-Select functionality:
+ Battery can set a frequency to create timers
+ Image tool can set element
~ Fire begins more yellow and gets redder quicker
+ Icing (Hidden) made with Butter and Sugar
~ Liquids and Gases appear less grainy
~ Settings changes
+ Speed option in Settings to replace TPS button
+ Keybind: T to change TPS
~ Renamed E button to Elem button
~ Improved simulation speeds
- Removed World Gen
~ We recommend the PRNGworldgenlib.js mod, a much better world generator
- Removed Cheerful Mode
[Changes]
+ Escape can be pressed to cancel while drawing a line
+ Fillers can be painted and will fight other colors
+ Portals show destination lines when hovered over or selected
+ Portal In can be selected with the Elem button by typing 'Portal'
+ Lightning placed near certain elements will change color
+ Worms can break down Flour, Dough, Adobe, Paper, Confetti, Cellulose, Cheese, and Potato
+ Worms can move through Mulch
+ Radiation will radiate Batter
+ Rad Steam causes Cheese to rot
~ Filters and Gates are Acid-resistant
~ Portals no longer teleport Fuse
~ Ruler measures diagonal lines as a pixel count instead of hypotenuse
~ Unique flame colors for Nickel, Iron, and Mercury
~ Rearranged Special category
~ Opening the Info, Mods, or Settings menus will pause the game
~ Steam: All canvas sizes now stretch to the full screen width
+ Assigned densities to many solids
+ Keybind: Quote (") to toggle Edit Mode
[Bug Fixes]
~ Fixed: Dragging pixels through Filters creates ghost pixels
~ Fixed: Filters can break when transporting to Gates or Pipes
~ Fixed: Pixels are rendered in incorrect position when mixing with Pipe, Filter, or Gate
~ Fixed: Broken modded saves are loaded every bootup
~ Fixed: Precision Dot is misaligned with 2- and 4-wide brushes
~ Fixed: Portals can't transmit electricity if surrounded by pixels
~ Fixed: E-cloner can't be set to Fuse by clicking on it
~ Fixed: Some saves throw TypeError "Cannot set properties of undefined"
~ Fixed: Prop tool always unpauses after dialog
~ Fixed: Z and Backspace keys select Heat by default instead of Sand
~ Fixed: Random can't place Fire, Plasma, Ink, Bless, Rock Wall, Cold Fire, Sun, Pointer, or Art
~ Fixed: Elem dialog doesn't close if button is pressed again
~ Fixed: Wrong font when language set to Italian
~ Fixed: Magnesium melts at a much lower temperature than expected
~ Fixed: Shift-selecting Random and inputting 'random' causes errors
[Technical]
~ Note: Optimizations mean a lot of code was rewritten, please report any issues and be patient
~ Note: Don't pass an 'rgba' color to drawSquare, use the 'alpha' argument instead
+ Pixel relations system
+ Used to group pixels together
+ '_r' pixel property to identify its relation (should be an integer)
+ 'trackPaint' element property (boolean)
+ 'painted' pixel property (color code) given to these elements when painted
+ "Failed to load" message instead of hanging forever
~ 'con' contents only render if element has existing 'canContain' property
~ 'onMouseDown' element event only triggers with left clicks
~ Acid Gas 'ignore' property is now identical to Acid
~ Elements with a set density but no state are set to solid
~ Fuse no longer shows hidden element
~ Save version is now sb7
[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:

View File

@ -108,6 +108,7 @@
<tr><td>Streak view</td> <td><kbd>4</kbd></td></tr>
<tr><td>Outline view</td> <td><kbd>5</kbd></td></tr>
<tr><td>Hide canvas</td> <td><kbd>H</kbd></td></tr>
<tr><td>Change speed (TPS)</td> <td><kbd>T</kbd></td></tr>
<tr><td>Toggle GUI</td> <td><kbd>F1</kbd></td></tr>
<tr><td>Capture screenshot</td> <td><kbd>C</kbd> or <kbd>F2</kbd></td></tr>
<tr><td>Paste image or Load save file</td> <td><kbd>Ctrl</kbd> + <kbd>V</kbd> or <kbd>Drag & Drop</kbd></td></tr>
@ -129,8 +130,9 @@
<tr><td>Plus (+)</td> <td>Increase the cursor size</tr>
<tr><td>Reset</td> <td>Clear the entire canvas</tr>
<tr><td>Replace</td> <td>Override existing pixels when placing</tr>
<tr><td>E</td> <td>Select any element by name</tr>
<tr><td>TPS</td> <td>Change how fast the simulation runs (Default 30tps)</tr>
<tr><td>Elem</td> <td>Select any element by name</tr>
<tr><td>Edit</td> <td>Switch to Edit Mode and show editing tools</tr>
<!-- <tr><td>TPS</td> <td>Change how fast the simulation runs (Default 30tps)</tr> -->
<tr><td>Info</td> <td>Open the element info screen</tr>
<tr><td>Saves</td> <td>Open the Save & Load menu</tr>
<tr><td>Mods</td> <td>Open the Mod Manager</tr>

View File

@ -31,6 +31,7 @@ F or F11 = Toggle Fullscreen
4 = Streak View
5 = Outline View
H = Hide Canvas
T = Change Speed (TPS)
F1 = Toggle GUI / HUD
F2 or C = Capture Screenshot
Drag & Drop = Insert an image or load save file
@ -39,7 +40,7 @@ Ctrl + S = Open save prompt
Ctrl + Shift + S = Instant save
Ctrl + O = Load save
Ctrl + Shift + O = Reload last save
Escape = Close Menu / Clear Logs
Escape = Cancel Action / Close Menu / Clear Logs
; = Replace Mode
Shift + Mid Click = Pick Element (Copy Properties)
Shift + Button = Extra manual element controls
@ -56,8 +57,8 @@ Minus = Decrease the cursor size
Plus = Increase the cursor size
Reset = Clear the entire simulation
Replace = Override existing pixels when placing
E = Select any element by name
TPS = Change how fast the simulation runs
Elem = Select any element by name
Edit = Switch to Edit Mode and show editing tools
Info = Open the element info screen
Saves = Open the Save & Load menu
Mods = Open the Mod Manager

2312
index.html

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@ -105,7 +105,7 @@ class biome {
}
this.generate = function(seed){
autoResizeCanvas();
if(!paused){togglePause();}
// paused = true;
let fraction = seed/(2**32);
if(this.sPriority){
if(this.structures != undefined){
@ -254,7 +254,7 @@ enabledMods.forEach((item)=>{
}
});
elements.SeedGenerate = {
category: "tools",
category: "edit",
onSelect: function(){
let arr = [];
let txt = shiftDown;
@ -289,7 +289,7 @@ elements.SeedGenerate = {
}
}
elements.RandomGen = {
category: "tools",
category: "edit",
onSelect: function(){
let arr = [];
let txt = shiftDown;
@ -324,7 +324,7 @@ elements.RandomGen = {
},
}
elements.view_seed = {
category: "tools",
category: "edit",
onSelect: function(){
alert(seed);
selectElement("dirt");

View File

@ -188,6 +188,8 @@ if (elements.random) {elements.random.color = ["#3e5f8a","#a334ec","#ea96f9","#a
if (elements.pyrite) {elements.pyrite.color = ["#e8e0cb","#cdcaaf","#726a53","#8f835e","#bfb9a0"];}
if (elements.purple_gold) {elements.purple_gold.color = ["#f58fda","#d06cb5","#f58fda"];}
if (elements.acid) {elements.acid.color = ["#b5cf91","#a1ff5e","#288f2a"];}
if (elements.fire) {elements.fire.color = ["#ff6b21","#ffa600","#ff4000"];}
if (elements.cold_fire) {elements.cold_fire.color = ["#21cbff","#006aff","#00ffff"];}
for (let element in elements) {
if (elements[element].buttonColor !== undefined) delete elements[element].buttonColor;

View File

@ -218,3 +218,61 @@ elements.hue_paint = {
category: "special",
customColor: true,
}
elements.burn_powder = {
tick: function(pixel) {
if (pixelTicks - pixel.start < 30) {
doDefaults(pixel);
return;
}
if (pixelTicks - pixel.start < 30 * 2 && Math.random() < 0.95) {
doDefaults(pixel);
return;
}
behaviors.POWDER(pixel);
},
tempHigh: 30,
stateHigh: ["fire","fire","fire","ash"],
category: "special",
state: "solid",
density: 1500
}
elements.burn_fluid = {
tick: function(pixel) {
if (pixelTicks - pixel.start < 30) {
doDefaults(pixel);
return;
}
if (pixelTicks - pixel.start < 30 * 2 && Math.random() < 0.95) {
doDefaults(pixel);
return;
}
behaviors.LIQUID(pixel);
},
tempHigh: 30,
stateHigh: ["steam","smoke"],
category: "special",
state: "liquid",
density: 1000
}
elements.color_eraser = {
tool: function(pixel) {
let color1 = pixel.color.match(/\d+/g);
let pixels = floodPixels(pixel.x, pixel.y, (p) => {
if (!p.color.match(/^rgb/)) return false;
let color2 = p.color.match(/\d+/g);
if (Math.abs(color2[0] - color1[0]) < 30 &&
Math.abs(color2[1] - color1[1]) < 30 &&
Math.abs(color2[2] - color1[2]) < 30) {
return true;
}
});
pixels.forEach((p) => {
deletePixel(p.x, p.y);
})
},
category: "special"
}

View File

@ -20,6 +20,18 @@ delete canvasLayers.glowmod;
delete canvasLayers.glowmod2;
elements.fire.emit = true;
elements.fire.emitColor = "#ff6b21";
elements.fire.emitColorFunc = function(pixel) {
if (pixel.origColor === undefined) {
return pixel.color;
}
var hsl = RGBToHSL(pixel.origColor);
hsl[0] += 0.05;
hsl[0] -= (pixelTicks-pixel.start)/0.75/360;
hsl[0] = Math.max(0.025, hsl[0]);
hsl = "hsl("+(hsl[0]*360 >>> 0)+","+(hsl[1]*100 >>> 0)+"%,"+(hsl[2]*100 >>> 0)+"%)";
return hsl;
};
elements.lightning.emit = 15;
elements.electric.emit = true;
elements.positron.emit = true;
@ -32,6 +44,7 @@ elements.rainbow.emit = true;
elements.static.emit = true;
elements.flash.emit = true;
elements.cold_fire.emit = true;
elements.cold_fire.emitColor = "#21cbff";
elements.blaster.emit = true;
elements.ember.emit = true;
elements.fw_ember.emit = 10;
@ -102,7 +115,11 @@ renderEachPixel(function(pixel,ctx) {
let d = pixel.emit||elements[pixel.element].emit||true;
if (d === true) d = 5;
let r = Math.floor(d/2);
drawSquare(glowmodCtx2,elements[pixel.element].emitColor||pixel.color,pixel.x-r,pixel.y-r,d,a);
let color = elements[pixel.element].emitColor||pixel.color;
if (elements[pixel.element].emitColorFunc) {
color = elements[pixel.element].emitColorFunc(pixel);
}
drawSquare(glowmodCtx2,color,pixel.x-r,pixel.y-r,d,a);
}
if (pixel.charge && !elements[pixel.element].colorOn) {
drawSquare(glowmodCtx2,"#ffff00",pixel.x-1,pixel.y-1,3);

View File

@ -120,7 +120,7 @@ elements.cloner.ignore = elements.cloner.ignore.concat(["gold","gold_coin","molt
elements.cloner.desc = "You can only clone one element at a time!"
elements.smash.tool = function(pixel) {
if (elements[pixel.element].seed === true) { return }
if (elements[pixel.element].seed === true && pixel.element !== "cactus") { return }
if (elements[pixel.element].breakInto !== undefined || (elements[pixel.element].seed !== undefined && elements[pixel.element].seed !== true)) {
// times 0.25 if not shiftDown else 1
if (Math.random() < (elements[pixel.element].hardness || 1) * (shiftDown ? 1 : 0.25)) {

View File

@ -562,6 +562,18 @@ input[type="button"]:active, input[type="button"]:active:hover {
#elementControls {
flex-direction: column;
}
#category-tools {
display: flex;
}
#category-edit {
display: none;
flex-wrap: wrap;
margin-top: 0.5em;
margin-bottom: 0.5em;
}
#category-edit .close {
color: rgb(255, 100, 100)
}
/* Scrollbars */
@ -615,6 +627,8 @@ input[type="button"]:active, input[type="button"]:active:hover {
display: -ms-flexbox; /* TWEENER - IE 10 */
display: -webkit-flex; /* NEW - Chrome */
display:flex;
align-items: center;
justify-content: center;
}
#categoryControls button {
/* Borderless buttons */
@ -1080,3 +1094,14 @@ img {
#controls .elementButton[modified="true"]::after {
background: #0d62ff;
}
#loadingP {
text-align:center;
height:500px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
#loadingP * {
padding: 20px;
}