From 417c17622ee18e45742e321959a44b28e9f23e85 Mon Sep 17 00:00:00 2001 From: JustAGenericUsername Date: Wed, 24 Jan 2024 12:51:15 -0500 Subject: [PATCH 1/2] logic mod + fixes --- mods/logicgates.js | 291 ++++++++++++++++++++++++++++++++++++++++++ mods/nousersthings.js | 4 +- 2 files changed, 294 insertions(+), 1 deletion(-) create mode 100644 mods/logicgates.js diff --git a/mods/logicgates.js b/mods/logicgates.js new file mode 100644 index 00000000..50fd527c --- /dev/null +++ b/mods/logicgates.js @@ -0,0 +1,291 @@ +elements.output = { + color: "#601616", + category: "logic", + state: "solid", + behavior: behaviors.WALL, + conduct: 1, + tick: function(pixel){ + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true) && pixel.charged) { + if (pixelMap[x][y].element == "logic_wire" && pixelMap[x][y].lstate == 0){ + if (pixelMap[x][y].lastUpdate == pixelTicks){ + pixelMap[x][y].lstate = 2 + pixelMap[x][y].color = pixelColorPick(pixelMap[x][y], "#ffe49c") + } else { + pixelMap[x][y].lstate = 1 + } + } + } + } + } +} +elements.logic_wire = { + color: "#3d4d2c", + behavior: behaviors.WALL, + state: "solid", + category: "logic", + tick: function (pixel){ // -2 uncharge spread -1 uncharge buffer 0 uncharged 1 charge buffer 2 charge spread + pixel.lastUpdate = pixelTicks + if (!pixel.lstate){ + pixel.lstate = 0 + } + if (pixel.lstate == 0){ + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if (pixelMap[x][y].element == "output" && pixelMap[x][y].charge == 1){ + pixel.lstate == 2; + pixel.color = pixelColorPick(pixel, "#ffe49c"); + } + } + } + } + if (pixel.lstate == 2){ + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if (pixelMap[x][y].element == "logic_wire" && pixelMap[x][y].lstate == 0){ + if (pixelMap[x][y].lastUpdate == pixelTicks){ + pixelMap[x][y].lstate = 2 + pixelMap[x][y].color = pixelColorPick(pixelMap[x][y], "#ffe49c") + } else { + pixelMap[x][y].lstate = 1 + } + } else if (pixelMap[x][y].element == "output" && pixelMap[x][y].charged == 0){ + pixel.lstate = -2 + pixel.color = pixelColorPick(pixel, "#3d4d2c") + } + } + } + } + if (pixel.lstate == 1){ + pixel.lstate = 2 + pixel.color = pixelColorPick(pixel, "#ffe49c"); + } + if (pixel.lstate == -2){ + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if (pixelMap[x][y].element == "logic_wire" && (pixelMap[x][y].lstate == 1 || pixelMap[x][y].lstate == 2)){ + if (pixelMap[x][y].lastUpdate == pixelTicks){ + pixelMap[x][y].lstate = -2 + pixelMap[x][y].color = pixelColorPick(pixelMap[x][y], "#3d4d2c") + } else { + pixelMap[x][y].lstate = -1 + } + } + } + } + pixel.lstate = 0 + } + if (pixel.lstate == -1){ + pixel.lstate = -2 + pixel.color = pixelColorPick(pixel, "#3d4d2c"); + } + } +} +function countNeighbors(){ + var results = { + "charged": 0, + "uncharged": 0, + } + for (var i = 0; i < squareCoords.length; i++) { + var coord = squareCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y, true)) { + var otherPixel = pixelMap[x][y]; + if (otherPixel.element == "logic_wire"){ + if (otherPixel.lstate){ + results.charged = results.charged + 1; + } else { + results.uncharged = results.uncharged + 1; + } + } + } + } + return results; +} +function chargeOutputs(){ + for (var i = 0; i < squareCoords.length; i++) { + var coord = squareCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y, true)) { + var otherPixel = pixelMap[x][y]; + if (otherPixel.element == "output"){ + otherPixel.charged = 1; + } + } + } +} +function unchargeOutputs(){ + for (var i = 0; i < squareCoords.length; i++) { + var coord = squareCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y, true)) { + var otherPixel = pixelMap[x][y]; + if (otherPixel.element == "output"){ + otherPixel.charged = 0; + } + } + } +} +elements.not_gate = { + color: "#4a1b18", + category: "logic", + state: "solid", + behavior: behaviors.WALL, + tick: function(pixel){ + var countNeighborsResult = countNeighbors() + if (countNeighborsResult.charged == 0){ + chargeOutputs(); + } else { + unchargeOutputs(); + } + } +} +elements.and_gate = { + color: "#184a23", + category: "logic", + state: "solid", + behavior: behaviors.WALL, + tick: function(pixel){ + var countNeighborsResult = countNeighbors() + if (countNeighborsResult.uncharged == 0){ + chargeOutputs(); + } else { + unchargeOutputs(); + } + } +} +elements.xor_gate = { + color: "#30184a", + category: "logic", + state: "solid", + behavior: behaviors.WALL, + tick: function(pixel){ + var countNeighborsResult = countNeighbors() + if (countNeighborsResult.charged == 1){ + chargeOutputs(); + } else { + unchargeOutputs(); + } + } +} +elements.or_gate = { + color: "#4a4018", + category: "logic", + state: "solid", + behavior: behaviors.WALL, + tick: function(pixel){ + var countNeighborsResult = countNeighbors() + if (countNeighborsResult.charged >= 1){ + chargeOutputs(); + } else { + unchargeOutputs(); + } + } +} +elements.E2L_lever = { + color: "#b2ba75", + behavior: behaviors.WALL, + state: "solid", + category: "logic", + tick: function(pixel){ + if (pixel.start === pixelTicks){ + pixel.cooldown = 0; + pixel.toggleMode = 1; + } + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if ((pixelMap[x][y].charge || pixelMap[x][y].chargeCD) && pixel.cooldown == 0){ + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if (pixelMap[x][y].element == "logic_wire"){ + if (pixel.toggleMode == 1){ + pixelMap[x][y].lstate = 2 + pixelMap[x][y].color = pixelColorPick(pixel, "#ffe49c"); + } else { + pixelMap[x][y].lstate = -2 + pixelMap[x][y].color = pixelColorPick(pixel, "#3d4d2c"); + } + } + } + } + pixel.cooldown = 15 + if (pixel.toggleMode){ + pixel.toggleMode = 0; + } else { + pixel.toggleMode = 1; + } + } + } + } + if (pixel.cooldown){ + pixel.cooldown = pixel.cooldown - 1 + } + } +} +elements.E2L_button = { + color: "#b2ba75", + behavior: behaviors.WALL, + state: "solid", + category: "logic", + tick: function(pixel){ + if (pixel.start === pixelTicks){ + pixel.cooldown = 0; + pixel.toggleMode = 1; + } + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if ((pixelMap[x][y].charge || pixelMap[x][y].chargeCD) && pixel.cooldown == 0){ + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if (pixelMap[x][y].element == "logic_wire"){ + if (pixel.toggleMode == 1){ + pixelMap[x][y].lstate = 2 + pixelMap[x][y].color = pixelColorPick(pixel, "#ffe49c"); + } else { + pixelMap[x][y].lstate = -2 + pixelMap[x][y].color = pixelColorPick(pixel, "#3d4d2c"); + } + } + } + } + pixel.cooldown = 5 + if (pixel.toggleMode){ + pixel.toggleMode = 0; + } else { + pixel.toggleMode = 1; + } + } + } + } + if (pixel.cooldown){ + pixel.cooldown = pixel.cooldown - 1 + } + } +} \ No newline at end of file diff --git a/mods/nousersthings.js b/mods/nousersthings.js index fda04d62..5fc77088 100644 --- a/mods/nousersthings.js +++ b/mods/nousersthings.js @@ -1527,6 +1527,8 @@ elements.invisiblewall = { } }, category: "solids", + movable: false, + noMix: true, }, elements.bismuth = { color: ["#818181","#989898","#b0b0b0","#c9c9c9"], @@ -2013,7 +2015,7 @@ elements.element_filler = { onSelect: function() { var answer6 = prompt("Please input the desired element of this filler. It will not work if you do multiple filter types while paused.",(elemfillerVar||undefined)); if (!answer6) { return } - elemfillerVar = answer6; + elemfillerVar = mostSimilarElement(answer6); }, tick: function(pixel){ var neighbors = 0; From 341c25fee8167dc0096a45e479ddb3ecf1f244d9 Mon Sep 17 00:00:00 2001 From: JustAGenericUsername Date: Wed, 24 Jan 2024 13:32:08 -0500 Subject: [PATCH 2/2] me when t he logic again --- mods/logicgates.js | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/mods/logicgates.js b/mods/logicgates.js index 50fd527c..0eca9be3 100644 --- a/mods/logicgates.js +++ b/mods/logicgates.js @@ -288,4 +288,46 @@ elements.E2L_button = { pixel.cooldown = pixel.cooldown - 1 } } +} +elements.L2E_constant = { + color: "#b2ba75", + behavior: behaviors.WALL, + state: "solid", + category: "logic", + tick: function(pixel){ + var foundOn = false; + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if (pixelMap[x][y].element == "logic_wire" && pixelMap[x][y].lstate){ + foundOn = true; + } + } + } + if (foundOn){ + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if (elements[pixelMap[x][y].element].conduct){ + pixelMap[x][y].charge = 1 + } + } + } + } else { + for (var i = 0; i < adjacentCoords.length; i++) { + var coord = adjacentCoords[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + if (elements[pixelMap[x][y].element].conduct){ + pixelMap[x][y].charge = 0 + } + } + } + } + } } \ No newline at end of file