# Vinora Engine Vinora Engine is a visual novels engine with focus on *simplicity* and *portability*. It doesn't use any script language (like Python in Ren'Py), but instead it use Markdown dialect called Vinora Screenplay. It's on early stage of development, so it has no use if you an average user. But if you are a programmer -- you are welcome to [contribute](CONTRIBUTING.md). ## Table of Contents - [Installation](#installation) - [Design](#design) - [Contributing](CONTRIBUTING.md) - [License](LICENSE.md) ## Installation ### Installing raylib You have two options here: build raylib manually or get it automatically from Github. They are both easy to do, but for building you need to install additional dependencies, which is not really cool and for auto download you need to rely on Github. It's up for you what to choose. ##### Manually building If you want build raylib manually, you need to prepare some dependencies: - [Linux](docs/working_from_Linux.md) - [MacOS](docs/working_from_MacOS.md) - Windows - ChromeOS - FreeBSD - Raspberry Pi - Android ##### Auto download Vinora So, you need some C99 compiler (we use `gcc`), `make`, `git` and `wget`. `sudo apt install build-essential git wget` After you installed this, run: make fetch-raylib It would download raylib from Github instead of building it. ### Building Vinora Simply run: make It would Vinora Engine. That's all, you've done! ___ ## Design ### Game structure Visual novel on Vinora Engine looks like this: ``` example ├── engine │ ├── vinora_lin │ ├── vinora_mac.bin │ └── vinora_win.exe ├── game │ ├── bg │ │ ├── school_day.png │ │ └── school_night.png │ ├── cg │ │ └── debate.png │ ├── conf │ │ ├── main.ini │ │ └── options.ini │ ├── music │ │ ├── day.mp3 │ │ ├── home.mp3 │ │ ├── night.mp3 │ │ └── school.mp3 │ ├── sounds │ │ ├── door.ogg │ │ ├── exit.ogg │ │ ├── play.ogg │ │ └── stop.ogg │ ├── sprite │ │ ├── alice │ │ │ ├── happy.png │ │ │ └── sad.png │ │ └── bob │ │ ├── happy.png │ │ └── sad.png │ ├── ui │ │ └── main_menu.png │ ├── video │ │ ├── ending.mp4 │ │ └── opening.mp4 │ ├── Chapter1.vnrs │ ├── Chapter2.vnrs │ └── Chapter3.vnrs ├── mods ├── translations └── run_game.bat ``` A little bit overwhelming, but it's actually really simple. Let's start with root directory: ``` example ├── engine ├── game ├── mods ├── translations └── run_game.bat ``` `run_game.bat` is cross-platform (Bash/Batch-compatible) script, which will run a right engine binary from `engine/` depending from which OS it was executed. Than this binary will look at `game/` and start reading game script. If user in-game would choose to play `mods/` or switch to one of the `translations/`, it will overwrite any information from `mods/` in RAM. (For example, if I switch to Russian, `translations/ru/intro.vnrs` would be displayed instead of `game/intro.vnrs`. Same with mods.) **game/** directory has a bunch of Vinora Screenplay (.vnrs) files and assets directories (bg, cg, conf, video, etc). Obvious question is *why we didn't make general `audio/` and `video/` directories?* Well, in Vinora Screenplay to play some music you write something like this: `[](music/home.mp3)` So, difference between music and sound is that music is played on loop. You can change by appending {loop} or {!loop}, but still, this is *default* behaviour. And the only way how Vinora can distinguish `music` from `sound` or `sprite` from `bg` is by parsing their directory name. ### Vinora Script overview