sandboxels/mods/betaworldgen.js

129 lines
4.1 KiB
JavaScript

//This mod was made by Alex the transfem, https://discord.com/users/778753696804765696 on discord and https://www.tiktok.com/@alextheagenenby?_t=8hoCVI3NRhu&_r=1 on tiktok.
function randomAlter(num, list){
let r = Math.floor(Math.random() * list.length);
return (num + list[r]);
}
let avgheight = 0;
let seed = "";
function getSeed(type = "plains", thickness = 15){
seed = "";
console.log(thickness)
if(thickness == 15){
avgheight = Math.floor(Math.random() * (18 - 12 + 1)) + 12;
} else{
avgheight = thickness;
}
console.log(avgheight)
if(type == "plains"){
let location = Math.floor(Math.random(0, pixelMap.length) * 100);
let i = 0;
while (i < pixelMap.length){
if (i !== location){
seed += `${randomAlter(avgheight, [0, 1, 1, 2, 0, 0])}|`;
i += 1;
} else if (i == location){
let height = `${Math.floor(Math.random(40, pixelMap[i].length) * 10)}`;
let prevH = randomAlter(avgheight, [1, 1, 1, 2, 0, 0]);
while (height > prevH){
prevH = randomAlter(prevH, [0, 1, 1, 2, 0, 0, 0, 1]);
seed += `${prevH}|`;
}
i += 1;
}
}
return seed;
}
if(type == "desert"){
let i = 0;
while (i < pixelMap.length){
seed += `${randomAlter(avgheight, [0, 1, 1, 2, 0, 0])}|`;
i += 1;
}
}
return seed;
}
function spawnElements(seed, list, height2 = 1, condition = [1, 1, 0]){
console.log(list);
let width = pixelMap.length - 1;
let element;
let height = pixelMap[1].length - 1;
console.log(seed);
let seedArray = seed.split("|");
console.log(seedArray);
seedArray.splice(seedArray.indexOf(""), 1);
seedArray.splice(pixelMap.length);
console.log(seedArray);
let i = 0;
while (i < seedArray.length - 1){
let ii = 0;
while (ii < seedArray[i]){
if((Math.floor(Math.random() * (condition[0] - condition[1] + 1))) == condition[2]){
if (height2 != 1){
element = list[Math.floor(Math.random() * list.length)];
createPixel(element, (width - 1) - i, (height - (height2 + 1)) - ii);
} else{
element = list[Math.floor(Math.random() * list.length)];
createPixel(element, (width - 1) - i, (height - 1) - ii);
}
}
ii += 1;
}
i += 1;
}
}
function flat(){
let iii = 0;
let flat = "";
while (iii < pixelMap.length){
flat += "1|";
iii += 1;
}
return flat;
}
function processSeed(seed, type = "plains"){
console.log(flat());
let seedsArray = seed.split(":");
console.log(seedsArray);
if(type == "plains"){
spawnElements(seedsArray[0],["rock","rock","rock","rock","rock","rock","metal_scrap","metal_scrap","metal_scrap","gold_coin","uranium","uranium","diamond","rock","iron","iron","iron","aluminum","aluminum","aluminum","aluminum","copper","copper","copper","zinc","zinc","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock","rock"].sort(() => Math.random() - 0.5));
setTimeout(function(){ spawnElements(seedsArray[1], ["dirt"], 24); }, 200);
setTimeout(function(){ spawnElements(flat(),["grass","grass","grass","sapling","flower_seed","grass","grass","pinecone","grass","grass","grass","grass","grass","grass","grass","grass","grass","grass"], 40); }, 300);
} else if(type == "desert"){
spawnElements(seed, ["sand"]);
setTimeout(function(){ spawnElements(flat(), ["cactus"], 40, [6, 0, 3]); }, 100);
}
}
elements.worldGen = {
color: "#FFFFFF",
behavior: elements.erase.behavior,
temp: 2,
category: "tools",
insulate:true,
canPlace: false,
desc: "Generate worlds with random seeds or your own seeds.",
onSelect: function() {
let Seed = prompt("Enter desert or plains random generation! automatically set to plains.");
let regex = /[a-z]/;
if (regex.test(Seed)){
if(Seed.toLowerCase() == "desert"){
processSeed(getSeed("desert", 30), "desert");
}
} else {
if (Seed == ""){
seed = `${getSeed("plains", 20)}:${getSeed("plains", 8)}`
processSeed(seed);
} else{
processSeed(Seed);
}
}
}
}