2 Komitmen 783cd43d0b ... 814f3f7863

Pembuat SHA1 Pesan Tanggal
  Reddo 814f3f7863 Settings of various things! 5 tahun lalu
  Reddo 9e7fdf2504 Settings support 5 tahun lalu

+ 26 - 16
app/Controls/Classes/ContentType.ts

@@ -3,6 +3,7 @@
 /// <reference path="../Modules/ContentHandler.ts" />
 interface ContentTypeOptions {
     id : string;
+    name : string;
     defaultValue : boolean;
     description : Say | string;
     currentValueDescription? : (c : ContentType) => Say | string;
@@ -16,6 +17,7 @@ interface ContentTypeOptions {
 }
 
 class ContentType extends StoredMemory<boolean> {
+    public name : string;
     private description : Say;
     private valueDescription : (c : ContentType) => Say | string = () => { return new Say (JSON.stringify(this.getValue())); };
     private changeable : boolean = true;
@@ -34,6 +36,8 @@ class ContentType extends StoredMemory<boolean> {
             this.changeable = false;
         }
 
+        this.name = options.name;
+
         ContentHandler.registerContentType(this);
     }
 
@@ -41,6 +45,10 @@ class ContentType extends StoredMemory<boolean> {
         return this.description;
     }
 
+    public getName () {
+        return this.name;
+    }
+
     public getValueDescription () {
         let desc = this.valueDescription(this);
         if (desc instanceof Say) {
@@ -60,9 +68,14 @@ class ContentType extends StoredMemory<boolean> {
         return this.getValue();
     }
 
+    public isChangeable () {
+        return this.changeable;
+    }
+
     public static MM = new ContentType({
         changeable : false, // There will be too little content at first for us to block part of it for no good reason, maybe at some point
-        description : "Homosexual (M/M) sexual events",
+        name: "Male-Male",
+        description : "Homosexual (M/M) sexual encounters.",
         id : "MM",
         defaultValue : true
     });
@@ -70,7 +83,8 @@ class ContentType extends StoredMemory<boolean> {
 
     public static FF = new ContentType({
         changeable : false, // There will be too little content at first for us to block part of it for no good reason, maybe at some point
-        description : "Homosexual (F/F) sexual events",
+        description : "Homosexual (F/F) sexual events.",
+        name : "Female-Female",
         id : "FF",
         defaultValue : true
     });
@@ -78,7 +92,8 @@ class ContentType extends StoredMemory<boolean> {
 
     public static MF = new ContentType({
         changeable : false, // There will be too little content at first for us to block part of it for no good reason, maybe at some point
-        description : "Heterosexual (M/F) sexual events",
+        name : "Male-Female",
+        description : "Heterosexual (M/F) sexual events.",
         id : "MF",
         defaultValue : true
     });
@@ -86,23 +101,18 @@ class ContentType extends StoredMemory<boolean> {
 
     public static Beast = new ContentType({
         changeable : true,
-        description : "Sexual events with either monsters or magical beasts. MM/MF/FF take precedence over this one if blocked. Sufficiently human creatures do not get counted into this.",
+        description : "Sexual events with either monsters or magical beasts. MM/MF/FF take precedence over this one if blocked. Sufficiently human creatures (like Orcs and even Ogres) do not get counted into this, furry ones (Minotaurs) do..",
         id : "Beast",
+        name : "Beast mode",
         defaultValue : true
     });
 
 
-    public static Scat = new ContentType({
-        changeable : false,
-        description : "Scatologic sexual events",
-        id : "Scat",
-        defaultValue : false // There is no intention of ever adding these
-    });
-
-    public static Pee = new ContentType({
-        changeable : false,
-        description : "Sexual events with urine",
-        id : "Urophilia",
-        defaultValue : false // There is no intention of ever adding these
+    public static Ravishment = new ContentType({
+        changeable : true,
+        description : "Allows sexual events to be initiated and continued by NPCs regardless of what the player says or does. Without this, sexual events can only be initiated by the player.",
+        id : "Ravish",
+        name : "Ravishment",
+        defaultValue : true
     });
 }

+ 55 - 3
app/Controls/Modules/KeyHandler.ts

@@ -151,14 +151,14 @@ module Controls.KeyHandler {
         "keyCodesRoom",
         createKeyCodes( ["Digit1", "Digit2", "Digit3", "Digit4", "Digit5"],
                          ["1", "2", "3", "4", "5"],
-                        [true, true, true, true])
+                        [true, true, true, false])
     );
 
     export var keyCodes2 = new StoredMemory(
         "keyCodesActions",
         createKeyCodes( ["KeyQ", "KeyW", "KeyE", "KeyR", "KeyT"],
             ["Q", "W", "E", "R", "T"],
-            [true, true, true, true])
+            [true, true, true, false])
     );
 
 
@@ -167,7 +167,7 @@ module Controls.KeyHandler {
         "keyCodesGlobal",
         createKeyCodes( ["KeyF", "KeyV", "KeyG", "KeyB"],
             ["F", "V", "G", "B"],
-            [true, true, true, true])
+            [true, true, true, false])
     );
 
     export var keyCodeNorth = new StoredMemory(
@@ -230,6 +230,7 @@ module Controls.KeyHandler {
         return directionCodeByIndex[index].getValue();
     }
 
+    export var keyRows = 3;
     export var available1 : Array<KeyCode> = [];
     export var available2 : Array<KeyCode> = [];
     export var available3 : Array<KeyCode> = [];
@@ -314,4 +315,55 @@ module Controls.KeyHandler {
             rejectPromise(promiseStack[index]);
         }
     }
+
+    export function addKey (row : number, ev : KeyboardEvent) {
+        let keyName = ev.key.toUpperCase();
+        if (["ALT", "CONTROL", "SHIFT", " ", "TAB"].includes(keyName)) {
+            return;
+        }
+        if (keyName == "BACKSPACE") {
+            clearKeys(row);
+            return;
+        }
+        if (row >= 1 && row <= Controls.KeyHandler.keyRows) {
+            let rowArray : StoredMemory<Array<KeyCode>> = Controls.KeyHandler["keyCodes" + row];
+            let keyArray = rowArray.getValue().splice(0);
+            keyArray.push(...
+                createKeyCodes( [ev.code],
+                    [keyName],
+                    [true, true, true, false])
+            );
+
+            let modNumber = (name : string) => {
+                if (name.indexOf("Shift") != -1) {
+                    return 1;
+                } else if (name.indexOf("Control") != -1) {
+                    return 2;
+                } else if (name.indexOf("Alt") != -1) {
+                    return 3;
+                }
+                return 0;
+            };
+
+            keyArray.sort((a, b) => {
+                let ma = modNumber(a.name);
+                let mb = modNumber(b.name);
+                if (ma != mb) {
+                    return ma - mb;
+                }
+                if (a.representation < b.representation) return -1;
+                else if (a.representation > b.representation) return 1;
+                return 0;
+            });
+
+            rowArray.storeValue(keyArray);
+        }
+    }
+
+    export function clearKeys (row : number) {
+        if (row >= 1 && row <= Controls.KeyHandler.keyRows) {
+            let rowArray: StoredMemory<Array<KeyCode>> = Controls.KeyHandler["keyCodes" + row];
+            rowArray.storeValue([]);
+        }
+    }
 }

+ 88 - 0
app/Controls/Modules/KeyHandler/KeySetter.ts

@@ -0,0 +1,88 @@
+module Controls.KeyHandler.KeySetter {
+    let resolver;
+    let div = document.createElement("div");
+
+    function printTable() {
+        let p = document.createElement("p");
+        p.classList.add("content");
+        p.appendChild(document.createTextNode("Each row usually has a purpose, though an row will do if there are not enough keys in the ideal row."));
+        Elements.CurrentTurnHandler.print(p);
+
+        p = document.createElement("p");
+        p.classList.add("content");
+        p.appendChild(document.createTextNode("Row 1 is preferred for Choices and Room Objects. Row 2 is used for commands relating to the selected thing (Take, Wear). Row 3 is used for commands that you do without targets (Get Up, Wait, Save game)."));
+        Elements.CurrentTurnHandler.print(p);
+
+        p = document.createElement("p");
+        p.classList.add("content");
+        p.appendChild(document.createTextNode("Select the row you wish to edit and press keys to add them to the list. You can press Backspace to clear it."));
+        Elements.CurrentTurnHandler.print(p);
+
+
+
+        for (let i = 1; i <= Controls.KeyHandler.keyRows; i++) {
+            let p = document.createElement("p");
+            p.classList.add("content");
+            p.appendChild(document.createTextNode("Row " + i + ": "));
+
+            let input = document.createElement("input");
+            input.classList.add("keySelectorInput");
+            p.appendChild(input);
+
+            let updateInput = () => {
+                let keys = <Array<KeyCode>> Controls.KeyHandler["keyCodes" + i].getValue();
+                let values = [];
+                keys.forEach(key => {
+                    values.push(key.representation)
+                });
+                input.value = values.join("; ");
+            };
+
+            updateInput();
+
+            let inputF = (ev : KeyboardEvent) => {
+                Controls.KeyHandler.addKey(i, ev);
+                updateInput();
+                ev.stopPropagation();
+                ev.preventDefault();
+            };
+
+            input.addEventListener("keydown", inputF);
+            input.addEventListener("keyup", (ev) => {ev.stopPropagation();});
+            Elements.CurrentTurnHandler.print(p);
+        }
+    }
+
+    function printConfirm () {
+        (new Say("Confirm")).getHTML("p", ["choice"]).then(elementArray => {
+            elementArray[0].addEventListener("click", () => {
+                resolver();
+            });
+            Controls.KeyHandler.applyCode(elementArray[0], Controls.KeyHandler.getSecondKeyCode());
+            Elements.CurrentTurnHandler.print(elementArray[0]);
+        });
+    }
+
+    function reset () {
+        Elements.CurrentTurnHandler.clear();
+        Elements.CurrentTurnHandler.print(div);
+        printTable();
+        Elements.CurrentTurnHandler.print(document.createElement("br"));
+        Elements.CurrentTurnHandler.print(document.createElement("br"));
+        printConfirm();
+    }
+
+    export async function setKeys () {
+        Elements.startMenu();
+
+        let promise = new Promise(resolve => {
+            resolver = resolve;
+        });
+
+        reset();
+
+        await promise;
+
+        Elements.endMenu();
+    }
+}

+ 2 - 2
app/Elements/Modules/FontSize.ts

@@ -5,9 +5,9 @@
  */
 function updateFontSize () {
     var minWidth = Elements.isMobile? 800 : 1280;
-    var proportion = Elements.isMobile ? 17 : 14.5;
+    var proportion = new StoredMemory("FontProportion", Elements.isMobile ? 17 : 14.5);
     var width = document.body.clientWidth < minWidth ? minWidth : document.body.clientWidth;
-    document.documentElement.style[ "font-size" ] = (width * proportion / 1280) + "px";
+    document.documentElement.style[ "font-size" ] = (width * proportion.getValue() / 1280) + "px";
 }
 
 updateFontSize();

+ 116 - 0
content/CharacterCreation/ContentTypes.ts

@@ -0,0 +1,116 @@
+module CharacterCreation.ContentTypes {
+    let ccDiv = document.createElement("div");
+    ccDiv.id = "characterCreation";
+    let rightSide = document.createElement("div");
+    rightSide.id = "ccRight";
+    let leftSide = document.createElement("div");
+    leftSide.id = "ccLeft";
+    ccDiv.appendChild(leftSide);
+    ccDiv.appendChild(rightSide);
+
+    let resolver;
+
+    async function printTable () {
+        while (leftSide.firstChild) leftSide.removeChild(leftSide.firstChild);
+
+        await (new Say(new SayBold("Fetishes:")).getHTMLContent().then(eles => {
+            eles.forEach(ele => {
+                leftSide.appendChild(ele);
+            })
+        }));
+
+        let perks = ContentHandler.getContentTypes().sort((a : ContentType, b : ContentType) => {
+            let na = a.getName().toUpperCase();
+            let nb = b.getName().toUpperCase();
+            if (na < nb) return -1;
+            if (na > nb) return 1;
+            return 0;
+        });
+
+        for (let i = 0; i < perks.length; i++) {
+            let perk = perks[i];
+            let say = new Say(perk.getName());
+            if (perk.isAllowed()) {
+                if (!perk.isChangeable()) {
+                    say.add (" (Mandatory)");
+                } else {
+                    say.add(" - Into it");
+                }
+            } else if (!perk.isChangeable()) {
+                say.add(" (Forbidden)");
+            }
+            await (say).getHTML("p", ["choice"]).then(elementArray => {
+                Controls.Links.makeCustomLink(elementArray[0], {
+                    mouseover: () => {
+                        printPerk(perk);
+                    },
+                    mouseout: () => {
+                        emptyPerk();
+                    },
+                    click: () => {
+                        perk.toggle();
+                        reset();
+                    }
+                });
+                Controls.KeyHandler.applyCode(elementArray[0], Controls.KeyHandler.getSecondKeyCode());
+                leftSide.appendChild(elementArray[0]);
+            });
+        }
+    }
+
+    function printConfirm () {
+        (new Say("Confirm")).getHTML("p", ["choice"]).then(elementArray => {
+            elementArray[0].addEventListener("click", () => {
+                resolver();
+            });
+            Controls.KeyHandler.applyCode(elementArray[0], Controls.KeyHandler.getSecondKeyCode());
+            Elements.CurrentTurnHandler.print(elementArray[0]);
+        });
+    }
+
+    function emptyPerk () {
+        while (rightSide.firstChild) rightSide.removeChild(rightSide.firstChild);
+        printRightSideInfo();
+    }
+
+    function printRightSideInfo() {
+        let p = document.createElement("p");
+        p.classList.add("content");
+        p.appendChild(document.createTextNode("The fetishes the player character has will tailor the world the Obelisk will create for them."));
+
+        rightSide.appendChild(p);
+    }
+
+    function printPerk (perk : ContentType) {
+        let say = new Say(perk.getDescription());
+        say.getHTMLContent().then((eles => {
+            emptyPerk();
+            for (let i = 0; i < eles.length; i++) {
+                rightSide.appendChild(eles[i]);
+            }
+        }));
+    }
+
+    function reset () {
+        Elements.CurrentTurnHandler.clear();
+        Elements.CurrentTurnHandler.print(ccDiv);
+        printTable();
+        Elements.CurrentTurnHandler.print(document.createElement("br"));
+        Elements.CurrentTurnHandler.print(document.createElement("br"));
+        printConfirm();
+    }
+
+    export async function selectContentTypes () {
+        Elements.startMenu();
+
+        let promise = new Promise(resolve => {
+            resolver = resolve;
+        });
+
+        reset();
+
+        await promise;
+
+        Elements.endMenu();
+    }
+}

File diff ditekan karena terlalu besar
+ 0 - 0
content/PlayBegins/Dialogue/IntroMenu.dl


+ 62 - 18
content/PlayBegins/Dialogue/IntroMenu.dl.ts

@@ -1,4 +1,4 @@
-// File created automatically by custom Dialogger on 5/20/2018, 4:53:22 PM
+// File created automatically by custom Dialogger on 4/7/2019, 4:57:41 PM
 // Do not tamper with this file.
 // It will be replaced automatically by Dialogger and all changes will be lost.
 // Instead change IntroMenu.dl.
@@ -10,6 +10,7 @@ module DialogueTrees {
         let text : DialogueText;
         let branch : DialogueBranch;
         let set : DialogueSet;
+        let nodetree : DialogueNodeTree;
         
         
         node = new DialogueNode("b018bb28-4efc-493b-ac37-31634c4e6406");
@@ -73,12 +74,16 @@ module DialogueTrees {
         
         
         set = new DialogueSet("f82fc177-b4bd-4f06-b7ab-216259e056a5");
-        set.setFunction(() => {Elements.endMenu();});
+        set.setFunction(() => {
+        Elements.endMenu();
+        });
         tree.addNode(set);
         
         
         set = new DialogueSet("9eeb2100-917d-41fd-b756-6d3b80e92463");
-        set.setFunction(() => {Elements.clearMainScreen();});
+        set.setFunction(() => {
+        Elements.startMenu(); Elements.clearMainScreen();
+        });
         set.setNext("bc32e411-3c54-4747-ad79-506fc5a9d6c9");
         tree.addNode(set);
         
@@ -89,7 +94,9 @@ module DialogueTrees {
         
         
         set = new DialogueSet("f448e718-9d24-4191-9913-ccc36d97c4c0");
-        set.setFunction(() => {Elements.startMenu(); tree.setRepeatChoices(false);});
+        set.setFunction(() => {
+        tree.setRepeatChoices(false);
+        });
         set.setNext("9f11871f-eebd-4b9a-b3db-ed9be8cf78e7");
         tree.addNode(set);
         
@@ -131,37 +138,49 @@ module DialogueTrees {
         
         
         set = new DialogueSet("9594cf06-6062-4952-b378-6aedaafe2951");
-        set.setFunction(() => {SaveHandler.setSlot(0);});
+        set.setFunction(() => {
+        SaveHandler.setSlot(0);
+        });
         set.setNext("a6b6b3d2-25ef-41b1-a5b5-25143f1b41f9");
         tree.addNode(set);
         
         
         set = new DialogueSet("fe95cfb3-b9f5-4b12-83aa-94d26e5bcac0");
-        set.setFunction(() => {SaveHandler.setSlot(1);});
+        set.setFunction(() => {
+        SaveHandler.setSlot(1);
+        });
         set.setNext("a6b6b3d2-25ef-41b1-a5b5-25143f1b41f9");
         tree.addNode(set);
         
         
         set = new DialogueSet("dc884974-7bb2-436f-b3a4-cdf8550bd494");
-        set.setFunction(() => {SaveHandler.setSlot(2);});
+        set.setFunction(() => {
+        SaveHandler.setSlot(2);
+        });
         set.setNext("a6b6b3d2-25ef-41b1-a5b5-25143f1b41f9");
         tree.addNode(set);
         
         
         set = new DialogueSet("62f5ea88-c6f0-4469-87f2-ea3b37638509");
-        set.setFunction(() => {SaveHandler.setSlot(3);});
+        set.setFunction(() => {
+        SaveHandler.setSlot(3);
+        });
         set.setNext("a6b6b3d2-25ef-41b1-a5b5-25143f1b41f9");
         tree.addNode(set);
         
         
         set = new DialogueSet("ee4ecd8b-59e2-43a6-8150-8a835d6eeae1");
-        set.setFunction(() => {SaveHandler.setSlot(4);});
+        set.setFunction(() => {
+        SaveHandler.setSlot(4);
+        });
         set.setNext("a6b6b3d2-25ef-41b1-a5b5-25143f1b41f9");
         tree.addNode(set);
         
         
         set = new DialogueSet("f25f6525-dad6-45d7-a391-246c1b02b569");
-        set.setFunction(() => {return SaveHandler.loadFromFile();});
+        set.setFunction(() => {
+        return SaveHandler.loadFromFile();
+        });
         set.setNext("5d1dfb86-abd9-4ad6-bf07-8ced5476e401");
         tree.addNode(set);
         
@@ -181,7 +200,9 @@ module DialogueTrees {
         
         
         set = new DialogueSet("ee65c84a-021f-44d3-aa34-50235f438c96");
-        set.setFunction(() => {SaveHandler.toggleErasing()});
+        set.setFunction(() => {
+        SaveHandler.toggleErasing()
+        });
         set.setNext("6f15f7d6-4944-4b93-9d47-7046e8ae1f15");
         tree.addNode(set);
         
@@ -192,7 +213,9 @@ module DialogueTrees {
         
         
         set = new DialogueSet("915492f1-8fa7-4ddc-9dc0-6b0340f738c8");
-        set.setFunction(() => {return SaveHandler.loadFromStorage();});
+        set.setFunction(() => {
+        return SaveHandler.loadFromStorage();
+        });
         set.setNext("f82fc177-b4bd-4f06-b7ab-216259e056a5");
         tree.addNode(set);
         
@@ -209,7 +232,7 @@ module DialogueTrees {
         
         node = new DialogueNode("b75c038c-654c-4c62-8f49-2f4518f52cff");
         node.setName("Settings");
-        node.setNext("d33456b8-72b6-4214-90b3-3eba2442b287");
+        node.setNext("2392c787-0c2a-46fb-b06c-928e5f447a9f");
         tree.addNode(node);
         
         
@@ -220,7 +243,9 @@ module DialogueTrees {
         
         
         set = new DialogueSet("bc24b446-d6a2-4284-93fb-67ad3598fcd1");
-        set.setFunction(() => {return Elements.waitForAnyKey();});
+        set.setFunction(() => {
+        return Elements.waitForAnyKey();
+        });
         set.setNext("81f9d62b-907e-48ae-84fe-78c7cecc4fe3");
         tree.addNode(set);
         
@@ -249,7 +274,9 @@ module DialogueTrees {
         
         
         set = new DialogueSet("c27829b7-7199-4b1e-9334-536258546cfc");
-        set.setFunction(() => {return Elements.waitForAnyKey();});
+        set.setFunction(() => {
+        return Elements.waitForAnyKey();
+        });
         set.setNext("42401145-9154-40c3-a9d3-4f83df97b89e");
         tree.addNode(set);
         
@@ -260,7 +287,9 @@ module DialogueTrees {
         
         
         set = new DialogueSet("7c2060aa-66ce-4dbb-88d2-0c8f190e0a6c");
-        set.setFunction(() => {Elements.clearMainScreen();});
+        set.setFunction(() => {
+        Elements.clearMainScreen();
+        });
         set.setNext("59a3cb30-d4ba-4b46-8157-b900fc7022dd");
         tree.addNode(set);
         
@@ -285,16 +314,31 @@ module DialogueTrees {
         
         
         set = new DialogueSet("50876e13-23b9-43c0-b6b1-a89b1683d5e7");
-        set.setFunction(() => {return Elements.waitForAnyKey();});
+        set.setFunction(() => {
+        return Elements.waitForAnyKey();
+        });
         set.setNext("915492f1-8fa7-4ddc-9dc0-6b0340f738c8");
         tree.addNode(set);
         
         
         set = new DialogueSet("d0dcd7c6-26ae-41d0-99a6-e0cae17ae381");
-        set.setFunction(() => {Elements.clearMainScreen();});
+        set.setFunction(() => {
+        Elements.clearMainScreen();
+        });
         set.setNext("b8ee6702-8d38-4bd7-9b24-df8c901a50d4");
         tree.addNode(set);
         
+        
+        nodetree = new DialogueNodeTree("2392c787-0c2a-46fb-b06c-928e5f447a9f");
+        nodetree.setTree(() => { return DialogueTrees.Settings; });
+        nodetree.setNext("3c334c63-9030-4fba-884e-a147f40eb8f5");
+        tree.addNode(nodetree);
+        
+        
+        node = new DialogueNode("3c334c63-9030-4fba-884e-a147f40eb8f5");
+        node.setNext("");
+        tree.addNode(node);
+        
         return tree;
     })();
 }

File diff ditekan karena terlalu besar
+ 0 - 0
content/PlayBegins/Dialogue/Settings.dl


+ 104 - 0
content/PlayBegins/Dialogue/Settings.dl.ts

@@ -0,0 +1,104 @@
+// File created automatically by custom Dialogger on 4/7/2019, 5:55:54 PM
+// Do not tamper with this file.
+// It will be replaced automatically by Dialogger and all changes will be lost.
+// Instead change Settings.dl.
+module DialogueTrees {
+	export let Settings = (function () {
+        let tree : DialogueTree = new DialogueTree("Settings");
+        let node : DialogueNode;
+        let set : DialogueSet;
+        let text : DialogueText;
+        let choice : DialogueChoice;
+        
+        
+        node = new DialogueNode("b258ed06-020b-4c1f-b2ad-afbe13ac7b38");
+        node.setNext("615b397b-76ca-485c-a637-1d2b539c6b54");
+        tree.addStartNode(node);
+        
+        
+        set = new DialogueSet("eee6d351-4e6f-428d-8dd6-72be79e31e6d");
+        set.setFunction(() => {
+        Elements.startMenu(); tree.setRepeatChoices(false); Elements.clearMainScreen();
+        });
+        set.setNext("5a11c2bc-6184-4926-9d24-454ca883dffc");
+        tree.addNode(set);
+        
+        
+        node = new DialogueNode("615b397b-76ca-485c-a637-1d2b539c6b54");
+        node.setName("SettingOptions");
+        node.setNext("eee6d351-4e6f-428d-8dd6-72be79e31e6d");
+        tree.addNode(node);
+        
+        
+        text = new DialogueText("5a11c2bc-6184-4926-9d24-454ca883dffc");
+        text.setSay(() => { return new Say(Say.CENTERED, new SayImage("introLogo"), Say.LINE_BREAK, new SayItalic("The Obelisk is an adult interactive fiction game set in a post-apocalyptic world ravaged by a magical structure."));});
+        text.setChoices(["4dcaee8f-2df1-4fba-b73e-581c522b6b5a","44119992-4c08-49fc-a4c8-602ee190cb8f","77536f7c-dad5-413c-b65e-567894d6736e","c56b6549-c1c4-4bb2-81bf-9e6816b3326f","d846c98a-1937-4e15-9c58-58b02f7efed5"]);
+        tree.addNode(text);
+        
+        
+        choice = new DialogueChoice("4dcaee8f-2df1-4fba-b73e-581c522b6b5a");
+        choice.setSay(() => { return new Say("Key Mapping");});
+        choice.setNext("ea28fe17-1897-49fd-a65b-e8fd63fef1d3");
+        tree.addNode(choice);
+        
+        
+        choice = new DialogueChoice("44119992-4c08-49fc-a4c8-602ee190cb8f");
+        choice.setSay(() => { return new Say("Font Size");});
+        choice.setNext("25936903-6b5e-4137-82e2-267b50ec1c41");
+        tree.addNode(choice);
+        
+        
+        choice = new DialogueChoice("77536f7c-dad5-413c-b65e-567894d6736e");
+        choice.setSay(() => { return new Say("Color Scheme");});
+        choice.setNext("25936903-6b5e-4137-82e2-267b50ec1c41");
+        tree.addNode(choice);
+        
+        
+        choice = new DialogueChoice("c56b6549-c1c4-4bb2-81bf-9e6816b3326f");
+        choice.setSay(() => { return new Say("Fetishes");});
+        choice.setNext("3dabd8ef-9bcb-4792-bdbd-58ec3d5b0834");
+        tree.addNode(choice);
+        
+        
+        choice = new DialogueChoice("d846c98a-1937-4e15-9c58-58b02f7efed5");
+        choice.setSay(() => { return new Say("Go back");});
+        tree.addNode(choice);
+        
+        
+        text = new DialogueText("25936903-6b5e-4137-82e2-267b50ec1c41");
+        text.setSay(() => { return new Say("Not implemented.");});
+        text.setNext("2797f523-7444-4065-a8e9-55ea803af940");
+        tree.addNode(text);
+        
+        
+        set = new DialogueSet("3dabd8ef-9bcb-4792-bdbd-58ec3d5b0834");
+        set.setFunction(() => {
+        return CharacterCreation.ContentTypes.selectContentTypes();
+        });
+        set.setNext("e87068cb-e3b5-4c49-8bac-8ecdb06ba3a6");
+        tree.addNode(set);
+        
+        
+        node = new DialogueNode("e87068cb-e3b5-4c49-8bac-8ecdb06ba3a6");
+        node.setNext("SettingOptions");
+        tree.addNode(node);
+        
+        
+        set = new DialogueSet("2797f523-7444-4065-a8e9-55ea803af940");
+        set.setFunction(() => {
+        return Elements.waitForAnyKey();
+        });
+        set.setNext("e87068cb-e3b5-4c49-8bac-8ecdb06ba3a6");
+        tree.addNode(set);
+        
+        
+        set = new DialogueSet("ea28fe17-1897-49fd-a65b-e8fd63fef1d3");
+        set.setFunction(() => {
+        return Controls.KeyHandler.KeySetter.setKeys();
+        });
+        set.setNext("e87068cb-e3b5-4c49-8bac-8ecdb06ba3a6");
+        tree.addNode(set);
+        
+        return tree;
+    })();
+}

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini