2024-08-21 14:04:52 -04:00
|
|
|
/* mod by nekonico, do not steal without credit */
|
2024-08-14 02:00:05 -04:00
|
|
|
|
2024-08-18 21:25:15 -04:00
|
|
|
behaviors.BODY_DELETE = function(pixel) {
|
|
|
|
|
if (pixel.willbuildhouse == true) {
|
|
|
|
|
HouseBuilder = false;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
2024-08-14 02:00:05 -04:00
|
|
|
window.addEventListener("load", () => {
|
|
|
|
|
document.getElementById("elementButton-easy_way_out")?.remove()
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
elements.easy_way_out = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: "#00000f",
|
|
|
|
|
excludeRandom: true,
|
|
|
|
|
onPlace: function(pixel) {
|
|
|
|
|
deletePixel(pixel.x, pixel.y);
|
|
|
|
|
},
|
|
|
|
|
category: "special",
|
|
|
|
|
state: "solid",
|
|
|
|
|
movable: false,
|
|
|
|
|
},
|
|
|
|
|
|
2024-08-18 21:25:15 -04:00
|
|
|
HouseBuilder = false
|
|
|
|
|
|
2024-08-14 02:00:05 -04:00
|
|
|
elements.cultured_human = {
|
|
|
|
|
name: "human",
|
|
|
|
|
// color: ["#f5eac6","#d4c594","#a89160","#7a5733","#523018","#361e0e"],
|
|
|
|
|
color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"],
|
|
|
|
|
category: "human",
|
|
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0
|
|
|
|
|
},
|
|
|
|
|
onPlace: function(pixel) {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1)) {
|
|
|
|
|
createPixel("c_body", pixel.x, pixel.y+1);
|
|
|
|
|
createPixel("c_head", pixel.x, pixel.y);
|
2024-08-18 21:25:15 -04:00
|
|
|
var bodypixel = pixelMap[pixel.x][pixel.y+1];
|
2024-08-14 02:00:05 -04:00
|
|
|
}
|
|
|
|
|
else if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
createPixel("c_head", pixel.x, pixel.y-1);
|
|
|
|
|
pixelMap[pixel.x][pixel.y-1].color = pixel.color;
|
|
|
|
|
createPixel("c_body", pixel.x, pixel.y);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
deletePixel(pixel.x, pixel.y);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
related: ["c_body","c_head"],
|
2024-08-18 21:25:15 -04:00
|
|
|
maxSize: 1,
|
|
|
|
|
cooldown: 10,
|
2024-08-14 02:00:05 -04:00
|
|
|
forceSaveColor: true,
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.c_body = {
|
|
|
|
|
name: "body",
|
|
|
|
|
color: ["#069469","#047e99","#7f5fb0"],
|
|
|
|
|
forceSaveColor: true,
|
|
|
|
|
category: "human",
|
|
|
|
|
hidden: true,
|
|
|
|
|
density: 1500,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
temp: 37,
|
|
|
|
|
tempHigh: 200,
|
|
|
|
|
stateHigh: "cooked_meat",
|
|
|
|
|
tempLow: -30,
|
|
|
|
|
stateLow: "frozen_meat",
|
|
|
|
|
burn: 10,
|
|
|
|
|
burnTime: 250,
|
|
|
|
|
burnInto: "cooked_meat",
|
|
|
|
|
breakInto: ["blood","meat","bone"],
|
|
|
|
|
reactions: {
|
|
|
|
|
"basket": { func:function(pixel,basket){ if (pixel.basket == false) {changePixel(basket,"easy_way_out"), (pixel.basket = true);} }, chance:0.5 },
|
2024-08-18 21:25:15 -04:00
|
|
|
"pickaxe": { func:function(pixel,pickaxe){ if (pixel.pickaxe == false) {changePixel(pickaxe,"easy_way_out"), (pixel.pickaxe = true),(pixel.willbuildmine = true);} }, chance:0.5 },
|
|
|
|
|
"cancer": { elem1:"cancer", chance:0.0005 },
|
|
|
|
|
"poison": { attr1:{"dead":true}, chance:0.4 },
|
2024-08-14 02:00:05 -04:00
|
|
|
"radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 },
|
|
|
|
|
"neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 },
|
|
|
|
|
"fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.01 },
|
|
|
|
|
"plague": { elem1:"plague", chance:0.05 },
|
|
|
|
|
"egg": { func:function(pixel,egg){
|
|
|
|
|
if (pixel.basket == true) {(pixel.eggcount += 1), changePixel(egg,"easy_way_out");}
|
|
|
|
|
else {changePixel(egg,"yolk");}
|
|
|
|
|
}, chance:0.5},
|
|
|
|
|
"flour": { func:function(pixel,flour){
|
|
|
|
|
if (pixel.basket == true) {(pixel.flourcount += 1), changePixel(flour,"easy_way_out");}
|
|
|
|
|
}, chance:0.5},
|
|
|
|
|
"dough": { func:function(pixel,dough){
|
|
|
|
|
if (pixel.basket == true) {(pixel.doughcount += 1), changePixel(dough,"easy_way_out");}
|
|
|
|
|
}, chance:0.5},
|
|
|
|
|
"meat": { func:function(pixel,meat){
|
|
|
|
|
if (pixel.basket == true) {(pixel.meatcount += 1), changePixel(meat,"easy_way_out");}
|
|
|
|
|
}, chance:0.4},
|
|
|
|
|
"cured_meat": { func:function(pixel,meat){
|
2024-08-18 21:25:15 -04:00
|
|
|
if (pixel.basket == true) {(pixel.meatcount += 2), changePixel(meat,"easy_way_out");}
|
2024-08-14 02:00:05 -04:00
|
|
|
}, chance:0.5},
|
|
|
|
|
"bread": { func:function(pixel,bread){
|
|
|
|
|
if (pixel.basket == true) {(pixel.breadcount += 1), changePixel(bread,"easy_way_out");}
|
|
|
|
|
else if (pixel.basket == false && pixel.breadcount < 1) {(pixel.breadcount = 1), changePixel(bread,"easy_way_out");}
|
|
|
|
|
}, chance:0.5},
|
|
|
|
|
"toast": { func:function(pixel,bread){
|
2024-08-18 21:25:15 -04:00
|
|
|
if (pixel.basket == true) {(pixel.breadcount += 2), changePixel(bread,"easy_way_out");}
|
|
|
|
|
else if (pixel.basket == false && pixel.breadcount < 1) {(pixel.breadcount = 1), changePixel(bread,"easy_way_out");}
|
|
|
|
|
}, chance:0.4},
|
|
|
|
|
"baked_batter": { func:function(pixel,bread){
|
|
|
|
|
if (pixel.basket == true) {(pixel.breadcount += 5), changePixel(bread,"easy_way_out");}
|
2024-08-14 02:00:05 -04:00
|
|
|
else if (pixel.basket == false && pixel.breadcount < 1) {(pixel.breadcount = 1), changePixel(bread,"easy_way_out");}
|
|
|
|
|
}, chance:0.4},
|
|
|
|
|
"crumb": { func:function(pixel,bread){
|
|
|
|
|
if (pixel.basket == true) {(pixel.breadcount += 0.1), changePixel(bread,"easy_way_out");}
|
|
|
|
|
}, chance:0.1},
|
|
|
|
|
"cooked_meat": { func:function(pixel,cooked_meat){
|
|
|
|
|
if (pixel.basket == true) {(pixel.cookedmeatcount += 1), changePixel(cooked_meat,"easy_way_out");}
|
|
|
|
|
else if (pixel.basket == true && pixel.cookedmeatcount < 1) {(pixel.cookedmeatcount = 1), changePixel(cooked_meat,"easy_way_out");}
|
|
|
|
|
}, chance:0.5},
|
|
|
|
|
"bead": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.1},
|
|
|
|
|
"glitter": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.1},
|
|
|
|
|
"copper_sulfate": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.05},
|
|
|
|
|
"confetti": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.05},
|
|
|
|
|
"color_sand": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.05},
|
|
|
|
|
"incense": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.05},
|
|
|
|
|
"pinecone": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.03},
|
|
|
|
|
"feather": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"glass_shard": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"porcelain_shard": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"flower_seed": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.01},
|
2024-08-18 21:25:15 -04:00
|
|
|
"grass_seed": { func:function(pixel,trinket){
|
2024-08-14 02:00:05 -04:00
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.05},
|
|
|
|
|
"petal": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"metal_scrap": { func:function(pixel,trinket){
|
|
|
|
|
if (pixel.basket == true) {(pixel.trinketscount += 1), changePixel(trinket,"easy_way_out");}
|
|
|
|
|
}, chance:0.01},
|
2024-08-18 21:25:15 -04:00
|
|
|
"housefloor1": { func:function(pixel,station){
|
|
|
|
|
if (pixel.woodcount > 4) {(pixel.woodcount -= 5), changePixel(station,"workbench");}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"housefloor2": { func:function(pixel,station){
|
|
|
|
|
if (pixel.rockcount > 7) {(pixel.rockcount -= 8), changePixel(station,"furnace");}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"workbench": { func:function(pixel,station){
|
|
|
|
|
if (pixel.rockcount > 2 && pixel.woodcount > 1 && pixel.hasstraw == true && pixel.pickaxe == false) {(pixel.pickaxe = true),(pixel.willbuildmine = true),(pixel.rockcount -= 2),(pixel.woodcount -= 1),(pixel.hasstraw = false);}
|
|
|
|
|
}, chance:0.01},
|
2024-08-14 02:00:05 -04:00
|
|
|
"furnace": { func:function(pixel,oven){
|
2024-08-18 21:25:15 -04:00
|
|
|
if (pixel.meatcount > 0) {(pixel.cookedmeatcount += 1),(pixel.meatcount -= 1);}
|
|
|
|
|
else if (pixel.doughcount > 0) {(pixel.breadcount += 1),(pixel.doughcount -= 1);}
|
2024-08-14 02:00:05 -04:00
|
|
|
}, chance:0.01},
|
|
|
|
|
"oven": { func:function(pixel,oven){
|
2024-08-18 21:25:15 -04:00
|
|
|
if (pixel.meatcount > 0) {(pixel.cookedmeatcount += 1),(pixel.meatcount -= 1);}
|
|
|
|
|
else if (pixel.doughcount > 0) {(pixel.breadcount += 1),(pixel.doughcount -= 1);}
|
2024-08-14 02:00:05 -04:00
|
|
|
}, chance:0.02},
|
2024-08-18 21:25:15 -04:00
|
|
|
"allpurposestation": { func:function(pixel,station){
|
|
|
|
|
if (pixel.rockcount > 2 && pixel.woodcount > 1 && pixel.hasstraw == true) {(pixel.pickaxe = true),(pixel.rockcount -= 2),(pixel.woodcount -= 1),(pixel.hasstraw = false);}
|
|
|
|
|
else if (pixel.meatcount > 0) {(pixel.cookedmeatcount += 1),(pixel.meatcount -= 1);}
|
|
|
|
|
else if (pixel.doughcount > 0) {(pixel.breadcount += 1),(pixel.doughcount -= 1);}
|
|
|
|
|
else if (pixel.eggcount > 1 && pixel.flourcount > 1) {(pixel.eggcount -= 1),(pixel.flourcount -= 1),(pixel.breadcount += 10);}
|
|
|
|
|
}, chance:0.1},
|
|
|
|
|
"loose_straw": { func:function(pixel,straw){
|
|
|
|
|
if (pixel.hasstraw == false) {(pixel.hasstraw = true), changePixel(straw,"easy_way_out");}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"water": { func:function(pixel,water){
|
|
|
|
|
if (pixel.flourcount > 1) {(pixel.flourcount -= 1), (pixel.doughcount += 1), changePixel(water,["easy_way_out","easy_way_out","water"]);}
|
|
|
|
|
}, chance:0.5},
|
|
|
|
|
"straw": { elem2:"loose_straw", oneway:true, chance:0.5 },
|
|
|
|
|
"grass": { func:function(pixel,grass){
|
|
|
|
|
if (pixel.hasstraw == false && grass.h == 2) {(pixel.hasstraw = true), changePixel(grass,"easy_way_out");}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"rock": { func:function(pixel,rock){
|
|
|
|
|
if (pixel.basket == true && pixel.rockcount < 3) {(pixel.rockcount += 1), changePixel(rock,"easy_way_out");}
|
|
|
|
|
else if (pixel.pickaxe == true && pixel.basket == true && pixel.willbuildmine == true) {changePixel(rock,"mine_hole"), (pixel.willbuildmine = false);}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"mine_hole": { func:function(pixel,mine){
|
|
|
|
|
if (pixel.pickaxe == true && pixel.basket == true) {(pixel.rockcount += 1);}
|
|
|
|
|
}, chance:0.01},
|
|
|
|
|
"grape": { func:function(pixel,grape){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.25), changePixel(grape,"easy_way_out");}
|
|
|
|
|
else {changePixel(grape,"juice"), grape.color = pixelColorPick(grape,"#291824");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"cheese": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"nut": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.25), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"nut_meat": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.25), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"baked_potato": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.75), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"hard_yolk": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"chocolate": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"mashed_potato": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.75), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"pickle": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.75), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"ice_cream": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"lettuce": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.25), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"tomato": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"potato": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"popcorn": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.25), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"corn": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"candy": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"caramel": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.50), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"herb": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.25), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
|
|
|
|
"pumpkin_seed": { func:function(pixel,food){
|
|
|
|
|
if (pixel.basket == true) {(pixel.foodcount += 0.25), changePixel(food,"easy_way_out");}
|
|
|
|
|
}, oneway:true, chance:0.05},
|
2024-08-14 02:00:05 -04:00
|
|
|
"ant": { elem2:"dead_bug", chance:0.05, oneway:true },
|
|
|
|
|
"fly": { elem2:"dead_bug", oneway:true },
|
|
|
|
|
"firefly": { elem2:"dead_bug", oneway:true },
|
|
|
|
|
"bee": { elem2:"dead_bug", oneway:true },
|
|
|
|
|
"flea": { elem2:"dead_bug", oneway:true },
|
|
|
|
|
"termite": { elem2:"dead_bug", oneway:true },
|
|
|
|
|
"worm": { elem2:"slime", chance:0.05, oneway:true },
|
|
|
|
|
"stink_bug": { elem2:"stench", oneway:true },
|
|
|
|
|
"tax_bill": { elem2:null, func:(pixel,tax) => { (pixel.moneycount *= 0.75) }, chance:0.01 },
|
|
|
|
|
"money": { elem2:null, func:(pixel,money) => { (pixel.moneycount += 1) }, chance:0.03 },
|
2024-08-18 21:25:15 -04:00
|
|
|
"gold_coin": { elem2:null, func:(pixel,money) => { (pixel.moneycount += 1000) }, chance:0.04 },
|
|
|
|
|
"diamond": { elem2:null, func:(pixel,money) => { (pixel.moneycount += 50000) }, chance:0.05 },
|
2024-08-14 02:00:05 -04:00
|
|
|
"sun": { elem1:"cooked_meat" },
|
|
|
|
|
},
|
|
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
dir: 1,
|
|
|
|
|
panic: 0,
|
|
|
|
|
hungry: false,
|
|
|
|
|
greedy: false,
|
|
|
|
|
basket: false,
|
2024-08-18 21:25:15 -04:00
|
|
|
pickaxe: false,
|
|
|
|
|
hasstraw: false,
|
|
|
|
|
willbuildhouse: false,
|
|
|
|
|
willbuildmine: false,
|
2024-08-14 02:00:05 -04:00
|
|
|
moneycount: 0,
|
|
|
|
|
eggcount: 0,
|
|
|
|
|
flourcount: 0,
|
|
|
|
|
doughcount: 0,
|
|
|
|
|
meatcount: 0,
|
|
|
|
|
cookedmeatcount: 0,
|
|
|
|
|
breadcount: 0,
|
2024-08-18 21:25:15 -04:00
|
|
|
foodcount: 0,
|
|
|
|
|
trinketscount: 0,
|
|
|
|
|
woodcount: 0,
|
|
|
|
|
rockcount: 0,
|
2024-08-14 02:00:05 -04:00
|
|
|
},
|
2024-08-18 21:25:15 -04:00
|
|
|
onDelete: behaviors.BODY_DELETE,
|
2024-08-14 02:00:05 -04:00
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) { // Fall
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-2, true)) { // Drag head down
|
|
|
|
|
var headpixel = pixelMap[pixel.x][pixel.y-2];
|
|
|
|
|
if (headpixel.element == "c_head") {
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
movePixel(pixelMap[pixel.x][pixel.y-2], pixel.x, pixel.y-1);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
swapPixels(pixelMap[pixel.x][pixel.y-2], pixelMap[pixel.x][pixel.y-1]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
2024-08-21 14:04:52 -04:00
|
|
|
if (pixel.dead) { // by nekonico
|
2024-08-14 02:00:05 -04:00
|
|
|
// Turn into rotten_meat if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"rotten_meat");
|
2024-08-18 21:25:15 -04:00
|
|
|
if (pixel.willbuildhouse == true) {
|
|
|
|
|
HouseBuilder = false;
|
|
|
|
|
}
|
2024-08-14 02:00:05 -04:00
|
|
|
}
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the head
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y-1, true) && pixelMap[pixel.x][pixel.y-1].element == "c_head") {
|
|
|
|
|
var head = pixelMap[pixel.x][pixel.y-1];
|
|
|
|
|
if (head.dead) { // If head is dead, kill body
|
|
|
|
|
pixel.dead = head.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var head = null }
|
|
|
|
|
if (pixel.burning) {
|
|
|
|
|
pixel.panic += 0.1;
|
|
|
|
|
if (head && pixelTicks-pixel.burnStart > 240) {
|
|
|
|
|
pixel.color = head.color;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.panic > 0) {
|
|
|
|
|
pixel.panic -= 0.1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {
|
|
|
|
|
// create blood if decapitated 10% chance
|
|
|
|
|
if (Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y-1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (head == null) { return }
|
|
|
|
|
else if (Math.random() < 0.1*(isEmpty(pixel.x, pixel.y+1) ? 1 : pixel.panic+1)) { // Move 10% chance
|
|
|
|
|
var movesToTry = [
|
|
|
|
|
[1*pixel.dir,0],
|
|
|
|
|
[1*pixel.dir,-1],
|
|
|
|
|
];
|
|
|
|
|
// While movesToTry is not empty, tryMove(pixel, x, y) with a random move, then remove it. if tryMove returns true, break.
|
|
|
|
|
while (movesToTry.length > 0) {
|
|
|
|
|
var move = movesToTry.splice(Math.floor(Math.random() * movesToTry.length), 1)[0];
|
|
|
|
|
if (isEmpty(pixel.x+move[0], pixel.y+move[1]-1)) {
|
|
|
|
|
var origx = pixel.x+move[0];
|
|
|
|
|
var origy = pixel.y+move[1];
|
|
|
|
|
if (tryMove(pixel, pixel.x+move[0], pixel.y+move[1]) && pixel.x===origx && pixel.y===origy) {
|
|
|
|
|
movePixel(head, head.x+move[0], head.y+move[1]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 15% chance to change direction
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dir *= -1;
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y+1, true) && pixel.woodcount > 15 && pixel.willbuildhouse == true) {
|
|
|
|
|
deletePixel(pixel.x-3, pixel.y+1); // clear any floor obstructions
|
|
|
|
|
deletePixel(pixel.x-2, pixel.y+1);
|
|
|
|
|
deletePixel(pixel.x-1, pixel.y+1);
|
|
|
|
|
deletePixel(pixel.x, pixel.y+1);
|
|
|
|
|
deletePixel(pixel.x+1, pixel.y+1);
|
|
|
|
|
deletePixel(pixel.x+2, pixel.y+1);
|
|
|
|
|
deletePixel(pixel.x+3, pixel.y+1);
|
|
|
|
|
createPixel("wood", pixel.x-3, pixel.y-3); // door 1
|
|
|
|
|
createPixel("wood", pixel.x-3, pixel.y-2);
|
|
|
|
|
createPixel("wood", pixel.x-3, pixel.y+1);
|
|
|
|
|
createPixel("wood", pixel.x-2, pixel.y-3); // roof
|
|
|
|
|
createPixel("wood", pixel.x-1, pixel.y-3);
|
|
|
|
|
createPixel("wood", pixel.x, pixel.y-3);
|
|
|
|
|
createPixel("wood", pixel.x+1, pixel.y-3);
|
|
|
|
|
createPixel("wood", pixel.x+2, pixel.y-3);
|
|
|
|
|
createPixel("wood", pixel.x+3, pixel.y-3); // door 2
|
|
|
|
|
createPixel("wood", pixel.x+3, pixel.y-2);
|
|
|
|
|
createPixel("wood", pixel.x+3, pixel.y+1);
|
|
|
|
|
createPixel("wood", pixel.x-2, pixel.y+1); // floor
|
|
|
|
|
createPixel("housefloor1", pixel.x-1, pixel.y+1);
|
|
|
|
|
createPixel("wood", pixel.x, pixel.y+1);
|
|
|
|
|
createPixel("housefloor2", pixel.x+1, pixel.y+1);
|
|
|
|
|
createPixel("wood", pixel.x+2, pixel.y+1);
|
|
|
|
|
pixel.willbuildhouse = false;
|
|
|
|
|
pixel.woodcount -= 16
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-14 02:00:05 -04:00
|
|
|
if (pixel.moneycount > 17999) {
|
|
|
|
|
pixel.color = pixelColorPick(pixel,"#ffd700");
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
|
|
|
|
|
if (pixel.breadcount < 1 && pixel.cookedmeatcount < 1 && pixel.foodcount < 0.25 && Math.random() < 0.005) { //hunger mechanic
|
2024-08-14 02:00:05 -04:00
|
|
|
pixel.hungry = true
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
|
|
|
|
|
if (pixel.foodcount > 0 && pixel.hungry == true) {
|
|
|
|
|
pixel.hungry = false, pixel.foodcount -= 0.25
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.breadcount > 0.9 && pixel.hungry == true) {
|
2024-08-14 02:00:05 -04:00
|
|
|
pixel.hungry = false, pixel.breadcount -= 1
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.cookedmeatcount > 0 && pixel.hungry == true) {
|
|
|
|
|
pixel.hungry = false, pixel.cookedmeatcount -= 1
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
|
|
|
|
|
if (pixel.foodcount > 0 && Math.random() < 0.0005) {
|
|
|
|
|
pixel.hungry = false, pixel.foodcount -= 0.25
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pixel.breadcount > 0.9 && Math.random() < 0.0005) {
|
2024-08-14 02:00:05 -04:00
|
|
|
pixel.hungry = false, pixel.breadcount -= 1
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
|
|
|
|
|
if (pixel.cookedmeatcount > 0 && Math.random() < 0.0005) {
|
2024-08-14 02:00:05 -04:00
|
|
|
pixel.hungry = false, pixel.cookedmeatcount -= 1
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
|
2024-08-14 02:00:05 -04:00
|
|
|
if (pixel.trinketscount < 1 && Math.random() < 0.001) { //trinket desire mechanic
|
|
|
|
|
pixel.greedy = true
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.trinketscount > 1 && Math.random() < 0.01) {
|
|
|
|
|
pixel.greedy = false
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
|
|
|
|
|
if (pixel.breadcount > 1.9 && pixel.cookedmeatcount > 0 && Math.random() < 0.005 && pixel.foodcount < 5) { //make a sandwich
|
|
|
|
|
pixel.foodcount += 1, pixel.breadcount -= 2, pixel.cookedmeatcount -= 1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pixel.hasstraw == true && Math.random() < 0.005 && pixel.basket == false) { //make a basket
|
|
|
|
|
pixel.basket = true, pixel.hasstraw = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!isEmpty(pixel.x+1, pixel.y-1, true) && pixel.basket == true && pixelMap[pixel.x+1][pixel.y-1].element == "tree_branch") { // harvest branch
|
|
|
|
|
var wood = pixelMap[pixel.x+1][pixel.y-1];
|
|
|
|
|
if (wood.element == "tree_branch") {changePixel(wood,"branchless_tree"), pixel.woodcount += 1}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1, pixel.y-1, true) && pixel.basket == true && pixelMap[pixel.x-1][pixel.y-1].element == "tree_branch") {
|
|
|
|
|
var wood = pixelMap[pixel.x-1][pixel.y-1];
|
|
|
|
|
if (wood.element == "tree_branch") {changePixel(wood,"branchless_tree"), pixel.woodcount += 1}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!isEmpty(pixel.x+1, pixel.y-1, true) && pixel.basket == true && pixelMap[pixel.x+1][pixel.y-1].element == "plant" && Math.random() < 0.05) { // harvest fruit
|
|
|
|
|
var plant = pixelMap[pixel.x+1][pixel.y-1];
|
|
|
|
|
if (plant.element == "plant") {pixel.foodcount += 0.25}
|
|
|
|
|
}
|
|
|
|
|
else if (!isEmpty(pixel.x-1, pixel.y-1, true) && pixel.basket == true && pixelMap[pixel.x-1][pixel.y-1].element == "plant" && Math.random() < 0.05) {
|
|
|
|
|
var plant = pixelMap[pixel.x-1][pixel.y-1];
|
|
|
|
|
if (plant.element == "plant") {pixel.foodcount += 0.25}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (pixel.woodcount > 15 && Math.random() < 0.001 && HouseBuilder == false) {
|
|
|
|
|
pixel.willbuildhouse = true, HouseBuilder = true
|
|
|
|
|
}
|
|
|
|
|
|
2024-08-14 02:00:05 -04:00
|
|
|
if (!isEmpty(pixel.x-1, pixel.y, true) && pixelMap[pixel.x-1][pixel.y].element == "c_body") {
|
|
|
|
|
var seller = pixelMap[pixel.x-1][pixel.y];
|
|
|
|
|
if (seller.dead) { // If seller is dead, stop trade
|
|
|
|
|
var seller = null;
|
|
|
|
|
}
|
|
|
|
|
else { (seller.panic = -10), (pixel.panic = -10);
|
|
|
|
|
if (seller.trinketscount > 0 && pixel.greedy == true) {
|
|
|
|
|
seller.trinketscount -= 1, seller.moneycount += 1, pixel.moneycount -= 1, pixel.trinketscount += 1;
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
if (seller.hasstraw == true && pixel.hasstraw == false && Math.random() < 0.1) {
|
|
|
|
|
seller.hasstraw = false, seller.moneycount += 1, pixel.moneycount -= 1, pixel.hasstraw = true;
|
|
|
|
|
}
|
|
|
|
|
if (seller.foodcount > 0.75 && Math.random() < 0.1) {
|
|
|
|
|
seller.foodcount -= 1, seller.moneycount += 5, pixel.moneycount -= 5, pixel.foodcount += 1;
|
|
|
|
|
}
|
2024-08-14 02:00:05 -04:00
|
|
|
if (seller.cookedmeatcount > 0 && pixel.cookedmeatcount < 5) {
|
|
|
|
|
seller.cookedmeatcount -= 1, seller.moneycount += 3, pixel.moneycount -= 3, pixel.cookedmeatcount += 1;
|
|
|
|
|
}
|
2024-08-18 21:25:15 -04:00
|
|
|
if (seller.meatcount > 0 && pixel.meatcount == 0 && Math.random() > 0.1) {
|
|
|
|
|
seller.meatcount -= 1, seller.moneycount += 2, pixel.moneycount -= 2, pixel.meatcount += 1;
|
|
|
|
|
}
|
|
|
|
|
if (seller.breadcount > 0.9 && pixel.breadcount < 5) {
|
2024-08-14 02:00:05 -04:00
|
|
|
seller.breadcount -= 1, seller.moneycount += 2, pixel.moneycount -= 2, pixel.breadcount += 1;
|
|
|
|
|
};
|
|
|
|
|
(seller.panic = 0), (pixel.panic = 0)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var seller = null }
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.c_head = {
|
|
|
|
|
name: "head",
|
|
|
|
|
color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"],
|
|
|
|
|
forceSaveColor: true,
|
|
|
|
|
category: "human",
|
|
|
|
|
hidden: true,
|
|
|
|
|
density: 1080,
|
|
|
|
|
state: "solid",
|
|
|
|
|
conduct: .05,
|
|
|
|
|
temp: 37,
|
|
|
|
|
tempHigh: 200,
|
|
|
|
|
stateHigh: "cooked_meat",
|
|
|
|
|
tempLow: -30,
|
|
|
|
|
stateLow: "frozen_meat",
|
|
|
|
|
burn: 10,
|
|
|
|
|
burnTime: 250,
|
|
|
|
|
burnInto: "cooked_meat",
|
|
|
|
|
breakInto: ["blood","meat","bone"],
|
|
|
|
|
forceSaveColor: true,
|
|
|
|
|
reactions: {
|
2024-08-18 21:25:15 -04:00
|
|
|
"cancer": { elem1:"cancer", attr1:{"dead":true}, chance:0.005 },
|
|
|
|
|
"poison": { attr1:{"dead":true}, chance:0.4 },
|
|
|
|
|
"radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], color1:["#75816B","#4D6B53"], chance:0.4 },
|
2024-08-14 02:00:05 -04:00
|
|
|
"neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 },
|
2024-08-18 21:25:15 -04:00
|
|
|
"fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], color1:["#75816B","#4D6B53"], chance:0.03 },
|
|
|
|
|
"plague": { elem1:["rotten_meat","rotten_meat","rotten_meat","c_head","plague",], color1:["#75816B","#4D6B53"], attr1:{"dead":true}, chance:0.05 },
|
|
|
|
|
"oxygen": { func:function(pixel,air){pixel.drowning -= 1}, elem2:"carbon_dioxide", chance:0.5 },
|
|
|
|
|
"carbon_dioxide": { func:function(pixel,air){pixel.drowning += 1}, elem2:"carbon_dioxide", chance:0.1 },
|
2024-08-14 02:00:05 -04:00
|
|
|
"meat": { elem2:null, chance:0.1 },
|
|
|
|
|
"cooked_meat": { elem2:null, chance:0.1 },
|
|
|
|
|
"cured_meat": { elem2:null, chance:0.1 },
|
|
|
|
|
"sugar": { elem2:null, chance:0.1 },
|
|
|
|
|
"broth": { elem2:null, chance:0.2 },
|
|
|
|
|
"yolk": { elem2:null, chance:0.1 },
|
|
|
|
|
"hard_yolk": { elem2:null, chance:0.1 },
|
|
|
|
|
"dough": { elem2:null, chance:0.1 },
|
|
|
|
|
"batter": { elem2:null, chance:0.2 },
|
|
|
|
|
"butter": { elem2:null, chance:0.1 },
|
|
|
|
|
"melted_butter": { elem2:null, chance:0.2 },
|
|
|
|
|
"chocolate": { elem2:null, chance:0.2 },
|
|
|
|
|
"melted_chocolate": { elem2:null, chance:0.3 },
|
|
|
|
|
"grape": { elem2:null, chance:0.1 },
|
|
|
|
|
"tomato": { elem2:null, chance:0.1 },
|
|
|
|
|
"herb": { elem2:null, chance:0.1 },
|
|
|
|
|
"lettuce": { elem2:null, chance:0.1 },
|
|
|
|
|
"corn": { elem2:null, chance:0.1 },
|
|
|
|
|
"popcorn": { elem2:null, chance:0.15 },
|
|
|
|
|
"potato": { elem2:null, chance:0.1 },
|
|
|
|
|
"baked_potato": { elem2:null, chance:0.15 },
|
|
|
|
|
"bread": { elem2:null, chance:0.1 },
|
|
|
|
|
"toast": { elem2:null, chance:0.1 },
|
|
|
|
|
"gingerbread": { elem2:null, chance:0.1 },
|
|
|
|
|
"baked_batter": { elem2:null, chance:0.2 },
|
|
|
|
|
"wheat": { elem2:null, chance:0.1 },
|
|
|
|
|
"candy": { elem2:null, chance:0.1 },
|
|
|
|
|
"yogurt": { elem2:null, chance:0.2 },
|
|
|
|
|
"frozen_yogurt": { elem2:null, chance:0.1 },
|
|
|
|
|
"ice_cream": { elem2:null, chance:0.2 },
|
|
|
|
|
"beans": { elem2:[null,null,null,null,null,null,null,null,"stench"], chance:0.2 },
|
|
|
|
|
"tea": { elem2:null, chance:0.2 },
|
|
|
|
|
"coffee": { elem2:null, chance:0.2 },
|
|
|
|
|
"milk": { elem2:null, chance:0.2 },
|
|
|
|
|
"cream": { elem2:null, chance:0.2 },
|
|
|
|
|
"soda": { elem2:null, chance:0.2 },
|
|
|
|
|
"chocolate_milk": { elem2:null, chance:0.2 },
|
|
|
|
|
"fruit_milk": { elem2:null, chance:0.2 },
|
|
|
|
|
"pilk": { elem2:null, chance:0.2 },
|
|
|
|
|
"eggnog": { elem2:null, chance:0.2 },
|
|
|
|
|
"juice": { elem2:null, chance:0.2 },
|
|
|
|
|
"cheese": { elem2:null, chance:0.1 },
|
|
|
|
|
"melted_cheese": { elem2:null, chance:0.2 },
|
|
|
|
|
"alcohol": { elem2:null, chance:0.2 },
|
|
|
|
|
"antidote": { elem2:null, chance:0.2 },
|
|
|
|
|
"honey": { elem2:null, chance:0.2 },
|
|
|
|
|
"caramel": { elem2:null, chance:0.2 },
|
|
|
|
|
"molasses": { elem2:null, chance:0.05 },
|
|
|
|
|
"ketchup": { elem2:null, chance:0.1 },
|
|
|
|
|
"pumpkin_seed": { elem2:null, chance:0.1 },
|
|
|
|
|
"nut": { elem2:null, chance:0.1 },
|
|
|
|
|
"nut_meat": { elem2:null, chance:0.1 },
|
|
|
|
|
"nut_butter": { elem2:null, chance:0.1 },
|
|
|
|
|
"nut_milk": { elem2:null, chance:0.2 },
|
|
|
|
|
"jelly": { elem2:null, chance:0.2 },
|
|
|
|
|
"mayo": { elem2:null, chance:0.2 },
|
|
|
|
|
"mashed_potato": { elem2:null, chance:0.2 },
|
|
|
|
|
"sauce": { elem2:null, chance:0.2 },
|
|
|
|
|
"pickle": { elem2:null, chance:0.1 },
|
|
|
|
|
"sun": { elem1:"cooked_meat" },
|
|
|
|
|
"light": { stain1:"#825043" },
|
|
|
|
|
"bee": { stain1:"#cc564b", chance:0.2 },
|
|
|
|
|
"water": { func:function(pixel,water){pixel.drowning += 1}, elem2:"bubble", attr2:{"clone":"water"}, chance:0.002 },
|
|
|
|
|
"salt_water": { func:function(pixel,water){pixel.drowning += 2}, elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.002 },
|
|
|
|
|
"sugar_water": { func:function(pixel,water){pixel.drowning += 2}, elem2:"bubble", attr2:{"clone":"sugar_water"}, chance:0.002 },
|
|
|
|
|
"seltzer": { func:function(pixel,water){pixel.drowning += 4}, elem2:"bubble", attr2:{"clone":["seltzer","seltzer","carbon_dioxide"]}, chance:0.002 },
|
|
|
|
|
"pool_water": { func:function(pixel,water){pixel.drowning += 1}, elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.002 },
|
|
|
|
|
"dirty_water": { func:function(pixel,water){pixel.drowning += 4}, elem2:"bubble", color2:["#0e824e","#07755a","#0c6934"], attr2:{"clone":"dirty_water"}, chance:0.003 },
|
|
|
|
|
"blood": { func:function(pixel,water){pixel.drowning += 5}, elem2:"bubble", color2:["#ff0000","#ee0000","#ff4040"], attr2:{"clone":"blood"}, chance:0.003 },
|
|
|
|
|
},
|
|
|
|
|
properties: {
|
|
|
|
|
dead: false,
|
|
|
|
|
drowning: 0
|
|
|
|
|
},
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
doHeat(pixel);
|
|
|
|
|
doBurning(pixel);
|
|
|
|
|
doElectricity(pixel);
|
|
|
|
|
if (pixel.dead) {
|
|
|
|
|
// Turn into rotten_meat if pixelTicks-dead > 500
|
|
|
|
|
if (pixelTicks-pixel.dead > 200 && Math.random() < 0.1) {
|
|
|
|
|
changePixel(pixel,"rotten_meat");
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find the body
|
|
|
|
|
if (!isEmpty(pixel.x, pixel.y+1, true) && pixelMap[pixel.x][pixel.y+1].element == "c_body") {
|
|
|
|
|
var body = pixelMap[pixel.x][pixel.y+1];
|
|
|
|
|
if (body.dead) { // If body is dead, kill head
|
|
|
|
|
pixel.dead = body.dead;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else { var body = null }
|
|
|
|
|
|
|
|
|
|
if (tryMove(pixel, pixel.x, pixel.y+1)) {
|
|
|
|
|
// create blood if severed 10% chance
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y+1) && !pixel.dead && Math.random() < 0.1 && !pixel.charge) {
|
|
|
|
|
createPixel("blood", pixel.x, pixel.y+1);
|
|
|
|
|
// set dead to true 15% chance
|
|
|
|
|
if (Math.random() < 0.15) {
|
|
|
|
|
pixel.dead = pixelTicks;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// homeostasis
|
|
|
|
|
if (pixel.temp > 37) { pixel.temp -= 1; }
|
|
|
|
|
else if (pixel.temp < 37) { pixel.temp += 1; }
|
|
|
|
|
|
|
|
|
|
// drowning
|
|
|
|
|
if (pixel.drowning > 99.9) { pixel.dead = true }
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.money = {
|
|
|
|
|
color: ["#85bb65","#5e8347","#65bb7d","#b2bb65","#dbffc4"],
|
|
|
|
|
behavior: behaviors.POWDER,
|
|
|
|
|
reactions: {
|
|
|
|
|
"water": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"dirty_water": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"salt_water": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"sugar_water": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"seltzer": { elem1:"cellulose", elem2:null },
|
|
|
|
|
"soda": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"blood": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"foam": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"bubble": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"oil": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"alcohol": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"vinegar": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"light": { stain1:"#ebdfa7" },
|
|
|
|
|
"oxygen": { stain1:"#ebdfa7" }
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 248,
|
|
|
|
|
stateHigh: ["fire","fire","fire","fire","fire","ash"],
|
|
|
|
|
burn: 70,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: ["fire","fire","fire","fire","fire","ash"],
|
|
|
|
|
category: "human",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1000,
|
|
|
|
|
breakInto: "confetti",
|
|
|
|
|
breakIntoColor: ["#85bb65","#65bb7d","#b2bb65","#85bb65"]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.tax_bill = {
|
|
|
|
|
color: ["#f0f0f0","#f0f0f0","#f0f0f0","#f0f0f0","#f0f0f0","#ff0000","#171717",],
|
|
|
|
|
behavior: behaviors.POWDER,
|
|
|
|
|
reactions: {
|
|
|
|
|
"water": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"dirty_water": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"salt_water": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"sugar_water": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"seltzer": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"soda": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"blood": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"foam": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"bubble": { elem1:"cellulose", elem2:null, chance:0.1 },
|
|
|
|
|
"oil": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"alcohol": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"vinegar": { elem1:"cellulose", elem2:null, chance:0.01 },
|
|
|
|
|
"light": { stain1:"#ebdfa7" },
|
|
|
|
|
"oxygen": { stain1:"#ebdfa7" },
|
|
|
|
|
"money": { elem1:null, elem2:null, chance:0.5},
|
|
|
|
|
"gold_coin": { elem1:null, elem2:null, chance:0.4 }
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 248,
|
|
|
|
|
stateHigh: ["fire","fire","fire","fire","fire","ash"],
|
|
|
|
|
burn: 70,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: ["fire","fire","fire","fire","fire","ash"],
|
|
|
|
|
category: "human",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 1100,
|
|
|
|
|
breakInto: "confetti",
|
|
|
|
|
breakIntoColor: ["#ffffff","#e6e6e6","#dbdbdb","#ffffff","#e6e6e6","#dbdbdb","#ff0000","#171717",]
|
|
|
|
|
},
|
|
|
|
|
|
2024-08-18 21:25:15 -04:00
|
|
|
elements.loose_straw = {
|
|
|
|
|
hidden: true,
|
|
|
|
|
color: ["#F9E3A1","#93734E","#C7AA83"],
|
|
|
|
|
behavior: behaviors.POWDER,
|
|
|
|
|
tempHigh: 380,
|
|
|
|
|
stateHigh: "fire",
|
|
|
|
|
burn: 80,
|
|
|
|
|
burnTime: 200,
|
|
|
|
|
category: "powders",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 45
|
|
|
|
|
},
|
|
|
|
|
|
2024-08-14 02:00:05 -04:00
|
|
|
elements.basket = {
|
2024-08-18 21:25:15 -04:00
|
|
|
hidden:true,
|
|
|
|
|
color: ["#88665d","#bcaa99"],
|
|
|
|
|
behavior: behaviors.STURDYPOWDER,
|
2024-08-14 02:00:05 -04:00
|
|
|
tempHigh: 400,
|
|
|
|
|
stateHigh: "fire",
|
2024-08-18 21:25:15 -04:00
|
|
|
burn: 55,
|
2024-08-14 02:00:05 -04:00
|
|
|
burnTime: 210,
|
|
|
|
|
burnInto: ["smoke","smoke","smoke","smoke","ash"],
|
2024-08-18 21:25:15 -04:00
|
|
|
breakInto: "loose_straw",
|
2024-08-14 02:00:05 -04:00
|
|
|
category: "human",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 70
|
|
|
|
|
},
|
|
|
|
|
|
2024-08-18 21:25:15 -04:00
|
|
|
elements.pickaxe = {
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: ["#71797e","#D8B589"],
|
|
|
|
|
behavior: behaviors.STURDYPOWDER,
|
|
|
|
|
colorKey: {
|
|
|
|
|
"A":"#607d8b",
|
|
|
|
|
"H":"#91754d",
|
|
|
|
|
"B":"#a0522d"
|
|
|
|
|
},
|
|
|
|
|
colorPattern: [
|
|
|
|
|
"BBBBBB",
|
|
|
|
|
"BAABHB",
|
|
|
|
|
"BBBABB",
|
|
|
|
|
"BBHBAB",
|
|
|
|
|
"BHBBAB",
|
|
|
|
|
"HBBBBB"
|
|
|
|
|
],
|
|
|
|
|
reactions: {
|
|
|
|
|
"mine_hole": { func:function(pixel,mine){
|
|
|
|
|
if (isEmpty(pixel.x, pixel.y-1)) {(createPixel("rock", pixel.x, pixel.y-1));}
|
|
|
|
|
else if (isEmpty(pixel.x-1, pixel.y)) {(createPixel("rock", pixel.x-1, pixel.y));}
|
|
|
|
|
else if (isEmpty(pixel.x+1, pixel.y)) {(createPixel("rock", pixel.x+1, pixel.y));}
|
|
|
|
|
}, chance:0.05},
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 400,
|
|
|
|
|
stateHigh: ["rock","rock","ash","charcoal",],
|
|
|
|
|
burn: 55,
|
|
|
|
|
burnTime: 210,
|
|
|
|
|
burnInto: ["rock","rock","rock","rock","ash","charcoal","charcoal","smoke"],
|
|
|
|
|
breakInto: ["rock","rock","wood","sawdust",],
|
|
|
|
|
category: "human",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 70
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.workbench = {
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: ["#a0522d"],
|
|
|
|
|
behavior: behaviors.STURDYPOWDER,
|
|
|
|
|
reactions: {
|
|
|
|
|
"loose_straw": { elem2:"basket", chance:0.25 },
|
|
|
|
|
"rock": { elem2:"pickaxe", chance:0.1 },
|
|
|
|
|
"oven": { elem1:"allpurposestation", elem2:null, chance:0.5 },
|
2024-08-21 14:04:52 -04:00
|
|
|
},// by
|
|
|
|
|
temp:40, //neko
|
|
|
|
|
tempHigh: 1000, //nico
|
2024-08-18 21:25:15 -04:00
|
|
|
stateHigh: "magma",
|
|
|
|
|
category: "human",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 2550,
|
|
|
|
|
hardness: 0.2,
|
|
|
|
|
breakInto: ["sand","gravel","charcoal","ash"]
|
|
|
|
|
},
|
|
|
|
|
|
2024-08-14 02:00:05 -04:00
|
|
|
elements.furnace = {
|
2024-08-18 21:25:15 -04:00
|
|
|
hidden:true,
|
2024-08-14 02:00:05 -04:00
|
|
|
color: ["#808080","#4f4f4f","#949494"],
|
|
|
|
|
behavior: behaviors.STURDYPOWDER,
|
|
|
|
|
reactions: {
|
|
|
|
|
"bird": { elem2:["cooked_meat","cooked_meat","feather"], chance:0.025 },
|
|
|
|
|
"meat": { elem2:"cooked_meat", chance:0.1 },
|
|
|
|
|
"yolk": { elem2:"hard_yolk", chance:0.1 },
|
|
|
|
|
"egg": { elem2:"hard_yolk", chance:0.1 },
|
|
|
|
|
"batter": { elem2:"baked_batter", chance:0.1 },
|
|
|
|
|
"dough": { elem2:"bread", chance:0.1 },
|
|
|
|
|
"bread": { elem2:"toast", chance:0.05 },
|
|
|
|
|
"wood": { elem2:"charcoal", chance:0.005 },
|
|
|
|
|
"metal_scrap": { elem1:"oven", elem2:null, chance:0.05 },
|
|
|
|
|
},
|
|
|
|
|
temp:40,
|
|
|
|
|
tempHigh: 1000,
|
|
|
|
|
stateHigh: "magma",
|
|
|
|
|
category: "human",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 2550,
|
|
|
|
|
hardness: 0.2,
|
|
|
|
|
breakInto: ["sand","gravel","charcoal","ash"]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.oven = {
|
2024-08-18 21:25:15 -04:00
|
|
|
hidden:true,
|
2024-08-14 02:00:05 -04:00
|
|
|
color: ["#4f4f4f","#71797e"],
|
2024-08-18 21:25:15 -04:00
|
|
|
behavior: behaviors.STURDYPOWDER,
|
2024-08-14 02:00:05 -04:00
|
|
|
reactions: {
|
2024-08-18 21:25:15 -04:00
|
|
|
"workbench": { elem1:"allpurposestation", elem2:null, chance:0.5 },
|
2024-08-14 02:00:05 -04:00
|
|
|
"bird": { elem2:["cooked_meat","cooked_meat","feather"], chance:0.025 },
|
|
|
|
|
"meat": { elem2:"cooked_meat", chance:0.1 },
|
|
|
|
|
"yolk": { elem2:"hard_yolk", chance:0.1 },
|
|
|
|
|
"egg": { elem2:"hard_yolk", chance:0.1 },
|
|
|
|
|
"batter": { elem2:"baked_batter", chance:0.1 },
|
|
|
|
|
"dough": { elem2:"bread", chance:0.1 },
|
|
|
|
|
"bread": { elem2:"toast", chance:0.05 },
|
|
|
|
|
},
|
|
|
|
|
temp:50,
|
|
|
|
|
tempHigh: 1550,
|
|
|
|
|
stateHigh: "molten_metal_scrap",
|
|
|
|
|
category: "human",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 2550,
|
|
|
|
|
hardness: 0.5,
|
|
|
|
|
breakInto: ["metal_scrap","metal_scrap","charcoal","ash"]
|
2024-08-18 21:25:15 -04:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.allpurposestation = {
|
|
|
|
|
hidden:true,
|
|
|
|
|
name: "workshop_station",
|
|
|
|
|
color: ["#a0522d","#4f4f4f","#71797e"],
|
|
|
|
|
behavior: behaviors.STURDYPOWDER,
|
|
|
|
|
reactions: {
|
|
|
|
|
"rock": { elem2:"pickaxe", chance:0.5 },
|
|
|
|
|
"loose_straw": { elem2:"basket", chance:0.5 },
|
|
|
|
|
"meat": { elem2:"cooked_meat", chance:0.1 },
|
|
|
|
|
"yolk": { elem2:"hard_yolk", chance:0.1 },
|
|
|
|
|
"egg": { elem2:"hard_yolk", chance:0.1 },
|
|
|
|
|
"batter": { elem2:"baked_batter", chance:0.1 },
|
|
|
|
|
"dough": { elem2:"bread", chance:0.1 },
|
|
|
|
|
"bread": { elem2:"toast", chance:0.05 },
|
|
|
|
|
},
|
|
|
|
|
temp:40,
|
|
|
|
|
tempHigh: 1000,
|
|
|
|
|
stateHigh: "magma",
|
|
|
|
|
category: "human",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 2550,
|
|
|
|
|
hardness: 0.2,
|
|
|
|
|
breakInto: ["sand","gravel","charcoal","ash"]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.branchless_tree = {
|
|
|
|
|
name: "wood",
|
|
|
|
|
color: "#a59965",
|
|
|
|
|
behavior: behaviors.WALL,
|
|
|
|
|
renderer: renderPresets.WOODCHAR,
|
|
|
|
|
tick: function(pixel) {
|
|
|
|
|
if (Math.random() < 0.02 && pixel.age > 35) {
|
|
|
|
|
changePixel(pixel,"tree_branch")
|
|
|
|
|
}
|
|
|
|
|
else if (pixel.age > 1000 && Math.random() < 0.05) {
|
|
|
|
|
changePixel(pixel,"wood");
|
|
|
|
|
pixel.color = pixelColorPick(pixel, pixel.wc);
|
|
|
|
|
}
|
|
|
|
|
pixel.age++;
|
|
|
|
|
},
|
|
|
|
|
properties: {
|
|
|
|
|
"age":0
|
|
|
|
|
},
|
|
|
|
|
tempHigh: 400,
|
|
|
|
|
stateHigh: ["ember","charcoal","fire","fire","fire"],
|
|
|
|
|
category: "solids",
|
|
|
|
|
burn: 5,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: ["ember","charcoal","fire"],
|
|
|
|
|
state: "solid",
|
|
|
|
|
hardness: 0.15,
|
|
|
|
|
breakInto: "sawdust",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
elements.mine_hole = {
|
|
|
|
|
hidden:true,
|
|
|
|
|
color: "#363636",
|
|
|
|
|
behavior: behaviors.STURDYPOWDER,
|
|
|
|
|
tempHigh: 950,
|
|
|
|
|
stateHigh: "magma",
|
|
|
|
|
category: "land",
|
|
|
|
|
state: "solid",
|
|
|
|
|
density: 2550,
|
|
|
|
|
hardness: 0.5,
|
|
|
|
|
breakInto: ["sand","gravel"]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
elements.housefloor1 = {
|
|
|
|
|
name: "wood",
|
|
|
|
|
color: "#a0522d",
|
|
|
|
|
behavior: behaviors.WALL,
|
|
|
|
|
renderer: renderPresets.WOODCHAR,
|
|
|
|
|
tempHigh: 400,
|
|
|
|
|
stateHigh: ["ember","charcoal","fire","fire","fire"],
|
|
|
|
|
category: "solids",
|
|
|
|
|
burn: 5,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: ["ember","charcoal","fire"],
|
|
|
|
|
state: "solid",
|
|
|
|
|
hardness: 0.15,
|
|
|
|
|
breakInto: "sawdust",
|
2024-08-14 02:00:05 -04:00
|
|
|
};
|
|
|
|
|
|
2024-08-18 21:25:15 -04:00
|
|
|
elements.housefloor2 = {
|
|
|
|
|
name: "wood",
|
|
|
|
|
color: "#a0522d",
|
|
|
|
|
behavior: behaviors.WALL,
|
|
|
|
|
renderer: renderPresets.WOODCHAR,
|
|
|
|
|
tempHigh: 400,
|
|
|
|
|
stateHigh: ["ember","charcoal","fire","fire","fire"],
|
|
|
|
|
category: "solids",
|
|
|
|
|
burn: 5,
|
|
|
|
|
burnTime: 300,
|
|
|
|
|
burnInto: ["ember","charcoal","fire"],
|
|
|
|
|
state: "solid",
|
|
|
|
|
hardness: 0.15,
|
|
|
|
|
breakInto: "sawdust",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
elements.straw.breakInto = "loose_straw"
|
|
|
|
|
|
2024-08-14 02:00:05 -04:00
|
|
|
elements.human.name = "dummy"
|
|
|
|
|
|
|
|
|
|
elements.head.name = "brainless_head"
|
|
|
|
|
|
|
|
|
|
elements.body.name = "dumb_body"
|
2024-08-18 21:25:15 -04:00
|
|
|
|
|
|
|
|
elements.grass.properties.h = 1
|
|
|
|
|
|
|
|
|
|
elements.rotten_meat.density = 1200
|
2024-08-21 14:04:52 -04:00
|
|
|
|
|
|
|
|
/* yo, thanks for scrolling to the end. If you have any ideas to add to this mod, or wanna contact me in general, you can DM my discord account "nekonico" or just ping me in the r74n discord
|
|
|
|
|
peace
|
|
|
|
|
^ ^
|
|
|
|
|
(*w*) /
|
|
|
|
|
*/
|