diff --git a/index.html b/index.html
index 67c13993..1f33f15b 100644
--- a/index.html
+++ b/index.html
@@ -9960,6 +9960,7 @@
else { changePixel(pixel, elem2); }
}
if (r.func) { r.func(pixel,pixel) }
+ if (r.color2) { pixel.color = pixelColorPick(pixel,r.color2) }
}
},
ignore: ["sun"],
@@ -15520,7 +15521,7 @@ window.onload = function() {
return elements[e].excludeRandom != true && elements[e].category != "tools" && !elements[e].tool;
});
gameCanvas.addEventListener("mousedown", mouseClick);
- gameCanvas.addEventListener("mousedown", function(){
+ gameCanvas.addEventListener("mousedown", function(e){
if (elements[currentElement] && elements[currentElement].onMouseDown) {
elements[currentElement].onMouseDown(e);
}
diff --git a/lang/de.json b/lang/de.json
index 3e471bd0..008463cb 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -35,7 +35,7 @@
"rock":"Stein",
"rock_wall":"Steinwand",
"mudstone":"Schlammstein",
-"packed_sand":"Komprimierter Sand",
+"packed_sand":"Komprimierter_Sand",
"plant":"Pflanze",
"dead_plant":"Tote_pflanze",
"frozen_plant":"Gefrorene_pflanze",
@@ -274,7 +274,7 @@
"homunculus":"Homunkulus",
"butter":"Butter",
"cheese":"Käse",
-"rotten_cheese":"Verrotteter Käse",
+"rotten_cheese":"Verrotteter_Käse",
"chocolate":"Schokolade",
"grape":"Traube",
"vinegar":"Essig",
@@ -523,21 +523,21 @@
"molten_potassium_salt":"Geschmolzenes_Kaliumsalz",
"molten_sodium_acetate":"Natriumacetat",
"frozen_nitro":"Gefrorenes_Nitro",
-"cured_meat": "",
-"nut_oil": "",
-"grease": "",
-"fat": "",
-"potassium": "",
-"molten_potassium": "",
-"magnesium": "",
-"molten_magnesium": "",
-"sandstorm": "",
-"caustic_potash": "",
-"antibomb": "",
-"tornado": "",
-"earthquake": "",
-"tsunami": "",
-"blaster": "",
-"propane_ice": "",
-"molten_caustic_potash": ""
-}
\ No newline at end of file
+"cured_meat": "Geheiltes_Fleisch",
+"nut_oil": "Nussöl",
+"grease": "Fettöl",
+"fat": "Fett",
+"potassium": "Kalium",
+"molten_potassium": "Geschmolzene_Kalium",
+"magnesium": "Magnesium",
+"molten_magnesium": "Geschmolzene_Magnesium",
+"sandstorm": "Sandsturm",
+"caustic_potash": "Kaustisches_Kali",
+"antibomb": "Antibombe",
+"tornado": "Tornado",
+"earthquake": "Erdbeben",
+"tsunami": "Tsunami",
+"blaster": "Blaster",
+"propane_ice": "Propan_Eis",
+"molten_caustic_potash": "Geschmolzene_Kaustisches_Kali"
+}
diff --git a/lang/tok.json b/lang/tok.json
index 48904d58..90a70d54 100644
--- a/lang/tok.json
+++ b/lang/tok.json
@@ -341,8 +341,8 @@
"poison_gas":"",
"poison_ice":"",
"antidote":"telo_pi_weka_telo_ike",
-"tea":"",
-"coffee":"",
+"tea":"telo_kasi",
+"coffee":"telo_pimeja_pi_kili_lili",
"honey":"telo_jelo_suwi_pi_tan_pipi_jelo",
"sap":"",
"amber":"",
@@ -389,9 +389,9 @@
"fire_cloud":"",
"color_smoke":"",
"spray_paint":"",
-"led_r":"",
-"led_g":"",
-"led_b":"",
+"led_r":"ilo_suno_pi_loje",
+"led_g":"ilo_suno_pi_laso_kasi",
+"led_b":"ilo_suno_pi_laso_sewi",
"sulfur":"",
"molten_sulfur":"",
"sulfur_gas":"",
@@ -523,17 +523,17 @@
"molten_potassium_salt":"",
"molten_sodium_acetate":"",
"frozen_nitro":"",
-"cured_meat": "",
-"nut_oil": "",
-"grease": "",
-"fat": "",
-"potassium": "",
+"cured_meat": "moku soweli pi ko pilin musi",
+"nut_oil": "telo_jelo_pi_ko_kili_lili",
+"grease": "telo_jelo_pi_moku_soweli",
+"fat": "kiwen_walo_pi_moku_soweli",
+"potassium": "kiwen_pi_telo_pakala",
"molten_potassium": "",
-"magnesium": "",
+"magnesium": "kiwen_pi_kiwen_walo_sijelo",
"molten_magnesium": "",
"sandstorm": "",
"caustic_potash": "",
-"antibomb": "",
+"antibomb": "kiwen_pakala_pi_pana_ijo",
"tornado": "",
"earthquake": "",
"tsunami": "",
diff --git a/lang/zh_cn.json b/lang/zh_cn.json
index 8d9f23bd..7ce3b1ee 100644
--- a/lang/zh_cn.json
+++ b/lang/zh_cn.json
@@ -240,9 +240,9 @@
"brass":"",
"bronze":"",
"sterling":"",
-"gallium":"",
-"molten_gallium":"",
-"gallium_gas":"",
+"gallium":"镓",
+"molten_gallium":"熔融镓",
+"gallium_gas":"镓气",
"rose_gold":"玫瑰金",
"purple_gold":"紫金",
"blue_gold":"蓝金",
@@ -304,9 +304,9 @@
"candy":"糖果",
"coffee_bean":"咖啡豆",
"coffee_ground":"咖啡粉",
-"nut":"",
-"nut_meat":"",
-"nut_butter":"",
+"nut":"花生",
+"nut_meat":"花生碎",
+"nut_butter":"花生酱",
"jelly":"布丁",
"baking_soda":"苏打粉",
"yogurt":"",
@@ -331,8 +331,8 @@
"dye":"染料",
"ink":"墨水",
"mercury":"汞",
-"mercury_gas":"",
-"solid_mercury":"",
+"mercury_gas":"汞气",
+"solid_mercury":"固体汞",
"blood":"血",
"vaccine":"疫苗",
"antibody":"",
@@ -346,11 +346,11 @@
"honey":"蜂蜜",
"sap":"树叶",
"amber":"",
-"caramel":"",
+"caramel":"焦糖",
"molasses":"",
"ketchup":"蕃茄酱",
-"mayo":"",
-"melted_chocolate":"",
+"mayo":"蛋黄酱",
+"melted_chocolate":"熔融巧克力",
"liquid_hydrogen":"",
"liquid_oxygen":"",
"liquid_nitrogen":"",
@@ -372,7 +372,7 @@
"neon":"氖气",
"liquid_neon":"",
"smog":"",
-"stench":"",
+"stench":"臭",
"liquid_stench":"",
"fragrance":"香水",
"perfume":"香水",
@@ -406,8 +406,8 @@
"neutron":"",
"proton":"",
"electric":"电",
-"uranium":"",
-"molten_uranium":"",
+"uranium":"铀",
+"molten_uranium":"熔融铀",
"diamond":"钻石",
"gold_coin":"硬币",
"rust":"",
@@ -442,7 +442,7 @@
"room_temp":"",
"positron":"",
"tnt":"",
-"c4":"",
+"c4":"C4",
"grenade":"",
"dynamite":"",
"gunpowder":"",
@@ -503,7 +503,7 @@
"molten_pyrite":"",
"broth_ice":"",
"frozen_vinegar":"",
-"sauce_ice":"",
+"sauce_ice":"酱冰",
"alcohol_ice":"酒冰",
"bleach_ice":"",
"chlorine_ice":"",
@@ -524,9 +524,9 @@
"molten_sodium_acetate":"",
"frozen_nitro":"",
"cured_meat": "",
-"nut_oil": "",
+"nut_oil": "花生油",
"grease": "",
-"fat": "",
+"fat": "肥",
"potassium": "",
"molten_potassium": "",
"magnesium": "",
diff --git a/mod-list.html b/mod-list.html
index 08c15a6e..97910bad 100644
--- a/mod-list.html
+++ b/mod-list.html
@@ -146,6 +146,7 @@
| replace_all.js | Adds a way to replace every pixel of an element with another element Read the commit description for usage | Alice |
| replace.js | Adds a tool that replaces every pixel of a specified element with another specified element. (The prompt to specify these is toggled by pressing " or by the button in the element description) | Alice |
| save_loading.js | Adds the ability to save and load scenes from files (See the info page of the element) | Alice |
+| selective_paint.js | Adds a tool to paint only selected elements | SquareScreamYT |
| stripe_paint.js | Adds a tool to paint with stripes | Alice |
| the_ground.js | Adds several rock types, worldgen settings, and gemstones | Alice |
diff --git a/mods/aChefsDream.js b/mods/aChefsDream.js
index 198806d6..d33bd982 100644
--- a/mods/aChefsDream.js
+++ b/mods/aChefsDream.js
@@ -2,7 +2,7 @@
Created by SquareScreamYT <@918475812884344852> and RealerRaddler <@914371295561535508>
Thanks to Alice <@697799964985786450>, nousernamefound <@316383921346707468>, Adora the Transfem <@778753696804765696> and Fioushemastor <@738828785482203189> for helping :)
-v1.10.1
+v1.10.2
you can support me at my youtube: https://youtube.com/@sqec
@@ -328,6 +328,12 @@ Changelog (v1.10.1)
+Changelog (v1.10.2)
+ - added chocolate chip, sprinkles and topping explosions
+
+
+
+
*/
/*
@@ -6420,3 +6426,16 @@ elements.tapioca_leaves = {
state: "solid",
density: 1050
}
+elements.sprinkle_bomb = {
+ color: ["#eb726a", "#ebca6a", "#88eb6a", "#6aaceb", "#eb6ade"],
+ behavior: [
+ "XX|XX|XX",
+ "XX|XX|XX",
+ "XX|M1 AND EX:10>sprinkles|XX",
+ ],
+ category: "food",
+ state: "solid",
+ density: 1300,
+ excludeRandom: true,
+ cooldown: defaultCooldown
+}
diff --git a/mods/betterMenuScreens.js b/mods/betterMenuScreens.js
index dc18861c..d150d814 100644
--- a/mods/betterMenuScreens.js
+++ b/mods/betterMenuScreens.js
@@ -153,7 +153,7 @@ class MenuScreen {
/**
* Sets close button visibility. When false the close button will not be added to the menu screen
- * @param {boolean} show Visibility of the close button
+ * @param {boolean} show Visibility of the close g button
*/
setShowCloseButton(show) {
this.showCloseButton = show;
diff --git a/mods/betterSettings.js b/mods/betterSettings.js
index 811946a7..bb213cc0 100644
--- a/mods/betterSettings.js
+++ b/mods/betterSettings.js
@@ -6,16 +6,19 @@ const settingType = {
SELECT: [4, null]
}
class Setting {
- constructor (name, storageName, type, disabled = false, defaultValue = null) {
+ constructor (name, storageName, type, disabled = false, defaultValue = null, description = "", customValidator = () => true) {
this.tabName = null;
this.name = name;
this.storageName = storageName;
this.type = type[0];
this.disabled = disabled;
this.defaultValue = defaultValue ?? type[1];
+ this.description = description;
+ this.validate = customValidator;
}
set(value) {
+ if (!this.validate(value)) return false;
this.value = value;
const settings = JSON.parse(localStorage.getItem(`${this.tabName}/settings`)) ?? {};
settings[this.name] = value;
@@ -61,7 +64,7 @@ class Setting {
const id = "betterSettings/" + this.modName + "/" + this.storageName;
const span = document.createElement("span");
span.className = "setting-span";
- span.title = 'Default: "' + this.defaultValue + '"' + (this.disabled ? ". This setting is disabled." : "");
+ span.title = 'Default: "' + this.defaultValue + '"' + (this.disabled ? ". This setting is disabled" : "") + (this.description ? `. ${this.description}` : "");
span.innerText = this.name + " ";
const element = document.createElement("input");
switch (this.type) {
@@ -162,12 +165,14 @@ class SettingsTab {
if (this.categories.has(category)) this.categories.get(category).push(setting);
else this.categories.set(category, [setting]);
this.registry.set(setting.storageName, setting);
+ return this;
}
registerSettings(category = "General", ...settings) {
for (const setting of settings) {
this.registerSetting(setting, category);
}
+ return this;
}
set(name, value) {
diff --git a/mods/electricityTest.js b/mods/electricityTest.js
new file mode 100644
index 00000000..de4b87fb
--- /dev/null
+++ b/mods/electricityTest.js
@@ -0,0 +1,42 @@
+doElectricity = function (pixel) {
+ if (pixel.charge) {
+ // Check each adjacent pixel, if that pixel's charge is false, set it to the same charge
+ for (var i = 0; i < adjacentCoords.length; i++) {
+ var x = pixel.x+adjacentCoords[i][0];
+ var y = pixel.y+adjacentCoords[i][1];
+ if (!isEmpty(x,y,true)) {
+ var newPixel = pixelMap[x][y];
+ var con = elements[newPixel.element].conduct;
+ if (con == undefined) {continue}
+ if (Math.random() < con) { // If random number is less than conductivity
+ if (!newPixel.charge && !newPixel.chargeCD) {
+ newPixel.charge = 1;
+ if (elements[newPixel.element].colorOn) {
+ newPixel.color = pixelColorPick(newPixel);
+ }
+ }
+ }
+ else if (elements[newPixel.element].insulate != true) { // Otherwise heat the pixel (Resistance simulation)
+ newPixel.temp += pixel.charge/4;
+ if (con < 0.8) { newPixel.chargeCD = 8; }
+ pixelTempCheck(newPixel);
+ }
+ }
+ }
+ pixel.charge -= 0.25;
+ if (pixel.charge <= 0) {
+ delete pixel.charge;
+ pixel.chargeCD = 4;
+ }
+ }
+ // Lower charge cooldown
+ else if (pixel.chargeCD) {
+ pixel.chargeCD -= 1;
+ if (pixel.chargeCD <= 0) {
+ delete pixel.chargeCD;
+ if (elements[pixel.element].colorOn) {
+ pixel.color = pixelColorPick(pixel);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/mods/elementsManager.js b/mods/elementsManager.js
index 74cdbee9..23ac1dd0 100644
--- a/mods/elementsManager.js
+++ b/mods/elementsManager.js
@@ -257,7 +257,7 @@ if (enabledMods.includes("mods/betterMenuScreens.js")) {
// ugly way of doing it but probably works
const checkType = (key, value) => {
- if (key == "behavior" && (typeof value == "function" || (value instanceof Array && value.filter(e => e instanceof Array && e.filter(s => typeof s == "string").length == e.length).length == value.length))) return true;
+ if (key == "behavior" && (typeof value == "function" || (value instanceof Array && value.filter(e => typeof e == "string").length == value.length))) return true;
else if (key == "behavior") return false;
if (["darkText", "hidden", "insulate", "noMix", "isFood", "forceAutoGen", "customColor", "ignoreAir", "excludeRandom", "burning", "flipX", "flipY", "flippableX", "flippableY"].includes(key) && typeof value != "boolean") return false;
if (["name", "category", "desc", "alias", "seed", "baby", "state", "stateHigh", "stateHighName", "stateHighColor", "stateLow", "stateLowNmae", "stateLowColor"].includes(key) && typeof value != "string") return false;
diff --git a/mods/moreViews.js b/mods/moreViews.js
index 1d874d60..c2c18f67 100644
--- a/mods/moreViews.js
+++ b/mods/moreViews.js
@@ -34,18 +34,19 @@ setView = (n) => {
document.querySelector('span[setting="view"]').children[0].value = view ?? 0;
}
-for (const i in views) {
- if (i < 4) continue;
- const option = document.createElement("option");
- option.setAttribute("value", i);
- option.innerText = views[i];
- document.querySelector('.setting-span[setting="view"]').querySelector("select").appendChild(option);
- viewKey[i] = views[i];
-}
+runAfterLoadList.push(() => {
+ for (const i in views) {
+ if (i < 4) continue;
+ const option = document.createElement("option");
+ option.setAttribute("value", i);
+ option.innerText = views[i];
+ document.querySelector('.setting-span[setting="view"]').querySelector("select").appendChild(option);
+ viewKey[i] = views[i];
+ }
+})
const vcrFont = new FontFace("VCR", "url(mods/VCR_OSD_MONO.ttf)");
vcrFont.load().then(font => {
- console.log(font);
document.fonts.add(font);
})
diff --git a/mods/nousersthings.js b/mods/nousersthings.js
index 7164924c..54db584e 100644
--- a/mods/nousersthings.js
+++ b/mods/nousersthings.js
@@ -2343,4 +2343,29 @@ elements.scuffed_circle_brush = {
deletePixel(thisx, thisy)
createPixel(circleElem, thisx, thisy)
}
-}
\ No newline at end of file
+}
+elements.spacedust_cola = {
+ color: ["#090033", "#0a0027", "#0a001b", "#0b000f"],
+ behavior: elements.soda.behavior,
+ tempHigh: 104,
+ stateHigh: ["steam", "carbon_dioxide", "spacedust", "spacedust"],
+ category: "liquids",
+ state: "liquid",
+ reactions: {head: {elem1: null, chance: 0.02}},
+ density: elements.tungsten.density,
+}
+elements.spacedust = {
+ color: ["#090033", "#0a0027", "#0a001b", "#0b000f", "#090033", "#0a0027", "#0a001b", "#0b000f", "#090033", "#0a0027", "#0a001b", "#0b000f", "#090033", "#0a0027", "#0a001b", "#0b000f", "#090033", "#0a0027", "#0a001b", "#0b000f", "#090033", "#0a0027", "#0a001b", "#0b000f", "#ffffff"],
+ behavior: behaviors.POWDER,
+ category: "special",
+ state: "solid",
+ reactions: {
+ "acid": {elem1: null, elem2: ["hydrogen", "helium", "hydrogen", "helium", "hydrogen", "helium", "hydrogen", "hydrogen", "hydrogen", "hydrogen", "metal_scrap"], chance: 0.02},
+ "seltzer": {elem1: null, elem2: "spacedust_cola"},
+ "soda": {elem1: null, elem2: "spacedust_cola"},
+ },
+ density: elements.tungsten.density,
+}
+elements.acid.ignore.push("spacedust")
+elements.acid.ignore.push("spacedust_cola")
+elements.sun.breakInto = "spacedust"
\ No newline at end of file
diff --git a/mods/selective_paint.js b/mods/selective_paint.js
new file mode 100644
index 00000000..5cce2a37
--- /dev/null
+++ b/mods/selective_paint.js
@@ -0,0 +1,30 @@
+selectivePaintElem = ""
+elements.selective_paint = {
+ color: ["#c27070","#c29c70","#c2c270","#70c270","#70c2c2","#7070c2","#c270c2"],
+ onSelect: function() {
+ var answer = prompt("Please input the desired element to paint. It will not work if you enter multiple elements types while paused.",(selectivePaintElem||undefined));
+ if (!answer) { return }
+ selectivePaintElem = mostSimilarElement(answer);
+ },
+ tool: function(pixel) {
+ if (pixel.element == selectivePaintElem) {
+ if (!shiftDown) {
+ pixel.color = pixelColorPick(pixel,currentColor)
+ }
+ else {
+ // convert the hex of currentColor to rgb and set it as a string
+ var rgb = currentColor.replace("#","").match(/.{1,2}/g);
+ for (var i = 0; i < rgb.length; i++) {
+ rgb[i] = parseInt(rgb[i],16);
+ }
+ pixel.color = "rgb(" + rgb.join(",") + ")"
+ }
+ delete pixel.origColor;
+ }
+ },
+ customColor: true,
+ category: "tools",
+ canPlace: false,
+ excludeRandom:true,
+ desc: "Use on selected pixels to change their color."
+}
diff --git a/mods/video.js b/mods/video.js
index ce21ee24..2a75e490 100644
--- a/mods/video.js
+++ b/mods/video.js
@@ -89,6 +89,7 @@ elements.video = {
}
};
+ currentVideoFrames = [];
video.currentTime = 0;
video.onseeked = () => {