survival.js but cheating
credits to Ryan for base game and survival.js
This commit is contained in:
parent
cdfcc8a612
commit
db0511f1df
|
|
@ -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) {
|
if (!settings.survival) {
|
||||||
settings.survival = {
|
settings.survival = {
|
||||||
"wall": 9999,
|
"wall": 9999,
|
||||||
|
|
@ -6,6 +404,7 @@ if (!settings.survival) {
|
||||||
"seeds": 50,
|
"seeds": 50,
|
||||||
"ice": 250,
|
"ice": 250,
|
||||||
"cloner": 10,
|
"cloner": 10,
|
||||||
|
"supercloner": 10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
settings.survival.cloner = 1;
|
settings.survival.cloner = 1;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue