diff --git a/mods/exoplanet.js b/mods/exoplanet.js new file mode 100644 index 00000000..564cf57b --- /dev/null +++ b/mods/exoplanet.js @@ -0,0 +1,220 @@ +elements.dusty_water = { + color: "#7C7C95", + behavior: behaviors.LIQUID, + tempHigh: 105, + stateHigh: ["steam","dust_cloud"], + tempLow: 0, + stateLowName: "dusty_ice", + viscosity: 10, + reactions: { + "rock": { elem2: "wet_sand", chance: 0.0004 }, + "exoplanetary_rock": { elem2: "exoplanetary_sand", chance: 0.0004 }, + "limestone": { elem2: "wet_sand", chance: 0.0004 }, + "plant": { elem1:"water", chance:0.05 }, + "algae": { elem1:"water", chance:0.05 }, + "kelp": { elem1:"water", chance:0.05 }, + "charcoal": { elem1:"water", chance:0.02 }, + "gravel": { elem1:"water", chance:0.01 }, + "fly": { elem2:"dead_bug", chance:0.1, oneway:true }, + "firefly": { elem2:"dead_bug", chance:0.1, oneway:true }, + "bee": { elem2:"dead_bug", chance:0.05, oneway:true }, + "stink_bug": { elem2:"dead_bug", chance:0.1, oneway:true }, + }, + hidden: true, + state: "liquid", + density: 1005, + conduct: 0.01, + extinguish: true, + category: "exoplanet", +} + +elements.exoplanetary_sand = { + color: ["#A29C7D","#c0c0c0","#808080","#4f4f4f","#808080","#949494","#A29C7D"], + behavior: behaviors.POWDER, + reactions: { + "tornado":{elem1:"sandstorm", oneway:true}, + }, + tempHigh: 1700, + stateHigh: "molten_exoplanetary_glass", + category: "exoplanet", + state: "solid", + density: 1602 +} + +elements.exoplanetary_glass = { + color: ["#6F807F","#6F807F","#748F8D","#6F807F","#6F807F"], + colorPattern: textures.GLASS, + colorKey: { + "g": "#6F807F", + "s": "#728886", + "S": "#748F8D"}, + behavior: behaviors.WALL, + reactions: { + "radiation": { elem1:"rad_glass", chance:0.33 }, + "rad_steam": { elem1:"rad_glass", elem2:null, chance:0.33 }, + "fallout": { elem1:"rad_glass", elem2:"radiation", chance:0.1 } + }, + tempHigh: 1500, + category: "exoplanet", + state: "solid", + density: 2500, + breakInto: "exoplanetary_sand", + noMix: true, + hidden: true, +} + +elements.molten_exoplanetary_glass = { + reactions: { + "radiation": { elem1:"molten_rad_glass", chance:0.66 }, + "rad_steam": { elem1:"molten_rad_glass", elem2:null, chance:0.33 }, + "molten_uranium": { elem1:"molten_rad_glass", elem2:null }, + "fallout": { elem1:"molten_rad_glass", elem2:"radiation" } + }, + hidden: true, + category: "exoplanet", +} + +elements.dust_cloud = { + color: ["#808080","#2e2e2e","#2e2e2e"], + behavior: [ + "XX|M1%0.5|M2%0.5", + "XX|CH:exoplanetary_dust%0.075|M1%2.5 AND BO", + "XX|M1%0.5|M2%0.5", + ], + reactions: { + "fireball": { elem1:null, elem2:"fire_cloud", chance:0.25 } + }, + category: "exoplanet", + tempHigh: 825, + stateHigh: ["exoplanetary_rock","exoplanetary_rock","fire",], + hidden: true, + state: "gas", + density: 0.7, + ignoreAir: true +} + +elements.exoplanetary_dust = { + color: "#808080", + behavior: [ + "XX|XX|XX", + "XX|XX|XX", + "M2|M1|M2", + ], + reactions: { + "water": { elem2: "dusty_water", elem1: null }, + }, + category: "exoplanet", + breakInto: ["exoplanetary_dust","exoplanetary_dust","exoplanetary_dust","dust_cloud"], + burn: 10, + burnTime: 1, + tempHigh: 700, + burnInto:"exoplanetary_rock", + stateHigh: "exoplanetary_rock", + state: "solid", + density: 1490 +} + +elements.exoplanetary_rock = { + color: ["#c0c0c0","#4f4f4f","#949494"], + behavior: behaviors.POWDER, + reactions: { + "fly": { elem2:"dead_bug", chance:0.25, oneway:true }, + "firefly": { elem2:"dead_bug", chance:0.2, oneway:true }, + "stink_bug": { elem2:"dead_bug", chance:0.15, oneway:true }, + "bee": { elem2:"dead_bug", chance:0.1, oneway:true }, + "bird": { elem2:"feather", chance:0.025, oneway:true }, + "egg": { elem2:"yolk", oneway:true }, + "grass": { elem2:null, chance:0.005, oneway:true }, + "bone": { elem2:"oil", tempMin:300, chance:0.005, oneway:true }, + "dead_plant": { elem2:"charcoal", tempMin:200, chance:0.005, oneway:true }, + "charcoal": { elem2:"diamond", tempMin:800, tempMax:900, chance:0.005, oneway:true }, + "sand": { elem2:"packed_sand", tempMin:500, chance:0.005, oneway:true }, + "wet_sand": { elem2:"packed_sand", chance:0.005, oneway:true }, + }, + tempHigh: 950, + stateHigh: "exoplanetary_magma", + category: "exoplanet", + state: "solid", + density: 2550, + hardness: 0.5, + breakInto: ["exoplanetary_sand","exoplanetary_sand","exoplanetary_dust","dust_cloud"] +} + +elements.exoplanetary_magma = { + color: ["#ff6f00","#ff8c00","#ff4d00"], + behavior: behaviors.MOLTEN, + reactions: { + "ice": { elem1: "basalt" }, + "ash": { elem1: "molten_tuff", "elem2":null }, + "molten_ash": { elem1: "molten_tuff", "elem2":null }, + "charcoal": { elem2:"diamond", tempMin:800, tempMax:900, chance:0.005, oneway:true }, + }, + temp: 1200, + tempLow: 800, + stateLow: ["basalt","exoplanetary_rock","exoplanetary_rock","exoplanetary_rock"], + viscosity: 10000, + state: "liquid", + density: 2725, + alias: "alien lava", + category: "exoplanet", + hidden: true, +} + +elements.exoplanetary_rock = { + color: ["#c0c0c0","#4f4f4f","#949494"], + behavior: behaviors.POWDER, + reactions: { + "fly": { elem2:"dead_bug", chance:0.25, oneway:true }, + "firefly": { elem2:"dead_bug", chance:0.2, oneway:true }, + "stink_bug": { elem2:"dead_bug", chance:0.15, oneway:true }, + "bee": { elem2:"dead_bug", chance:0.1, oneway:true }, + "bird": { elem2:"feather", chance:0.025, oneway:true }, + "egg": { elem2:"yolk", oneway:true }, + "grass": { elem2:null, chance:0.005, oneway:true }, + "bone": { elem2:"oil", tempMin:300, chance:0.005, oneway:true }, + "dead_plant": { elem2:"charcoal", tempMin:200, chance:0.005, oneway:true }, + "charcoal": { elem2:"diamond", tempMin:800, tempMax:900, chance:0.005, oneway:true }, + "sand": { elem2:"packed_sand", tempMin:500, chance:0.005, oneway:true }, + "wet_sand": { elem2:"packed_sand", chance:0.005, oneway:true }, + }, + tempHigh: 950, + stateHigh: "exoplanetary_magma", + category: "exoplanet", + state: "solid", + density: 2550, + hardness: 0.5, + breakInto: ["exoplanetary_sand","exoplanetary_sand","exoplanetary_dust","dust_cloud"] +} + +worldgentypes.exoplanet = { + layers: [ + [0.9, "exoplanetary_dust"], + [0.1, "exoplanetary_sand", 0.15], + [0.2, "dusty_ice", 0.075], + [0.05, "exoplanetary_rock"], + [0, "basalt"], + ], + decor: [ + ["exoplanetary_dust", 0.05], + ["dust_cloud", 0.25] + ], + baseHeight: 0.5, + temperature: -15 +} + +worldgentypes.exo_ocean = { + layers: [ + [0.99, "exoplanetary_dust"], + [0.40, "dusty_ice"], + [0.25, "bone", 0.01], + [0.25, "dusty_ice"], + [0.1, "exoplanetary_sand"], + [0.03, "exoplanetary_rock", 0.5], + [0.03, "exoplanetary_rock"], + [0, "basalt"], + ], + decor: [ + ["dust_cloud", 0.1, 10], + ], + temperature: -15 +} \ No newline at end of file diff --git a/mods/flesh_infection.js b/mods/flesh_infection.js index 8ee771aa..155ceced 100644 --- a/mods/flesh_infection.js +++ b/mods/flesh_infection.js @@ -1,6 +1,6 @@ // by Nekonico -eLists.FESTER = ["fleshy_dirt","dirt","rock","rock_wall","basalt","limestone","steel","iron","dead_bug","mud","sand","wet_sand","clay_soil","clay","mycelium","skin","meat","rotten_meat","wood","ant_wall","dead_plant","plant","hair","bone","cancer","straw","cloth","brick","bamboo","sponge","paper","plastic","concrete"], +eLists.FESTER = ["fleshy_dirt","dirt","rock","rock_wall","basalt","limestone","steel","iron","glass_shard","dead_bug","mud","sand","wet_sand","clay_soil","clay","mycelium","skin","meat","rotten_meat","wood","ant_wall","dead_plant","plant","hair","bone","cancer","straw","cloth","brick","bamboo","sponge","paper","plastic","concrete"], elements.fleshy_dirt = { color: ["#81512F","#895933","#825231","#906159"], @@ -604,7 +604,7 @@ elements.dry_fleshwood = { elements.acidic_bile = { color: ["#81cf63","#81cf63","#81cf63","#81cf63","#81cf63","#81cf63","#439809","#258b08","#118511","#127b12","#136d14"], behavior: [ - "XX|DB%1 AND SW:flesh_mound%90|XX", + "XX|DB%1|XX", "DB%1 AND M2%25|DL%0.001|DB%1 AND M2%25", "DB%1 AND M2%25|DB%2 AND M1|DB%1 AND M2%25", ], @@ -618,6 +618,7 @@ elements.acidic_bile = { "ammonia": { elem1:null, elem2:null }, "bleach": { elem1:null, elem2:null }, "cement": { elem1:null, elem2:null }, + "glass": { elem1:null, elem2:"glass_shard", chance:0.05 }, "caustic_potash": { elem1:"water", elem2:"potassium_salt" }, "bone": { elem2:"flesh_mound", chance:0.01 }, "water": { elem1:null, elem2:"dirty_water" }, diff --git a/mods/single_humans.js b/mods/single_humans.js new file mode 100644 index 00000000..eebdb809 --- /dev/null +++ b/mods/single_humans.js @@ -0,0 +1,147 @@ +elements.single_human = { + color: ["#f3e7db","#f7ead0","#eadaba","#d7bd96","#a07e56","#825c43","#604134","#3a312a"], + category: "life", + tick: function(pixel) { + if (tryMove(pixel, pixel.x, pixel.y+1)) {} // Fall + 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 + } + + if (pixel.panic > 0) { + pixel.panic -= 0.1; + if (pixel.panic < 0) { pixel.panic = 0; } + } + + 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) { + break; + } + } + else if (!isEmpty(pixel.x+move[0], pixel.y+move[1], true)) { + var hitPixel = pixelMap[pixel.x+move[0]][pixel.y+move[1]]; + if (hitPixel.element === "single_human") { + // interact with other humans + hitPixel.panic = pixel.panic; + } + } + } + // 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; } + } + + }, + 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: { + "cancer": { elem1:"cancer", chance:0.005 }, + "radiation": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.4 }, + "neutron": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, + "fallout": { elem1:["ash","meat","rotten_meat","cooked_meat"], chance:0.03 }, + "plague": { elem1:"plague", chance:0.05 }, + "oxygen": { elem2:"carbon_dioxide", chance:0.5 }, + "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": { elem2:"bubble", attr2:{"clone":"water"}, chance:0.001 }, + "salt_water": { elem2:"bubble", attr2:{"clone":"salt_water"}, chance:0.001 }, + "pool_water": { elem2:"bubble", attr2:{"clone":"pool_water"}, chance:0.001 }, + }, + properties: { + dead: false, + dir: 1, + panic: 0 + }, +}