sandboxels/mods/funnynames.js

121 lines
5.5 KiB
JavaScript

function swapObjectValues(obj) {
const keys = Object.keys(obj);
while (keys.length > 1) {
const index1 = Math.floor(Math.random() * keys.length);
let index2 = Math.floor(Math.random() * keys.length);
while (index2 === index1) {
index2 = Math.floor(Math.random() * keys.length);
}
const temp = obj[keys[index1]];
obj[keys[index1]] = obj[keys[index2]];
obj[keys[index2]] = temp;
keys.splice(index1, 1);
keys.splice(keys.indexOf(keys[index2]), 1);
}
return obj;
}
function createLetterObject(str) {
const letterObject = {};
for (let i = 0; i < str.length; i++) {
const letter = str[i];
if (!letterObject[letter]) {
letterObject[letter] = letter;
} else {
let count = 2;
while (letterObject[letter + count]) {
count++;
}
letterObject[letter + count] = letter;
}
}
return letterObject;
}
function objectValuesToString(obj) {
let result = "";
for (const key in obj) {
result += obj[key];
}
return result;
}
if (!settings.funnyname){settings.funnyname = {}; saveSettings()}
elements.name_settings = {
color: elements.image.color,
category: "funny name tools",
canPlace: false,
onSelect: function(){
var doVowelSwapping = prompt("Would you like to swap the vowels in the names? Type yes or no.", "no")
if (doVowelSwapping == "yes"){settings.funnyname.doVowelSwapping = true} else {settings.funnyname.doVowelSwapping = false}
var doNameSwapping = prompt("Would you like to swap the names of the elements? Type yes or no.", "no")
if (doNameSwapping == "yes"){settings.funnyname.doNameSwapping = true} else {settings.funnyname.doNameSwapping = false}
var doLetterSwapping = prompt("Would you like to swap the letters in the names? Type yes or no.", "no")
if (doLetterSwapping == "yes"){settings.funnyname.doLetterSwapping = true} else {settings.funnyname.doLetterSwapping = false}
var doNameRates = prompt("Would you like to make the names a rating? If yes, this will set all others to no (it is incompatible.) Type yes or no.", "no")
if (doNameRates == "yes"){
settings.funnyname.doNameRates = true
settings.funnyname.doNameSwapping = false
settings.funnyname.doVowelSwapping = false
settings.funnyname.doLetterSwapping = false
} else {settings.funnyname.doNameRates = false}
saveSettings()
}
}
runAfterAutogen(
function(){
if (settings.funnyname.doVowelSwapping){
for (let elementname in elements){
if (elementname != "name_settings"){
let newelementname = elementname.replaceAll("e", "@")
newelementname = newelementname.replaceAll("o", "e")
newelementname = newelementname.replaceAll("@", "o")
newelementname = newelementname.replaceAll("a", "*")
newelementname = newelementname.replaceAll("u", "a")
newelementname = newelementname.replaceAll("i", "u")
newelementname = newelementname.replaceAll("*", "i")
elements[elementname].name = newelementname
}
}
}
if (settings.funnyname.doNameSwapping){
let listofnames = {}
for (let elementname in elements){
if (elementname != "name_settings"){
if (elements[elementname].name){listofnames[elementname] = elements[elementname].name} else {listofnames[elementname] = elementname}
}
}
listofnames = swapObjectValues(listofnames)
for (let key in listofnames){
elements[key].name = listofnames[key]
}
}
if (settings.funnyname.doLetterSwapping){
for (let elementname in elements){
if (elementname != "name_settings"){
let newelementname = {}
if (elements[elementname].name){newelementname = createLetterObject(elements[elementname].name)} else {newelementname = createLetterObject(elementname)}
newelementname = swapObjectValues(newelementname)
elements[elementname].name = objectValuesToString(newelementname)
}
}
}
if (settings.funnyname.doNameRates){
for (let elementname in elements){
if (elementname != "name_settings"){
var randomRating = Math.floor(Math.random() * 11)
switch(randomRating){
case 0: elements[elementname].name = "absolutely_horrible"; break
case 1: elements[elementname].name = "horrible"; break
case 2: elements[elementname].name = "awful"; break
case 3: elements[elementname].name = "poor"; break
case 4: elements[elementname].name = "mediocre"; break
case 5: elements[elementname].name = "decent"; break
case 6: elements[elementname].name = "good"; break
case 7: elements[elementname].name = "great"; break
case 8: elements[elementname].name = "super_great"; break
case 9: elements[elementname].name = "absolutely_great"; break
case 10: elements[elementname].name = "one_of_the_best"; break
}
}
}
}
}
)