var modName = "mods/fire_mod.js"; var libraryMod = "mods/code_library.js"; if(enabledMods.includes(libraryMod)) { /* elements.iron.reactions.radiation = {elem1: 'dirty_water', elem2: null} when radiation touches iron, the iron turns into dirty_water (elem1) and the radiation deletes itself (elem2) elements.AAA.reactions.BBB: {elem1: CCC, elem2: DDD} when BBB touches AAA, the AAA becomes CCC and the BBB becomes DDD */ // imaginary reaction elements.iron.reactions.test //Variable fireSpawnBlacklist = ["fire","cold_fire","rad_fire"]; //doBurning function doBurning(pixel) { if (pixel.burning) { // Burning pixel.burnStart ??= pixelTicks; var info = elements[pixel.element]; var burnTempChange = info.burnTempChange ?? 1; var fireIsCold; var fire = info.fireElement === undefined ? "fire" : info.fireElement; //allow null but disallow undefined //console.log(info.fireElement,fire); while(fire instanceof Array) { fire = fire[Math.floor(Math.random()*fire.length)]; }; var fireTemp = info.fireSpawnTemp ?? pixel.temp; var fireChance = info.fireSpawnChance ?? 10; var fireIsCold = (fire === "cold_fire"); //var fireInfo = fire === null ? null : elements[fire]; pixel.temp += burnTempChange; pixelTempCheck(pixel); for (var i = 0; i < adjacentCoords.length; i++) { // Burn adjacent pixels 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 newInfo = elements[newPixel.element]; var newFireIsCold; var newFire = newInfo.fireElement == undefined ? "fire" : newInfo.fireElement; while(newFire instanceof Array) { newFire = newFire[Math.floor(Math.random()*newFire.length)]; }; newFireIsCold = (newFire === "cold_fire"); //console.log(`burning pixel ${pixel.element}: ${fire} (${fireIsCold}) / burned element ${newPixel.element}: ${newFire} (${newFireIsCold})`); if((!fireIsCold && !newFireIsCold) || (fireIsCold && newFireIsCold)) { if (elements[newPixel.element].burn && !newPixel.burning) { if (Math.floor(Math.random()*100) < elements[newPixel.element].burn) { newPixel.burning = true; newPixel.burnStart = pixelTicks; } } } } } if ((pixelTicks - pixel.burnStart > (info.burnTime || 200)) && Math.floor(Math.random()*100)<(info.burn || 10)) { var burnInto = info.burnInto ?? "fire"; while(burnInto instanceof Array) { burnInto = burnInto[Math.floor(Math.random()*burnInto.length)]; }; changePixel(pixel,burnInto,burnInto !== "smoke"); //console.log("ass"); pixel.temp = fireTemp; if (info.fireColor != undefined && burnInto == "fire") { pixel.color = pixelColorPick(pixel,info.fireColor); } else { pixel.color = pixelColorPick(pixel) } } else if (Math.floor(Math.random()*100)