From db0511f1df0992f6e425f873781f0c3d737c7aa3 Mon Sep 17 00:00:00 2001 From: GuyWhoGotSpringlocked <163777207+GWhoGS@users.noreply.github.com> Date: Sun, 14 Apr 2024 21:14:53 -0400 Subject: [PATCH] survival.js but cheating credits to Ryan for base game and survival.js --- mods/easysurvival.js | 399 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 399 insertions(+) diff --git a/mods/easysurvival.js b/mods/easysurvival.js index 9b8aba3f..86fdcc7b 100644 --- a/mods/easysurvival.js +++ b/mods/easysurvival.js @@ -1,3 +1,401 @@ +behaviors = { + POWDER_OLD: [ + "XX|XX|XX", + "XX|XX|XX", + "M2|M1|M2", + ], + POWDER: function(pixel) { + if (pixel.start === pixelTicks) {return} + if (pixel.charge && elements[pixel.element].behaviorOn) { + pixelTick(pixel) + } + if (!tryMove(pixel, pixel.x, pixel.y+1)) { + if (Math.random() < 0.5) { + if (!tryMove(pixel, pixel.x+1, pixel.y+1)) { + tryMove(pixel, pixel.x-1, pixel.y+1); + } + } else { + if (!tryMove(pixel, pixel.x-1, pixel.y+1)) { + tryMove(pixel, pixel.x+1, pixel.y+1); + } + } + } + doDefaults(pixel); + }, + AGPOWDER: [ + "M2|M1|M2", + "XX|XX|XX", + "XX|XX|XX", + ], + LIQUID_OLD: [ + "XX|XX|XX", + "M2|XX|M2", + "M1|M1|M1", + ], + LIQUID: function(pixel) { + if (pixel.start === pixelTicks) {return} + if (pixel.charge && elements[pixel.element].behaviorOn) { + pixelTick(pixel) + } + if (elements[pixel.element].viscosity && (!((Math.random()*100) < 100 / Math.pow(elements[pixel.element].viscosity, 0.25)))) { + var move1Spots = [ + [pixel.x, pixel.y+1] + ] + } + else { + var move1Spots = [ + [pixel.x+1, pixel.y+1], + [pixel.x, pixel.y+1], + [pixel.x-1, pixel.y+1], + ] + } + var moved = false; + for (var i = 0; i < move1Spots.length; i++) { + var coords = move1Spots[Math.floor(Math.random()*move1Spots.length)]; + if (tryMove(pixel, coords[0], coords[1])) { moved = true; break; } + else { move1Spots.splice(move1Spots.indexOf(coords), 1); } + } + if (!moved) { + if (elements[pixel.element].viscosity===undefined || !(!((Math.random()*100) < 100 / Math.pow(elements[pixel.element].viscosity, 0.25)))) { + if (Math.random() < 0.5) { + if (!tryMove(pixel, pixel.x+1, pixel.y)) { + tryMove(pixel, pixel.x-1, pixel.y); + } + } else { + if (!tryMove(pixel, pixel.x-1, pixel.y)) { + tryMove(pixel, pixel.x+1, pixel.y); + } + } + } + } + doDefaults(pixel); + }, + SUPERFLUID_OLD: [ + "XX|XX|XX", + "XX|XX|M2 AND BO", + "XX|M1|M2", + ], + SUPERFLUID: function(pixel) { + if (pixel.start === pixelTicks) {return} + if (pixel.charge && elements[pixel.element].behaviorOn) { + pixelTick(pixel) + } + if (!tryMove(pixel, pixel.x, pixel.y+1)) { + // go either left or right depending on pixel.flipX + var newx = pixel.flipX ? pixel.x-1 : pixel.x+1; + if (Math.random() < 0.5) { + if (!tryMove(pixel, newx, pixel.y)) { + pixel.flipX = !pixel.flipX; + tryMove(pixel, newx, pixel.y+1); + } + } + else { + if (!tryMove(pixel, newx, pixel.y+1)) { + if (!tryMove(pixel, newx, pixel.y)) { pixel.flipX = !pixel.flipX; } + } + } + } + doDefaults(pixel); + }, + LIGHTWEIGHT: [ + "XX|XX|XX", + "XX|FX%0.25|XX", + "M2%10|M1%10|M1%10", + ], + SLIDE: [ + "XX|XX|XX", + "XX|XX|M2 AND BO", + "XX|M1|M1", + ], + AGLIQUID: [ + "M1|M1|M1", + "M2|XX|M2", + "XX|XX|XX", + ], + WALL: [ + "XX|XX|XX", + "XX|XX|XX", + "XX|XX|XX", + ], + UL_UR: [ + "M1|M1|M1", + "M2|XX|M2", + "XX|M2|XX", + ], + UL_UR_OPTIMIZED: function(pixel) { + if (pixel.start === pixelTicks) {return} + if (pixel.charge && elements[pixel.element].behaviorOn) { + pixelTick(pixel) + } + var move1Spots = [ + [pixel.x, pixel.y-1], + [pixel.x+1, pixel.y-1], + [pixel.x-1, pixel.y-1], + ] + var moved = false; + for (var i = 0; i < move1Spots.length; i++) { + var coords = move1Spots[Math.floor(Math.random()*move1Spots.length)]; + if (tryMove(pixel, coords[0], coords[1])) { moved = true; break; } + else { move1Spots.splice(move1Spots.indexOf(coords), 1);} + } + if (!moved && !pixel.del) { + var move2Spots = [ + [pixel.x, pixel.y+1], + [pixel.x+1, pixel.y], + [pixel.x-1, pixel.y], + ] + for (var i = 0; i < move2Spots.length; i++) { + var coords = move2Spots[Math.floor(Math.random()*move2Spots.length)]; + if (tryMove(pixel, coords[0], coords[1])) { break; } + else { move2Spots.splice(move2Spots.indexOf(coords), 1); } + } + } + if (!pixel.del) { doDefaults(pixel); } + }, + GAS_OLD: [ + "M2|M1|M2", + "M1|XX|M1", + "M2|M1|M2", + ], + GAS: function(pixel) { + if (pixel.start === pixelTicks) {return} + if (pixel.charge && elements[pixel.element].behaviorOn) { + pixelTick(pixel) + } + var move1Spots = [ + [pixel.x, pixel.y+1], + [pixel.x, pixel.y-1], + [pixel.x+1, pixel.y], + [pixel.x-1, pixel.y], + ] + var moved = false; + for (var i = 0; i < move1Spots.length; i++) { + var coords = move1Spots[Math.floor(Math.random()*move1Spots.length)]; + if (tryMove(pixel, coords[0], coords[1])) { moved = true; break; } + else { move1Spots.splice(move1Spots.indexOf(coords), 1);} + } + if (!moved) { + var move2Spots = [ + [pixel.x+1, pixel.y+1], + [pixel.x-1, pixel.y+1], + [pixel.x+1, pixel.y-1], + [pixel.x-1, pixel.y-1], + ] + for (var i = 0; i < move2Spots.length; i++) { + var coords = move2Spots[Math.floor(Math.random()*move2Spots.length)]; + if (tryMove(pixel, coords[0], coords[1])) { break; } + else { move2Spots.splice(move2Spots.indexOf(coords), 1); } + } + } + doDefaults(pixel); + }, + DGAS: [ + "M2|M1|M2", + "M1|DL%5|M1", + "M2|M1|M2", + ], + SUPPORT: [ + "XX|XX|XX", + "SP|XX|SP", + "XX|M1|XX", + ], + SUPPORTPOWDER: [ + "XX|XX|XX", + "SP|XX|SP", + "M2|M1|M2", + ], + DELETE: [ + "XX|DL|XX", + "DL|XX|DL", + "XX|DL|XX", + ], + FILL: [ + "XX|CL|XX", + "CL|XX|CL", + "XX|CL|XX", + ], + CLONER: [ + "XX|CF|XX", + "CF|XX|CF", + "XX|CF|XX", + ], + SUPERCLONER: [ + "CF|CF|CF", + "CF|CF|CF", + "CF|CF|CF", + ], + STURDYPOWDER: [ + "XX|XX|XX", + "XX|XX|XX", + "XX|M1|XX", + ], + SELFDELETE: [ + "XX|XX|XX", + "XX|DL|XX", + "XX|XX|XX", + ], + FOAM: [ + "XX|XX|XX", + "XX|DL%5|XX", + "M2%25|M1%25|M2%25", + ], + BUBBLE: [ + "XX|XX|XX", + "XX|DL%0.25 AND FX%1|M1%5", + "XX|M1%1|M1%2", + ], + STICKY: [ + "XX|ST|XX", + "ST|XX|ST", + "XX|ST AND M1|XX", + ], + MOLTEN: [ + "XX|CR:fire%2.5|XX", + "M2|XX|M2", + "M1|M1|M1", + ], + RADPOWDER: [ + "XX|CR:radiation%1|XX", + "CR:radiation%1|XX|CR:radiation%1", + "M2|M1|M2", + ], + RADMOLTEN: [ + "XX|CR:fire,fire,fire,radiation%4.5|XX", + "M2 AND CR:radiation%1|XX|M2 AND CR:radiation%1", + "M1|M1|M1", + ], + RADLIQUID: [ + "XX|CR:radiation%2|XX", + "M2 AND CR:radiation%2|XX|M2 AND CR:radiation%2", + "M1|M1|M1", + ], + BOUNCY: function(pixel) { + if (pixel.bx===undefined) { + // choose 1, 0, or -1 + pixel.bx = Math.random() < 0.5 ? 1 : Math.random() < 0.5 ? 0 : -1; + pixel.by = Math.random() < 0.5 ? 1 : Math.random() < 0.5 ? 0 : -1; + // if both are 0, make one of them 1 or -1 + if (pixel.bx===0 && pixel.by===0) { + if (Math.random() < 0.5) { pixel.bx = Math.random() < 0.5 ? 1 : -1; } + else { pixel.by = Math.random() < 0.5 ? 1 : -1; } + } + } + // move and invert direction if hit + if (!pixel.del && pixel.bx && !tryMove(pixel, pixel.x+pixel.bx, pixel.y)) { pixel.bx = -pixel.bx; } + if (!pixel.del && pixel.by && !tryMove(pixel, pixel.x, pixel.y+pixel.by)) { pixel.by = -pixel.by; } + }, + FEEDPIXEL: function(pixel) { + if (!pixel.food) { pixel.food = 1 } + else { pixel.food ++ } + if (pixel.food > (elements[pixel.element].foodNeed||30)) { + // loop through adjacentCoords and check each pixel to lay an egg + 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)) { + if (elements[pixel.element].egg) { + createPixel(elements[pixel.element].egg,x,y) + } + else { + createPixel("egg",x,y) + pixelMap[x][y].animal = elements[pixel.element].baby || pixel.element; + if (elements[pixel.element].eggColor) { + pixelMap[x][y].color = pixelColorPick(pixelMap[x][y],elements[pixel.element].eggColor) + } + } + pixel.food = 0; + break; + } + } + } + }, + KILLPIXEL1: function(pixel) { + pixel.dead = true; + }, + KILLPIXEL2: function(pixel1,pixel2) { + pixel2.dead = true; + }, + FLY: function(pixel, onHit) { + var nx = pixel.flipX ? -1 : 1; + var ny = Math.random() < 0.5 ? -1 : 1; + var hit = false; + if (!tryMove(pixel, pixel.x+nx, pixel.y+ny)) { + if (!tryMove(pixel, pixel.x+nx, pixel.y-ny)) { + if (!tryMove(pixel, pixel.x, pixel.y+ny)) { + if (!tryMove(pixel, pixel.x, pixel.y-ny)) {hit=[pixel.x, pixel.y-ny]} + }else {hit=[pixel.x, pixel.y+ny]} + }else {hit=[pixel.x+nx, pixel.y-ny]} + }else {hit=[pixel.x+nx, pixel.y+ny]} + if (hit && onHit) { + if (!isEmpty(hit[0], hit[1], true)) { + onHit(pixel, pixelMap[hit[0]][hit[1]]); + } + else {onHit(pixel);} + } + if (pixel.del) {return} + if (!isEmpty(pixel.x+nx,pixel.y) || Math.random() < 0.02) { + pixel.flipX = !pixel.flipX; + } + if (pixel.charge && elements[pixel.element].behaviorOn) { + pixelTick(pixel) + } + doDefaults(pixel); + }, + CRAWLER: function(pixel) { + if (Math.random() < 0.08) { // flip + pixel.flipX = !pixel.flipX; + } + var dir = pixel.flipX ? -1 : 1; + var dirY = pixel.flipY ? -1 : 1; + if (!tryMove(pixel,pixel.x,pixel.y+dirY)) { // fall or climb + if (!tryMove(pixel,pixel.x+dir,pixel.y)) { // hits wall + if (!pixel.hilled && !isEmpty(pixel.x+dir,pixel.y,true) && pixelMap[pixel.x+dir][pixel.y].element === "ant_wall") { + pixel.hilled = true; + } + tryMove(pixel,pixel.x+dir,pixel.y + (Math.random() < 0.25 ? 1 : -1)); + } + if (Math.random() < 0.01 && !isEmpty(pixel.x+dir,pixel.y+1,true) && eLists.CRAWLTHRU.indexOf(pixelMap[pixel.x+dir][pixel.y+1].element) !== -1) { + if (!pixel.hilled || !isEmpty(pixel.x+dir,pixel.y,true) && pixelMap[pixel.x+dir][pixel.y].element === "ant_wall") { + var wallCoords = [ + [-1,-1],[1,-1], + [-1,0],[1,0], + [0,1] + ]; + if (!isEmpty(pixel.x,pixel.y-2)) { + wallCoords.push([0,-1]) + } + if (Math.random() < 0.15) { wallCoords.push([-1,1]) } + if (Math.random() < 0.15) { wallCoords.push([1,1]) } + // loop through wallCoords, change pixel to ant_wall if in crawlthru + for (var i = 0; i < wallCoords.length; i++) { + var x = pixel.x+dir+wallCoords[i][0]; + var y = pixel.y+1+wallCoords[i][1]; + if (!isEmpty(x,y,true) && eLists.CRAWLTHRU.indexOf(pixelMap[x][y].element) !== -1) { + changePixel(pixelMap[x][y],"ant_wall"); + } + } + deletePixel(pixel.x+dir,pixel.y+1); + tryMove(pixel,pixel.x+dir,pixel.y+1); + } + } + else if (Math.random() < 0.08 && !isEmpty(pixel.x+dir,pixel.y-1,true) && eLists.CRAWLTHRU.indexOf(pixelMap[pixel.x+dir][pixel.y-1].element) !== -1) { + swapPixels(pixel,pixelMap[pixel.x+dir][pixel.y-1]); + } + } + doDefaults(pixel); + } +} + +elements.supercloner = { + color: "#dddd00", + behavior: behaviors.SUPERCLONER, + ignore: ["ecloner","slow_cloner","clone_powder","floating_cloner","wall","ewall", "cloner"], + category:"inventory", + insulate:true, + hardness: 1, + darkText: true, +} + if (!settings.survival) { settings.survival = { "wall": 9999, @@ -6,6 +404,7 @@ if (!settings.survival) { "seeds": 50, "ice": 250, "cloner": 10, + "supercloner": 10 } } settings.survival.cloner = 1;