diff --git a/mods/nousersthings.js b/mods/nousersthings.js index c4511bd4..5d3da033 100644 --- a/mods/nousersthings.js +++ b/mods/nousersthings.js @@ -96,4 +96,204 @@ elements.technetium = { temp: 2200, stateLow: "technetium", density: 11400 -} +}, +elements.destroyable_pipe = { + color: "#414c4f", + onSelect: function() { + logMessage("Draw a pipe, wait for walls to appear, then erase the exit hole."); + }, + tick: function(pixel) { + if (!pixel.stage && pixelTicks-pixel.start > 60) { + 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)) { + createPixel("brick",x,y); + pixelMap[x][y].color = pixelColorPick(pixel,"#808080"); + } + } + pixel.stage = 1; + } + else if (pixel.stage === 1 && pixelTicks-pixel.start > 70) { //uninitialized + 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)) { + pixel.stage = 2; //blue + pixel.color = pixelColorPick(pixel,"#000036"); + break; + } + } + } + else if (pixel.stage > 1 && pixelTicks % 3 === pixel.stage-2) { //initialized + 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) && pixelMap[x][y].element === "destroyable_pipe") { + var newPixel = pixelMap[x][y]; + if (newPixel.stage === 1) { + var newColor; + switch (pixel.stage) { + case 2: newPixel.stage = 3; newColor = "#003600"; break; //green + case 3: newPixel.stage = 4; newColor = "#360000"; break; //red + case 4: newPixel.stage = 2; newColor = "#000036"; break; //blue + } + newPixel.color = pixelColorPick(newPixel,newColor); + } + } + } + var moved = false; + shuffleArray(squareCoordsShuffle); + for (var i = 0; i < squareCoordsShuffle.length; i++) { + var coord = squareCoordsShuffle[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (!isEmpty(x,y,true)) { + var newPixel = pixelMap[x][y]; + if (newPixel.element === "destroyable_pipe") { + var nextStage; + switch (pixel.stage) { + case 2: nextStage = 4; break; //green + case 3: nextStage = 2; break; //red + case 4: nextStage = 3; break; //blue + } + if (pixel.con && !newPixel.con && newPixel.stage === nextStage) { //transfer to adjacent pipe + newPixel.con = pixel.con; + newPixel.con.x = newPixel.x; + newPixel.con.y = newPixel.y; + pixel.con = null; + moved = true; + break; + } + } + else if (!pixel.con && elements[newPixel.element].movable) { //suck up pixel + pixel.con = newPixel; + deletePixel(newPixel.x,newPixel.y); + pixel.con.x = pixel.x; + pixel.con.y = pixel.y; + pixel.con.del; + moved = true; + break; + } + } + } + if (pixel.con && !moved) { // move to same stage if none other + for (var i = 0; i < squareCoordsShuffle.length; i++) { + var coord = squareCoordsShuffle[i]; + var x = pixel.x+coord[0]; + var y = pixel.y+coord[1]; + if (isEmpty(x,y)) { + delete pixel.con.del; + pixel.con.x = x; + pixel.con.y = y; + pixelMap[x][y] = pixel.con; + currentPixels.push(pixel.con); + pixel.con = null; + break; + } + if (!isEmpty(x,y,true) && pixelMap[x][y].element === "destroyable_pipe") { + var newPixel = pixelMap[x][y]; + if (pixel.con && !newPixel.con && newPixel.stage === pixel.stage) { + newPixel.con = pixel.con; + newPixel.con.x = newPixel.x; + newPixel.con.y = newPixel.y; + pixel.con = null; + break; + } + } + } + } + } + doDefaults(pixel); + }, + category: "machines", + movable: false, + canContain: true, + tempHigh: 1538, + stateHigh: "molten_iron", + breakInto: "metal_scrap", +}, +elements.destroyable_superheater = { + color: "#dd1111", + behavior: [ + "XX|HT:10|XX", + "HT:10|XX|HT:10", + "XX|HT:10|XX", + ], + category:"machines", + stateLow:["iron","copper"], + tempLow: -7, + breakInto:["metal_scrap","oxidixed_copper"], +}, +elements.destroyable_heater = { + color: "#881111", + behavior: [ + "XX|HT:2|XX", + "HT:2|XX|HT:2", + "XX|HT:2|XX", + ], + category:"machines", + stateLow:["iron","copper"], + tempLow: -7, + breakInto:["metal_scrap","oxidixed_copper"], +}, +elements.destroyable_cooler = { + color: "#111188", + behavior: [ + "XX|CO:2|XX", + "CO:2|XX|CO:2", + "XX|CO:2|XX", + ], + category:"machines", + stateHigh:["iron","copper"], + tempHigh: 49, + breakInto:["metal_scrap","oxidixed_copper"], +}, +elements.destroyable_freezer = { + color: "#1111dd", + behavior: [ + "XX|CO:10|XX", + "CO:10|XX|CO:10", + "XX|CO:10|XX", + ], + category:"machines", + stateHigh:["iron","copper"], + tempHigh: 49, + breakInto:["metal_scrap","oxidixed_copper"], +}, +elements.destroyable_cloner = { + color: "#dddd00", + behavior: behaviors.CLONER, + ignore: ["ecloner","slow_cloner","clone_powder","floating_cloner","wall","ewall","destroyable_cloner","destroyable_clone_powder","cloner"], + category:"machines", + hardness: 1, + darkText: true, + breakInto: "destroyable_clone_powder", + tempHigh: 1538, + stateHigh: "molten_iron", +}, +elements.destroyable_clone_powder = { + color: "#f0f000", + behavior: [ + "XX|CF|XX", + "CF|XX|CF", + "M2|CF AND M1|M2", + ], + ignore: ["ecloner","slow_cloner","clone_powder","floating_cloner","wall","ewall","destroyable_cloner","destroyable_clone_powder","cloner"], + category:"machines", + state:"solid", + density:2710, + hardness: 1, + darkText: true, + breakInto: "destroyable_clone_powder", + tempHigh: 1538, + stateHigh: "molten_iron", +}, +eLists.CLONERS = ["ecloner","slow_cloner","clone_powder","floating_cloner","wall","ewall","destroyable_cloner","destroyable_clone_powder","cloner"]; +elements.cloner.ignore = eLists.CLONERS; +elements.slow_cloner.ignore = eLists.CLONERS; +elements.clone_powder.ignore = eLists.CLONERS; +elements.floating_cloner.ignore = eLists.CLONERS;