            ____  _____    _    ____  __  __ _____
           |  _ \| ____|  / \  |  _ \|  \/  | ____|
           | |_) |  _|   / _ \ | | | | |\/| |  _|
           |  _ <| |___ / ___ \| |_| | |  | | |___
           |_| \_\_____/_/   \_\____/|_|  |_|_____|
           
                           README

Project: Book.gmk
Purpose: To make it easier for 'LateralGM+ENIGMA' based games to have
         readable, bookmarkable, and easily changable books via INI 
         files.
Author: TheOuterLinux (https://theouterlinux.gitlab.io)

GML scripts licenses: MIT
Included font license: SIL Open Font License
Included sprites, backgrounds, and images licenses: CC BY-SA (give credit)
Sound effects and narration licenses: CC0 (Public Domain)
Forest background music license: See included "Data/Books/Audio/Forest/License.txt" file
All included *.ini file licenses: CC0 (Public Domain)

Requirements to open and run/compile project file: LaterGM+ENIGMA

Both 32-bit and 64-bit binaries were built with SDL (OpenGL 1.1) set for
graphics and OpenAL for audio on a GNU/Linux system with GCC/G++ 
version 10.2.1.

Project last updated: 2024/03/26

------------------------------------------------------------------------

This file is a GMK file for use with LateralGM+ENIGMA, a combination of
which is very similar to using one of the Game Maker classic versions
but both LateralGM (an interface) and ENIGMA (an engine) are free and
open-source projects.

The point of this project is to have an easy way for the player to
interact with books, journals, tomes, letters, and etc. found through-
out a game. These books are created using INI files.
 
Merging this project with your own should be fairly simple; I also have 
the scripts available in the Scripts directory if opening the GMK (GM8) 
file is a problem. HOWEVER, as it is currently coded, do not expect
these scripts to run on actual 'Game Maker 8' without a fight; they are 
meant for LaterGM+ENIGMA. If you have a way to make it "nice" for both, 
then please send me a copy of your script corrections so everyone can
benefit; they still need to be MIT licensed.

The included "fnt_Default" is "EB Garamond 12" and falls under the
SIL open Font License (http://scripts.sil.org/OFL). You can find a copy
of this font within the "Source/Fonts" directory.

"Book_64Linux" and/or "Book_32Linux" binaries usage:

    A. Just run the binary and a default INI book (TheRaven.ini) will 
       appear
    
    B. Or, open a terminal in the same location as the 
       "Book_[64,32]Linux" binary and then run it with an argument like 
       so:
       
           ./Book_64Linux "/path/to/Books/TheRaven_LighterOnRAM.ini"
           
           ...If the chosen INI book-file does not load or work
           properly, check the contents of the INI to make sure that
           file-paths are correct. The usage of "working_directory"
           within the GML scripts make file-paths realtive to the 
           location of the binary and/or project file, which is why GMK
           is used and not GMX; the GMX "format" (GM: Studio) is 
           actually a directory.
           
           "Book_32Linux" is for 32-bit GNU/Linux users. 
           "Book_64Linux" is for 64-bit GNU/Linux users.
           
           The "TheRaven_LighterOnRAM.ini" by default only uses about
           70MB of RAM where as "TheRaven.ini" is going to a few hundred
           more because of loading external resources, even though there
           are not a few hundred MB's worth to load; I am not sure why.
           
                               * * *
           
REMEMBER... file-paths specified within the INI books should be relative
to the project file or binaries; specifying a full file-path
somewhere else may not work because "working_directory" is placed at
the front of the file-path related lines within the GML scripts. If you 
want to change the values of variables that are file-related, those 
paths need to be relative to the location of the project file or the 
precompiled binaries, depending on which of these you are playing around
with.

------------------------------------------------------------------------

Keyboard Keys:

    Right Arrow, Spacebar, PageDown, or A    Page forward
    Left Arrow, PageUp, Backspace, or D      Page backward
    Home, W, or Up Arrow                     Title Page
    End, D, or Down Arrow               Last page
    M                                   Toggle mute for background audio
    N                                   Toggle mute for narration audio
    B                                   Bookmark current page spread
    Q or Esc                            Close book
    
                               * * *

By the way, toggling mute for background audio or narration does not
stop or pause the audio; it only mutes it, switching between their set 
audio volumes and zero. These initial audio volumes can be changed from
within the "Settings/Audio.ini" file. Also, the way things are coded,
toggling the audio-related settings will also toggle for all books since
those settings are shared using the "Settings/Audio.ini" file.

You can only bookmark one page spread at a time but bookmarks are kept
relative to each book.

Keys can be changed from within the "Settings/Controls.ini" file; see
the included "Settings/KeyboardCodes.txt" for help. If you want joystick
or gamepad controls, use a program like 'QJoyPad' to tranlsate buttons
to keyboard keys.

------------------------------------------------------------------------

Limitations

The "font_add()" function does not currently work in LateralGM+ENIGMA 
and so fonts specified in the INI book file must be relative to the 
fonts supplied within the project.

Images and audio files that are to be loaded externally must be PNG and
WAV if using LateralGM+ENIGMA.

Functions such as "sound_discard()" and "sound_enable()" are currently
not available to LateralGM+ENIGMA users and so freeing-up memory if the
"sound_add()" function is used may not be possible. Meaning, switching
back-and-forth between the book and another room will increase RAM usage
quite a bit. However, closing the program/game does return the RAM back
to normal. If this will be a problem, for the time being, you may want
to consider not having any background audio or narration for your books.

If you try to get this project (as is) to work with Game Maker, it 
propbably will never happen do to array "out-of-range" something or 
other errors (and others) and because INI files have to be in the same 
directory as the binary or project file. Also, Game Maker is very weird 
about trying to use resources that are not included within the project; 
LateralGM+ENIGMA is MUCH more forgiving when it comes to this, except in
the the case of extra RAM usage.

If you want joystick/gamepad controls, you are going to have to use
something like 'QJoyPad' to translate joystick/gamepad buttons to 
keyboard keys. LateralGM+ENIGMA has joystick and gamepad functions but
their current state is a mess, especially if building using SDL for 
graphics. X11 uses "joystick" functions while SDL uses "gamepad" 
functions. And, you cannot compile for both X11 and SDL for graphics
which means that you would have to pick either "joystick_*" or 
"gamepad_*" functions depending on your choice; trying both will result
in errors. Like I said, it is a mess; do not bother for the time-being.

