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:
parent
3188e0249d
commit
a2a3731cdd
127
archive.txt
127
archive.txt
|
|
@ -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";
|
||||
}
|
||||
|
|
@ -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&G Hotfix]</h2>
|
||||
<ul>
|
||||
<li>~ This is a quick group of bug fixes and improvements following yesterday's update.</li>
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2380
index.html
2380
index.html
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
}
|
||||
19
mods/glow.js
19
mods/glow.js
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
25
style.css
25
style.css
|
|
@ -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;
|
||||
}
|
||||
Loading…
Reference in New Issue