VERSION 1.0.0.0

So far the game is only available in english.

=================================================================
System requirements (Win 10):
=================================================================
 1 GB Ram
 A Processor
 OpenGL or DirectX capable Graphics Card with at least 256 MB VRAM

=================================================================
Features:
=================================================================
Play:
Play a JOI-Project from the configured data folder.

Editor:
Create a new JOI-Project or edit an existing JOI-Project from the configured
data folder.

Settings:
Lets you confirure the Application. The configuration is written to
%AppData%\Roaming\Private:
- Graphics > Fullscreen: Toggle fullscreen mode
- Graphics > Window-Resolution: Select the windowed resolution of the applicaiton
- Customization > Font: Select the application font. Any system font is selectable, 
                        to use custom fonts install them to C:\Windows\Fonts
- Customization > Style: Select the application style. The available styles are in 
                         the ./styles subdirectory of the application.
- Audio > Mute: Mute or unmute the application.
- Audio > Volume: Configure audio volume for the entire application.
- Content > Content-Folder: The content folder where the application looks for 
                            JOI-Projects.

Credits:
Show the cretids. Yea that's it.

Quit:
Quit the application, Duh!

=================================================================
Projects:
=================================================================

A JOI-Project can be played from "Select Scene" and edited in "Editor" in the main menu.

A JOI-Project consists of a folder with:
 - "JOIPData.json" (The main file listing all other files and settings of the project)
 - "SceneModel.flow" (also just a JSON file, can be opened in any text editor)
 - a lot of images and scripts for each scene. 
All of these are in the ./data subfolder by default, or can be configured to a different path in 
Settings > Content > Content Folder. 
The Files can all be edited manually, but the GUI in-game does it all for you.

=================================================================
Editor:
=================================================================

The interface is fully stylable via stylesheet.
In the Editor you can either open a project from the ./data directory, or create a new one from scratch.
The entered name of the new project is the subfolder name in ./data.
Creating a new project creates the "JOIPData.json" and the "SceneModel.flow" files.

At the top of the project editor, you can edit the project name, save and exit to main menu.
Editing the name will rename the folder when saving, so don't keep the explorer
open in the folder. A '*' next to the project name indicates unsaved changes.

The editor has two planes to display content and you can swap what they display with the dropdown menu at the top:

- Resource manager: Shows resources (images, videos, sounds, scripts etc.) you have added to the project.
  To add a resource, either use the buttons on the left and select them in the file selection dialog,
  or drag and drop the files from your explorer onto the tree.
  The manager will ask to copy or move the files, I usually copy them to have a backup, but it's up to you. 
  If you click on a resource, you get a preview below the tree and in the "Resource View".
  You can also add a web-resource which will not be downloaded and instead loaded and displayed when needed
  (these can only be images and videos, and only a direct link to the image or video is accepted).
  The resources are sorted by category and name, but the sorting can be changed by clicking on the tree header.
  You can also search for resource names in the field below and rename the resources by double clicking the
  name of an item in the tree (this doesn't rename the file itself, just changes how it is referred in the application).
  One image is allways the title-card of the project (the image you see when selecting from multiple projects).
  You can set the title card with the button on the left. 
  The map button does not do anything yet, but is planned to provide an image that should contain a map of the project.

- Resource View: Simply a bigger resource display. Allows to seek, play, pause, stop audio and video files,
  and display images. To display something select it in the tree of the "Resource manager".

- Scene Node Editor: Allows to edit together scenes. 
  A Project consists of scenes linked together by paths, splitters and mergers.
  The entry point of a project is allways an "Entry Point" node and the Project finishes with an "Exit Point" node. 
  "Scenes" are the scripted part of a project and "Splitters" and "Mergers" link together other nodes.
  
  The '+' button, or clicking RMB in the node editor lets you add a new node.
  The '-' button will delete the currently selected node and all paths linked to it.
  To select a node, simply click it with LMB.
  To create a path between nodes, click the connector of a node and drag the mouse to the opposite connector of a
  different node.
  
  When you create a "Scene"-node, you will be prompted to create the associated script file
  (it helps to have the same name as the "Scene" node, but it's not neccessary. Just make sure it's in the project folder.)
  The Nodes of a project might look like this: 

    Entry - Scene 1 - Splitter (random) - Scene 2 - End

  This would be a very linear flow. A more dynamic flow would be to have the splitter linked to two different 
  scenes or even another splitter to split the flow of the project up even more. 
  
  Splitters can be random or selectable. 
  Random means, if the script for a scene ends, the game will randomly travel down a connection of the node to find the 
  next scene (the example JOI does this). Selectable means, the user gets to select the next scene.
  You can freely combine both by linking them together to get a very random selection or selectable randomness :)
  One thing to consider is: every path in the project should allways eventually lead to an "Exit Point". 
  Any empty connectors will be ignored during playing and you do not need to worry about them.
  For a more complex reference, you can check the flow of the JOI-Remake.

- Scene Code editor: This shows the code of every "Scene" in your project's flow. First of: don't worry, 
  you won't have to write a lot of code yourself. The buttons create code-snippets for you 
  for everything except:
  > "localStorage.load(<name>);" "localStorage.save(<name>,variable);"
  If you need more complex logic, it's all java-script (ECMA-262) and very intuitive and easy to learn.
  The play button lets you test a scene, and if an error occurs, you will recieve an in-line notification 
  in the code box on the line, where the error occured.
  As a tipp, the code editor is basically an extended notepad editor and lets you copy, paste, undo, redo, 
  and do the usual stuff with the content. New lines are marked with their number on the left side for easier navigation.

=================================================================
Resources:
=================================================================
To include something, just drag-drop the items into the tree or
use the buttons.

For web resources, only images and videos work.
Use the direct image / video link to make it work.
e.g.: 
 - https://derpicdn.net/img/view/2019/1/28/1946645.webm
 - https://derpicdn.net/img/view/2014/10/18/745596.png

For derpibooru, I recommend the VS link = View (no tags in 
filename, as the link parts are the virtual folders in the editor)

=================================================================
Supported formats:
=================================================================
Image:
bmp, cur, gif, icns, ico, jpeg, jpg, pbm, pgm, png, ppm, 
svg, svgz, tga, tif, tiff, wbmp, webp, xbm, xpm

Video:
3gp, asf, wmv, mpg, ts, au, avi, flv, mov, mp4, ogm, ogg, mkv, 
mka, nsc, nsv, nut, a52, dv, vid, ty, webm

Audio:
wav, dts, mp3, mp2, tta, tac, flac, dts, aac, xa

Other Formats:
json, xml (currently unused), js, flow

Not yet supported, but planned formats:
swf (games, movies etc.), qml (fully interactive and delcarative ui that can use javascript for scripting)

=================================================================
ScriptEngine Bindings:
=================================================================
General Qt-Script suppport can be found at:
- https://doc.qt.io/qt-5/qtqml-javascript-functionlist.html#
General Javascript Help:
- https://www.w3schools.com/
General ECMA-262 Specification:
- http://www.ecma-international.org/publications/standards/Ecma-262.htm

Application specific bindings:

- The Background Object ('background' global property)
  > Function Properties:
     * void setBackgroundColor(Array[4 Interger] or hex color)
     * void setBackgroundTexture(Name of an 'Image'-Resource)

- The Icon Object ('icon' global property)
  > Function Properties:
     * void hide(Name of an 'Image', or 'Movie'-Resource or Empty or "~all") 
       (empty string and "~all" hide all icons)
     * void hide() 
       (hide all icons)
     * void show(Name of an 'Image', or 'Movie'-Resource)

- The MediaPlayer Object ('mediaPlayer' global property)
  > Function Properties:
     * void show(Name of an 'Image', 'Movie' or 'Sound'-Resource)
     * void play(Name of an 'Movie' or 'Sound'-Resource)
     * void play()
       (hide play / continue last loaded resource)
     * void pauseVideo()
     * void stopVideo()
     * void pauseSound()
     * void stopSound()
     * void waitForPlayback()
       (Blocks until the playing video finishes, 
        WARNING: if no video is playing it waits indefinitely)

- The TextBox Object ('textBox' global property)
  > Function Properties:
     * void setBackgroundColors(Array[Array[4 Interger] or hex color])
     * void setTextColors(Array[Array[4 Interger] or hex color])
     * int showButtonPrompts(Array[Strings]); 
       (Blocks and returns the index of the pressed button.)
     * String showInput()
       (Blocks and returns the player typed string.)
     * void showText(String)
     * void clear();

- The Thread Object ('thread' global property)
  > Function Properties:
     * void sleep(Time in seconds, optional Skippable flag: true or false)
       (Blocks for n seconds or until player skipps wait)

- The Timer Object ('timer' global property)
  > Function Properties:
     * void hide()
     * void setTime(Time in seconds)
     * void setTimeVisible('true' or 'false')
     * void show()
     * void start()
     * void stop()
     * void waitForTimer()
       (Blocks until timer runs out no matter the visibility.
        If no timer is set, it returns immediately.)

- The Local Storage Object ('localStorage' global property)
  > Function Properties:
     * var load(Name of variable as String)
       (Gets the previously stored value, cleared upon opening new project or new debugging session)
     * void store(Name of variable as String, Value)
       (Stores a value for the run time of the curent project or debugging session)

- Return Value
  To switch to a specific scene, you can return from the current Script with the name
  of a scene, if no such scene exists, the result is undefined: 
  eg:
     // script
     ... 
     return "Rainbow Dash 1"
     ...
     // more script

=================================================================
App Stylesheet:
=================================================================
Stylesheet load order:
 - Secected stylesheet from Settings > Customization > Style
 - internal fallback

For Stylesheet help visit:
- https://doc.qt.io/qt-5/stylesheet-reference.html
- https://doc.qt.io/qt-5/stylesheet-examples.html

Additional classes that are useful in a style:

- CMenuButton: The button used in the main menu and primary sub-menus.
               It's allways drawn directly on the main window background.

- COverlayBase: Class for overlays, that work like non-modal dialogs and should be styled
                similarly as a QDialog, as they will be drawn ontop of other widgets.

- CProjectCardSelectionWidget: The widget displaying the title card of a JOI-Project.
                               Has unique properties:
    > qproperty-selectionColor: The color of the glow of the currently selected card.

- CTimerWidget: The timer during playing. Has unique properties:
    > qproperty-primaryColor: Color of the clock segments and the back of the passed time.
    > qproperty-secondaryColor: Color of the clock hand.
    > qproperty-tertiaryColor: Color of the front of the passed time.

- CScriptEditorWidget: The text editor for scripts. Has unique properties:
    > qproperty-lineNumberBackgroundColor: Background color of the bar with the line numbers.
    > qproperty-lineNumberTextColor: Text color of the line numbers.
    > qproperty-highlightLineColor: Background color of the line currently containing the cursor.
    > qproperty-widgetsBackgroundColor: Background color of the bar with the error icons to the 
                                        right of the line number bar.

- CEditorSceneNodeWidget: The node editor. Has unique properties:
    > qproperty-normalBoundaryColor: Boundry (border) color of non-selected nodes.
    > qproperty-selectedBoundaryColor: Boundry (border) color of selected nodes.
    > qproperty-gradientColor0: Top color of nodes.
    > qproperty-gradientColor1: Top half backgound color of nodes.
    > qproperty-gradientColor2: Bottom half backgound color of nodes.
    > qproperty-gradientColor3: Bottom color of nodes.
    > qproperty-shadowColor: Shadow color of nodes.
    > qproperty-fontColor: Font color of nodes.
    > qproperty-fontColorFaded: Secondary font color of nodes.
    > qproperty-connectionPointColor: Color of the connection indicator of nodes.
    > qproperty-backgroundColor: Background of the node editor (currently non-functional).
    > qproperty-fineGridColor: Color if the fine grid lines of the node editor.
    > qproperty-coarseGridColor: Color if the coarse grid lines of the node editor.
    > qproperty-normalConnectionColor: Default color of unselected connections.
    > qproperty-selectedConnectionColor: Color of selected connections.
    > qproperty-selectedConnectionHaloColor: Glow color of selected connections.
    > qproperty-hoveredConnectionColor: Color of hovered connections.

Ids of icons / Buttons for styling:

QLabel:
- #SearchIcon: Search icon next to the bar of the "Resource manager" in the editor.
- #PlayButton: The skip-wait button during playing.
- #ExitButton: The exit button during playing.
- #ErrorIcon: The error indicator of the "Scene Code editor".
- #IconBackground: The background image of icons displayed by a project during gameplay.

QPushButton:
The following are all buttons that are used in the editor.
- #AddShowBackgroundCode:
- #AddShowIconCode:
- #AddShowImageCode
- #AddTextCode
- #AddTimerCode
- #DebugButton
- #StopDebugButton
- #PauseButton
- #PlayButton
- #StopButton
- #AddThreadCode
- #ExitButton
- #SaveButton
- #AddResourceButton
- #AddButtonButton
- #AddTextColorButton
- #AddBGColorButton
- #AddWebResourceButton
- #MapButton
- #RemoveResourceButton
- #RemoveButtonButton
- #RemoveTextColorButton
- #RemoveBGColorButton
- #TitleCardButton
- #AddNodeButton
- #RemoveNodeButton

=================================================================
Auxiliary Files:
=================================================================
Webengine cache & Cookies found in:
C:\Users\<CurrentUser>\AppData\Local\JOIPEngine

Settings found in:
C:\Users\<CurrentUser>\AppData\Roaming\Private\JOIPEngine.ini

=================================================================
dump files location:
=================================================================
C:\Users\<CurrentUser>\AppData\Local\CrashDumps\JOIPEngine.exe.<Nr>.dmp