diff --git a/src/main/java/org/arsparadox/mobtalkerredux/vn/controller/VisualNovelEngine.java b/src/main/java/org/arsparadox/mobtalkerredux/vn/controller/VisualNovelEngine.java index 7b2bef7..2a35faf 100644 --- a/src/main/java/org/arsparadox/mobtalkerredux/vn/controller/VisualNovelEngine.java +++ b/src/main/java/org/arsparadox/mobtalkerredux/vn/controller/VisualNovelEngine.java @@ -26,12 +26,14 @@ public VisualNovelEngine(List> gameData,String scriptName) { } private void initializeVariable() { - if(this.gameData.get(0).get("type")!="variable"){ + if(!"variable".equals(this.gameData.get(this.gameData.size() - 1).get("type"))){ + System.out.println(this.gameData.get(this.gameData.size() - 1).get("type")); this.variables = new HashMap<>(); this.variables.put("type", "variable"); - this.gameData.add(0, variables); + this.gameData.add(variables); + System.out.println("Initialize Variable"); }else{ - this.variables = this.gameData.get(0); + this.variables = this.gameData.get(this.gameData.size() - 1); } } @@ -161,8 +163,11 @@ private void processJump(Map action) { @SuppressWarnings("unchecked") private void processConditional(Map condition) { + System.out.println("trying to get:"+condition.get("var")); Object var = this.variables.get(condition.get("var")); Object value = condition.get("value"); + System.out.println(var); + System.out.println(value); long end = (long) condition.get("end"); if (value instanceof Map) { @@ -171,27 +176,33 @@ private void processConditional(Map condition) { String conditionType = (String) condition.get("condition"); boolean result = false; + if(var!=null){ + switch (conditionType) { + case "equal": + result = var.equals(value); + break; + case "not_equal": + result = !var.equals(value); + break; + case "less_than": + if (var instanceof Number && value instanceof Number) { + result = ((Number) var).doubleValue() < ((Number) value).doubleValue(); + } + break; + case "greater_than": + if (var instanceof Number && value instanceof Number) { + result = ((Number) var).doubleValue() > ((Number) value).doubleValue(); + } + break; + } - switch (conditionType) { - case "equal": - result = var.equals(value); - break; - case "not_equal": - result = !var.equals(value); - break; - case "less_than": - if (var instanceof Number && value instanceof Number) { - result = ((Number) var).doubleValue() < ((Number) value).doubleValue(); - } - break; - case "greater_than": - if (var instanceof Number && value instanceof Number) { - result = ((Number) var).doubleValue() > ((Number) value).doubleValue(); - } - break; + this.currentState = result ? this.currentState + 1 : end; } + else{ + this.currentState = end; + } + - this.currentState = result ? this.currentState + 1 : end; } @SuppressWarnings("unchecked") @@ -275,6 +286,7 @@ private void processFinishing() { public void runEngine() { while (isEngineRunning) { // Infinite loop // Check if engine is running + System.out.println(this.currentState); Map action = getDictById(this.currentState); if(action == null){ shutdown = true; diff --git a/src/main/java/org/arsparadox/mobtalkerredux/vn/model/ScriptLoader.java b/src/main/java/org/arsparadox/mobtalkerredux/vn/model/ScriptLoader.java index 71b45a5..ab68387 100644 --- a/src/main/java/org/arsparadox/mobtalkerredux/vn/model/ScriptLoader.java +++ b/src/main/java/org/arsparadox/mobtalkerredux/vn/model/ScriptLoader.java @@ -63,13 +63,24 @@ public static List> loadScript(String filePath) { } public static List> loadDemo() throws IOException { - ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); - ResourceLocation resourceLocation = new ResourceLocation("mobtalkerredux", "demo.json"); + String configPath = FMLPaths.CONFIGDIR.get() + "\\" + MobTalkerRedux.MODID + "\\" + "demo.json"; + File configFile = new File(configPath); - try (InputStream inputStream = resourceManager.getResource(resourceLocation).get().open()) { - return loadJson(inputStream); - } catch (FileNotFoundException e) { - throw new FileNotFoundException("Resource file demo.json could not be found."); + if (configFile.exists()) { + // Load from the config directory if it exists + System.out.println("Loading Save File"); + return loadJson(configPath); + } else { + System.out.println("Making New Save File"); + // Otherwise, try loading from the resource manager + ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); + ResourceLocation resourceLocation = new ResourceLocation("mobtalkerredux", "demo.json"); + + try (InputStream inputStream = resourceManager.getResource(resourceLocation).get().open()) { + return loadJson(inputStream); + } catch (FileNotFoundException e) { + throw new FileNotFoundException("Resource file demo.json could not be found."); + } } } diff --git a/src/main/resources/assets/mobtalkerredux/demo.json b/src/main/resources/assets/mobtalkerredux/demo.json index c8021e8..f23f8ef 100644 --- a/src/main/resources/assets/mobtalkerredux/demo.json +++ b/src/main/resources/assets/mobtalkerredux/demo.json @@ -1,27 +1,120 @@ [ - { - "type": "meta", - "action": "create_var", - "var": "background", - "init": false, - "id": 0 - }, { "type": "meta", "action": "initialize", "scriptName": "demo", - "id": 1 + "id": 0 }, { "type": "meta", "action": "start", - "id": 2 + "id": 1 }, { "type": "label", "action": "label", "label": "start", - "id": 3 + "id": 2 + }, + { + "type": "conditional", + "action": "conditional", + "condition": "equal", + "var": "background", + "value": true, + "actions": [ + { + "type": "show_sprite", + "action": "show", + "sprite": "andr", + "location": "characters/andr/default/normal.png", + "position": "CENTER", + "wRatio": 16, + "hRatio": 9, + "wFrameRatio": 5, + "hFrameRatio": 8, + "column": 7, + "row": 1, + "id": 4 + }, + { + "type": "dialogue", + "action": "say", + "label": "Andr", + "content": "Ah, wait, let's go back to the void real quick...", + "id": 5 + }, + { + "type": "modify_background", + "background": "asset/end.png", + "id": 6 + } + ], + "id": 3, + "end": 7 + }, + { + "type": "show_sprite", + "action": "show", + "sprite": "andr", + "location": "characters/andr/default/normal.png", + "position": "CENTER", + "wRatio": 16, + "hRatio": 9, + "wFrameRatio": 5, + "hFrameRatio": 8, + "column": 7, + "row": 1, + "id": 4 + }, + { + "type": "dialogue", + "action": "say", + "label": "Andr", + "content": "Ah, wait, let's go back to the void real quick...", + "id": 5 + }, + { + "type": "modify_background", + "background": "asset/end.png", + "id": 6 + }, + { + "type": "conditional", + "action": "conditional", + "condition": "equal", + "var": "seen", + "value": true, + "actions": [ + { + "type": "dialogue", + "action": "say", + "label": "Andr", + "content": "Hello again Player, something you'd like to know?", + "id": 8 + }, + { + "type": "transition", + "action": "jump", + "label": "demo_menu", + "id": 9 + } + ], + "id": 7, + "end": 10 + }, + { + "type": "dialogue", + "action": "say", + "label": "Andr", + "content": "Hello again Player, something you'd like to know?", + "id": 8 + }, + { + "type": "transition", + "action": "jump", + "label": "demo_menu", + "id": 9 }, { "type": "show_sprite", @@ -35,14 +128,14 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 4 + "id": 10 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "Oh hey Player! Long time no see! Ahaha~", - "id": 5 + "id": 11 }, { "type": "show_sprite", @@ -56,28 +149,28 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 6 + "id": 12 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "Anyway, it's been a while~", - "id": 7 + "id": 13 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "When was the last version again?", - "id": 8 + "id": 14 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "1.8?? What's the current version?", - "id": 9 + "id": 15 }, { "type": "show_sprite", @@ -91,14 +184,14 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 10 + "id": 16 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "1.21!? I've been dead for that long!?", - "id": 11 + "id": 17 }, { "type": "show_sprite", @@ -112,21 +205,21 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 12 + "id": 18 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "Can't believe this mod's been abandoned for that long!!!", - "id": 13 + "id": 19 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "I mean how hard can it be to remake this mod???", - "id": 14 + "id": 20 }, { "type": "show_sprite", @@ -140,14 +233,14 @@ "hFrameRatio": 8, "column": 10, "row": 1, - "id": 15 + "id": 21 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "It wasn't easy Cupa, recreating this mod requires the use of DSL", - "id": 16 + "id": 22 }, { "type": "show_sprite", @@ -161,14 +254,14 @@ "hFrameRatio": 8, "column": 3, "row": 1, - "id": 17 + "id": 23 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "Bloody hell! Andr, where did you come from?", - "id": 18 + "id": 24 }, { "type": "show_sprite", @@ -182,14 +275,14 @@ "hFrameRatio": 8, "column": 10, "row": 1, - "id": 19 + "id": 25 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "I was in the Stronghold Perusing the archive for...", - "id": 20 + "id": 26 }, { "type": "show_sprite", @@ -203,21 +296,21 @@ "hFrameRatio": 8, "column": 3, "row": 1, - "id": 21 + "id": 27 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "I was being rhetoric... Anyway, why are you here?", - "id": 22 + "id": 28 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "I'm here to explain how this mod work. The fact that they see this means that they downloaded the framework, but not load a single a script.", - "id": 23 + "id": 29 }, { "type": "show_sprite", @@ -231,20 +324,20 @@ "hFrameRatio": 8, "column": 3, "row": 1, - "id": 24 + "id": 30 }, { "type": "dialogue", "action": "say", "label": "Cupa", "content": "Ahh... You go do that then~", - "id": 25 + "id": 31 }, { "type": "remove_sprite", "action": "remove_character", "sprite": "cupa", - "id": 26 + "id": 32 }, { "type": "show_sprite", @@ -258,46 +351,53 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 27 + "id": 33 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Mmm, good to meet you player~", - "id": 28 + "id": 34 + }, + { + "type": "modify_variable", + "action": "modify_var", + "var": "seen", + "value": true, + "id": 35 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Let's go somewhere else more comfortable...", - "id": 29 + "id": 36 }, { "type": "modify_background", "background": "asset/end.png", - "id": 30 + "id": 37 }, { "type": "modify_variable", "action": "modify_var", "var": "background", "value": true, - "id": 31 + "id": 38 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Now what do you wish to know?", - "id": 32 + "id": 39 }, { "type": "label", "action": "label", "label": "demo_menu", - "id": 33 + "id": 40 }, { "type": "show_sprite", @@ -311,7 +411,7 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 34 + "id": 41 }, { "type": "choice", @@ -334,13 +434,13 @@ "display": "I like to ask something else" } ], - "id": 35 + "id": 42 }, { "type": "label", "action": "label", "label": "next", - "id": 36 + "id": 43 }, { "type": "choice", @@ -363,13 +463,13 @@ "display": "I like to ask something else" } ], - "id": 37 + "id": 44 }, { "type": "label", "action": "label", "label": "next2", - "id": 38 + "id": 45 }, { "type": "conditional", @@ -399,11 +499,11 @@ "display": "That's all, thanks!" } ], - "id": 40 + "id": 47 } ], - "id": 39, - "end": 41 + "id": 46, + "end": 48 }, { "type": "choice", @@ -426,7 +526,7 @@ "display": "That's all, thanks!" } ], - "id": 40 + "id": 47 }, { "type": "choice", @@ -449,13 +549,13 @@ "display": "That's all, thanks!" } ], - "id": 41 + "id": 48 }, { "type": "label", "action": "label", "label": "void", - "id": 42 + "id": 49 }, { "type": "show_sprite", @@ -469,152 +569,159 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 43 + "id": 50 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "For Sure!", - "id": 44 + "id": 51 }, { "type": "modify_background", "background": "asset/end.png", - "id": 45 + "id": 52 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "There we go, the void~", - "id": 46 + "id": 53 + }, + { + "type": "modify_variable", + "action": "modify_var", + "var": "background", + "value": true, + "id": 54 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 47 + "id": 55 }, { "type": "label", "action": "label", "label": "background", - "id": 48 + "id": 56 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Oh, no worries, we're not actually in the void", - "id": 49 + "id": 57 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Just showing off what the mod can do!", - "id": 50 + "id": 58 }, { "type": "clear_background", - "id": 51 + "id": 59 }, { "type": "modify_variable", "action": "modify_var", "var": "background", "value": false, - "id": 52 + "id": 60 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "There, all back to normal~", - "id": 53 + "id": 61 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 54 + "id": 62 }, { "type": "label", "action": "label", "label": "bugs", - "id": 55 + "id": 63 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Since this is a framework, some bugs can be not from this mod itself...", - "id": 56 + "id": 64 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Soo, let me list off some known bugs as of right now, ahem...", - "id": 57 + "id": 65 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "1. We don't support multiple character sprite yet", - "id": 58 + "id": 66 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The dev is working on that currently, most likely this bug is already fixed", - "id": 59 + "id": 67 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "This is the mod's fault, not the SDK's fault, so, report the issue correctly", - "id": 60 + "id": 68 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "2. The images are not displayed correctly", - "id": 61 + "id": 69 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "As of right now, the size of the image are hardcoded to 530 by 900 pixels", - "id": 62 + "id": 70 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "3. There is no way to programatically remove a sprite that's already appeared, only replace", - "id": 63 + "id": 71 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "All of these sprite and image showing issue is being reworked as of writing this", - "id": 64 + "id": 72 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The dev is looking to solve problem 1 and 2 at the same time right now", - "id": 65 + "id": 73 }, { "type": "show_sprite", @@ -628,14 +735,14 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 66 + "id": 74 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "See minecraft just updated how they handle Screens and it kinda throw them off...", - "id": 67 + "id": 75 }, { "type": "show_sprite", @@ -649,26 +756,26 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 68 + "id": 76 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "So yeah, send some love his way alright???", - "id": 69 + "id": 77 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 70 + "id": 78 }, { "type": "label", "action": "label", "label": "about_you", - "id": 71 + "id": 79 }, { "type": "show_sprite", @@ -682,28 +789,28 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 72 + "id": 80 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "About me... Umm...", - "id": 73 + "id": 81 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "I was a character designed by AT2, a digital artist. Inspired by an Enderman...", - "id": 74 + "id": 82 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "I suppose the dev who remade this mod haven't really asked for AT2's permission to use my character sprite", - "id": 75 + "id": 83 }, { "type": "show_sprite", @@ -717,61 +824,61 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 76 + "id": 84 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "If you are seeing this, we apologize for using your artwork", - "id": 77 + "id": 85 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "This is in good faith in the spirit and legacy of the original mod", - "id": 78 + "id": 86 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Is there anything else you wish to know?", - "id": 79 + "id": 87 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 80 + "id": 88 }, { "type": "label", "action": "label", "label": "dev_history", - "id": 81 + "id": 89 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Ah... about that...", - "id": 82 + "id": 90 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Please don't blame the original developer for 'abandoning' this project", - "id": 83 + "id": 91 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The Mob Talker Mod is deceptively complicated due to a simple thing...", - "id": 84 + "id": 92 }, { "type": "show_sprite", @@ -785,7 +892,7 @@ "hFrameRatio": 8, "column": 3, "row": 1, - "id": 85 + "id": 93 }, { "type": "show_sprite", @@ -799,35 +906,35 @@ "hFrameRatio": 6, "column": 6, "row": 1, - "id": 86 + "id": 94 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The developer must create a DSL or a Domain Specific Language", - "id": 87 + "id": 95 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "This is what the original Mob Talker Script looks like...", - "id": 88 + "id": 96 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Think about it, you have to translate this script into something that Minecraft can read", - "id": 89 + "id": 97 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "In essence, you're creating an entire Programming Language and a Game Engine", - "id": 90 + "id": 98 }, { "type": "show_sprite", @@ -841,14 +948,14 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 91 + "id": 99 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Not to mention you have to make the programming language interop with Java and run the Game Engine inside of Minecraft", - "id": 92 + "id": 100 }, { "type": "choice", @@ -863,13 +970,13 @@ "display": "Oh, okay cool, so how did the dev do it?" } ], - "id": 93 + "id": 101 }, { "type": "label", "action": "label", "label": "lua", - "id": 94 + "id": 102 }, { "type": "show_sprite", @@ -883,42 +990,42 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 95 + "id": 103 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Good Question", - "id": 96 + "id": 104 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Lua seems to be an obvious choice. It is lightweight and many mods rely on it.", - "id": 97 + "id": 105 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Why not write the script in Lua? Define a few methods to control the screen?", - "id": 98 + "id": 106 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The main problem faced by the dev of *this* mod, is that Lua is an Interpreted Language", - "id": 99 + "id": 107 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Java on the other hand is compiled language", - "id": 100 + "id": 108 }, { "type": "show_sprite", @@ -932,28 +1039,28 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 101 + "id": 109 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "What happens is that Java will try to run the entire script at once...", - "id": 102 + "id": 110 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Getting Java to interpret lua line by line is extremely hard, you see?", - "id": 103 + "id": 111 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "This is most likely why most people abandoned this project", - "id": 104 + "id": 112 }, { "type": "show_sprite", @@ -967,54 +1074,54 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 105 + "id": 113 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "An experienced Java Developer would understand how hard it is to get Lua or any scripting language to Interop with Java", - "id": 106 + "id": 114 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "A non experienced Java developer would just get stuck after realizing they need to make a new programming language for this", - "id": 107 + "id": 115 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Because, to recreate this mod properly, you HAVE to make something that a community can use", - "id": 108 + "id": 116 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "A way to create a DSL that is human readable and can be read by java.", - "id": 109 + "id": 117 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "And thus, the developer of this mod, created this", - "id": 110 + "id": 118 }, { "type": "label", "action": "label", "label": "cool", - "id": 111 + "id": 119 }, { "type": "remove_sprite", "action": "remove", "sprite": "old-dsl", - "id": 112 + "id": 120 }, { "type": "show_sprite", @@ -1028,7 +1135,7 @@ "hFrameRatio": 8, "column": 3, "row": 1, - "id": 113 + "id": 121 }, { "type": "show_sprite", @@ -1042,69 +1149,69 @@ "hFrameRatio": 6, "column": 6, "row": 1, - "id": 114 + "id": 122 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "This is a DSL written in Python.", - "id": 115 + "id": 123 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Instead of getting Lua to interop with Java, the developer sidestepped this problem entirely", - "id": 116 + "id": 124 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The developer created a Python SDK Framework that translates python-dsl readable script...", - "id": 117 + "id": 125 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Into Json FSM (Finite State Machine)", - "id": 118 + "id": 126 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "This Json FSM is very easy to interpret and read in Java", - "id": 119 + "id": 127 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "All the dev has to do is to make a simple class that can read the Json FSM", - "id": 120 + "id": 128 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Mod creator and players can just put this Json FSM into the mod Config folder.", - "id": 121 + "id": 129 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "And that's a little history of how this mod is created", - "id": 122 + "id": 130 }, { "type": "remove_sprite", "action": "remove", "sprite": "python-dsl", - "id": 123 + "id": 131 }, { "type": "show_sprite", @@ -1118,89 +1225,89 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 124 + "id": 132 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Is there anything else you wish to know?", - "id": 125 + "id": 133 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 126 + "id": 134 }, { "type": "label", "action": "label", "label": "dev_excuses", - "id": 127 + "id": 135 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "I was contractually obligated to inform you that...", - "id": 128 + "id": 136 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Ahem...", - "id": 129 + "id": 137 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The developer of this mod, Iteranya, is not responsible with any content written or created in the game", - "id": 130 + "id": 138 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "If there's a person claiming that there's a 'default' or 'official' script for this mod...", - "id": 131 + "id": 139 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "They are lying", - "id": 132 + "id": 140 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "To answer your other question about 'default' script", - "id": 133 + "id": 141 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The developer is working on it, but they are most likely not going to claim it to be 'official', most likely under pseudonym", - "id": 134 + "id": 142 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "And that's all I can tell you", - "id": 135 + "id": 143 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Is there anything else?", - "id": 136 + "id": 144 }, { "type": "choice", @@ -1215,13 +1322,13 @@ "display": "Yeah, that's all, thank you!" } ], - "id": 137 + "id": 145 }, { "type": "label", "action": "label", "label": "avoid", - "id": 138 + "id": 146 }, { "type": "show_sprite", @@ -1235,205 +1342,205 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 139 + "id": 147 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "To be frank with you, the dev had no intention on making this mod safe for work", - "id": 140 + "id": 148 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Nor does the dev has any intention on making a PG version script", - "id": 141 + "id": 149 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "In other words, the dev chooses not to make an official script due to legal/ethical/moral issues", - "id": 142 + "id": 150 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Now, let's talk about something else", - "id": 143 + "id": 151 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 144 + "id": 152 }, { "type": "label", "action": "label", "label": "mod_feature", - "id": 145 + "id": 153 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "In a sense, this is 'VN Cutscenes Mod', it empowers mod maker to add 'cutscenes' into their game", - "id": 146 + "id": 154 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "By cutscenes, it's things like what you're seeing right now", - "id": 147 + "id": 155 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Everything in this mod is very barebones, you see? It's made for collaboration", - "id": 148 + "id": 156 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "What you've seen so far is everything it has to offer", - "id": 149 + "id": 157 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Dialogue, Branching Path, Sprite Showing, Background Swapping, etc", - "id": 150 + "id": 158 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "There's really not much to say, you see?", - "id": 151 + "id": 159 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Ah, it also supports minecraft slash commmands", - "id": 152 + "id": 160 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "For more technical details, feel free to check the dev's github page.", - "id": 153 + "id": 161 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "It's attached in where you find this mod", - "id": 154 + "id": 162 }, { "type": "label", "action": "label", "label": "mod_sdk", - "id": 155 + "id": 163 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Making the script is simple.", - "id": 156 + "id": 164 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Well you need to use the Mob Talker SDK to create a script", - "id": 157 + "id": 165 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "https://github.com/Iteranya/MobTalkerSDK", - "id": 158 + "id": 166 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Can you click that link? Probably not...", - "id": 159 + "id": 167 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "But yes, using the SDK, it will turn the human readable script into Json", - "id": 160 + "id": 168 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "More information on how to use the SDK can be found in the github page", - "id": 161 + "id": 169 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "That json will then be sent to the minecraft mod to read. Any question?", - "id": 162 + "id": 170 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 163 + "id": 171 }, { "type": "label", "action": "label", "label": "mod_compatibility", - "id": 164 + "id": 172 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "This mod is surprisingly compatible and easy to maintain.", - "id": 165 + "id": 173 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Due to a lack of Java Interop and separation of concerns... The only 'modded' part is the screen/gui", - "id": 166 + "id": 174 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The Game Engine that reads the Json FSM is written in Pure Java", - "id": 167 + "id": 175 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "You don't even have to worry about cross-version script compatiblity", - "id": 168 + "id": 176 }, { "type": "show_sprite", @@ -1447,28 +1554,28 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 169 + "id": 177 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Personally I love this approach, the Mob Talker Mod might become timeless again!", - "id": 170 + "id": 178 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The CMM team is still active with making cute mob models too!", - "id": 171 + "id": 179 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Imagine this possibilities~", - "id": 172 + "id": 180 }, { "type": "show_sprite", @@ -1482,40 +1589,40 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 173 + "id": 181 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "But yes, mod creator still have to work on adding script if they wish to use this framework", - "id": 174 + "id": 182 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Do you have anymore questions?", - "id": 175 + "id": 183 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 176 + "id": 184 }, { "type": "label", "action": "label", "label": "community", - "id": 177 + "id": 185 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "There should be a Discord Link in this Mod's download page", - "id": 178 + "id": 186 }, { "type": "show_sprite", @@ -1529,21 +1636,21 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 179 + "id": 187 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Feel free to make your own script! Make your own character, the Overworld and beyond is your oyster~", - "id": 180 + "id": 188 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The dev's desire is just to recreate, revive, and immortalize this mod! Adding the beauty of 2D CG Graphics in Minecraft", - "id": 181 + "id": 189 }, { "type": "show_sprite", @@ -1557,14 +1664,14 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 182 + "id": 190 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "The other desire is to date me and Cupa...", - "id": 183 + "id": 191 }, { "type": "show_sprite", @@ -1578,40 +1685,40 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 184 + "id": 192 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "But really, at the end of the day, the dev only provide the tools", - "id": 185 + "id": 193 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "So please don't go reporting for bug about the lack of interaction... okay?", - "id": 186 + "id": 194 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Something else you want to ask?", - "id": 187 + "id": 195 }, { "type": "transition", "action": "jump", "label": "demo_menu", - "id": 188 + "id": 196 }, { "type": "label", "action": "label", "label": "end", - "id": 189 + "id": 197 }, { "type": "show_sprite", @@ -1625,18 +1732,18 @@ "hFrameRatio": 8, "column": 7, "row": 1, - "id": 190 + "id": 198 }, { "type": "dialogue", "action": "say", "label": "Andr", "content": "Happy to Help, see you later Player!", - "id": 191 + "id": 199 }, { "type": "finish_dialogue", "action": "finish_dialogue", - "id": 192 + "id": 200 } ] \ No newline at end of file