2024-05-27 11:36:56 -04:00
|
|
|
function getImportantLetters(input) { // entirely chadgbd i just told it what algoritm to make
|
|
|
|
|
const isVowel = char => 'AEIOU'.includes(char);
|
|
|
|
|
const isConsonant = char => /^[BCDFGHJKLMNPQRSTVWXYZ]$/.test(char);
|
|
|
|
|
|
|
|
|
|
const removeDuplicates = str => {
|
|
|
|
|
let seen = new Set();
|
|
|
|
|
return str.split('').filter(char => {
|
|
|
|
|
if (seen.has(char)) {
|
|
|
|
|
return false;
|
|
|
|
|
} else {
|
|
|
|
|
seen.add(char);
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}).join('');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const words = input.replace(/[^a-zA-Z0-9\s_]/g, '').replace(/_/g, ' ').toUpperCase().split(/\s+/);
|
|
|
|
|
|
|
|
|
|
if (input.length <= 4) {
|
|
|
|
|
return input.toUpperCase();
|
|
|
|
|
} else if (words.length === 1) {
|
|
|
|
|
const word = removeDuplicates(words[0]);
|
|
|
|
|
let result = '';
|
|
|
|
|
let consonantCount = 0;
|
|
|
|
|
let vowelFound = false;
|
|
|
|
|
|
|
|
|
|
for (let char of word) {
|
|
|
|
|
if (isVowel(char) && !vowelFound) {
|
|
|
|
|
result += char;
|
|
|
|
|
vowelFound = true;
|
|
|
|
|
} else if (isConsonant(char) && consonantCount < 3) {
|
|
|
|
|
result += char;
|
|
|
|
|
consonantCount++;
|
|
|
|
|
}
|
|
|
|
|
if (result.length === 4) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result.padEnd(4, result[result.length - 1] || '');
|
|
|
|
|
} else if (words.length === 2) {
|
|
|
|
|
const firstWord = words[0];
|
|
|
|
|
const secondWord = words[1];
|
|
|
|
|
let result = '';
|
|
|
|
|
|
|
|
|
|
if (isNaN(firstWord) && !isNaN(secondWord)) {
|
|
|
|
|
const word = removeDuplicates(firstWord);
|
|
|
|
|
let consonantCount = 0;
|
|
|
|
|
let vowelFound = false;
|
|
|
|
|
|
|
|
|
|
for (let char of word) {
|
|
|
|
|
if (isVowel(char) && !vowelFound) {
|
|
|
|
|
result += char;
|
|
|
|
|
vowelFound = true;
|
|
|
|
|
} else if (isConsonant(char) && consonantCount < 2) {
|
|
|
|
|
result += char;
|
|
|
|
|
consonantCount++;
|
|
|
|
|
}
|
|
|
|
|
if (result.length === 3) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
result = result.padEnd(3, result[result.length - 1] || '') + secondWord;
|
|
|
|
|
} else if (!isNaN(firstWord) && isNaN(secondWord)) {
|
|
|
|
|
const word = removeDuplicates(secondWord);
|
|
|
|
|
let consonantCount = 0;
|
|
|
|
|
let vowelFound = false;
|
|
|
|
|
|
|
|
|
|
for (let char of word) {
|
|
|
|
|
if (isVowel(char) && !vowelFound) {
|
|
|
|
|
result += char;
|
|
|
|
|
vowelFound = true;
|
|
|
|
|
} else if (isConsonant(char) && consonantCount < 2) {
|
|
|
|
|
result += char;
|
|
|
|
|
consonantCount++;
|
|
|
|
|
}
|
|
|
|
|
if (result.length === 3) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
result = result.padEnd(3, result[result.length - 1] || '') + firstWord;
|
|
|
|
|
} else {
|
|
|
|
|
result = firstWord[0];
|
|
|
|
|
let consonants = [];
|
|
|
|
|
let vowels = [];
|
|
|
|
|
let allChars = [];
|
|
|
|
|
|
|
|
|
|
for (let char of secondWord) {
|
|
|
|
|
allChars.push(char);
|
|
|
|
|
if (isConsonant(char)) {
|
|
|
|
|
consonants.push(char);
|
|
|
|
|
} else if (isVowel(char)) {
|
|
|
|
|
vowels.push(char);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (consonants.length >= 3) {
|
|
|
|
|
let consonantCount = 0;
|
|
|
|
|
for (let char of allChars) {
|
|
|
|
|
if (isConsonant(char) && consonantCount < 3) {
|
|
|
|
|
result += char;
|
|
|
|
|
consonantCount++;
|
|
|
|
|
}
|
|
|
|
|
if (result.length === 4) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (consonants.length === 2) {
|
|
|
|
|
let consonantCount = 0;
|
|
|
|
|
let vowelCount = 0;
|
|
|
|
|
for (let char of allChars) {
|
|
|
|
|
if (isConsonant(char) && consonantCount < 2) {
|
|
|
|
|
result += char;
|
|
|
|
|
consonantCount++;
|
|
|
|
|
} else if (isVowel(char) && vowelCount < 1) {
|
|
|
|
|
result += char;
|
|
|
|
|
vowelCount++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
let consonantCount = 0;
|
|
|
|
|
let vowelCount = 0;
|
|
|
|
|
for (let char of allChars) {
|
|
|
|
|
if (isConsonant(char) && consonantCount < 1) {
|
|
|
|
|
result += char;
|
|
|
|
|
consonantCount++;
|
|
|
|
|
} else if (isVowel(char) && vowelCount < 2) {
|
|
|
|
|
result += char;
|
|
|
|
|
vowelCount++;
|
|
|
|
|
}
|
|
|
|
|
if (result.length === 4) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
result = result.padEnd(4, result[result.length - 1] || '');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
} else if (words.length === 3) {
|
|
|
|
|
const firstWord = words[0];
|
|
|
|
|
const secondWord = words[1];
|
|
|
|
|
const thirdWord = words[2];
|
|
|
|
|
let result = firstWord[0] + secondWord[0];
|
|
|
|
|
let consonantCount = 0;
|
|
|
|
|
let vowelFound = false;
|
|
|
|
|
|
|
|
|
|
for (let char of thirdWord) {
|
|
|
|
|
if (isVowel(char) && !vowelFound) {
|
|
|
|
|
result += char;
|
|
|
|
|
vowelFound = true;
|
|
|
|
|
} else if (isConsonant(char) && consonantCount < 1) {
|
|
|
|
|
result += char;
|
|
|
|
|
consonantCount++;
|
|
|
|
|
}
|
|
|
|
|
if (result.length === 4) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result.padEnd(4, result[result.length - 1] || '');
|
|
|
|
|
} else {
|
|
|
|
|
return words.map(word => word[0]).join('').slice(0, 4);
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-05-14 20:34:29 -04:00
|
|
|
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;
|
|
|
|
|
}
|
2024-05-16 18:24:01 -04:00
|
|
|
let customName = "c"
|
2024-05-14 20:34:29 -04:00
|
|
|
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}
|
2024-05-27 11:36:56 -04:00
|
|
|
var condenseToFour = prompt("Would you like to condense the names to 4 letters? Also known as TPT-ify. Type yes or no.", "no")
|
|
|
|
|
if (condenseToFour == "yes"){settings.funnyname.condenseToFour = true} else {settings.funnyname.condenseToFour = false}
|
2024-05-14 20:34:29 -04:00
|
|
|
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
|
2024-05-27 11:36:56 -04:00
|
|
|
settings.funnyname.condenseToFour = false
|
2024-05-14 20:34:29 -04:00
|
|
|
} else {settings.funnyname.doNameRates = false}
|
|
|
|
|
saveSettings()
|
2024-05-16 18:24:01 -04:00
|
|
|
var allNamesString = prompt("Would you like to set all names to a custom string? This will set all others to no. Type yes or no.", "no")
|
|
|
|
|
if (allNamesString == "yes"){
|
|
|
|
|
settings.funnyname.doNameRates = false
|
|
|
|
|
settings.funnyname.doNameSwapping = false
|
|
|
|
|
settings.funnyname.doVowelSwapping = false
|
|
|
|
|
settings.funnyname.doLetterSwapping = false
|
2024-05-27 11:36:56 -04:00
|
|
|
settings.funnyname.condenseToFour = false
|
2024-05-16 18:24:01 -04:00
|
|
|
settings.funnyname.doNameRates = false
|
|
|
|
|
customName = prompt("What would you like to set the names to?", "")
|
|
|
|
|
settings.funnyname.customName = true
|
|
|
|
|
settings.funnyname.customNameString = customName
|
|
|
|
|
saveSettings()
|
2024-05-17 18:04:49 -04:00
|
|
|
} else {settings.funnyname.customName = false}
|
2024-05-20 20:57:43 -04:00
|
|
|
saveSettings()
|
2024-05-14 20:34:29 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-05-16 18:24:01 -04:00
|
|
|
if (settings.funnyname.customName){
|
|
|
|
|
for (let elementname in elements){
|
|
|
|
|
if (elementname != "name_settings"){
|
|
|
|
|
elements[elementname].name = settings.funnyname.customNameString
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-05-27 11:36:56 -04:00
|
|
|
if (settings.funnyname.condenseToFour){
|
|
|
|
|
for (let elementname in elements){
|
|
|
|
|
if (elementname != "name_settings"){
|
|
|
|
|
let newelementname = getImportantLetters((elements[elementname].name)||elementname)
|
|
|
|
|
elements[elementname].name = newelementname
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-05-14 20:34:29 -04:00
|
|
|
}
|
|
|
|
|
)
|