Lucas Kent e39465ad2f Changes to be committed:
new file:   Files/flashplayer_32_sa.exe
	new file:   favicon.ico
	new file:   globe.gif
	new file:   imgs/download.png
	new file:   imgs/zuck.jpg
	new file:   index.html
	new file:   other.ico
	new file:   script.js
	new file:   site.webmanifest
	new file:   sitemap.html
	new file:   styles/backround.css
	new file:   styles/border.css
	new file:   styles/fonts/Titillium_Web/OFL.txt
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Black.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Bold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-BoldItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLight.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-ExtraLightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Italic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Light.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-LightItalic.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-Regular.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBold.ttf
	new file:   styles/fonts/Titillium_Web/TitilliumWeb-SemiBoldItalic.ttf
	new file:   styles/fonts/webfontkit-20221027-163353/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-163353/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-demo.html
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-163353/titilliumweb-extralight-webfont.woff2
	new file:   styles/fonts/webfontkit-20221027-165950/generator_config.txt
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/grid_12-825-55-15.css
	new file:   styles/fonts/webfontkit-20221027-165950/specimen_files/specimen_stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/stylesheet.css
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-demo.html
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff
	new file:   styles/fonts/webfontkit-20221027-165950/titilliumweb-bold-webfont.woff2
	new file:   styles/style.css
	new file:   tools/2048/.gitignore
	new file:   tools/2048/.jshintrc
	new file:   tools/2048/CONTRIBUTING.md
	new file:   tools/2048/LICENSE.txt
	new file:   tools/2048/README.md
	new file:   tools/2048/Rakefile
	new file:   tools/2048/favicon.ico
	new file:   tools/2048/index.html
	new file:   tools/2048/js/animframe_polyfill.js
	new file:   tools/2048/js/application.js
	new file:   tools/2048/js/bind_polyfill.js
	new file:   tools/2048/js/classlist_polyfill.js
	new file:   tools/2048/js/game_manager.js
	new file:   tools/2048/js/grid.js
	new file:   tools/2048/js/html_actuator.js
	new file:   tools/2048/js/keyboard_input_manager.js
	new file:   tools/2048/js/local_storage_manager.js
	new file:   tools/2048/js/tile.js
    new file:   tools/2048/meta/apple-touch-icon.png
	new file:   tools/webretro/cores/neocd_libretro.js
	new file:   tools/webretro/cores/neocd_libretro.wasm
	new file:   tools/webretro/cores/nestopia_libretro.js
	new file:   tools/webretro/cores/nestopia_libretro.wasm
	new file:   tools/webretro/cores/o2em_libretro.js
	new file:   tools/webretro/cores/o2em_libretro.wasm
	new file:   tools/webretro/cores/opera_libretro.js
	new file:   tools/webretro/cores/opera_libretro.wasm
2022-11-02 08:40:01 -04:00
..
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00
2022-11-02 08:40:01 -04:00

Dialogs

One dialog is one or multiple conversations between an NPC and the player about the same topic. It's possible that the conversation is temporarily ended (e.g. because the player offended the NPC, or because the player decides to end the conversation (if possible) to return to it at a later point), but the NPC will remember what state it was in and continue from there with the next conversation.

One NPC can thus be part of multiple Dialogs over time as the game progresses.

Dialogs are self enclosed, that means the NPC cannot access the contents of another dialog in any way. Cross references are possible within a single dialog, where player reactions can cause the NPC to jump to any of a number of possible states in the conversation. These references are often one-way, but it's also possible to backtrac or even add cycles to the conversation.

Syntax

One dialog is a JSON file, containing an object with any number of keys, which represent individual states that can be jumped to. There should always be an "entry" key, which is the state the conversation will start with when the player starts it for the very first time. Each of these keys holds an array of strings, which are twofold: Either a player option (marked by an initial "►"), or an NPC line. Each line may end with a state change and or an action.

State Changes

Usually after player options, but can also be placed after NPC lines. State changes always begin with an "@" character followed by a valid key name form within the same dialog. After the line has been spoken by NPC or player, the dialog will continue in that state (with its first line).

Actions

Any kind of side effect in the game. Always starts with an exclamation mark, followed by the action name and possibly additional parameters. Includes camera behavior (e.g. "!zoomin", "!zoomout", "!zoomto <NPC name>"), NPC moods ("!angry", "!scared", … whatever we support), game progress ("!enabledialog <NPC name> <dialog name>") and more.

Interpretation

Lines are always executed top to bottom. If multiple NPC lines follow one another, the player will have to press Enter to proceed to the next one. When an NPC line is followed by player options, the player will see both at the same time. Multiple options after one another will always be visible at once. It's possible to have one player option lead to more player options using state changes though:

    
    "myState": [
        "I'm NPC XY and say stuff",
        "►Greet",
        "►Leave !end",
        "►Insult @insults"
    ],
    "insults": [
        "►You're heavy!",
        "►I don't like you"
    ]

Having many states can quickly become hard to read though. It's sometimes possible to not use all that many states for every single player option, but stay mostly in a single one linearly:

    
    "entry": [
        "Hello you!",
        "►Hi", /* all these lead to the same line below, mere illusion of choice! */
        "►Hello you too!",
        "►Who are you?",
        "I'm Steve the sentient stone!",
        "►Whoa! A talking stone!",
        "►You rock!",
        "►What do you want from me? @want",
        "Well yes, thank you! And you are?"
    ]
    

This way even longer conversations don't need to turn complex.