Merge branch 'R74nCom:main' into main

This commit is contained in:
JustAGenericUsername 2024-03-03 21:55:06 +00:00 committed by GitHub
commit 64d5df630c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
18 changed files with 3119 additions and 167 deletions

View File

@ -1 +1,10 @@
Contributions to the main index.html file will be ignored. Use this repository to officially publish your Sandboxels mods.
Rules for publishing mods:
1. Must not focus on something NSFW or illegal.
2. Must be tested beforehand on your own. This repo does not accept mods for the sole purpose of you testing them.
3. Must contain some meaningful content.
Failure to follow these rules may result in your pull request being ignored!
Learn more about [submitting your mod](https://sandboxels.wiki.gg/wiki/Modding_tutorial#Putting_it_online).

6
.github/SUPPORT.md vendored
View File

@ -1,9 +1,9 @@
Controls for Sandboxels are listed underneath [the game](https://sandboxels.R74n.com).
Join our [Discord server](https://discord.gg/ejUc6YPQuS) for support, suggestions, or bug reports.
Use the [feedback form](https://sandboxels.r74n.com/feedback) linked under the game for suggestions or bug reports. You can also join our [Discord server](https://discord.gg/ejUc6YPQuS) for support and everything else.
You can also report issues on this GitHub repository [here](https://github.com/R74nCom/sandboxels/issues).
This isn't preferred, but you can also report issues on this GitHub repository [here](https://github.com/R74nCom/sandboxels/issues).
For help with creating mods, there's a channel on the Discord for that!
For help with creating mods, read the [Modding Tutorial](https://sandboxels.wiki.gg/wiki/Modding_tutorial).
For help with specific mods, the mod's creator is likely in the Discord. Ask around and you'll be directed to them.

View File

@ -272,6 +272,8 @@
<tr><td>heatglow.js</td><td>Red glowing effect for hot metals</td><td>nousernamefound</td></tr>
<tr><td>invisible_dye.js</td><td>Adds elements like Dye and Spray Paint that take the color of the background</td><td>Alice</td></tr>
<tr><td>invisible_wall.js</td><td>Adds an element like Wall that takes the color of the background</td><td>Alice</td></tr>
<tr><td>moreViews.js</td><td>Many new rendering modes</td><td>ggod</td></tr>
<tr><td>onecolor.js</td><td>Makes all placed pixels single-colored</td><td>nousernamefound</td></tr>
<tr><td>paint_event.js</td><td>Adds a random event that randomly paints a circle</td><td>Alice</td></tr>
<tr><td>rainbow_tests.js</td><td>Adds variants of the rainbow element with different maths</td><td>Alice</td></tr>
<tr><td>Shroomboxels.js</td><td>A variant of acid_and_shapes.js that uses a different trigonometric function</td><td>Alice</td></tr>

File diff suppressed because it is too large Load Diff

416
mods/combustion.js Normal file
View File

@ -0,0 +1,416 @@
elements.primer_up = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
properties: {
range: 100,
pushTime: 0,
pushLength: 5,
pushStrength: 100,
},
tick: function (pixel) {
pixel.range ??= 10;
pixel.pushTime ??= 0;
pixel.pushLength ??= 100;
pixel.pushStrength ??= 100;
if (isNaN(pixel.pushTime) || pixel.pushTime < 0) { pixel.pushTime = 0 };
if (pixel.charge) {
pixel.pushTime = pixel.pushLength;
};
if (pixel.pushTime > 0) {
for (h = 0; h < pixel.pushStrength; h++) {
for (i = (pixel.range - 1); i >= 0; i--) {
if (!isEmpty(pixel.x, pixel.y - 1 - i, true)) {
tryMove(pixelMap[pixel.x][pixel.y - 1 - i], pixel.x, pixel.y - 2 - i);
};
};
};
pixel.pushTime--;
};
doDefaults(pixel);
},
color: "#c0c0c0",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
};
elements.primer_down = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
properties: {
range: 100,
pushTime: 0,
pushLength: 5,
pushStrength: 100,
},
tick: function (pixel) {
pixel.range ??= 10;
pixel.pushTime ??= 0;
pixel.pushLength ??= 100;
pixel.pushStrength ??= 100;
if (isNaN(pixel.pushTime) || pixel.pushTime < 0) { pixel.pushTime = 0 };
if (pixel.charge) {
pixel.pushTime = pixel.pushLength;
};
if (pixel.pushTime > 0) {
for (h = 0; h < pixel.pushStrength; h++) {
for (i = (pixel.range - 1); i >= 0; i--) {
if (!isEmpty(pixel.x, pixel.y + 1 + i, true)) {
tryMove(pixelMap[pixel.x][pixel.y + 1 + i], pixel.x, pixel.y + 2 + i);
};
};
};
pixel.pushTime--;
};
doDefaults(pixel);
},
color: "#c0c0c0",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
};
elements.primer_right = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
properties: {
range: 100,
pushTime: 0,
pushLength: 5,
pushStrength: 100,
},
tick: function (pixel) {
pixel.range ??= 10;
pixel.pushTime ??= 0;
pixel.pushLength ??= 100;
pixel.pushStrength ??= 100;
if (isNaN(pixel.pushTime) || pixel.pushTime < 0) { pixel.pushTime = 0 };
if (pixel.charge) {
pixel.pushTime = pixel.pushLength;
};
if (pixel.pushTime > 0) {
for (h = 0; h < pixel.pushStrength; h++) {
for (i = (pixel.range - 1); i >= 0; i--) {
if (!isEmpty(pixel.x + 1 + i, pixel.y, true)) {
tryMove(pixelMap[pixel.x + 1 + i][pixel.y], pixel.x + 2 + i, pixel.y);
};
};
};
pixel.pushTime--;
};
doDefaults(pixel);
},
color: "#c0c0c0",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
};
elements.primer_left = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
properties: {
range: 100,
pushTime: 0,
pushLength: 5,
pushStrength: 100,
},
tick: function (pixel) {
pixel.range ??= 10;
pixel.pushTime ??= 0;
pixel.pushLength ??= 100;
pixel.pushStrength ??= 100;
if (isNaN(pixel.pushTime) || pixel.pushTime < 0) { pixel.pushTime = 0 };
if (pixel.charge) {
pixel.pushTime = pixel.pushLength;
};
if (pixel.pushTime > 0) {
for (h = 0; h < pixel.pushStrength; h++) {
for (i = (pixel.range - 1); i >= 0; i--) {
if (!isEmpty(pixel.x - 1 - i, pixel.y, true)) {
tryMove(pixelMap[pixel.x - 1 - i][pixel.y], pixel.x - 2 - i, pixel.y);
};
};
};
pixel.pushTime--;
};
doDefaults(pixel);
},
color: "#c0c0c0",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
}
elements.kerosene = {
color: "#b3b38b",
behavior: behaviors.LIQUID,
behaviorOn: [
"XX|XX|XX",
"XX|CH:fire|XX",
"XX|XX|XX",
],
conduct: 0.09,
tick: function (pixel) {
if (pixel.temp > 220 && !pixel.burning) {
pixel.burning = true;
pixel.burnStart = pixelTicks;
}
},
reactions: {
"glue": { elem2: null, chance: 0.05 },
"wax": { elem2: null, chance: 0.005 },
"melted_wax": { elem2: null, chance: 0.025 },
},
category: "liquids",
tempHigh: 2100,
stateHigh: "fire",
burn: 95,
burnTime: 2000,
burnInto: ["carbon_dioxide", "fire"],
viscosity: 3,
state: "liquid",
density: 850
}
if (!elements.hydrogen.reactions) elements.hydrogen.reactions = {};
elements.hydrogen.reactions.oxygen = { elem1: "kerosene", elem2: null }
elements.combustion_sesor = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
color: "#C70039",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
};
elements.insulation_powder= {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
color: "#00FFFF",
category: "powders",
tempHigh: 1500,
stateHigh: "molten_glass",
insulate: true,
};
elements.conductive_insulation_powder = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
color: "#FFFF00",
colorOn: "#ffffff",
category: "powders",
tempHigh: 1500,
stateHigh: "molten_glass",
insulate: true,
conduct: 1
};
elements.engine_up = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
properties: {
range: 25,
pushTime: 0,
pushLength: 2.5,
pushStrength: 100,
},
tick: function (pixel) {
pixel.range ??= 5;
pixel.pushTime ??= 0;
pixel.pushLength ??= 25;
pixel.pushStrength ??= 25;
if (isNaN(pixel.pushTime) || pixel.pushTime < 0) { pixel.pushTime = 0 };
if (pixel.charge) {
pixel.pushTime = pixel.pushLength;
};
if (pixel.pushTime > 0) {
for (h = 0; h < pixel.pushStrength; h++) {
for (i = (pixel.range - 1); i >= 0; i--) {
if (!isEmpty(pixel.x, pixel.y - 1 - i, true)) {
tryMove(pixelMap[pixel.x][pixel.y - 1 - i], pixel.x, pixel.y - 2 - i);
};
};
};
pixel.pushTime--;
};
doDefaults(pixel);
},
color: "#c0c0c0",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
};
elements.engine_down = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
properties: {
range: 25,
pushTime: 0,
pushLength: 2.5,
pushStrength: 100,
},
tick: function (pixel) {
pixel.range ??= 5;
pixel.pushTime ??= 0;
pixel.pushLength ??= 25;
pixel.pushStrength ??= 25;
if (isNaN(pixel.pushTime) || pixel.pushTime < 0) { pixel.pushTime = 0 };
if (pixel.charge) {
pixel.pushTime = pixel.pushLength;
};
if (pixel.pushTime > 0) {
for (h = 0; h < pixel.pushStrength; h++) {
for (i = (pixel.range - 1); i >= 0; i--) {
if (!isEmpty(pixel.x, pixel.y + 1 + i, true)) {
tryMove(pixelMap[pixel.x][pixel.y + 1 + i], pixel.x, pixel.y + 2 + i);
};
};
};
pixel.pushTime--;
};
doDefaults(pixel);
},
color: "#c0c0c0",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
};
elements.engine_right = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
properties: {
range: 25,
pushTime: 0,
pushLength: 2.5,
pushStrength: 25,
},
tick: function (pixel) {
pixel.range ??= 5;
pixel.pushTime ??= 0;
pixel.pushLength ??= 25;
pixel.pushStrength ??= 25;
if (isNaN(pixel.pushTime) || pixel.pushTime < 0) { pixel.pushTime = 0 };
if (pixel.charge) {
pixel.pushTime = pixel.pushLength;
};
if (pixel.pushTime > 0) {
for (h = 0; h < pixel.pushStrength; h++) {
for (i = (pixel.range - 1); i >= 0; i--) {
if (!isEmpty(pixel.x + 1 + i, pixel.y, true)) {
tryMove(pixelMap[pixel.x + 1 + i][pixel.y], pixel.x + 2 + i, pixel.y);
};
};
};
pixel.pushTime--;
};
doDefaults(pixel);
},
color: "#c0c0c0",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
};
elements.engine_left = {
behavior: behaviors.SUPPORT,
reactions: {
"fire": { "charge1": 1 }
},
properties: {
range: 25,
pushTime: 0,
pushLength: 2.5,
pushStrength: 25,
},
tick: function (pixel) {
pixel.range ??= 5;
pixel.pushTime ??= 0;
pixel.pushLength ??= 25;
pixel.pushStrength ??= 25;
if (isNaN(pixel.pushTime) || pixel.pushTime < 0) { pixel.pushTime = 0 };
if (pixel.charge) {
pixel.pushTime = pixel.pushLength;
};
if (pixel.pushTime > 0) {
for (h = 0; h < pixel.pushStrength; h++) {
for (i = (pixel.range - 1); i >= 0; i--) {
if (!isEmpty(pixel.x - 1 - i, pixel.y, true)) {
tryMove(pixelMap[pixel.x - 1 - i][pixel.y], pixel.x - 2 - i, pixel.y);
};
};
};
pixel.pushTime--;
};
doDefaults(pixel);
},
color: "#c0c0c0",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
}
elements.steam_sesor = {
behavior: behaviors.SUPPORT,
reactions: {
"steam": { "charge1": 1 }
},
color: "#0000FF",
colorOn: "#ffffff",
category: "machines",
tempHigh: 1500,
stateHigh: "molten_glass",
conduct: 1
};

85
mods/dogs.js Normal file
View File

@ -0,0 +1,85 @@
elements.dog_food = {
color: ["#402101", "#1f1001", "#2e1701", "#2b1601", "#261604"],
behavior: behaviors.STURDYPOWDER,
category: "food",
state: "solid",
tempHigh: 500,
stateHigh: "ash",
isFood: true,
};
elements.ice_cube = {
color: ["#ccf4ff", "#c6e3f5", "#b6d1f2",],
behavior: [
"XX|XX|XX",
"XX|XX|XX",
"XX|M1|XX"
],
category: "food",
state: "solid",
temp: -5,
tempHigh: 0,
stateHigh: "water",
isFood: true,
};
elements.dog_with_rabies = {
color: ["#c7a950", "#f7f6eb", "#152617", "#665d20", "#454420" ],
behavior: [
"XX|XX|XX",
"M2%25|LB:foam%25|M2%25",
"M2|M1|M2"
],
reactions: {
"meat": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"egg": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"yolk": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"cheese": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"ice_cube": {elem2:null, chance:0.8, func:behaviors.FEEDPIXEL },
"cooked_meat": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"chocolate": {elem2:null, chance: 0.2, func:behaviors.FEEDPIXEL, elem1: "rotten_meat"},
"grape": {elem2:null, chance: 0.2, func:behaviors.FEEDPIXEL, elem1: "rotten_meat"},
"rat": {elem2:null, chance: 0.3, func:behaviors.FEEDPIXEL },
"dog_food": {elem2:null, chance: 0.8, func:behaviors.FEEDPIXEL },
"nut_butter": {elem2:null, chance: 0.5, func:behaviors.FEEDPIXEL },
},
category:"life",
state:"solid",
tempHigh: 100,
stateHigh: "cooked_meat",
breakInto: "rotten_meat",
tempLow: -20,
stateLow: "frozen_meat",
hidden: true,
};
elements.dog = {
color: ["c78950", "#ffffff", "#262524", "#664120", "#453120" ],
behavior: [
"XX|XX|XX",
"M2%7|XX|M2%7",
"M2|M1|M2"
],
reactions: {
"meat": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"egg": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"yolk": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"cheese": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"ice_cube": {elem2:null, chance:0.8, func:behaviors.FEEDPIXEL },
"cooked_meat": {elem2:null, chance:0.5, func:behaviors.FEEDPIXEL },
"chocolate": {elem2:null, chance: 0.2, func:behaviors.FEEDPIXEL, elem1: "rotten_meat"},
"grape": {elem2:null, chance: 0.2, func:behaviors.FEEDPIXEL, elem1: "rotten_meat"},
"rat": {elem2:null, chance: 0.3, func:behaviors.FEEDPIXEL },
"dog_food": {elem2:null, chance: 0.8, func:behaviors.FEEDPIXEL },
"nut_butter": {elem2:null, chance: 0.5, func:behaviors.FEEDPIXEL },
"infection": {elem1:"dog_with_rabies", chance:0.4 },
"dog_with_rabies": {elem1:"dog_with_rabies", chance:0.3},
},
category:"life",
state:"solid",
tempHigh: 100,
stateHigh: "cooked_meat",
breakInto: "rotten_meat",
tempLow: -20,
stateLow: "frozen_meat",
};

View File

@ -176,7 +176,7 @@ worldgentypes.fields = {
decor: [
["sapling", 0.04, 20],
["grass", 0.25, 30],
["grass", 0.25, 30],
["grass", 0.25, 30],
["bee", 0.02, 25],
["cloud", 1, 2],
],
@ -197,9 +197,272 @@ worldgentypes.sycamore_forest = {
],
baseHeight: 0.25
};
elements.onion = {
color: "#f5b042",
behavior: behaviors.POWDER,
category: "land",
state: "solid",
};
elements.palm_tree_seed = {
color: "#7a603d",
tick: function(pixel) {
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100) {
if (!outOfBounds(pixel.x,pixel.y+1)) {
var dirtPixel = pixelMap[pixel.x][pixel.y+1];
if (dirtPixel.element === "dirt" || dirtPixel.element === "mud" || dirtPixel.element === "sand" || dirtPixel.element === "wet_sand" || dirtPixel.element === "clay_soil" || dirtPixel.element === "mycelium") {
changePixel(dirtPixel,"root");
}
}
if (isEmpty(pixel.x,pixel.y-1) && pixel.height < 7) {
movePixel(pixel,pixel.x,pixel.y-1);
createPixel("palm_tree_stem",pixel.x,pixel.y+1);
pixel.height++
}
}
else if (pixel.age > 150 && pixel.height > 6 && Math.random() < 0.1) {
changePixel(pixel,"palm_tree_top");
}
pixel.age++;
doDefaults(pixel);
},
properties: {
"age":0,
"height": 0
},
tempHigh: 100,
stateHigh: "dead_plant",
tempLow: -2,
stateLow: "frozen_plant",
burn: 65,
burnTime: 15,
category: "life",
state: "solid",
density: 1500,
cooldown: defaultCooldown,
seed: true,
behavior: [
"XX|XX|XX",
"XX|XX|XX",
"XX|M1|XX",
],
};
elements.palm_tree_stem = {
color: "#8f6c3f",
behavior: behaviors.WALL,
tempHigh: 400,
stateHigh: ["ember","charcoal","fire","fire","fire"],
category: "solids",
burn: 5,
burnTime: 300,
burnInto: ["ember","charcoal","fire"],
state: "solid",
hardness: 0.15,
breakInto: "sawdust",
breakIntoColor: ["#dba66e","#cc8a64"],
hidden: true
}
elements.palm_tree_top = {
color: "#8f6c3f",
behavior: behaviors.WALL,
tempHigh: 400,
stateHigh: ["ember","charcoal","fire","fire","fire"],
category: "solids",
burn: 5,
burnTime: 300,
burnInto: ["ember","charcoal","fire"],
state: "solid",
hardness: 0.15,
breakInto: "sawdust",
breakIntoColor: ["#dba66e","#cc8a64"],
properties:{
"leftleaves": 0,
"rightleaves": 0,
},
hidden: true,
tick: function(pixel) {
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.rightleaves == 0) {
if (isEmpty(pixel.x+1,pixel.y)) {
createPixel(Math.random() > 0.5 ? "palm_leaves" : "palm_leaves",pixel.x+1,pixel.y);
pixel.rightleaves++
}
}
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.rightleaves == 1) {
if (isEmpty(pixel.x+2,pixel.y)) {
createPixel(Math.random() > 0.5 ? "palm_leaves" : "palm_leaves",pixel.x+2,pixel.y);
pixel.rightleaves++
}
}
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.rightleaves == 2) {
if (isEmpty(pixel.x+3,pixel.y)) {
createPixel(Math.random() > 0.5 ? "palm_leaves" : "palm_leaves",pixel.x+3,pixel.y);
pixel.rightleaves++
}
}
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.rightleaves == 3) {
if (isEmpty(pixel.x+4,pixel.y+1)) {
createPixel(Math.random() > 0.5 ? "palm_leaves" : "palm_leaves",pixel.x+4,pixel.y+1);
pixel.rightleaves++
}
}
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.leftleaves == 0) {
if (isEmpty(pixel.x-1,pixel.y)) {
createPixel(Math.random() > 0.5 ? "palm_leaves" : "palm_leaves",pixel.x-1,pixel.y);
pixel.leftleaves++
}
}
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.leftleaves == 1) {
if (isEmpty(pixel.x-2,pixel.y)) {
createPixel(Math.random() > 0.5 ? "palm_leaves" : "palm_leaves",pixel.x-2,pixel.y);
pixel.leftleaves++
}
}
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.leftleaves == 2) {
if (isEmpty(pixel.x-3,pixel.y)) {
createPixel(Math.random() > 0.5 ? "palm_leaves" : "palm_leaves",pixel.x-3,pixel.y);
pixel.leftleaves++
}
}
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100 && pixel.leftleaves == 3) {
if (isEmpty(pixel.x-4,pixel.y+1)) {
createPixel(Math.random() > 0.5 ? "palm_leaves" : "palm_leaves",pixel.x-4,pixel.y+1);
pixel.leftleaves++
}
}
pixel.age++;
doDefaults(pixel);
},
}
elements.palm_leaves = {
color: ["#569923","#5ea12b"],
reactions: {
"vinegar": { elem1:"dead_plant", elem2:null, chance:0.035 },
"baking_soda": { elem1:"dead_plant", elem2:null, chance:0.01 },
"bleach": { elem1:"dead_plant", elem2:null, chance:0.05 },
"alcohol": { elem1:"dead_plant", elem2:null, chance:0.035 }
},
category:"life",
tempHigh: 100,
stateHigh: "dead_plant",
tempLow: -1.66,
stateLow: "frozen_plant",
burn:65,
burnTime:60,
burnInto: "dead_plant",
breakInto: "dead_plant",
state: "solid",
density: 1050,
hidden: true
}
elements.fruit_vine = {
color: "#00df00",
behavior: [
"ST:wood|ST:wood|ST:wood",
"ST:wood AND CR:grape%0.01|XX|ST:wood AND CR:grape%0.01",
"ST:wood|ST:wood AND M1|ST:wood",
],
reactions: {
"vinegar": { elem1:"dead_plant", elem2:null, chance:0.035 },
"baking_soda": { elem1:"dead_plant", elem2:null, chance:0.01 },
"bleach": { elem1:"dead_plant", elem2:null, chance:0.05 },
"alcohol": { elem1:"dead_plant", elem2:null, chance:0.035 },
"mercury": { elem1:"dead_plant", elem2:null, chance:0.01 },
"stench": { elem2:null, chance:0.25 },
"carbon_dioxide": { elem2:"oxygen", chance:0.25 },
},
category:"life",
tempHigh: 100,
stateHigh: "dead_plant",
tempLow: -1.66,
stateLow: "frozen_plant",
burn:15,
burnTime:60,
burnInto: "dead_plant",
state: "solid",
density: 1050,
breakInto: "dead_plant"
}
elements.fruit_vine_seed = {
color: "#6b4f36",
tick: function(pixel) {
if (Math.random() < 0.1 && pixel.age > 50 && pixel.temp < 100) {
if (!outOfBounds(pixel.x,pixel.y+1)) {
var dirtPixel = pixelMap[pixel.x][pixel.y+1];
if (dirtPixel.element === "dirt" || dirtPixel.element === "mud" || dirtPixel.element === "sand" || dirtPixel.element === "wet_sand" || dirtPixel.element === "clay_soil" || dirtPixel.element === "mycelium") {
changePixel(dirtPixel,"root");
}
}
if (isEmpty(pixel.x,pixel.y-1)) {
if (!isEmpty(pixel.x+1,pixel.y-1) || !isEmpty(pixel.x-1,pixel.y-1)) {
movePixel(pixel,pixel.x,pixel.y-1);
createPixel("fruit_vine",pixel.x,pixel.y+1);
}
}
if (!isEmpty(pixel.x+2,pixel.y-1) && isEmpty(pixel.x+1,pixel.y-1)) {
movePixel(pixel,pixel.x+1,pixel.y-1);
createPixel("fruit_vine",pixel.x-1,pixel.y+1);
}
if (!isEmpty(pixel.x-2,pixel.y-1) && isEmpty(pixel.x-1,pixel.y-1)) {
movePixel(pixel,pixel.x-1,pixel.y-1);
createPixel("fruit_vine",pixel.x+1,pixel.y+1);
}
if (!isEmpty(pixel.x,pixel.y-1) && !isEmpty(pixel.x+1,pixel.y) && isEmpty(pixel.x+1,pixel.y-1)) {
movePixel(pixel,pixel.x+1,pixel.y-1);
createPixel("fruit_vine",pixel.x-1,pixel.y+1);
}
if (!isEmpty(pixel.x,pixel.y-1) && !isEmpty(pixel.x-1,pixel.y) && isEmpty(pixel.x-1,pixel.y-1)) {
movePixel(pixel,pixel.x-1,pixel.y-1);
createPixel("fruit_vine",pixel.x+1,pixel.y+1);
}
/*if (pixelMap[pixel.x+1][pixel.y-1].element !== "wood" && pixelMap[pixel.x-1][pixel.y-1].element !== "wood") {
movePixel(pixel,pixel.x,pixel.y-1);
createPixel("fruit_vine",pixel.x,pixel.y+1);
if (isEmpty(pixel.x+1,pixel.y-1) && pixelMap[pixel.x+2][pixel.y-1].element === "wood") {
movePixel(pixel,pixel.x+1,pixel.y-1);
createPixel("fruit_vine",pixel.x-1,pixel.y+1);
}
if (isEmpty(pixel.x-1,pixel.y-1) && pixelMap[pixel.x-2][pixel.y-1].element === "wood") {
movePixel(pixel,pixel.x-1,pixel.y-1);
createPixel("fruit_vine",pixel.x+1,pixel.y+1);
}
}*/
}
else if (pixel.age > 400 && Math.random() < 0.1) {
changePixel(pixel,"fruit_vine");
}
pixel.age++;
doDefaults(pixel);
},
properties: {
"age":0,
},
tempHigh: 100,
stateHigh: "dead_plant",
tempLow: -2,
stateLow: "frozen_plant",
burn: 65,
burnTime: 15,
category: "life",
state: "solid",
density: 1500,
cooldown: defaultCooldown,
seed: true,
behavior: [
"ST:wood,fruit_vine|ST:wood,fruit_vine|ST:wood,fruit_vine",
"ST:wood,fruit_vine|XX|ST:wood,fruit_vine",
"ST:wood,fruit_vine|M1|ST:wood,fruit_vine",
],
};

44
mods/franklin.js Normal file
View File

@ -0,0 +1,44 @@
/*
function close_window() {
if (confirm("Reflect Test?")) {
close();
}
}
*/
elements.franklin_badge = { //basic element properties
color: "#0300b0",
behavior: behaviors.WALL,
category: "special",
insulate: true,
hardness: 1,
noMix: true,
tick: function(pixel){
if (!isEmpty(pixel.x, pixel.y-1, true)){
if (pixelMap[pixel.x][pixel.y-1].element === "lightning") {
//console.log("holy shit oh wow")
//close_window
//close();
//window.open('','_self').close();
//window.location = "https://www.youtube.com/watch?v=dQw4w9WgXcQ";
var delayInMilliseconds = 60; //1 second
setTimeout(function() {
window.open("https://www.youtube.com/watch?v=dQw4w9WgXcQ", "_blank");
}, delayInMilliseconds);
}
}
}
};
/*
behaviors.franklin_badge.tick = function(pixel) {
if (pixel.y-1 == "lightning") {
console.log("Lightning detected")
}
};
*/

File diff suppressed because one or more lines are too long

541
mods/kopalstuff.js Normal file
View File

@ -0,0 +1,541 @@
/*
Also checkout sbstuff.js by sb! Without it, this mod wouldn't be possible!
Discords of people that helped me:
usecit - UseCit.psd
nousernamefound - nousernamefound
pixelegend4 - pixelegend4
Credits:
Saschas - Waterpowder idea
Fantasy Elements - Phoenix idea
*/
elements.sweetwater = {
color: "#8ae7eb",
behavior: behaviors.LIQUID,
category: "kopal",
state: "liquid",
tempHigh: 100,
stateHigh: "water",
reactions: {
"sugar": { elem1: null, elem2: "syrup" }
},
};
elements.syrup = {
color: "#d9d2c3",
behavior: behaviors.LIQUID,
category: "kopal",
state: "liquid",
tempHigh: 100,
stateHigh: "fire",
reactions: {
"cell": {elem1: null, elem2: "incubationjuice"}
}
};
elements.orangesoda = {
color: "#b8820d",
behavior: behaviors.LIQUID,
category: "kopal",
state: "liquid",
tempHigh: 100,
stateHigh: "water",
reactions: {
"deadflyingcreature": { elem1: "dirty_orangesoda" },
"deadcreature": { elem1: "dirty_orangesoda" },
"dirty_water": { elem1: "dirty_orangesoda" },
"infection": { elem1: "dirty_orangesoda" },
"dirty_orangesoda": { elem1: "dirty_orangesoda" },
}
};
elements.dirty_orangesoda = {
color: "#20991a",
behavior: behaviors.LIQUID,
category: "kopal",
state: "liquid",
tempHigh: 80,
stateHigh: "orangesoda",
};
elements.orange = {
color: "#eda813",
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
breakInto: "juice",
tempHigh: 100,
stateHigh: "charcoal",
reactions: {
"syrup": { elem1: null, elem2: "orangesoda" }
},
};
elements.incubationjuice = {
color: "#daf5ef",
behavior: behaviors.LIQUID,
category: "kopal",
state: "liquid",
breakInto: "blood",
reactions: {
"flydna": { elem1: "blood", elem2: "flyingcreature"},
"antdna": { elem1: "blood", elem2: "creature"},
"phoenixdna": { elem1: "blood", elem2: "artificialphoenix"},
"alcohol": { elem1: "cancer", elem2: "antiartificialjuice"}
},
};
elements.creature = {
color: "#d073d9",
behavior: behaviors.CRAWLER,
category: "kopal",
state: "crawler",
tempHigh: 175,
stateHigh: "deadcreature",
breakInto: "deadcreature",
reactions: {
"ant": { elem2: "meat" },
"meat": { elem2: "creature" },
"artificialmeat": { elem2: "cell" },
"syrup": { elem2: "creature" },
"cell": { elem2: "creature" },
},
};
elements.flyingcreature = {
color: "#d073d9",
behavior: behaviors.FLY,
category: "kopal",
state: "fly",
tempHigh: 175,
stateHigh: "deadflyingcreature",
breakInto: "deadflyingcreature",
reactions: {
"fly": { elem2: "meat" },
"meat": { elem2: "flyingcreature" },
"artificialmeat": { elem2: "cell" },
"syrup": { elem2: "flyingcreature" },
"cell": { elem2: "flyingcreature" },
},
};
elements.artificialphoenix = {
color: "#c40052",
behavior: behaviors.FLY,
category: "kopal",
state: "fly",
temp: 149,
breakInto: "deadflyingcreature",
reactions: {
"fly": { elem2: "artificialphoenix" },
"flyingcreature": { elem2: "artificialphoenix" },
"meat": { elem2: "artificialphoenix" },
"artificialmeat": { elem2: "artificialphoenix" },
"syrup": { elem2: "artificialphoenix" },
},
};
elements.phoenix = {
color: "#ff0000",
behavior: behaviors.FLY,
category: "kopal",
state: "fly",
temp: 999,
breakInto: "phoenixdna",
reactions: {
"fly": { elem2: "meat" },
"meat": { elem2: "phoenix" },
"alcohol": { elem1: "blood" , elem2: "phoenixdna" },
},
};
elements.deadcreature = {
color: "#86428c",
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
tempHigh: 225,
stateHigh: "smoke",
breakInto: "artificialmeat",
reactions: {
"antiartificialjuice": { elem1: "artificialmeat", elem2: "dna" },
"ant": { elem1: "artificialmeat" },
},
};
elements.deadflyingcreature = {
color: "#86428c",
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
tempHigh: 225,
stateHigh: "smoke",
breakInto: "artificialmeat",
reactions: {
"antiartificialjuice": { elem1: "artificialmeat", elem2: "dna" },
"fly": { elem1: "artificialmeat" },
},
};
elements.artificialmeat = {
color: "#b38a5f",
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
tempHigh: 215,
stateHigh: "smoke",
reactions: {
"antiartificialjuice": { elem1: null, elem2: null },
"ant": { elem1: null },
"rat": { elem1: null },
},
};
elements.antiartificialjuice = {
color: "#b38a5f",
behavior: behaviors.LIQUID,
category: "kopal",
state: "liquid",
tempHigh: 215,
stateHigh: "smoke",
reactions: {
"flyingcreature": { elem1: "alcohol", elem2: "deadflyingcreature" },
"creature": { elem1: "alcohol", elem2: "deadcreature" },
"artificialphoenix": { elem1: "alcohol", elem2: "deadflyingcreature" },
},
};
elements.antiartificialspray = {
color: "#b38a5f",
behavior: behaviors.DGAS,
category: "kopal",
state: "gas",
tempHigh: 215,
density: 4000,
stateHigh: "smoke",
reactions: {
"flyingcreature": { elem1: "alcohol", elem2: "deadflyingcreature" },
"creature": { elem1: "alcohol", elem2: "deadcreature" },
"artificialphoenix": { elem1: "alcohol", elem2: "deadflyingcreature" },
},
};
elements.antdna = {
color: "#b38a5f",
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
tempHigh: 215,
stateHigh: "smoke",
};
elements.phoenixdna = {
color: "#a82a2a",
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
};
elements.flydna = {
color: "#b38a5f",
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
tempHigh: 215,
stateHigh: "smoke",
};
elements.waterpowder = {
color: elements.water.color,
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
tempHigh: 40,
stateHigh: "water",
};
elements.waterpowderer = {
color: "#e3e1dc",
behavior: behaviors.POWDER,
category: "kopal",
state: "powder",
reactions: {
"water": { elem1: null, elem2: "waterpowder" }
}
};
elements.antiartificialcancer = {
color: "#b38a5f",
behavior: [
"XX|CL%1|XX",
"CL%1|XX|CL%1",
"M2%2|M1|M2%2",
],
reactions: {
"artificialmeat": { elem2:"antiartificialcancer", chance:0.05 },
"creature": { elem2:"antiartificialcancer", chance:0.05 },
"flyingcreature": { elem2:"antiartificialcancer", chance:0.05 },
"artificialphoenix": { elem2:"antiartificialcancer", chance:0.05 },
"cancer": { elem2:"antiartificialcancer", chance:0.5 },
},
tempHigh: 185,
stateHigh: "smoke",
tempLow: -10,
stateLow: "syrup",
state: "solid",
density: 1000.2,
category: "kopal",
};
elements.anticancer = {
color: "#e3e1dc",
behavior: behaviors.LIQUID,
category: "kopal",
state: "liquid",
tempLow: -10,
stateLow: "syrup",
reactions: {
"cancer": { elem1: null, elem2: "anticancer" },
"antiartificialcancer": { elem1: null, elem2: "anticancer" }
}
};
elements.fire_spirit = {
color: ["#fc5a03", "#fc2803", "#fc9d03"],
behavior: behaviors.FLY,
category: "spirits",
state: "solid",
temp: 50,
reactions: {
"air_spirit": { elem2: null},
"cursed_spirit": { elem1: null},
"earth_spirit": { elem1: null},
"water_spirit": { elem2: null},
}
};
elements.water_spirit = {
color: ["#0390fc", "#035afc", "#0318fc"],
behavior: behaviors.FLY,
category: "spirits",
state: "solid",
reactions: {
"fire_spirit": { elem1: null},
"cursed_spirit": { elem1: null},
"earth_spirit": { elem2: null},
}
};
elements.earth_spirit = {
color: ["#915a00", "#784b02", "#573602"],
behavior: behaviors.FLY,
category: "spirits",
state: "solid",
reactions: {
"fire_spirit": { elem2: null},
"cursed_spirit": { elem1: null},
"water_spirit": { elem1: null},
}
};
elements.air_spirit = {
color: ["#c7eded", "#99bdbd", "#6a9494"],
behavior: behaviors.FLY,
category: "spirits",
state: "solid",
reactions: {
"fire_spirit": { elem1: null},
"cursed_spirit": { elem2: null},
"water_spirit": { elem1: null},
"earth_spirit": { elem1: null},
}
};
elements.cursed_spirit = {
color: ["#c404ae", "#aa04c4", "#7e04c4"],
behavior: behaviors.FLY,
category: "spirits",
state: "solid",
reactions: {
"fire_spirit": { elem2: null},
"air_spirit": { elem1: null},
"water_spirit": { elem2: null},
"earth_spirit": { elem2: null},
}
};
elements.cursed_powder_lvl1 = {
color: ["#c404ae", "#aa04c4", "#7e04c4"],
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
reactions: {
"cursed_spirit": { elem1: null},
}
};
elements.cursed_powder_lvl2 = {
color: ["#c404ae", "#aa04c4", "#7e04c4"],
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
reactions: {
"cursed_spirit": { elem2: null},
}
};
elements.soul_spirit = {
color: ["#0af7e0", "#0ac8f7", "#0a9cf7"],
behavior: behaviors.FLY,
category: "spirits",
state: "solid",
reactions: {
"fire_spirit": { elem2: null},
"cursed_spirit": { elem2: null},
"water_spirit": { elem2: null},
"earth_spirit": { elem2: null},
"air_spirit": { elem2: null},
}
};
elements.soul_powder = {
color: "#2e363b",
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
reactions: {
"awakening_powder": { elem1: "soul_spirit", elem2: null},
}
};
elements.cursed_powder = {
color: "#2e363b",
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
reactions: {
"awakening_powder": { elem1: "cursed_spirit", elem2: null},
}
};
elements.air_powder = {
color: "#2e363b",
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
temp: -10,
reactions: {
"awakening_powder": { elem1: "air_spirit", elem2: null},
}
};
elements.water_powder = {
color: "#2e363b",
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
reactions: {
"awakening_powder": { elem1: "water_spirit", elem2: null},
}
};
elements.fire_powder = {
color: "#2e363b",
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
reactions: {
"awakening_powder": { elem1: "fire_spirit", elem2: null},
}
};
elements.wandering_spirit = {
color: "#b1b7ba",
behavior: behaviors.FLY,
category: "spirits",
state: "solid",
reactions: {
"fire_spirit": { elem1: null},
"cursed_spirit": { elem1: null},
"water_spirit": { elem1: null},
"earth_spirit": { elem1: null},
"air_spirit": { elem1: null},
"soul_spirit": { elem1: null},
}
};
elements.unawaken_powder = {
color: "#696b6b",
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
reactions: {
"fire_spirit": { elem1: null, elem2: "fire_powder" },
"cursed_spirit": { elem1: null, elem2: "cursed_powder" },
"water_spirit": { elem1: null, elem2: "water_powder" },
"earth_spirit": { elem1: null, elem2: "earth_powder" },
"air_spirit": { elem1: null, elem2: "air_powder" },
"soul_spirit": { elem1: null, elem2: "soul_powder" },
}
};
elements.awakening_powder = {
color: "#696b6b",
behavior: behaviors.POWDER,
category: "spirits",
state: "solid",
reactions: {
"fire_powder": { elem1: null, elem2: "fire_spirit" },
"cursed_powder": { elem1: null, elem2: "cursed_spirit" },
"water_powder": { elem1: null, elem2: "water_spirit" },
"earth_powder": { elem1: null, elem2: "earth_spirit" },
"air_powder": { elem1: null, elem2: "air_spirit" },
"soul_powder": { elem1: null, elem2: "soul_spirit" },
}
};
elements.ant.breakInto = "antdna"
elements.fly.breakInto = "flydna"
elements.water.reactions["sugar"] = { elem1: null, elem2: "sweetwater" };
elements.water.reactions["deadflyingcreature"] = { elem1: "dirty_water"};
elements.water.reactions["deadcreature"] = { elem1: "dirty_water"};
elements.water.reactions["dirty_water"] = { elem1: "dirty_water"};
elements.ant.reactions["alcohol"] = { elem1: "antdna", elem2: null };
elements.fly.reactions["alcohol"] = { elem1: "flydna", elem2: null };

71
mods/lost_souls.js Normal file
View File

@ -0,0 +1,71 @@
elements.ghost_particle = {
color: "#d9d2d0",
behavior: behaviors.GAS,
category: "soul",
state: "gas",
};
elements.soul_fish = {
color: ["#808080","#a52a2a"],
category: "soul",
behavior: [
"XX|CR:flash|XX",
"CR:flash AND M2|XX|CR:flash AND M2",
"M1|CR:flash AND M1|M1",
],
reactions: {
"algae": { elem2:null, chance:0.25, func:behaviors.FEEDPIXEL },
"plant": { elem2:null, chance:0.125, func:behaviors.FEEDPIXEL },
"fly": { elem2:null, chance:0.4, func:behaviors.FEEDPIXEL },
"firefly": { elem2:null, chance:0.6, func:behaviors.FEEDPIXEL },
"worm": { elem2:null, chance:0.25, func:behaviors.FEEDPIXEL },
"tadpole": { elem2:null, chance:0.25, func:behaviors.FEEDPIXEL },
"oxygen": { elem2:"carbon_dioxide", chance:0.5 },
"dead_bug": { elem2:null, chance:0.2, func:behaviors.FEEDPIXEL },
"broth": { elem2:"water", chance:0.2, func:behaviors.FEEDPIXEL },
"slug": { elem2:null, chance:0.2, func:behaviors.FEEDPIXEL },
"herb": { elem2:null, chance:0.15, func:behaviors.FEEDPIXEL },
"lettuce": { elem2:null, chance:0.15, func:behaviors.FEEDPIXEL },
"dead_plant": { elem2:null, chance:0.15, func:behaviors.FEEDPIXEL },
"lichen": { elem2:null, chance:0.1, func:behaviors.FEEDPIXEL },
"yeast": { elem2:null, chance:0.15, func:behaviors.FEEDPIXEL },
"yogurt": { elem2:null, chance:0.15, func:behaviors.FEEDPIXEL },
"tea": { elem2:null, chance:0.2, func:behaviors.FEEDPIXEL },
"yolk": { elem2:null, chance:0.15, func:behaviors.FEEDPIXEL },
"cell": { elem2:null, chance:0.15, func:behaviors.FEEDPIXEL },
"crumb": { elem2:null, chance:0.1, func:behaviors.FEEDPIXEL },
"alcohol": { elem1:"meat", chance:0.001 },
}
};
elements.soul_anger_block = {
color: ["#eb4034","#ed2415"],
category: "soul",
behavior: [
"HT|HT|HT",
"CR:heat_ray|HT|CR:heat_ray",
"HT|CR:heat_ray|HT",
],
};
elements.soul_dirt = {
color: ["#999a98", "#e6e7e2", "#dddcda"],
behavior: behaviors.POWDER,
properties: {
"methaned": false,
"age": 0
},
tick: function(pixel) {
if(pixel.age > 6) {
if(!pixel.methaned && Math.random() < 0.2) {
changePixel("ghost_particle",pixel.x,pixel.y);
} else {
pixel.methaned = true;
};
createPixel("ghost_particle",pixel.x,pixel.y);
};
pixel.age++
},
category: "soul",
state: "powder",
density: 1050,
excludeRandom: true,
};

View File

@ -1,5 +1,34 @@
// changelog for more_gold.js
// initial release
//1.0 update
// adds green_gold
// adds molten_green_gold
// 1.1 update
// adds black gold
// adds gold_rust
// added reactions for the golds
//1.1.1 update
// adds uranium_gold
elements.green_gold = {
color: ["#94c7a3","#7bb298","#94c7a3"],
reactions: {
"water": { elem1:"gold_rust", chance:0.02 },
"salt_water": { elem1:"gold_rust", chance:0.005 },
"dirty_water": { elem1:"gold_rust", chance:0.04 },
"pool_water": { elem1:"gold_rust", chance:0.04 },
"sugar_water": { elem1:"gold_rust", chance:0.0035 },
"seltzer": { elem1:"gold_rust", chance:0.006 },
"alcohol": { elem1:"gold_rust", chance:0.03 },
"blood": { elem1:"gold_rust", chance:0.003 },
"infection": { elem1:"gold_rust", chance:0.003 },
"antibody": { elem1:"gold_rust", chance:0.003 },
"fire": { elem1:"gold_rust", chance:0.0025 },
"oxygen": { elem1:"gold_rust", chance:0.05 },
},
behavior: behaviors.WALL,
tempHigh: 500,
category: "solids",
@ -16,3 +45,71 @@ elements.molten_green_gold = {
conduct: 0.87,
Hidden: true
};
elements.black_gold = {
color: "#333333",
behavior: behaviors.WALL,
reactions: {
"water": { elem1:"gold_rust", chance:0.0025 },
"salt_water": { elem1:"gold_rust", chance:0.005 },
"dirty_water": { elem1:"gold_rust", chance:0.04 },
"pool_water": { elem1:"gold_rust", chance:0.04 },
"sugar_water": { elem1:"gold_rust", chance:0.0035 },
"seltzer": { elem1:"gold_rust", chance:0.006 },
"alcohol": { elem1:"gold_rust", chance:0.03 },
"blood": { elem1:"gold_rust", chance:0.003 },
"infection": { elem1:"gold_rust", chance:0.003 },
"antibody": { elem1:"gold_rust", chance:0.003 },
"fire": { elem1:"gold_rust", chance:0.0025 },
"oxygen": { elem1:"gold_rust", chance:0.05 },
},
category: "solids",
density: 19300,
hardness: 0.25,
};
elements.gold_rust = {
color: "#e6d37e",
behavior: behaviors.SUPPORT,
tempHigh: 3000,
stateHigh: "molten_gold",
category: "powders",
state: "solid",
density: 5250,
conduct: 0.37,
hardness: 0.3
};
elements.uranium_gold = {
color: ["#bcf542","#7fc92a","#c9bf2a"],
behavior: [
"XX|CR:radiation|XX",
"XX|XX|XX",
"XX|XX|XX",
],
tempHigh: 1064,
reactions: {
"water": { elem1:"rad_steam", chance:0.1 },
"salt_water": { elem1:"gold_rust", chance:0.005 },
"dirty_water": { elem1:"gold_rust", chance:0.04 },
"pool_water": { elem1:"gold_rust", chance:0.04 },
"sugar_water": { elem1:"gold_rust", chance:0.0035 },
"seltzer": { elem1:"gold_rust", chance:0.006 },
"alcohol": { elem1:"gold_rust", chance:0.03 },
"blood": { elem1:"gold_rust", chance:0.003 },
"infection": { elem1:"gold_rust", chance:0.003 },
"antibody": { elem1:"gold_rust", chance:0.003 },
"fire": { elem1:"gold_rust", chance:0.0025 },
"oxygen": { elem1:"gold_rust", chance:0.05 },
},
category: "solids",
density: 19300,
conduct: 0.81,
hardness: 0.25,
breakInto: "uranium"
};
elements.gold.reactions["fire"] = { elem1: null, elem2: "gold_rust" };
elements.rose_gold.reactions["fire"] = { elem1: null, elem2: "gold_rust" };
elements.purple_gold.reactions["fire"] = { elem1: null, elem2: "gold_rust" };
elements.blue_gold.reactions["fire"] = { elem1: null, elem2: "gold_rust" };

View File

@ -1387,7 +1387,7 @@ elements.sign = {
}
}
runAfterLoad(function(){
document.body.innerHTML += `
document.body.insertAdjacentHTML("beforeend",`
these are all properties of the pixel. another way to find pixel properties is using debug on a pixel, it will tell you the property and the value, like x and y, or, in plants.js, fruit.
<table id="variables">
<thead>
@ -1457,8 +1457,8 @@ runAfterLoad(function(){
</th>
</tr>
</tbody></table>
`
document.getElementById("extraInfo").innerHTML = `
<small><a href="https://sandboxels.r74n.com/changelog" id="changelogButton" target="_blank">Changelog<span style="color:red">(NEW)</span></a> <a href="https://sandboxels.R74n.com/feedback" target="_blank" style="color:lime;">Feedback</a> <a href="https://sandboxels.wiki.gg/" target="_blank" id="wikiButton" title="Official Sandboxels Wiki - wiki.gg" style="color:white;">Wiki</a> <a id="moreSocial" href="https://reddit.com/r/Sandboxels" rel="me" target="_blank"><span style="color:#FF5700">Reddit</span></a> <a href="https://discord.gg/ejUc6YPQuS" target="_blank" style="color:#2f60ff;">Discord</a><span id="install-button" style="display: inline-block;">&nbsp; <a onclick="deferredPrompt.prompt(); return false" href="#" style="text-shadow: 0px 2px 10px #ff00ff; cursor:pointer">Install Offline</a> <a href = "https://sandboxels.r74n.com/#variables">Variables</a></span><!--<br><br><a style="color:lime" target="_blank" href="https://docs.google.com/forms/d/e/1FAIpQLSf8pVMSdC6oSnBSaTpzjPQa8Ef-vxG_eXL99UITnMSQtJFTJA/viewform?usp=sf_link">FILL OUT THE CENSUS<span style="color:red">(NEW)</span></a>--></small><small><p>v1.9.3 559 elements, with <span id="hiddenCount">0</span> hidden.</p><p>©2021-2024. <a href="https://sandboxels.R74n.com/license.txt" rel="license" target="_blank">All Rights Reserved</a>. <a style="color:#00ffff" rel="author" href="https://r74n.com">R74n</a></p></small>
`
`)
// document.getElementById("extraInfo").innerHTML = `
// <small><a href="https://sandboxels.r74n.com/changelog" id="changelogButton" target="_blank">Changelog<span style="color:red">(NEW)</span></a> • <a href="https://sandboxels.R74n.com/feedback" target="_blank" style="color:lime;">Feedback</a> • <a href="https://sandboxels.wiki.gg/" target="_blank" id="wikiButton" title="Official Sandboxels Wiki - wiki.gg" style="color:white;">Wiki</a> • <a id="moreSocial" href="https://reddit.com/r/Sandboxels" rel="me" target="_blank"><span style="color:#FF5700">Reddit</span></a> • <a href="https://discord.gg/ejUc6YPQuS" target="_blank" style="color:#2f60ff;">Discord</a><span id="install-button" style="display: inline-block;">&nbsp;• <a onclick="deferredPrompt.prompt(); return false" href="#" style="text-shadow: 0px 2px 10px #ff00ff; cursor:pointer">Install Offline</a> • <a href = "https://sandboxels.r74n.com/#variables">Variables</a></span><!--<br><br><a style="color:lime" target="_blank" href="https://docs.google.com/forms/d/e/1FAIpQLSf8pVMSdC6oSnBSaTpzjPQa8Ef-vxG_eXL99UITnMSQtJFTJA/viewform?usp=sf_link">FILL OUT THE CENSUS<span style="color:red">(NEW)</span></a>--></small><small><p>v1.9.3 • 559 elements, with <span id="hiddenCount">0</span> hidden.</p><p>©2021-2024. <a href="https://sandboxels.R74n.com/license.txt" rel="license" target="_blank">All Rights Reserved</a>. <a style="color:#00ffff" rel="author" href="https://r74n.com">R74n</a></p></small>
// `
});

60
mods/rays++.js Normal file
View File

@ -0,0 +1,60 @@
elements.shock_ray = {
color: ["#fffba6", "#8c8279"],
tick: function (pixel) {
var x = pixel.x;
for (var y = pixel.y + 1; y < height; y++) {
if (outOfBounds(x, y)) {
break;
}
if (isEmpty(x, y)) {
if (Math.random() > 0.1) { continue }
createPixel("electric", x, y);
}
else {
if (elements[pixelMap[x][y].element].id === elements.flash.id) { continue }
if (elements[pixelMap[x][y].element].id === elements.god_ray.id) { break }
if (!elements[pixelMap[x][y].element].isGas && isEmpty(x, y - 1)) {
createPixel("electric", x, y - 1);
}
if (Math.random() > 0.1) { continue }
elements.bless.tool(pixelMap[x][y])
}
}
deletePixel(pixel.x, pixel.y);
},
temp: 20,
category: "energy",
state: "gas",
excludeRandom: true,
noMix: true
};
elements.magic_ray = {
color: ["#a270ff","#f2d9ff"],
tick: function (pixel) {
var x = pixel.x;
for (var y = pixel.y + 1; y < height; y++) {
if (outOfBounds(x, y)) {
break;
}
if (isEmpty(x, y)) {
if (Math.random() > 0.1) { continue }
createPixel("magic", x, y);
}
else {
if (elements[pixelMap[x][y].element].id === elements.flash.id) { continue }
if (elements[pixelMap[x][y].element].id === elements.god_ray.id) { break }
if (!elements[pixelMap[x][y].element].isGas && isEmpty(x, y - 1)) {
createPixel("magic", x, y - 1);
}
if (Math.random() > 0.1) { continue }
elements.bless.tool(pixelMap[x][y])
}
}
deletePixel(pixel.x, pixel.y);
},
temp: 20,
category: "energy",
state: "gas",
excludeRandom: true,
noMix: true
};

View File

@ -592,6 +592,7 @@ elements.cocaine = {
};
elements.zombie = {
excludeRandom: true,
tempHigh: 500,
stateHigh: "ash",
color: "#114700",
@ -784,6 +785,7 @@ elements.fart = {
behavior: behaviors.DGAS,
category: "joke",
state: "gas",
excludeRandom: true
};
elements.chips = {
@ -998,7 +1000,7 @@ elements.incinerator = {
insulate: true,
excludeRandom: true,
reactions: {
"fart": { elem1: null, elem2: "ohio" },
"fart": { elem1: null, elem2: "kaboom" },
}
};
@ -1211,7 +1213,7 @@ elements.dark_energy = {
excludeRandom: true
};
elements.ohio = {
elements.kaboom = {
hidden: true,
hardness: 1,
hidden: true,
@ -1380,15 +1382,6 @@ elements.yoylecake = {
state: "liquid",
};
elements.banana = {
tempHigh: 300,
stateHigh: "ash",
color: "#f06c0e",
behavior: behaviors.STURDYPOWDER,
category: "food",
state: "liquid",
};
elements.cool_ray = {
color: ["#0cdaed","#baf9ff"],
tick: function(pixel) {
@ -1692,7 +1685,8 @@ elements.liquid_filler = {
"M1|M1 AND CH:liquid_filler%50|M1",
],
category: "special",
state: "liquid"
state: "liquid",
excludeRandom: true
};
elements.antimony = {
@ -1736,12 +1730,93 @@ elements.unstain = {
state: "solid",
};
elements.antmatter = {
color: "#5f4a4a",
behavior: [
"M2|DB%50 AND M2 AND EX:8>ant%10|M2",
"M1|XX|M1",
"M1|DB%50 AND M1 AND EX:8>ant%10|M1",
],
category: "others",
state: "gas",
density: 6.9,
desc: "first ever others category element i guess"
};
elements.thermal_paste = {
viscosity: 10000,
tempHigh: 200,
stateHigh: [null, "thermal_paste"],
color: "#c5cfd3",
behavior: [
"XX|CO:1|XX",
"CO:1 AND M2|XX|CO:1 AND M2",
"M1|CO:1 AND M1|M1",
],
category: "liquids",
state: "liquid",
};
elements.sam = {
name: "sam's sperm i think",
viscosity: 10000,
color: "#0e0e0e",
behavior: behaviors.LIQUID,
category: "joke",
state: "liquid",
desc: "begs the question; did he censor himself?"
};
elements.glitch = {
color: ["#ff0000", "#c300ff", "#bbff00", "#1100ff", "#00ffaa"],
behavior: [
"XX|XX|XX",
"XX|CC:ff0000,c300ff,bbff00,1100ff,00ffaa|XX",
"XX|XX|XX"
],
category: "special",
conduct: 0.5,
movable: false
};
elements.sound = {
color: ["#1464b4","#aeeb82"],
currentSound: null,
onSelect: function() {
var file = document.createElement("input");
file.type = "file";
file.accept = "audio/*";
file.onchange = function() {
setTimeout(function(){
var reader = new FileReader();
reader.onload = function(e) {
if (elements.sound.currentSound) {
elements.sound.currentSound.pause();
}
elements.sound.currentSound = new Audio();
elements.sound.currentSound.src = e.target.result;
elements.sound.currentSound.play();
file.value = "";
}
reader.readAsDataURL(file.files[0]);
},500);
}
file.click();
},
onUnselect: function() {},
tool: function() {},
category: "special",
};
elements.incinerate.category = "tools",
elements.cook.category = "tools",
elements.room_temp.category = "tools",
elements.beans.tempHigh = 349,
elements.beans.stateHigh = "burnt_beans"
elements.grass.onSelect = function() {
logMessage("go touch this");
}
if (!elements.radiation.reactions) elements.egg.reactions = {};
elements.radiation.reactions.meat = { elem1: null, elem2: "radioactive_meat" },

90
mods/soups.js Normal file
View File

@ -0,0 +1,90 @@
// changelog
// 1.0 update - the base update
// added seasoning
// added seasoned_water
elements.seasoning = {
color: "#876461",
behavior: behaviors.POWDER,
category: "food",
tempHigh: 900,
stateHigh: "salt",
state: "solid",
reactions: {
"water": { elem1: "null", elem2: "seasoned_water" },
"salt_water": { elem1: "null", elem2: "seasoned_water" },
},
density: 2,
};
elements.seasoned_water = {
color: "#73d627",
behavior: behaviors.LIQUID,
tempHigh: 100,
stateHigh: "steam",
tempLow: 0,
stateLow: "ice",
category: "liquids",
heatCapacity: 4.184,
reactions: {
"dirt": {
elem1: null,
elem2: "mud",
},
"sand": { elem1: null, elem2: "wet_sand" },
"clay_soil": { elem1: null, elem2: "clay" },
"salt": { elem1: "salt_water", elem2: null, temp1:-20 },
"sugar": { elem1: "sugar_water", elem2: null },
"honey": { elem1: "sugar_water" },
"caramel": { elem1: "sugar_water" },
"molasses": { elem1: "sugar_water" },
"dust": { elem1: "dirty_water", elem2: null },
"ash": { elem1: "dirty_water", elem2: null },
"cyanide": { elem1: "dirty_water", elem2: null },
"cyanide_gas": { elem1: "dirty_water", elem2: null },
"carbon_dioxide": { elem1: "seltzer", elem2: null, oneway:true },
"sulfur": { elem1: "dirty_water", elem2: null },
"rat": { elem1: "dirty_water", chance:0.005 },
"plague": { elem1: "dirty_water", elem2: null },
"rust": { elem1: "dirty_water", chance:0.005 },
"lead": { elem1: "dirty_water", chance:0.005 },
"solder": { elem1: "dirty_water", chance:0.005 },
"fallout": { elem1: "dirty_water", chance:0.25 },
"radiation": { elem1: "dirty_water", chance:0.25 },
"uranium": { elem1: "dirty_water", chance:0.25 },
"rotten_meat": { elem1: "dirty_water", chance:0.25 },
"rotten_cheese": { elem1: "dirty_water", chance:0.25 },
"cancer": { elem1: "dirty_water", chance:0.25 },
"oil": { elem1: "dirty_water", chance:0.005 },
"dioxin": { elem1: "dirty_water", chance:0.1 },
"quicklime": { elem1: "slaked_lime", elem2: "slaked_lime", temp2:100, temp1:100, chance:0.05 },
"rock": { elem2: "wet_sand", chance: 0.00035 },
"limestone": { elem2: "wet_sand", chance: 0.00035 },
"tuff": { elem2: "wet_sand", color2:"#7a6b5c", chance: 0.00035 },
"ruins": { elem2: "rock", chance: 0.00035 },
"mudstone": { elem2: "mud", chance: 0.00035 },
"methane": { elem1:"primordial_soup", elem2:"primordial_soup", tempMin:60, charged:true },
"ammonia": { elem1:"primordial_soup", elem2:"primordial_soup", tempMin:60, charged:true },
"fly": { elem2:"dead_bug", chance:0.1, oneway:true },
"firefly": { elem2:"dead_bug", chance:0.1, oneway:true },
"bee": { elem2:"dead_bug", chance:0.05, oneway:true },
"stink_bug": { elem2:"dead_bug", chance:0.1, oneway:true },
"cured_meat": { elem1:"salt_water", elem2:"meat" },
"aluminum": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.0025 },
"zinc": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.015 },
"steel": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.0125 },
"iron": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.0125 },
"tin": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.01 },
"brass": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.001 },
"bronze": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.001 },
"copper": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.0075 },
"silver": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.0075 },
"gold": { elem1:["hydrogen","hydrogen","oxygen"], charged:true, chance:0.0075 },
},
state: "liquid",
density: 999,
conduct: 0.02,
stain: -0.9,
extinguish: true
};

124
mods/video.js Normal file
View File

@ -0,0 +1,124 @@
{
let currentVideoFrames = [];
let videoFrame = 0;
let processed = 0;
let started = false;
let videoWidth = 0;
let videoHeight = 0;
let FPS = tps / 2;
const splitHex = (hex) => hex.slice(1).match(/../g).map(a => Math.floor(parseInt(a, 16)));
const hexify = (rgb) => "#" + rgb.map(a => Math.floor(a).toString(16).padStart(2, "0")).join("");
function colorLerp(color_, color2_, t) {
const color = splitHex(color_);
const color2 = splitHex(color2_);
const r = (1 - t) * color[0] + t * color2[0];
const g = (1 - t) * color[1] + t * color2[1];
const b = (1 - t) * color[2] + t * color2[2];
return hexify([r, g, b]);
}
elements.video_pixel = {
color: "#ffffff",
hidden: true,
category: "special",
canPlace: false,
tool: () => {},
tick: (pixel) => {
if (started && pixelTicks % (tps / FPS) == 0) {
processed++;
if (processed >= videoWidth * videoHeight) {
videoFrame++;
processed = 0;
}
if (videoFrame >= currentVideoFrames.length) {
started = false;
processed = 0;
currentVideoFrames = [];
videoFrame = 0;
}
pixel.color = currentVideoFrames[videoFrame % currentVideoFrames.length][pixel.y][pixel.x - Math.floor((width - videoWidth) / 2)];
}
}
}
const chunk = (arr, size) => arr.map((_, i) => i % size == 0 ? arr.slice(i, i + size) : null).filter(a => a)
elements.video = {
color: ["#78bbff","#5bb81a"],
onSelect: () => {
if (!localStorage.getItem("video.js/tutorial")) {
alert("Videos might take a while (up to a few minutes with larger videos) to load. During that time, do not delete any video pixels");
localStorage.setItem("video.js/tutorial", true);
}
const file = document.createElement("input");
file.type = "file";
file.accept = "video/*";
file.click();
file.onchange = () => {
setTimeout(() => {
const video = document.createElement("video");
video.preload = "auto";
const url = URL.createObjectURL(file.files[0]);
video.src = url;
video.load();
let canvas = document.createElement("canvas", {
willReadFrequently: true
});
let ctx = canvas.getContext("2d");
video.onloadeddata = async () => {
const w = video.videoWidth;
const h = video.videoHeight;
const newHeight = height;
const newWidth = Math.floor((w / h) * newHeight);
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
videoWidth = newWidth;
videoHeight = newHeight;
const videoLength = video.duration * FPS;
const seekBy = video.duration / videoLength;
for (let i = 0; i < newWidth; i++) {
for (let y = 0; y < newHeight; y++) {
const x = Math.floor((width - newWidth) / 2) + i;
if (pixelMap[x][y]) deletePixel(x, y);
createPixel("video_pixel", x, y);
}
};
video.currentTime = 0;
video.onseeked = () => {
ctx.drawImage(video, 0, 0, newWidth, newHeight);
const imageData = chunk(chunk(Array.from(ctx.getImageData(0, 0, newWidth, newHeight).data), 4), newWidth);
const frame = [];
for (let y = 0; y < newHeight; y++) {
frame[y] = [];
for (let x = 0; x < newWidth; x++) {
frame[y][x] = `#${imageData[y][x].slice(0, 3).map(a => a.toString(16).padStart(2, "0")).join("")}`
}
}
currentVideoFrames.push(frame);
if (currentVideoFrames.length >= videoLength) {
const audio = new Audio();
audio.src = url;
audio.play();
started = true;
videoFrame = 0;
} else {
video.currentTime += seekBy;
}
}
}
}, 500);
}
},
tool: () => {},
category: "special"
}
}

View File

@ -75,7 +75,7 @@ elements.left_missile = {
"M1 AND EX:10|XX|EX:10",
"M2|EX:10|XX",
],
category:"weapons",
category:"ammunition",
},
elements.right_missile = {
color: "#4c4e42",
@ -84,7 +84,17 @@ elements.right_missile = {
"EX:10|XX|M1 AND EX:10",
"XX|EX:10|M2",
],
category:"weapons",
category:"ammunition",
},
elements.up_missile = {
color: "#4c4e42",
behavior: [
"M2|M1 AND EX:10|M2",
"EX:10|XX|EX:10",
"XX|EX:10|XX",
],
category:"ammunition",
alias: "the element that some guy try to add to my mod without my permission but when doing so fucked the behavior grid up",
},
elements.cluster_munition = {
color: "#444444",
@ -115,7 +125,7 @@ elements.right_missile = {
"XX|XX|XX",
"M2|M1 AND EX:10%10|M2",
],
category: "weapons",
category: "ammunition",
state: "solid",
density: 1300,
hidden: true,
@ -149,7 +159,7 @@ elements.left_bullet = {
"M1 AND EX:5|XX|XX",
"M2|XX|XX",
],
category:"weapons",
category:"ammunition",
},
elements.right_bullet = {
color: "#4c4e42",
@ -158,5 +168,233 @@ elements.left_bullet = {
"XX|XX|M1 AND EX:5",
"XX|XX|M2",
],
category:"weapons",
};
category:"ammunition",
},
elements.e_gun_left = {
color: "#C0C0C0",
behavior: behaviors.WALL,
behaviorOn: [
"XX|XX|XX",
"CR:left_bullet|XX|XX",
"XX|XX|XX",
],
category: "weapons",
state: "solid",
conduct: 1,
density: 1300,
},
elements.e_gun_right = {
color: "#C0C0C0",
behavior: behaviors.WALL,
behaviorOn: [
"XX|XX|XX",
"XX|XX|CR:right_bullet",
"XX|XX|XX",
],
category: "weapons",
state: "solid",
conduct: 1,
density: 1300,
},
elements.auto_rocket_launcher_left = {
color: "#C0C0C0",
behavior: [
"XX|XX|XX",
"CR:left_rocket|XX|XX",
"XX|XX|XX",
],
category: "weapons",
state: "solid",
density: 1300,
},
elements.auto_rocket_launcher_right = {
color: "#C0C0C0",
behavior: [
"XX|XX|XX",
"XX|XX|CR:right_rocket",
"XX|XX|XX",
],
category: "weapons",
state: "solid",
density: 1300,
},
elements.left_rocket = {
color: "#4c4e42",
behavior: [
"XX|XX|XX",
"M1 AND EX:10|XX|XX",
"XX|XX|XX",
],
category:"ammunition",
},
elements.right_rocket = {
color: "#4c4e42",
behavior: [
"XX|XX|XX",
"XX|XX|M1 AND EX:10",
"XX|XX|XX",
],
category:"ammunition",
},
elements.e_rocket_launcher_left = {
color: "#C0C0C0",
behavior: behaviors.WALL,
behaviorOn: [
"XX|XX|XX",
"CR:left_rocket|XX|XX",
"XX|XX|XX",
],
category: "weapons",
state: "solid",
conduct: 1,
density: 1300,
},
elements.e_rocket_launcher_right = {
color: "#C0C0C0",
behavior: behaviors.WALL,
behaviorOn: [
"XX|XX|XX",
"XX|XX|CR:right_rocket",
"XX|XX|XX",
],
category: "weapons",
state: "solid",
conduct: 1,
density: 1300,
},
elements.gaster_blast_left = {
color: "#c5e9f0",
behavior: [
"DL|DL|XX",
"DL AND CR:gaster_blast_left%5|XX|XX",
"DL|DL|XX",
],
tick: function(pixel) {
for (var i=0; i<3; i++) {
if (!tryMove(pixel, pixel.x-2, pixel.y)) {
if (!isEmpty(pixel.x-2, pixel.y,true)) {
var newPixel = pixelMap[pixel.x-2][pixel.y];
if (newPixel.element === "gaster_blast_left") { break; }
if (elements[newPixel.element].state == "gas") {
if (Math.random() > (elements[newPixel.element].hardness || 0)) {
if (elements[newPixel.element].breakInto) {
breakPixel(newPixel);
}
else {
deletePixel(newPixel.x, newPixel.y);
}}}}
deletePixel(pixel.x,pixel.y);
break;
}}},
category: "energy",
state: "gas",
insulate: true,
},
elements.gaster_blast_right = {
color: "#c5e9f0",
behavior: [
"XX|DL|DL",
"XX|XX|DL AND CR:gaster_blast_right%5",
"XX|DL|DL",
],
tick: function(pixel) {
for (var i=0; i<3; i++) {
if (!tryMove(pixel, pixel.x+2, pixel.y)) {
if (!isEmpty(pixel.x+2, pixel.y,true)) {
var newPixel = pixelMap[pixel.x+2][pixel.y];
if (newPixel.element === "gaster_blast_right") { break; }
if (elements[newPixel.element].state == "gas") {
if (Math.random() > (elements[newPixel.element].hardness || 0)) {
if (elements[newPixel.element].breakInto) {
breakPixel(newPixel);
}
else {
deletePixel(newPixel.x, newPixel.y);
}}}}
deletePixel(pixel.x,pixel.y);
break;
}}},
category: "energy",
state: "gas",
insulate: true,
},
elements.gaster_blaster_left = {
color: "#ffffff",
behavior: behaviors.WALL,
behaviorOn: [
"XX|XX|XX",
"CR:gaster_blast_left|XX|XX",
"XX|XX|XX",
],
category: "weapons",
state: "solid",
conduct: 20,
},
elements.gaster_blaster_right = {
color: "#ffffff",
behavior: behaviors.WALL,
behaviorOn: [
"XX|XX|XX",
"XX|XX|CR:gaster_blast_right",
"XX|XX|XX",
],
category: "weapons",
state: "solid",
conduct: 20,
},
elements.fast_bullet_left = {
color: "#4c4e42",
behavior: [
"DL|DL|XX",
"DL|XX|XX",
"DL|DL|XX",
],
tick: function(pixel) {
for (var i=0; i<3; i++) {
if (!tryMove(pixel, pixel.x-3, pixel.y)) {
if (!isEmpty(pixel.x-3, pixel.y,true)) {
var newPixel = pixelMap[pixel.x-3][pixel.y];
if (newPixel.element === "fast_bullet_left") { break; }
if (elements[newPixel.element].state == "solid") {
if (Math.random() > (elements[newPixel.element].hardness || 0)) {
if (elements[newPixel.element].breakInto) {
breakPixel(newPixel);
}
else {
deletePixel(newPixel.x, newPixel.y);
}}}}
deletePixel(pixel.x,pixel.y);
break;
}}},
category: "ammunition",
state: "solid",
insulate: true,
},
elements.fast_bullet_right = {
color: "#4c4e42",
behavior: [
"XX|DL|DL",
"XX|XX|DL",
"XX|DL|DL",
],
tick: function(pixel) {
for (var i=0; i<3; i++) {
if (!tryMove(pixel, pixel.x+3, pixel.y)) {
if (!isEmpty(pixel.x+3, pixel.y,true)) {
var newPixel = pixelMap[pixel.x+3][pixel.y];
if (newPixel.element === "fast_bullet_right") { break; }
if (elements[newPixel.element].state == "solid") {
if (Math.random() > (elements[newPixel.element].hardness || 0)) {
if (elements[newPixel.element].breakInto) {
breakPixel(newPixel);
}
else {
deletePixel(newPixel.x, newPixel.y);
}}}}
deletePixel(pixel.x,pixel.y);
break;
}}},
category: "ammunition",
state: "solid",
insulate: true,
}