# color suzanne
Hallo! Ich bin Suzanne, der Affe von Blender. 
Möchtest du wissen, wie diese Engine funktioniert?
* [Klar, leg los]
    -> menu
* [Nein, danke.]
    -> ende

=== menu ===
# color suzanne
Worüber soll ich plaudern?
* [Ink by Inkle]                   -> story
* [Renderer & Pixel]               -> render
* [Welt & Physik]                  -> welt
* [Interaktion & Picking]          -> interakt
* [Audio]                          -> audio
* [Warum so wenig Pixel?]          -> pixel
* [Nichts weiter, danke]           -> ende

=== render ===
# color suzanne
Alles, was du siehst, wird als ein Pixelbuffer von der CPU gerendert. Der Pixelbuffer ist einfach eine Liste von Bytes, die einen Frame beschreibt. Jedes Pixel hat dabei genau einen Byte, also 8 Bit speicherplatz. Deshalb haben wir auch nur 256 unterschiedliche Farbwerte pro Frame.

Texturen sind 8-bit indexed TGAs, die durch eine 256-Farben-Palette laufen. Das ist ein simples Dateiformat, das viele Grafikprogramme unterstützen und das sehr einfach zu verarbeiten ist.
Farb-Paletten sind auch TGA-Dateien, mit 16x16 Pixeln im normalen 24 Bit RGB-Raum. Diese werden von der Engine gelesen und als Farbpalette festgelegt.

Schalte Mal den Wireframe-Modus ist im ESC-Menü ein!

* [Zurück zum Menü] -> menu

=== welt ===
# color suzanne
Geometrie kommt aus OBJ-Dateien, die z.B. in Blender bearbeitet werden. Dabei gibt es Konventionen:

Mesh-Namen mit Prefix steuern die Rolle: VIS_ ist nur sichtbar, COL_ ist nur
Kollision, INT_ ist nur Trigger (weder sichtbar, noch kollision). Alle anderen Meshes sind sichtbar und kollidieren.

Materialien werden in assets/materials/materials.toml definiert. Dort liegen auch die Texturen.

* [Zurück zum Menü] -> menu

=== interakt ===
# color suzanne

Diese Engine nutzt ein Signal-System mit Triggern und Actions.

In signals.toml werden Trigger definiert und Actions zugewiesen. Schau dir gern die Datei Mal an.

Jedes Objekt kann einen eigenen Trigger bei Spieler-Interaktion haben. Dieser Trigger heißt einfach wie das Objekt. VIS_mushroom hat also den Trigger [VIS_mushroom], der Actions auslöst.

* [Zurück zum Menü] -> menu

=== story ===
# color suzanne
Dialoge und Interaktionen werden in Inkscript geschrieben. Die Engine liest kompilierte .ink.json-Dateien.

Im backend läuft bladeink als Interpreter. Dadurch ist der komplette Inky-Standard unterstützt. Color-Tags ändern die Textfarbe. Alle anderen Tags werden als Signals in der Engine dispatched.

Die Engine hat einen Variablen-Speicher, der mit dem Variablenspeicher vor und nach jedem Dialog synchronisiert wird. Variablen im Inkscript sind also global verfügbar und können durch Signals gesteuert werden.

* [Zurück zum Menü] -> menu

=== audio ===
# color suzanne
Die Sound-Engine ist noch sehr rudimentär. WAV-Dateien werden durch die Engine geladen. Die Sounds können durch Signals gesteuert werden. Es gibt noch keine 3D-Effekte.

* [Zurück zum Menü] -> menu

=== pixel ===
# color suzanne
Diese Engine unterstützt beliebige Auflösung. Aktuell sind es 320x240px also qVGA. Ich find das schick!
Aber 640x480px haben auch noch einen guten Retro-Look. Bei 1920p brauchen wir dann schon bessere Assets, sonst wirds hässlich.

Starte die Engine im Terminal mit ./irl3d --resolution VGA

* [Zurück zum Menü] -> menu

=== ende ===
# color suzanne
Schön, dass du dich hier umschaust. Viel Spaß noch!
* [Bis dann]
    # suzanne_farewell
    -> END
