diff --git a/index.html b/index.html index c87a9ee..fbe266a 100644 --- a/index.html +++ b/index.html @@ -64,6 +64,7 @@ + @@ -885,8 +886,10 @@

Collection

Manias

-

Listing

-

Empty.

+

Collection

+
+ +
diff --git a/scripts/collections/background/manias_collection.js b/scripts/collections/background/manias_collection.js new file mode 100644 index 0000000..fb0c61d --- /dev/null +++ b/scripts/collections/background/manias_collection.js @@ -0,0 +1,110 @@ +import { Random } from "../../math/random.js"; + +export const ManiasCollection = Object.freeze({ + manias: [ + { name: "Ablutomania", description: "Compulsion to wash oneself." }, + { name: "Abulomania", description: "Pathological indecision." }, + { name: "Acluomania", description: "Excessive fondness for darkness." }, + { name: "Acromania", description: "Compulsion for high places." }, + { name: "Agatomania", description: "Pathological kindness." }, + { name: "Agromania", description: "Intense desire to be in open spaces." }, + { name: "Aichmomania", description: "Obsession with sharp or pointed objects." }, + { name: "Algomania", description: "Obsession with pain." }, + { name: "Alliomania", description: "Obsession with garlic." }, + { name: "Amaxomania", description: "Obsession with being in vehicles." }, + { name: "Amenomania", description: "Irrational joy." }, + { name: "Antomania", description: "Obsession with flowers." }, + { name: "Aritmomania", description: "Obsessive concern with numbers." }, + { name: "Asoticamania", description: "Impulsive or reckless spending." }, + { name: "Automania", description: "Excessive fondness for solitude." }, + { name: "Baletomania", description: "Abnormal affection for ballet." }, + { name: "Bibliocleptomania", description: "Compulsion to steal books." }, + { name: "Bibliomania", description: "Obsession with books and/or reading." }, + { name: "Bruxomania", description: "Compulsion to grind teeth." }, + { name: "Cacodemomania", description: "Pathological belief of being possessed by an evil spirit." }, + { name: "Calomania", description: "Obsession with one's own beauty." }, + { name: "Cartacoethes", description: "Uncontrollable compulsion to see maps everywhere." }, + { name: "Catapedamania", description: "Obsession with jumping from high places." }, + { name: "Cheimatomania", description: "Abnormal desire for cold and/or icy things." }, + { name: "Clazomania", description: "Irrational compulsion to shout." }, + { name: "Cleptomania", description: "Irrational compulsion to steal." }, + { name: "Clinomania", description: "Excessive desire to stay in bed." }, + { name: "Coimetromania", description: "Obsession with cemeteries." }, + { name: "Coloromania", description: "Obsession with a specific color." }, + { name: "Coreomania", description: "Mania for dancing or uncontrollable frenzy." }, + { name: "Coulromania", description: "Obsession with clowns." }, + { name: "Countermania", description: "Compulsion to confront fearful situations." }, + { name: "Dacnomania", description: "Obsession with killing." }, + { name: "Demonomania", description: "Pathological belief of being possessed by demons." }, + { name: "Dermatilomania", description: "Compulsion to pick, scratch, or touch one's own or others' skin." }, + { name: "Dikemania", description: "Obsession with seeing justice being done." }, + { name: "Dipsomania", description: "Abnormal desire for alcohol." }, + { name: "Doramania", description: "Obsession with owning animal skins." }, + { name: "Doromania", description: "Obsession with giving gifts." }, + { name: "Drapetomania", description: "Compulsion to flee." }, + { name: "Ecdemomania", description: "Compulsion to wander." }, + { name: "Egomania", description: "Irrational self-centered or self-worshipping attitude." }, + { name: "Eluromania", description: "Abnormal affection for cats." }, + { name: "Empleomania", description: "Insatiable desire to hold a public office." }, + { name: "Enosimania", description: "Pathological belief that someone has sinned." }, + { name: "Epistemomania", description: "Obsession with acquiring knowledge." }, + { name: "Eremiomania", description: "Compulsion for quietness." }, + { name: "Eteromania", description: "Desire for ether." }, + { name: "Fantasmomania", description: "Obsession with ghosts." }, + { name: "Fonomania", description: "Pathological tendency to commit murder." }, + { name: "Fotomania", description: "Pathological desire for light." }, + { name: "Gamomania", description: "Obsession with strange marriage proposals." }, + { name: "Geliomania", description: "Uncontrollable compulsion to laugh." }, + { name: "Gimnomania", description: "Compulsion for nudity." }, + { name: "Goetomania", description: "Obsession with witches and witchcraft." }, + { name: "Grafomania", description: "Obsession with writing or taking notes." }, + { name: "Habromania", description: "Abnormal tendency to create pleasant delusions (despite reality)." }, + { name: "Helmintomania", description: "Intense fascination with worms." }, + { name: "Hidromania", description: "Irrational desire for water." }, + { name: "Hoplomania", description: "Obsession with firearms." }, + { name: "Iconomania", description: "Obsession with icons or portraits." }, + { name: "Ictiomania", description: "Obsession with fish." }, + { name: "Idolomania", description: "Obsession or devotion to an idol." }, + { name: "Infomania", description: "Excessive devotion to accumulating facts." }, + { name: "Ligiromania", description: "Uncontrollable compulsion to make loud or strident noises." }, + { name: "Linonomania", description: "Obsession with ropes or cords." }, + { name: "Lipemania", description: "Abnormal tendency toward deep melancholy." }, + { name: "Loterimania", description: "Extreme desire to participate in lotteries." }, + { name: "Question-Asking Mania", description: "Compulsive desire to ask questions." }, + { name: "Megalitomania", description: "Abnormal tendency to compose strange ideas when in the presence of circles." }, + { name: "Melomania", description: "Obsession with music or a specific melody." }, + { name: "Metromania", description: "Insatiable desire to write verses." }, + { name: "Misomania", description: "Hatred of everything, obsession with hating a subject or group." }, + { name: "Mitomania", description: "Lying or exaggerating in abnormal amounts." }, + { name: "Monomania", description: "Abnormal obsession with a single thought or idea." }, + { name: "Nosomania", description: "Delusions of suffering from an imagined illness." }, + { name: "Notomania", description: "Compulsion to record everything (e.g., with photographs)." }, + { name: "Onicotilomania", description: "Compulsion to pick, bite, or tear nails." }, + { name: "Onomamania", description: "Obsession with names (people, places, things)." }, + { name: "Onomatomania", description: "Irresistible desire to repeat certain words." }, + { name: "Opsomania", description: "Abnormal fondness for a certain type of food." }, + { name: "Paramania", description: "Abnormal pleasure in complaining." }, + { name: "Personamania", description: "Compulsion to wear masks." }, + { name: "Piromania", description: "Compulsion to start fires." }, + { name: "Planomania", description: "Abnormal desire to disobey social norms." }, + { name: "Plutomania", description: "Obsessive desire for wealth." }, + { name: "Pseudomania", description: "Irrational compulsion to lie." }, + { name: "Doodling Mania", description: "Obsession with doodling/drawing to keep hands busy." }, + { name: "Rinotilexomania", description: "Compulsive desire to pick the nose or clean the nose with the finger." }, + { name: "Siderodromomania", description: "Intense fascination with trains and railway travel." }, + { name: "Sophomania", description: "The illusion of being incredibly intelligent." }, + { name: "Tanatomania", description: "Belief that someone is cursed by death magic." }, + { name: "Technomania", description: "Obsession with new technologies." }, + { name: "Teomania", description: "Belief that one is a god." }, + { name: "Tiflomania", description: "Pathological blindness." }, + { name: "Titilomania", description: "Compulsion to scratch oneself." }, + { name: "Tomomania", description: "Irrational preference for undergoing surgeries or operations." }, + { name: "Trichotillomania", description: "Desire to pull out one's own hair." }, + { name: "Xenomania", description: "Obsession with foreign things." }, + { name: "Zoomania", description: "Insane fondness for animals." } + ], + + getRandomMania: function () { + return Random.getRandomArrayElement(this.manias); + }, +}); \ No newline at end of file diff --git a/scripts/generator/routine/scsg_data.js b/scripts/generator/routine/scsg_data.js index 09204ee..ffef827 100644 --- a/scripts/generator/routine/scsg_data.js +++ b/scripts/generator/routine/scsg_data.js @@ -31,6 +31,7 @@ import { Random } from "../../math/random.js"; import { BelovedBelongingsCollection } from "../../collections/background/beloved_belongings_collection.js"; import { CharacteristicsCollection } from "../../collections/background/characteristics_collection.js"; import { PhobiasCollection } from "../../collections/background/phobias_collection.js"; +import { ManiasCollection } from "../../collections/background/manias_collection.js"; //#endregion @@ -71,6 +72,7 @@ export function SCSGData(settings) { let char_background_dear_belongings = backgroundGenerator.getRandomDarlingBelonging(); let char_background_dear_characteristic = backgroundGenerator.getRandomCharacteristic(); let char_background_dear_phobias = backgroundGenerator.getRandomPhobias(); + let char_background_dear_manias = backgroundGenerator.getRandomManias(); //#endregion return { @@ -162,6 +164,7 @@ export function SCSGData(settings) { }, phobias: char_background_dear_phobias, + manias: char_background_dear_manias, }, }; } @@ -339,36 +342,35 @@ const backgroundGenerator = Object.freeze({ }, getRandomPhobias: function () { - let phobias = []; - let phobiasAndIntensity = []; - - let count = Random.getRandomNumber(0, 5); - - for (let i = 0; i < count; i++) { - let phobiaSelected = PhobiasCollection.getRandomPhobia(); - - if (phobias.includes(phobiaSelected)) { - continue; - } + return this.getRandomItems(PhobiasCollection.phobias, Random.getRandomNumber(0, 5)); + }, + + getRandomManias: function () { + return this.getRandomItems(ManiasCollection.manias, Random.getRandomNumber(0, 5)); + }, - phobias.push(phobiaSelected); + // Utilities + getRandomItems: function(collection, count) { + let items = new Set(); + + while (items.size < count) { + let selectedItem = Random.getRandomArrayElement(collection); + items.add(selectedItem); } - - phobias.forEach(phobia => { + + return Array.from(items).map(item => { let intensitySelected; - + do { intensitySelected = IntensityCollection.getRandomIntensity(); } while (intensitySelected === "None"); - - phobiasAndIntensity.push({ - name: phobia.name, - description: phobia.description, + + return { + name: item.name, + description: item.description, intensity: intensitySelected - }); + }; }); - - return phobiasAndIntensity; - }, + } }); //#endregion diff --git a/scripts/generator/routine/scsg_updater.js b/scripts/generator/routine/scsg_updater.js index eb971cc..b1fda60 100644 --- a/scripts/generator/routine/scsg_updater.js +++ b/scripts/generator/routine/scsg_updater.js @@ -34,6 +34,7 @@ let cs_background_important_location; let cs_background_dear_belongings; let cs_background_characteristic; let cs_background_phobias_collection; +let cs_background_manias_collection; // ======================================== // // Main @@ -74,6 +75,7 @@ export function SCSGQueryElements() { cs_background_dear_belongings = document.querySelector("#cs-background-dear-belongings"); cs_background_characteristic = document.querySelector("#cs-background-characteristic"); cs_background_phobias_collection = document.querySelector("#cs-background-phobias-collection"); + cs_background_manias_collection = document.querySelector("#cs-background-manias-collection"); } export function SCSGUpdater(characterInfos) { @@ -156,35 +158,10 @@ function updateBackground(characterInfos) { cs_background_characteristic.innerHTML = characterInfos.background.characteristics.target; // Phobias - cs_background_phobias_collection.replaceChildren(); + createCollectionItems(characterInfos.background.phobias, cs_background_phobias_collection); - if (characterInfos.background.phobias.length > 0) { - characterInfos.background.phobias.forEach(phobia => { - let phobia_item = document.createElement("div"); - let title = document.createElement("span"); - let description = document.createElement("span"); - - phobia_item.classList.add("app-item-square"); - title.classList.add("app-item-square-title"); - description.classList.add("app-item-square-description"); - - phobia_item.appendChild(title); - phobia_item.appendChild(description); - - title.innerHTML = `${phobia.name} (${phobia.intensity})`; - description.innerHTML = phobia.description; - - cs_background_phobias_collection.appendChild(phobia_item); - }); - } - else { - let empty_item = document.createElement("div"); - empty_item.classList.add("app-item-square"); - - empty_item.innerHTML = "The character does not have phobias."; - - cs_background_phobias_collection.appendChild(empty_item); - } + // Manias + createCollectionItems(characterInfos.background.manias, cs_background_manias_collection); } // ================================ // @@ -194,4 +171,35 @@ function getFormattedDate(date) { return date.day.toString().padStart(2, '0') + "/" + date.month.toString().padStart(2, '0') + "/" + date.year + " (day/month/year)"; +} + +function createCollectionItems(collection, container) { + container.replaceChildren(); + + if (collection.length > 0) { + collection.forEach(item => { + let itemElement = document.createElement("div"); + let title = document.createElement("span"); + let description = document.createElement("span"); + + itemElement.classList.add("app-item-square"); + title.classList.add("app-item-square-title"); + description.classList.add("app-item-square-description"); + + itemElement.appendChild(title); + itemElement.appendChild(description); + + title.innerHTML = `${item.name} (${item.intensity})`; + description.innerHTML = item.description; + + container.appendChild(itemElement); + }); + } else { + let emptyItem = document.createElement("div"); + emptyItem.classList.add("app-item-square"); + + emptyItem.innerHTML = "There are no items in the respective collection."; + + container.appendChild(emptyItem); + } } \ No newline at end of file