diff --git a/CMakeLists.txt b/CMakeLists.txt
index 15cd393a..8ad9ceb1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -74,7 +74,6 @@ file(COPY ${CMAKE_CURRENT_LIST_DIR}/assets DESTINATION ${CMAKE_CURRENT_BINARY_DI
 
 ##################################### LIBS #####################################
 include_directories(${CMAKE_SOURCE_DIR}/lib/stb)
-include_directories(${CMAKE_SOURCE_DIR}/include)
 
 # RG351
 if(${SETTING_TARGET} EQUAL ${SETTING_TARGET_RG351})
diff --git a/include/dawn/dawn.h b/include/dawn/dawn.h
deleted file mode 100644
index 3e56b34b..00000000
--- a/include/dawn/dawn.h
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "libs.h"
-
-// Display / Rendering
-#include "display/animation/easing.h"
-#include "display/animation/queue.h"
-#include "display/animation/timeline.h"
-
-#include "display/bitmapfont.h"
-#include "display/camera.h"
-#include "display/font.h"
-#include "display/framebuffer.h"
-#include "display/matrix.h"
-#include "display/primitive.h"
-#include "display/render.h"
-#include "display/renderlist.h"
-#include "display/scene.h"
-#include "display/shader.h"
-#include "display/spritebatch.h"
-#include "display/texture.h"
-#include "display/tileset.h"
-
-// Game Engine
-#include "engine/engine.h"
-
-// Time Management
-#include "epoch/epoch.h"
-
-// File / Asset Management
-#include "file/asset.h"
-#include "file/csv.h"
-#include "file/xml.h"
-
-// Game Logic
-#include "game/game.h"
-
-#include "game/dawn/dawngame.h"
-
-#include "game/poker/ui/pokerplayerui.h"
-#include "game/poker/ui/pokerui.h"
-#include "game/poker/pokerdiscussion.h"
-#include "game/poker/pokergame.h"
-#include "game/poker/pokergameaction.h"
-#include "game/poker/pokergameassets.h"
-#include "game/poker/pokerworld.h"
-
-#include "game/sandbox/sandboxscene.h"
-
-// Player Input
-#include "input/input.h"
-
-// Locales
-#include "locale/language.h"
-
-// Physics
-#include "physics/aabb.h"
-
-// Poker Game Logic
-#include "poker/bet.h"
-#include "poker/card.h"
-#include "poker/dealer.h"
-#include "poker/player.h"
-#include "poker/poker.h"
-#include "poker/turn.h"
-#include "poker/winner.h"
-
-// Script engine
-#include "script/scripter.h"
-
-// User Interface Objects
-#include "ui/align.h"
-#include "ui/breakpoint.h"
-#include "ui/frame.h"
-#include "ui/framedtextmenu.h"
-#include "ui/grid.h"
-#include "ui/image.h"
-#include "ui/label.h"
-#include "ui/menu.h"
-#include "ui/rectangle.h"
-#include "ui/textmenu.h"
-
-// Utility Objects
-#include "util/array.h"
-#include "util/dynarray.h"
-#include "util/flags.h"
-#include "util/list.h"
-#include "util/math.h"
-#include "util/rand.h"
-#include "util/string.h"
-
-// Visual Novel Objects
-#include "vn/vncharacter.h"
-#include "vn/vnconversation.h"
-#include "vn/vnscene.h"
-#include "vn/vntextbox.h"
\ No newline at end of file
diff --git a/include/dawn/display/animation/queue.h b/include/dawn/display/animation/queue.h
deleted file mode 100644
index 422a3781..00000000
--- a/include/dawn/display/animation/queue.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../../libs.h"
-
-#define ANIMATION_QUEUE_ITEM_MAX 128
-#define ANIMATION_QUEUE_START 0xFF
-
-typedef struct _queueaction_t queueaction_t;
-typedef struct _queue_t queue_t;
-
-/**
- * Callback for queue events.
- * @param conversation Conversation this text is attached to.
- * @param text Text item that is being used in the callback
- * @param i Index of the item in the queue.
- */
-typedef void queuecallback_t(queue_t *queue, queueaction_t *action, uint8_t i);
-
-typedef struct _queueaction_t {
-  /** Index that the action is within the queue */
-  uint8_t index;
-
-  /** Pointer to any custom user data */
-  void *data;
-
-  /** Callback to fire the moment the action is active in the queue */
-  queuecallback_t *onStart;
-
-  /** Callback to fire when this action has ended */
-  queuecallback_t *onEnd;
-
-  /** Callback to fire every update of this queue while action is active. */
-  queuecallback_t *onUpdate;
-} queueaction_t;
-
-typedef struct _queue_t {
-  /** Array of items within the queue. */
-  queueaction_t items[ANIMATION_QUEUE_ITEM_MAX];
-  uint8_t count;
-
-  /** Current index within the array of actions that is currently processing */
-  uint8_t current;
-  
-  /** Internal timeline tracking */
-  float timeline;
-
-  /** Time that the current aciton started */
-  float actionStarted;
-
-  /** Delay Queue Item Storage */
-  float delays[ANIMATION_QUEUE_ITEM_MAX];
-} queue_t;
\ No newline at end of file
diff --git a/include/dawn/display/animation/timeline.h b/include/dawn/display/animation/timeline.h
deleted file mode 100644
index 4a3c3fd8..00000000
--- a/include/dawn/display/animation/timeline.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../../libs.h"
-
-/** Maximum number of actions a timeline can support, smaller than 0xFF */
-#define TIMELINE_ACTION_COUNT_MAX 128
-
-/** Type forwarders */
-typedef struct _timeline_t timeline_t;
-typedef struct _timelineaction_t timelineaction_t;
-
-/**
- * Callback for when a timeline event occurs
- * @param timeline The timeline that fired this callback.
- * @param action The action that this callback is attached to.
- * @param i The index that this action is within the timeline.
- */
-typedef void timelinecallback_t(timeline_t *timeline, timelineaction_t *action,
-  uint8_t i
-);
-
-typedef struct _timelineaction_t {
-  /** Pointer to any custom user data the timeline action wants to use. */
-  void *data;
-
-  /**
-   * The time that this action should occur within the timeline
-   * set to 0 or less to start immediately.
-   */
-  float start;
-
-  /**
-   * The duration of the action, this will decide for how long onDuration will
-   * be called for, and when onEnd should be called.
-   * Set to a negative number to have this continue forever.
-   * Set to 0 to only fire the onStart. 
-   * onStart can fire with either onDuration and onEnd on the same frame, but
-   * onEnd and onDuration cannot fire the same frame.
-   */
-  float duration;
-
-  /**
-   * Enables animation looping. This works by forcing start to be equal to the
-   * current time at the point in time that onEnd is called. This will also stop
-   * onStart being called so ensure that your onStart and onEnd logic works.
-   */
-  bool loop;
-
-  timelinecallback_t *onStart;
-  
-  timelinecallback_t *onDuration;
-
-  timelinecallback_t *onEnd;
-} timelineaction_t;
-
-typedef struct _timeline_t {
-  /** The current time as far as the timeline is concerned */
-  float current;
-  
-  /** The time of the last "frame" as far as the timeline is concerned */
-  float previous;
-
-  /** The frame time diff, essentially current = previous + diff */
-  float diff;
-
-  /** User pointer, allows you to point to some other data */
-  void *user;
-
-  /** Actions within the timeline */
-  timelineaction_t actions[TIMELINE_ACTION_COUNT_MAX];
-  uint8_t actionCount;
-} timeline_t;
\ No newline at end of file
diff --git a/include/dawn/display/bitmapfont.h b/include/dawn/display/bitmapfont.h
deleted file mode 100644
index 044689c3..00000000
--- a/include/dawn/display/bitmapfont.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-/** Which is the first character within the font tilemap */
-#define BITMAP_FONT_CHAR_START 33
-
-/** Center a font along the X axis */
-#define BITMAP_FONT_CENTER_X 9876543
-
-/** Center a font along the Y axis */
-#define BITMAP_FONT_CENTER_Y -BITMAP_FONT_CENTER_X
-
-/** Align right edge of font to origin */
-#define BITMAP_FONT_RIGHT_X (BITMAP_FONT_CENTER_X-1)
-
-typedef struct {
-  float width, height;
-  int32_t lines;
-} bitmapfontmeasure_t;
\ No newline at end of file
diff --git a/include/dawn/display/camera.h b/include/dawn/display/camera.h
deleted file mode 100644
index 18a80ae8..00000000
--- a/include/dawn/display/camera.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Msters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "matrix.h"
-
-/** The math for the camera is stored here. */
-typedef struct {
-  /** View Matrix (Where the camera looks) */
-  matrix_t view;
-
-  /** Projection Matrix (How the camera looks) */
-  matrix_t projection;
-} camera_t;
\ No newline at end of file
diff --git a/include/dawn/display/font.h b/include/dawn/display/font.h
deleted file mode 100644
index 55e8684a..00000000
--- a/include/dawn/display/font.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "texture.h"
-
-/** Which character (ASCII) to start the font from */
-#define FONT_FIRST_CHAR 32
-
-/** How many characters (after the first char) to generate */
-#define FONT_NUM_CHARS 96
-
-/** Width of the loaded font texture */
-#define FONT_TEXTURE_WIDTH 1024
-
-/** Height of the loaded font texture */
-#define FONT_TEXTURE_HEIGHT FONT_TEXTURE_WIDTH
-
-/** Refer to STBTT docs for OpenGL Fill Mode v d3d Fill Modes */
-#define FONT_FILL_MODE 1
-
-/** Passed to STBTT for scaling the font, essentially the font resolution */
-#define FONT_TEXTURE_SIZE 64.0f
-
-/** The global scale, just used to provide fine control of font sizes */
-#define FONT_GLOBAL_SCALE 0.5f;
-
-/** Default Font Size (on which all font scales are based) */
-#define FONT_SIZE_DEFAULT 16.0f
-
-// Chars
-#define FONT_NEWLINE '\n'
-#define FONT_SPACE ' '
-
-// Heights
-#define FONT_LINE_HEIGHT FONT_TEXTURE_SIZE * 0.75f
-#define FONT_INITIAL_LINE FONT_LINE_HEIGHT * 0.75f
-#define FONT_SPACE_SIZE FONT_TEXTURE_SIZE * 0.45f
-
-/** Maximum number of characters a font text info can hold. */
-#define FONT_TEXT_INFO_CHARS_MAX 1024
-
-/** Maximum number of newlines that a font text info can hold. */
-#define FONT_TEXT_INFO_LINES_MAX FONT_TEXT_INFO_CHARS_MAX/50
-
-/** Representation of a font that can be used to render text */
-typedef struct {
-  texture_t texture;
-  stbtt_bakedchar characterData[FONT_NUM_CHARS];
-} font_t;
-
-typedef struct {
-  /** What (real character) index the line starts at */
-  int32_t start;
-  /** How many (real) characters the line is in length */
-  int32_t length;
-} fonttextinfoline_t;
-
-typedef struct {
-  /** How many raw chars are in the string */
-  int32_t length;
-
-  /** How many real characters (non whitespace) are in the string */
-  int32_t realLength;
-
-  /** How many lines is the string? Trailing newlines will count */
-  int32_t lineCount;
-
-  /** The real character info for each line */
-  fonttextinfoline_t lines[FONT_TEXT_INFO_LINES_MAX];
-
-  /** Dimensions of the string */
-  float width, height;
-
-  /** Array of precalculated quads */
-  stbtt_aligned_quad quads[FONT_TEXT_INFO_CHARS_MAX];
-} fonttextinfo_t;
\ No newline at end of file
diff --git a/include/dawn/display/framebuffer.h b/include/dawn/display/framebuffer.h
deleted file mode 100644
index 4f7083ec..00000000
--- a/include/dawn/display/framebuffer.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "texture.h"
-
-typedef struct {
-  GLuint fboId;
-  GLuint rboId;
-  texture_t texture;
-} framebuffer_t;
\ No newline at end of file
diff --git a/include/dawn/display/matrix.h b/include/dawn/display/matrix.h
deleted file mode 100644
index 8d6c25c2..00000000
--- a/include/dawn/display/matrix.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-/**
- * Representation for a matrix. Used as a highlevel wrapper for the math 
- * functions that sit underneath this API.
- */
-typedef struct {
-  /** Internal Matrix API */
-  mat4 internalMatrix;
-} matrix_t;
\ No newline at end of file
diff --git a/include/dawn/display/primitive.h b/include/dawn/display/primitive.h
deleted file mode 100644
index 27af3cfd..00000000
--- a/include/dawn/display/primitive.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-#define PRIMITIVE_POSITIONS_PER_VERTICE 3
-#define PRIMITIVE_COORDINATES_PER_VERTICE 2
-
-/** Structure containing information about a primitive */
-typedef struct {
-  /** How many vertices are in the primitive */
-  int32_t verticeCount;
-  /** How many indices are in the primitive */
-  int32_t indiceCount;
-
-  /** Pointer to the vertex buffer on the GPU */
-  GLuint vertexBuffer;
-  /** Pointer to the index buffer on the GPU */
-  GLuint indexBuffer;
-} primitive_t;
-
-/** Structure containing vertice position information */
-typedef struct {
-  /** Coordinates */
-  float x, y, z;
-  /** Texture UVs */
-  float u, v;
-} vertice_t;
-
-/** Indice that references a specific vertice */
-typedef unsigned int indice_t;
\ No newline at end of file
diff --git a/include/dawn/display/render.h b/include/dawn/display/render.h
deleted file mode 100644
index 5c1a6ae2..00000000
--- a/include/dawn/display/render.h
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-
-/**
- * Contains information about the current render state, can be used for querying
- * how the renderer is currently set up.
- */
-typedef struct {
-  /** Resolution (in pixels). Floats to allow subpixels in future. */
-  float width, height;
-} render_t;
\ No newline at end of file
diff --git a/include/dawn/display/renderlist.h b/include/dawn/display/renderlist.h
deleted file mode 100644
index 59c23dd0..00000000
--- a/include/dawn/display/renderlist.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../util/dynarray.h"
-#include "../engine/engine.h"
-#include "framebuffer.h"
-#include "shader.h"
-#include "primitive.h"
-
-typedef struct {
-  framebuffer_t frame;
-  shader_t *shader;
-} renderpass_t;
-
-typedef struct {
-  framebuffer_t frame;
-  primitive_t quad;
-
-  dynarray_t passes;
-  void *user;
-} renderlist_t;
-
-typedef void renderitemcallback_t(
-  renderlist_t *list, renderpass_t *pass, engine_t *engine, int32_t i
-);
-
-typedef struct {
-  renderitemcallback_t *onRender;
-} renderitem_t;
\ No newline at end of file
diff --git a/include/dawn/display/scene.h b/include/dawn/display/scene.h
deleted file mode 100644
index e75d98e0..00000000
--- a/include/dawn/display/scene.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../engine/engine.h"
-
-/** Maximum number of items a scene can support */
-#define SCENE_ITEMS_MAX 32
-
-
-typedef struct _scene_t scene_t;
-typedef struct _sceneitem_t sceneitem_t;
-
-/**
- * Callback for when scene events occur.
- * 
- * @param scene The scene that is being evented.
- * @param i The index of the current scene item.
- * @param engine The game's engine.
- */
-typedef void sceneitemcallback_t(
-  scene_t *scene, int32_t i, engine_t *engine
-);
-
-typedef struct _sceneitem_t {
-  sceneitemcallback_t *onUpdate;
-  sceneitemcallback_t *onRender;
-  sceneitemcallback_t *onDispose;
-} sceneitem_t;
-
-typedef struct _scene_t {
-  /** Camera that is used to render the scene */
-  camera_t camera;
-
-  /** Any custom user data pointer */
-  void *user;
-
-  /** Items within the scene */
-  sceneitem_t items[SCENE_ITEMS_MAX];
-  int32_t itemCount;
-} scene_t;
\ No newline at end of file
diff --git a/include/dawn/display/shader.h b/include/dawn/display/shader.h
deleted file mode 100644
index 53249141..00000000
--- a/include/dawn/display/shader.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Msters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-#define SHADER_UNI_VIEW "u_View"
-#define SHADER_UNI_PROJ "u_Proj"
-#define SHADER_UNI_TEXT "u_Text"
-#define SHADER_UNI_MODL "u_Modl"
-#define SHADER_UNI_COLR "u_Colr"
-
-/** Representation of a shader uniform */
-typedef GLuint shaderuniform_t;
-
-/**
- * Structure containing information about an OpenGL Shader. For simplicity sake
- * we demand certain uninforms to be present on the shader target.
- */
-typedef struct {
-  /** Pointer to an uploaded vertex shader program */
-  shaderuniform_t shaderVertex;
-
-  /** Pointer to an uploaded fragment shader program */
-  shaderuniform_t shaderFrag;
-
-  /** Pointer to an uploaded shader program linked */
-  shaderuniform_t shaderProgram;
-
-  /** Matrix for the view matrix */
-  shaderuniform_t uniView;
-
-  /** Matrix for the projection matrix */
-  shaderuniform_t uniProj;
-
-  /** Uniform for the current texture */
-  shaderuniform_t uniText;
-
-  /** Uniform for the current model world position */
-  shaderuniform_t uniModl;
-
-  /** Uniform for the color multiplier */
-  shaderuniform_t uniColr;
-} shader_t;
\ No newline at end of file
diff --git a/include/dawn/display/spritebatch.h b/include/dawn/display/spritebatch.h
deleted file mode 100644
index eafa55cd..00000000
--- a/include/dawn/display/spritebatch.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-/** Definition of a Sprite Batch. */
-typedef struct {
-  /** Maximum sprites the batch can hold. */
-  int32_t maxSprites;
-
-  /** The current/next sprite index. */
-  int32_t currentSprite;
-
-  /** Internal primitive */
-  primitive_t primitive;
-} spritebatch_t;
\ No newline at end of file
diff --git a/include/dawn/display/texture.h b/include/dawn/display/texture.h
deleted file mode 100644
index 25acf444..00000000
--- a/include/dawn/display/texture.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-
-/**
- * Structure detailing information about a texture.
- * Because we plan to upload the pixels of a texture into the GPU, we don't
- * store the pixels in memory because we don't need to!
- */
-typedef struct {
-  /** Width (in pixels) of the texture */
-  int32_t width;
-  /** Height (in pixels) of the texture */
-  int32_t height;
-  /** Texture ID on the GPU */
-  GLuint id;
-} texture_t;
-
-/** Information about a single pixel. */
-typedef struct {
-  /** RGBA Color values */
-  uint8_t r, g, b, a;
-} pixel_t;
-
-#define PIXEL_COLOR_WHITE ((pixel_t){ .r = 255, .g = 255, .b = 255, .a = 255 })
-#define PIXEL_COLOR_RED ((pixel_t){ .r = 255, .g = 0, .b = 0, .a = 255 })
-#define PIXEL_COLOR_GREEN ((pixel_t){ .r = 0, .g = 255, .b = 0, .a = 255 })
-#define PIXEL_COLOR_BLUE ((pixel_t){ .r = 0, .g = 0, .b = 255, .a = 255 })
-#define PIXEL_COLOR_BLACK ((pixel_t){ .r = 0, .g = 0, .b = 0, .a = 255 })
-#define PIXEL_COLOR_TRANSPARENT ((pixel_t){ .r = 0, .g = 0, .b = 0, .a = 0 })
\ No newline at end of file
diff --git a/include/dawn/display/tileset.h b/include/dawn/display/tileset.h
deleted file mode 100644
index 9cf131cc..00000000
--- a/include/dawn/display/tileset.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-
-/** Division of a texture */
-typedef struct {
-  float x0, y0, x1, y1;
-} tilesetdiv_t;
-
-/** Definition of a Tileset */
-typedef struct {
-  /** Count of X/Y divisions */
-  int32_t columns, rows;
-
-  /** Size of each divison (in pixels) */
-  float divX, divY;
-
-  /** Count of divisions (unused) */
-  int32_t count;
-
-  /** Division information */
-  tilesetdiv_t *divisions;
-} tileset_t;
\ No newline at end of file
diff --git a/include/dawn/engine/engine.h b/include/dawn/engine/engine.h
deleted file mode 100644
index 3689c1c5..00000000
--- a/include/dawn/engine/engine.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../display/render.h"
-#include "../input/input.h"
-#include "../epoch/epoch.h"
-
-typedef struct {
-  /** Time Manager for the game */
-  epoch_t time;
-
-  /** Render Manager for the game */
-  render_t render;
-
-  /** Input Manager for the game */
-  input_t input;
-} engine_t;
\ No newline at end of file
diff --git a/include/dawn/epoch/epoch.h b/include/dawn/epoch/epoch.h
deleted file mode 100644
index 9867d01b..00000000
--- a/include/dawn/epoch/epoch.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-
-#define EPOCH_FIXED_STEP 0.016f
-#define EPOCH_SMALLEST_STEP 0.001f
-
-typedef struct {
-  /**
-   * Current time (as a float of seconds since game start).
-   * 
-   * When time is initialized this will start at a fixed value of 2/60ths of a 
-   * second, regardless of what engine the game is running.
-   * 
-   * This is to avoid any divide by zero errors.
-   */
-  float current;
-
-  /**
-   * Last Time (as a float of seconds since the game start).
-   * 
-   * This value will start at 1/60th of a second regardless of engine the game
-   * is running on to avoid divide by zero errors.
-   */
-  float last;
-
-  /**
-   * Varying timestep that occured since the last frame. 
-   */
-  float delta;
-
-  /**
-   * Fixed timestep that is not affected by framerate but remains consistent.
-   */
-  float fixedDelta;
-} epoch_t;
\ No newline at end of file
diff --git a/include/dawn/file/asset.h b/include/dawn/file/asset.h
deleted file mode 100644
index 5ada4d5b..00000000
--- a/include/dawn/file/asset.h
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-
-/** Definition of an asset ready to be buffered */
-typedef FILE assetbuffer_t;
\ No newline at end of file
diff --git a/include/dawn/file/csv.h b/include/dawn/file/csv.h
deleted file mode 100644
index 2912b67c..00000000
--- a/include/dawn/file/csv.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "asset.h"
-
-/** Maximum characters that a cell can support */
-#define CSV_BUFFER_SIZE 32
-
-/** Maximum characters in any given cell */
-#define CSV_CELL_SIZE_MAX 1024
-
-/** Maximum number of columns/cells in a given row */
-#define CSV_ROW_COLUMNS_MAX 16
-
-/** Count of characters maximum that a row can support */
-#define CSV_ROW_CHARACTERS_MAX CSV_CELL_SIZE_MAX * CSV_ROW_COLUMNS_MAX
-
-/** Result of a CSV buffer operation. */
-typedef struct {
-  /** How many rows within the CSV */
-  int32_t rowCount;
-  /** Count of columns in the CSV, this is the longest row in the CSV.  */
-  int32_t columnCount;
-  /** How many cells within the CSV */
-  int32_t cellCount;
-} csvbufferresult_t;
-
-/** Callback to receive data for each cell in a CSV being buffered */
-typedef bool csvbuffercallback_t(
-  assetbuffer_t *asset, void *user, int32_t row, int32_t column, char *data
-);
-
-/** Representation of a CSV Row's complete data. */
-typedef struct {
-  /** Characters within the row */
-  char data[CSV_ROW_CHARACTERS_MAX];
-  /** Pointer to the start of each string within the row */
-  char *columns[CSV_ROW_COLUMNS_MAX];
-  /** How many columns within the row */
-  int32_t columnCount;
-} csvrow_t;
-
-/** Callback to receive buffer data for a CSV row */
-typedef bool csvbufferrowcallback_t(
-  assetbuffer_t *asset, void *user, int32_t row, csvrow_t *csv
-);
-
-/** Callback to receive buffer data for a CSV row, but includes CSV headers. */
-typedef bool csvbufferrowwitheaderscallback_t(
-  assetbuffer_t *asset, void *user, int32_t row,
-  csvrow_t *header, csvrow_t *current
-);
-
-/** Data used by the cell callback for when the row buffering is progressing */
-typedef struct {
-  /** Which row the current buffer is on */
-  int32_t row;
-  /** Information about the current row being parsed */
-  csvrow_t rowCurrent;
-  /** Pointer to custom user data */
-  void *user;
-  /** Pointer to custom user callback */
-  csvbufferrowcallback_t *callback;
-} csvbufferrowdata_t;
-
-/** Data used by the row callback for when the header row is parsed */
-typedef struct {
-  /** Information about the header row */
-  csvrow_t headerRow;
-  /** Pointer to custom user data */
-  void *user;
-  /** Pointer to custom user callback */
-  csvbufferrowwitheaderscallback_t *callback;
-} csvbufferrowwithheadersdata_t;
-
-/** Data used while searching a CSV */
-typedef struct {
-  /** Row to store the data in */
-  csvrow_t *row;
-  /** Row's index */
-  int32_t rowIndex;
-  /** Column to check */
-  int32_t column;
-  /** Value to check row */
-  char *value;
-} csvsearchdata_t;
\ No newline at end of file
diff --git a/include/dawn/file/xml.h b/include/dawn/file/xml.h
deleted file mode 100644
index 8153fe87..00000000
--- a/include/dawn/file/xml.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-
-#define XML_DOING_NOTHING 0x00
-#define XML_PARSING_TAG_NAME 0x01
-#define XML_LOOKING_FOR_ATTRIBUTE 0x02
-#define XML_PARSING_ATTRIBUTE_NAME 0x03
-#define XML_LOOKING_FOR_ATTRIBUTE_VALUE 0x04
-#define XML_PARSING_ATTRIBUTE_VALUE 0x05
-#define XML_PARSING_VALUE 0x06
-#define XML_PARSING_CHILD 0x07
-#define XML_PARSING_CLOSE 0x08
-
-#define XML_TEXT_BUFFER_MAX 256
-#define XML_CHILD_COUNT_MAX 16
-#define XML_ATTRIBUTE_MAX 16
-
-typedef struct _xml_t xml_t;
-
-typedef struct _xml_t {
-  char *node;
-  char *value;
-
-  char *attributeNames[XML_ATTRIBUTE_MAX];
-  char *attributeDatas[XML_ATTRIBUTE_MAX];
-  uint8_t attributeCount;
-
-  xml_t *children;
-  uint8_t childrenCount;
-} xml_t;
diff --git a/include/dawn/game/dawn/dawngame.h b/include/dawn/game/dawn/dawngame.h
deleted file mode 100644
index 7318cbd3..00000000
--- a/include/dawn/game/dawn/dawngame.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../../libs.h"
-
-typedef struct {
-  int32_t INeedSomePropertyToStopCompilerComplaining;
-} dawngame_t;
\ No newline at end of file
diff --git a/include/dawn/game/game.h b/include/dawn/game/game.h
deleted file mode 100644
index d2c6e8ca..00000000
--- a/include/dawn/game/game.h
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-#include "../engine/engine.h"
-
-#if SETTING_GAME == SETTING_GAME_POKER
-  #include "poker/pokergame.h"
-#elif SETTING_GAME == SETTING_GAME_DAWN
-  #include "dawn/dawngame.h"
-#elif SETTING_GAME == SETTING_GAME_SANDBOX
-  #include "sandbox/sandboxscene.h"
-#endif
-
-/** Describes the current game */
-typedef struct {
-  /** Engine for the game */
-  engine_t engine;
-
-  #if SETTING_GAME == SETTING_GAME_POKER
-    pokergame_t pokerGame;
-  #elif SETTING_GAME == SETTING_GAME_DAWN
-    dawngame_t dawnGame;
-  #elif SETTING_GAME == SETTING_GAME_SANDBOX
-    sandboxscene_t sandboxScene;
-  #endif
-} game_t;
\ No newline at end of file
diff --git a/include/dawn/game/poker/pokergame.h b/include/dawn/game/poker/pokergame.h
deleted file mode 100644
index 4ff8abcd..00000000
--- a/include/dawn/game/poker/pokergame.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../../libs.h"
-#include "../../display/animation/queue.h"
-#include "pokergameassets.h"
-#include "pokerworld.h"
-#include "pokergameaction.h"
-#include "ui/pokerui.h"
-#include "../../engine/engine.h"
-#include "../../poker/poker.h"
-#include "../../poker/player.h"
-#include "../../poker/dealer.h"
-#include "../../vn/vnconversation.h"
-#include "../../vn/vnscene.h"
-
-#define POKER_GAME_SEAT_COUNT 8
-#define POKER_GAME_SEAT_FOR_PLAYER(p) (p - (POKER_PLAYER_COUNT/2))
-#define POKER_GAME_SEAT_DEALER POKER_GAME_SEAT_FOR_PLAYER(POKER_DEALER_INDEX)
-
-/**
- * Return the seat for a given player index, also works for the dealer index.
- * @param i The players index.
- * @return The players seat number.
- */
-#define pokerGameSeatFromIndex(i) (\
-  i == POKER_DEALER_INDEX ? \
-  POKER_GAME_SEAT_DEALER : \
-  POKER_GAME_SEAT_FOR_PLAYER(i) \
-)
-
-#define POKER_GAME_PENNY_BASE_WIDTH 1000
-#define POKER_GAME_PENNY_BASE_HEIGHT 1920
-#define POKER_GAME_PENNY_FACE_X 367
-#define POKER_GAME_PENNY_FACE_Y 256
-#define POKER_GAME_PENNY_FACE_WIDTH 280
-#define POKER_GAME_PENNY_FACE_HEIGHT 280
-
-typedef struct {
-  /** Poker Game State */
-  poker_t poker;
-
-  /** Visual Novel Engine */
-  vnscene_t scene;
-
-  /** Assets (Files) for the game. */
-  pokergameassets_t assets;
-
-  /** Poker Game World. */
-  pokerworld_t world;
-
-  /** UI For the Game */
-  pokerui_t ui;
-
-  /** Data for the actions */
-  pokergameactiondata_t actionData[ANIMATION_QUEUE_ITEM_MAX];
-
-  /** Pointer back to the game engine */
-  engine_t *engine;
-} pokergame_t;
\ No newline at end of file
diff --git a/include/dawn/game/poker/pokergameassets.h b/include/dawn/game/poker/pokergameassets.h
deleted file mode 100644
index cc263aea..00000000
--- a/include/dawn/game/poker/pokergameassets.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../../display/font.h"
-#include "../../display/shader.h"
-#include "../../locale/language.h"
-
-typedef struct {
-  font_t font;
-  shader_t shader;
-  language_t language;
-
-  texture_t testTexture;
-  texture_t roomTexture;
-  texture_t cardTexture;
-
-  texture_t pennyTexture;
-} pokergameassets_t;
\ No newline at end of file
diff --git a/include/dawn/game/poker/pokerworld.h b/include/dawn/game/poker/pokerworld.h
deleted file mode 100644
index d671bef8..00000000
--- a/include/dawn/game/poker/pokerworld.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../../libs.h"
-#include "../../util/math.h"
-#include "../../display/primitive.h"
-
-#define POKER_WORLD_SEAT_DISTANCE -1
-#define POKER_WORLD_SEAT_ROTATION(n) (n * mathDeg2Rad(45.0f))
-
-#define POKER_WORLD_SEAT_POSITION_X(n) ( \
-  POKER_WORLD_SEAT_DISTANCE * (float)sin(POKER_WORLD_SEAT_ROTATION(n)) \
-)
-#define POKER_WORLD_SEAT_POSITION_Y -0.2f
-#define POKER_WORLD_SEAT_POSITION_Z(n) ( \
-  POKER_WORLD_SEAT_DISTANCE * (float)cos(POKER_WORLD_SEAT_ROTATION(n)) \
-)
-
-typedef struct {
-  primitive_t skywall;
-} pokerworld_t;
\ No newline at end of file
diff --git a/include/dawn/game/poker/ui/pokerplayerui.h b/include/dawn/game/poker/ui/pokerplayerui.h
deleted file mode 100644
index a6611bed..00000000
--- a/include/dawn/game/poker/ui/pokerplayerui.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../../../libs.h"
-#include "../../../ui/label.h"
-#include "../../../ui/image.h"
-#include "../../../display/framebuffer.h"
-#include "../../../display/camera.h"
-
-
-#include "../../../ui/grid.h"
-#include "../../../ui/align.h"
-
-#define POKER_PLAYER_UI_IMAGE_SIZE 64
-#define POKER_PLAYER_UI_WIDTH 300
-#define POKER_PLAYER_UI_HEIGHT POKER_PLAYER_UI_IMAGE_SIZE
-
-#define POKER_PLAYER_UI_IMAGE_RESOLUTION POKER_PLAYER_UI_IMAGE_SIZE * 2
-#define POKER_PLAYER_UI_IMAGE_DIST 0.8f
-#define POKER_PLAYER_UI_IMAGE_Y 0.1f
-#define POKER_PLAYER_UI_PADDING 8
-#define POKER_PLAYER_UI_CHIPS_ANIMATION_SPEED 0.5f
-
-typedef struct {
-  framebuffer_t frame;
-  primitive_t quad;
-  label_t label;
-
-  grid_t grid;
-} pokerplayerui_t;
\ No newline at end of file
diff --git a/include/dawn/game/poker/ui/pokerui.h b/include/dawn/game/poker/ui/pokerui.h
deleted file mode 100644
index 827b4aab..00000000
--- a/include/dawn/game/poker/ui/pokerui.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../../../libs.h"
-#include "../../../poker/player.h"
-#include "pokerplayerui.h"
-#include "../../../ui/image.h"
-
-typedef struct {
-  pokerplayerui_t player[POKER_PLAYER_COUNT];
-  image_t card;
-} pokerui_t;
\ No newline at end of file
diff --git a/include/dawn/game/sandbox/sandboxscene.h b/include/dawn/game/sandbox/sandboxscene.h
deleted file mode 100644
index d6f447aa..00000000
--- a/include/dawn/game/sandbox/sandboxscene.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */ 
-
-#pragma once
-#include "../../libs.h"
-#include "../../display/camera.h"
-#include "../../display/shader.h"
-#include "../../display/font.h"
-#include "../../display/primitive.h"
-#include "../../display/renderlist.h"
-#include "../../display/texture.h"
-
-typedef struct {
-  camera_t camera;
-
-  primitive_t primitive;
-  texture_t texture;
-  shader_t shader;
-  font_t font;
-} sandboxscene_t;
\ No newline at end of file
diff --git a/include/dawn/input/input.h b/include/dawn/input/input.h
deleted file mode 100644
index 677c5193..00000000
--- a/include/dawn/input/input.h
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-#include "../util/list.h"
-
-/** Debug Inputs */
-#define INPUT_NULL        (inputbind_t)0x00
-
-/** Real Inputs (Starts at 32/0x20) */
-#define INPUT_UP          (inputbind_t)0x20
-#define INPUT_DOWN        (inputbind_t)0x21
-#define INPUT_LEFT        (inputbind_t)0x22
-#define INPUT_RIGHT       (inputbind_t)0x23
-#define INPUT_ACCEPT      (inputbind_t)0x24
-
-/** Additional sources */
-#define INPUT_MOUSE_X     (inputsource_t)0x10
-#define INPUT_MOUSE_Y     (inputsource_t)0x11
-
-#define INPUT_BIND_COUNT 0x40
-#define INPUT_SOURCE_COUNT 0xFF
-
-/**
- * Input Bind, a specific action bind reference for the game engine to use.
- * e.g. "Jump" or "Walk Forward".
- */
-typedef uint8_t inputbind_t;
-
-/**
- * Input source identifier. It's up to the platform itself to decide what the
- * hell this number refers to. For most platforms it will be an input, such as a
- * keyboard scancode or a (pad number * button count) + button.
- */
-typedef uint8_t inputsource_t;
-
-/**
- * Value that represents the state of an input. Defined as 0-1 where 0 is set
- * to be completely off / netural state, and 1 is completely on / full state.
- */
-typedef float inputval_t;
-
-/**
- * Structure for the entire input mapping.
- */
-typedef struct {
-  /** Float of the input between 0 and 1. */
-  inputval_t inputsA[INPUT_BIND_COUNT];
-  /** Float of the input between 0 and 1. */
-  inputval_t inputsB[INPUT_BIND_COUNT];
-
-  /** Flippable state */
-  inputval_t *current, *previous;
-
-  /**
-   * Binding Map, Array of lists where index = binding and entry is a list of
-   * input sources.
-   */
-  list_t *bindMap[INPUT_BIND_COUNT];
-
-  /**
-   * Input buffer array. Keeps track of raw values from the inputs.
-   * The engine will read from the buffer when necessary.
-   */
-  inputval_t buffer[INPUT_SOURCE_COUNT];
-
-  /** Float of the GameTime that the input was actuated last. */
-  float times[INPUT_BIND_COUNT];
-} input_t;
\ No newline at end of file
diff --git a/include/dawn/locale/language.h b/include/dawn/locale/language.h
deleted file mode 100644
index e5b5e38e..00000000
--- a/include/dawn/locale/language.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../file/asset.h"
-#include "../file/csv.h"
-
-/** Column name for the KEY within the CSV */
-#define LANGUAGE_HEADER_KEY "Key"
-/** Column name for the VALUE within the CSV */
-#define LANGUAGE_HEADER_VALUE "Value"
-
-/** Definition for a Language */
-typedef struct {
-  /** The buffer to read the asset from. */
-  assetbuffer_t *asset;
-  /** CSV Row for the header */
-  csvrow_t header;
-  /** The index in the header row that the key column is in. */
-  int32_t headerIndexKey;
-  /** The index in the header row that the value column is in. */
-  int32_t headerIndexValue;
-} language_t;
-
-typedef struct {
-  language_t *language;
-  csvrow_t *row;
-  char *key;
-} languagecsvget_t;
\ No newline at end of file
diff --git a/include/dawn/physics/aabb.h b/include/dawn/physics/aabb.h
deleted file mode 100644
index a02beecf..00000000
--- a/include/dawn/physics/aabb.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-
-typedef struct {
-  float hitX;
-  float hitY;
-
-  float normalX;
-  float normalY;
-} aabbpointhit2d_t;
-
-typedef struct {
-  float time;
-  
-  float normalX;
-  float normalY;
-
-  float hitX;
-  float hitY;
-} aabbvectorhit2d_t;
\ No newline at end of file
diff --git a/include/dawn/poker/bet.h b/include/dawn/poker/bet.h
deleted file mode 100644
index 12d13738..00000000
--- a/include/dawn/poker/bet.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "player.h"
-
-/** How many chips each player has by defautl */
-#define POKER_BET_PLAYER_CHIPS_DEFAULT 10000
-
-/** The default blind cost for the big blind. */
-#define POKER_BET_BLIND_BIG_DEFAULT 600
-
-/** The default blind cost for the small blind. (Defaults half big blind) */
-#define POKER_BET_BLIND_SMALL_DEFAULT (POKER_BET_BLIND_BIG_DEFAULT/2)
-
-/**
- * The default betting player for the round.
- * 
- * @param poker Pointer to the poker instance.
- * @return The Poker round default betting player.
- */
-#define POKER_BET_ROUND_PLAYER_DEFAULT(poker) ( \
-  ((poker)->roundSmallBlind + 1) % POKER_PLAYER_COUNT \
-)
-
-typedef struct {
-  /** Blinds */
-  int32_t blindSmall, blindBig;
-
-  /** How big the current bet is for the round. */
-  int32_t currentBet;
-  
-  /** For Betting round, which player is currently betting */
-  uint8_t better;
-
-  /** Current pot of chips */
-  int32_t pot;
-} pokerbet_t;
\ No newline at end of file
diff --git a/include/dawn/poker/card.h b/include/dawn/poker/card.h
deleted file mode 100644
index c619d2d8..00000000
--- a/include/dawn/poker/card.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-
-////////////////////////////////////////////////////////////////////////////////
-// Cards
-////////////////////////////////////////////////////////////////////////////////
-
-// Aces
-#define CARD_CLUBS_TWO 0x00
-#define CARD_CLUBS_THREE 0x01
-#define CARD_CLUBS_FOUR 0x02
-#define CARD_CLUBS_FIVE 0x03
-#define CARD_CLUBS_SIX 0x04
-#define CARD_CLUBS_SEVEN 0x05
-#define CARD_CLUBS_EIGHT 0x06
-#define CARD_CLUBS_NINE 0x07
-#define CARD_CLUBS_TEN 0x08
-#define CARD_CLUBS_JACK 0x09
-#define CARD_CLUBS_QUEEN 0x0A
-#define CARD_CLUBS_KING 0x0B
-#define CARD_CLUBS_ACE 0x0C
-
-// Diamonds
-#define CARD_DIAMONDS_TWO 0x0D
-#define CARD_DIAMONDS_THREE 0x0E
-#define CARD_DIAMONDS_FOUR 0x0F
-#define CARD_DIAMONDS_FIVE 0x10
-#define CARD_DIAMONDS_SIX 0x11
-#define CARD_DIAMONDS_SEVEN 0x12
-#define CARD_DIAMONDS_EIGHT 0x13
-#define CARD_DIAMONDS_NINE 0x14
-#define CARD_DIAMONDS_TEN 0x15
-#define CARD_DIAMONDS_JACK 0x16
-#define CARD_DIAMONDS_QUEEN 0x17
-#define CARD_DIAMONDS_KING 0x18
-#define CARD_DIAMONDS_ACE 0x19
-
-// Hearts
-#define CARD_HEARTS_TWO 0x1A
-#define CARD_HEARTS_THREE 0x1B
-#define CARD_HEARTS_FOUR 0x1C
-#define CARD_HEARTS_FIVE 0x1D
-#define CARD_HEARTS_SIX 0x1E
-#define CARD_HEARTS_SEVEN 0x1F
-#define CARD_HEARTS_EIGHT 0x20
-#define CARD_HEARTS_NINE 0x21
-#define CARD_HEARTS_TEN 0x22
-#define CARD_HEARTS_JACK 0x23
-#define CARD_HEARTS_QUEEN 0x24
-#define CARD_HEARTS_KING 0x25
-#define CARD_HEARTS_ACE 0x26
-
-// Spades
-#define CARD_SPADES_TWO 0x27
-#define CARD_SPADES_THREE 0x28
-#define CARD_SPADES_FOUR 0x29
-#define CARD_SPADES_FIVE 0x2A
-#define CARD_SPADES_SIX 0x2B
-#define CARD_SPADES_SEVEN 0x2C
-#define CARD_SPADES_EIGHT 0x2D
-#define CARD_SPADES_NINE 0x2E
-#define CARD_SPADES_TEN 0x2F
-#define CARD_SPADES_JACK 0x30
-#define CARD_SPADES_QUEEN 0x31
-#define CARD_SPADES_KING 0x32
-#define CARD_SPADES_ACE 0x33
-
-////////////////////////////////////////////////////////////////////////////////
-// Suits
-////////////////////////////////////////////////////////////////////////////////
-#define CARD_SUIT_CLUBS 0x00
-#define CARD_SUIT_DIAMONDS 0x01
-#define CARD_SUIT_HEARTS 0x02
-#define CARD_SUIT_SPADES 0x03
-
-////////////////////////////////////////////////////////////////////////////////
-// Card numbers
-////////////////////////////////////////////////////////////////////////////////
-#define CARD_TWO 0x00
-#define CARD_THREE 0x01
-#define CARD_FOUR 0x02
-#define CARD_FIVE 0x03
-#define CARD_SIX 0x04
-#define CARD_SEVEN 0x05
-#define CARD_EIGHT 0x06
-#define CARD_NINE 0x07
-#define CARD_TEN 0x08
-#define CARD_JACK 0x09
-#define CARD_QUEEN 0x0A
-#define CARD_KING 0x0B
-#define CARD_ACE 0x0C
-
-/** Count of cards in each suit */
-#define CARD_COUNT_PER_SUIT 13
-
-/** Count of suits */
-#define CARD_SUIT_COUNT 4
-
-/** Standard Card Deck Size */
-#define CARD_DECK_SIZE 52
-
-/** Type Representing a card's id */
-typedef uint8_t card_t;
\ No newline at end of file
diff --git a/include/dawn/poker/dealer.h b/include/dawn/poker/dealer.h
deleted file mode 100644
index 56061e32..00000000
--- a/include/dawn/poker/dealer.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "card.h"
-
-/** How many cards the dealer can hold in their hand */
-#define POKER_DEALER_HAND_SIZE 5
-
-/** How many cards the grave can hold */
-#define POKER_DEALER_GRAVE_SIZE CARD_DECK_SIZE
-
-/** Which VN Character index is the dealer */
-#define POKER_DEALER_INDEX POKER_PLAYER_HUMAN_INDEX
-
-/** Representation of the dealer state */
-typedef struct {
-  /** Current Card Deck */
-  card_t deck[CARD_DECK_SIZE];
-  uint8_t deckSize;
-
-  /** Dealer Hand */
-  card_t cards[POKER_DEALER_HAND_SIZE];
-  uint8_t cardsFacing;
-
-  /** Card grave (where spent cards go when burned */
-  card_t grave[POKER_DEALER_GRAVE_SIZE];
-  uint8_t graveSize;
-} pokerdealer_t;
\ No newline at end of file
diff --git a/include/dawn/poker/player.h b/include/dawn/poker/player.h
deleted file mode 100644
index da400121..00000000
--- a/include/dawn/poker/player.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../util/flags.h"
-#include "bet.h"
-#include "card.h"
-
-/** How many cards a player can hold in their hand */
-#define POKER_PLAYER_HAND 2
-
-/** How many players in a poker game (excludes dealer) */
-#define POKER_PLAYER_COUNT 5
-
-
-////////////////////////////////////////////////////////////////////////////////
-// Player States
-////////////////////////////////////////////////////////////////////////////////
-/** State for whether or not a player has folded */
-#define POKER_PLAYER_STATE_FOLDED flagDefine(0)
-
-/** State for whether or not a player is showing their hand */
-#define POKER_PLAYER_STATE_SHOWING flagDefine(1)
-
-/** State for whether or not the player is out */
-#define POKER_PLAYER_STATE_OUT flagDefine(2)
-
-/** Flag that is reset at the start of each round, and set when move occurs. */
-#define POKER_PLAYER_STATE_ROUND_MOVE flagDefine(3)
-
-/** The index that the player who is the human... is */
-#define POKER_PLAYER_HUMAN_INDEX 0x02
-
-////////////////////////////////////////////////////////////////////////////////
-// Player Definition
-////////////////////////////////////////////////////////////////////////////////
-
-/** Poker Player State */
-typedef struct {
-  /** Cards in the players' hand */
-  card_t cards[POKER_PLAYER_HAND];
-  uint8_t cardCount;
-
-  /** Current State of player */
-  uint8_t state;
-  
-  /** Chips in players' posession */
-  int32_t chips;
-  
-  /** Current bet in current round player has placed */
-  int32_t currentBet;
-} pokerplayer_t;
\ No newline at end of file
diff --git a/include/dawn/poker/poker.h b/include/dawn/poker/poker.h
deleted file mode 100644
index a0b75960..00000000
--- a/include/dawn/poker/poker.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "bet.h"
-#include "dealer.h"
-#include "player.h"
-#include "card.h"
-#include "winner.h"
-
-/** How many cards to deal each player during the deal round */
-#define POKER_DEAL_CARD_EACH 2
-
-/** How many cards are dealt for the flop, turn and river */
-#define POKER_FLOP_CARD_COUNT 3
-#define POKER_TURN_CARD_COUNT 1
-#define POKER_RIVER_CARD_COUNT 1
-
-
-#define POKER_STATE_NULL 0x00
-#define POKER_STATE_STARTING_MATCH 0x01
-#define POKER_STATE_STARTING_ROUND 0x02
-#define POKER_STATE_TAKING_BLINDS 0x03
-#define POKER_STATE_DEALING 0x04
-#define POKER_STATE_CARDS_FLOPPING 0x05
-#define POKER_STATE_BETTING 0x06
-#define POKER_STATE_DECIDING_WINNER 0x07
-
-typedef struct {
-  /** Poker betting state */
-  pokerbet_t bet;
-  
-  /** Player States */
-  pokerdealer_t dealer;
-  pokerplayer_t players[POKER_PLAYER_COUNT];
-
-  /** Winning player states */
-  pokerwinner_t winner;
-
-  /** The current player that is the dealer */
-  uint8_t roundDealer;
-
-  /** Which player is the small blind for this round */
-  uint8_t roundSmallBlind;
-
-  /** Which player is the big blind for this round */
-  uint8_t roundBigBlind;
-
-  uint8_t state;
-} poker_t;
\ No newline at end of file
diff --git a/include/dawn/poker/turn.h b/include/dawn/poker/turn.h
deleted file mode 100644
index 53fc1cd5..00000000
--- a/include/dawn/poker/turn.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-#define POKER_TURN_TYPE_OUT 0x00
-#define POKER_TURN_TYPE_FOLD 0x01
-#define POKER_TURN_TYPE_BET 0x02
-#define POKER_TURN_TYPE_CALL 0x03
-#define POKER_TURN_TYPE_ALL_IN 0x04
-#define POKER_TURN_TYPE_CHECK 0x05
-
-/** The turn that a player/the AI decided to do for its turn */
-typedef struct {
-  /** What type of action the turn is */
-  uint8_t type;
-  /** How many chips they did in their turn (if applicable) */
-  int32_t chips;
-  /** How confident the AI is about their turn. */
-  float confidence;
-} pokerturn_t;
\ No newline at end of file
diff --git a/include/dawn/poker/winner.h b/include/dawn/poker/winner.h
deleted file mode 100644
index dfb5cf99..00000000
--- a/include/dawn/poker/winner.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "player.h"
-#include "dealer.h"
-
-/** Size of the FULL hand used to calculate a winning. */
-#define POKER_WINNING_FULL_SIZE POKER_PLAYER_HAND+POKER_DEALER_HAND_SIZE
-
-/** How many cards make a winning set */
-#define POKER_WINNING_SET_SIZE 5
-
-/** Winning Types */
-#define POKER_WINNING_TYPE_NULL 0x00
-#define POKER_WINNING_TYPE_ROYAL_FLUSH 0x01
-#define POKER_WINNING_TYPE_STRAIGHT_FLUSH 0x02
-#define POKER_WINNING_TYPE_FOUR_OF_A_KIND 0x03
-#define POKER_WINNING_TYPE_FULL_HOUSE 0x04
-#define POKER_WINNING_TYPE_FLUSH 0x05
-#define POKER_WINNING_TYPE_STRAIGHT 0x06
-#define POKER_WINNING_TYPE_THREE_OF_A_KIND 0x07
-#define POKER_WINNING_TYPE_TWO_PAIR 0x08
-#define POKER_WINNING_TYPE_PAIR 0x09
-#define POKER_WINNNIG_TYPE_HIGH_CARD 0x0A
-
-/** Holds information about a player's winning state */
-typedef struct {
-  /** The full set of both the dealer and player's hand */
-  card_t full[POKER_WINNING_FULL_SIZE];
-  uint8_t fullSize;
-  
-  /** Holds the winning set */
-  card_t set[POKER_WINNING_SET_SIZE];
-  uint8_t setSize;
-
-  /** Winning Type */
-  uint8_t type;
-
-  /** If there was a kicker card it will be here, otherwise -1 for no kicker */
-  card_t kicker;
-} pokerplayerwinning_t;
-
-typedef struct {
-  /** Winning States */
-  pokerplayerwinning_t winnings[POKER_PLAYER_COUNT];
-  uint8_t winners[POKER_PLAYER_COUNT];
-  uint8_t winnerCount;
-} pokerwinner_t;
\ No newline at end of file
diff --git a/include/dawn/script/scripter.h b/include/dawn/script/scripter.h
deleted file mode 100644
index 336639c2..00000000
--- a/include/dawn/script/scripter.h
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#include "../libs.h"
-
-/** Implies that the arguments the function will take is variable */
-#define SCRIPTER_VARIABLE_ARGUMENT_COUNT DUK_VARARGS
-
-/** Global context defintion of the pointer referring back to the scripter */
-#define SCRIPTER_SELF_NAME "__scripter"
-
-/** Type forwarders */
-typedef duk_context scriptercontext_t;
-typedef duk_ret_t scripterreturn_t;
-
-typedef struct {
-  duk_context *context;
-  engine_t *engine;
-  void *user;
-} scripter_t;
-
-typedef scripterreturn_t scriptermethod_t(scriptercontext_t *context);
\ No newline at end of file
diff --git a/include/dawn/ui/align.h b/include/dawn/ui/align.h
deleted file mode 100644
index d82b17be..00000000
--- a/include/dawn/ui/align.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-
-#define ALIGN_POS_CENTER flagDefine(0)
-#define ALIGN_POS_START flagDefine(1)
-#define ALIGN_POS_END flagDefine(2)
-
-#define ALIGN_SIZE_FILL flagDefine(3)
-#define ALIGN_SIZE_ORIGINAL flagDefine(4)
-#define ALIGN_SIZE_RATIO flagDefine(5)
-
-typedef struct {
-  float x, y;
-  float width, height;
-} align_t;
\ No newline at end of file
diff --git a/include/dawn/ui/breakpoint.h b/include/dawn/ui/breakpoint.h
deleted file mode 100644
index 3bf7d6d0..00000000
--- a/include/dawn/ui/breakpoint.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-/** Maximum breakpoints that the list can support. */
-#define BREAKPOINT_COUNT_MAX 0x04
-
-/** Callback for when a new breakpint is reached. */
-typedef void breakpointcallback_t(void *user, uint8_t i, float breakpoint);
-
-typedef struct {
-  /** List of breakpoints */
-  float breakpoints[BREAKPOINT_COUNT_MAX];
-  uint8_t breakpointCount;
-
-  /** Which breakpoint is current */
-  uint8_t breakpointCurrent;
-
-  /** Pointer to any custom user data. */
-  void *user;
-
-  /** Callback for when a breakpoint is reached */
-  breakpointcallback_t *onBreakpoint;
-} breakpointlist_t;
\ No newline at end of file
diff --git a/include/dawn/ui/frame.h b/include/dawn/ui/frame.h
deleted file mode 100644
index 6d5be46b..00000000
--- a/include/dawn/ui/frame.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../display/primitive.h"
-#include "../display/font.h"
-
-/** Size of the border (in pixels) on each edge */
-#define FRAME_BORDER_SIZE 16
-/** Total border size for a given frame on each axis */
-#define FRAME_BORDER_SIZE_FULL FRAME_BORDER_SIZE * 2
-/** How many quads are within the frame */
-#define FRAME_PRIMITIVE_COUNT 9
-
-typedef struct {
-  texture_t *texture;
-  primitive_t primitive;
-} frame_t;
\ No newline at end of file
diff --git a/include/dawn/ui/framedtextmenu.h b/include/dawn/ui/framedtextmenu.h
deleted file mode 100644
index 0fc579be..00000000
--- a/include/dawn/ui/framedtextmenu.h
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-#include "frame.h"
-#include "textmenu.h"
-
-/** The default gutter for the grid of a framed text menu */
-#define FRAMED_TEXT_MENU_GUTTER_DEFAULT 8.0f
-
-typedef struct {
-  frame_t frame;
-  textmenu_t menu;
-} framedtextmenu_t;
\ No newline at end of file
diff --git a/include/dawn/ui/grid.h b/include/dawn/ui/grid.h
deleted file mode 100644
index c2b5526d..00000000
--- a/include/dawn/ui/grid.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-/** Maximum number of columns a grid can have */
-#define GRID_COLUMN_COUNT_MAX 16
-/** Maximum number of rows a grid can have */
-#define GRID_ROW_COUNT_MAX GRID_COLUMN_COUNT_MAX
-
-/** Cell size for "auto", basically to fill the remaining space evenly */
-#define GRID_CEL_SIZE_AUTO -1
-
-/** Definitio of a grid */
-typedef struct {
-  /** Count of columns/rows in the grid */
-  uint8_t columns, rows;
-
-  /** Cell Definitions, used to control how the cells will size themselves */
-  float columnDefinitions[GRID_COLUMN_COUNT_MAX];
-  float rowDefinitions[GRID_COLUMN_COUNT_MAX];
-  
-  /** Settings to control gutters (space between cells) and border (of grid) */
-  float gutterX, gutterY;
-  float borderX, borderY;
-
-  /** Calculated sizes and positions for each cell */
-  float columnSizes[GRID_COLUMN_COUNT_MAX];
-  float columnPositions[GRID_COLUMN_COUNT_MAX];
-  float rowSizes[GRID_ROW_COUNT_MAX];
-  float rowPositions[GRID_COLUMN_COUNT_MAX];
-
-  /** Cached size of the grid */
-  float width, height;
-} grid_t;
\ No newline at end of file
diff --git a/include/dawn/ui/image.h b/include/dawn/ui/image.h
deleted file mode 100644
index a5218746..00000000
--- a/include/dawn/ui/image.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../display/primitive.h"
-
-typedef struct {
-  texture_t *texture;
-  primitive_t quad;
-  float width, height;
-} image_t;
\ No newline at end of file
diff --git a/include/dawn/ui/label.h b/include/dawn/ui/label.h
deleted file mode 100644
index 887458d1..00000000
--- a/include/dawn/ui/label.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../display/primitive.h"
-#include "../display/font.h"
-
-/** Representation of a Label UI Element */
-typedef struct {
-  font_t *font;
-  float fontSize;
-  float maxWidth;
-  fonttextinfo_t info;
-  primitive_t primitive;
-} label_t;
\ No newline at end of file
diff --git a/include/dawn/ui/menu.h b/include/dawn/ui/menu.h
deleted file mode 100644
index 27f4b548..00000000
--- a/include/dawn/ui/menu.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-/** The maximum number of items a menu can hold */
-#define MENU_ITEMS_MAX 32
-
-/** Callback for when menu events are fired. */
-typedef void menucallback_t(void *user, uint8_t i);
-
-typedef struct {
-  uint8_t x;
-  uint8_t y;
-  uint8_t width;
-  uint8_t height;
-} menuitem_t;
-
-typedef struct {
-  menuitem_t items[MENU_ITEMS_MAX];
-  uint8_t itemCount;
-  uint8_t selected;
-  uint8_t cursorX;
-  uint8_t cursorY;
-
-  void *user;
-  menucallback_t *onSelect;
-} menu_t;
\ No newline at end of file
diff --git a/include/dawn/ui/rectangle.h b/include/dawn/ui/rectangle.h
deleted file mode 100644
index 9d39a75f..00000000
--- a/include/dawn/ui/rectangle.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../display/primitive.h"
-
-typedef struct {
-  float width, height;
-  texture_t texture;
-  primitive_t quad;
-} rectangle_t;
\ No newline at end of file
diff --git a/include/dawn/ui/textmenu.h b/include/dawn/ui/textmenu.h
deleted file mode 100644
index 011ba33f..00000000
--- a/include/dawn/ui/textmenu.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-#include "../display/font.h"
-#include "menu.h"
-#include "grid.h"
-#include "label.h"
-#include "rectangle.h"
-
-/** Colour of the selection box for the text menu */
-#define TEXTMENU_SELECTION_COLOR ((pixel_t){.r=0xFF,.g=0xFF,.b=0xFF,.a=0x64})
-
-/** Callback type for when an item is selected */
-typedef void textmenucallback_t(void *user, uint8_t i, char *text);
-
-typedef struct {
-  menu_t menu;
-  grid_t grid;
-  font_t *font;
-  rectangle_t rectangle;
-
-  char *texts[MENU_ITEMS_MAX];
-  label_t labels[MENU_ITEMS_MAX];
-
-  textmenucallback_t *onSelect;
-  void *user;
-} textmenu_t;
\ No newline at end of file
diff --git a/include/dawn/util/array.h b/include/dawn/util/array.h
deleted file mode 100644
index 6cd3d744..00000000
--- a/include/dawn/util/array.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-/**
- * Definition of a callback that is used to sort an array.
- * 
- * @param left The left element in the array.
- * @param right The right element in the array.
- * @return -1 for Left priority, 1 for Right and 0 for Equal.
- */
-typedef int32_t arraysort_t(const void*, const void*);
\ No newline at end of file
diff --git a/include/dawn/util/dynarray.h b/include/dawn/util/dynarray.h
deleted file mode 100644
index a2085fa6..00000000
--- a/include/dawn/util/dynarray.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-/** Custom Array Definition */
-typedef struct {
-  /** The data storage */
-  void *data;
-
-  /** Size of each element within the array */
-  size_t size;
-  
-  /** The count of elements currently in the array */
-  int32_t length;
-
-  /** Total count of elements the array can hold */
-  int32_t total;
-} dynarray_t;
\ No newline at end of file
diff --git a/include/dawn/util/list.h b/include/dawn/util/list.h
deleted file mode 100644
index fd308bed..00000000
--- a/include/dawn/util/list.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2021 Dominic Masters
-// 
-// This software is released under the MIT License.
-// https://opensource.org/licenses/MIT
-
-#pragma once
-#include "../libs.h"
-
-/**
- * Entry within a given linked list.
- * @param data* The pointer to the data that is within the entry.
- * @param prev* Pointer to the previous entry in the list.
- * @param next* Pointer to the next entry in the list.
- */
-typedef struct listentry_t {
-  void *data;
-  struct listentry_t *prev;
-  struct listentry_t *next;
-} listentry_t;
-
-/**
- * Linked List of elements, Doubly Linked.
- * @param size The count of elements currently within the list
- * @param start* First element within the list.
- * @param end* Last element within the list.
- */
-typedef struct {
-  uint32_t size;
-  listentry_t *start;
-  listentry_t *end;
-} list_t;
\ No newline at end of file
diff --git a/include/dawn/util/string.h b/include/dawn/util/string.h
deleted file mode 100644
index bc3d9fec..00000000
--- a/include/dawn/util/string.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-
-#define STRING_HANDLEBAR_KEY_MAXLENGTH 32
-
-#define STRING_STACK_STRING_SIZE 256
-#define STRING_STACK_STRING_COUNT 128
-#define STRING_STACK_BUFFER STRING_STACK_STRING_SIZE * STRING_STACK_STRING_COUNT
-
-/** Representation of a String Handlebar Variable */
-typedef struct {
-  /** The key to use to replace in the source */
-  char *key;
-  /** The value to replace it with */
-  char *value;
-} stringhandlebarvariable_t;
-
-/** Definition of a string stack to push and pop strings from. */
-typedef struct {
-  /** Raw char buffer, for holding strings */
-  char buffer[STRING_STACK_BUFFER];
-  /** Strings themselves */
-  char *strings[STRING_STACK_STRING_COUNT];
-  /** How many strings are on the stack */
-  int32_t size;
-} stringstack_t;
\ No newline at end of file
diff --git a/include/dawn/vn/vncharacter.h b/include/dawn/vn/vncharacter.h
deleted file mode 100644
index bc59fe57..00000000
--- a/include/dawn/vn/vncharacter.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../display/texture.h"
-#include "../display/primitive.h"
-#include "../display/tileset.h"
-
-#define VN_CHARACTER_BLINK_TIME_RANGE_MAX 6
-#define VN_CHARACTER_SIZE 0.5
-
-/** How many quads the VN Character has. Base, Eyes, Mouth and Eyebrows */
-#define VN_CHARACTER_QUAD_COUNT 4
-
-/** The Quads */
-#define VN_CHARACTER_QUAD_BASE 0
-#define VN_CHARACTER_QUAD_EYEBROWS 1
-#define VN_CHARACTER_QUAD_EYES 2
-#define VN_CHARACTER_QUAD_MOUTH 3
-
-/** How many frames does each mouth set have */
-#define VN_CHARACTER_TALKING_FRAME_COUNT 3
-
-#define VN_CHARACTER_EMOTION_BORED 0x00
-#define VN_CHARACTER_EMOTION_BORED_SMILING 0x01
-#define VN_CHARACTER_EMOTION_BORED_DISAGREE 0x02
-#define VN_CHARACTER_EMOTION_BORED_AGREE 0x03
-#define VN_CHARACTER_EMOTION_SHORT 0x04
-#define VN_CHARACTER_EMOTION_SMUG_SLIGHT 0x05
-#define VN_CHARACTER_EMOTION_BORED_ANNOYED 0x06
-#define VN_CHARACTER_EMOTION_BORED_PROUD 0x07
-#define VN_CHARACTER_EMOTION_BORED_THINKING 0x08
-#define VN_CHARACTER_EMOTION_HAPPY_THINKING 0x09
-#define VN_CHARACTER_EMOTION_SERIOUS_THINKING 0x0A
-#define VN_CHARACTER_EMOTION_SMUG_THINKING_SLIGHT 0x0B
-#define VN_CHARACTER_EMOTION_XXXX_THINKING 0x0C// "concerned thinking"
-#define VN_CHARACTER_EMOTION_HAPPY_FAKE_THINKING 0x0D
-#define VN_CHARACTER_EMOTION_XXXX_THINKING2 0x0E// "serious concerned thinking"
-#define VN_CHARACTER_EMOTION_XXXX_THINKING3 0x0F // "Happy pleased thinking"
-#define VN_CHARACTER_EMOTION_BORED_LISTENING 0x10
-#define VN_CHARACTER_EMOTION_HUMBLED 0x11
-#define VN_CHARACTER_EMOTION_CONCERNED_1 0x12
-#define VN_CHARACTER_EMOTION_PROUD 0x13
-#define VN_CHARACTER_EMOTION_DEADPAN 0x14
-#define VN_CHARACTER_EMOTION_SMIRK 0x15
-#define VN_CHARACTER_EMOTION_CONCERNED_2 0x16
-#define VN_CHARACTER_EMOTION_TEASING 0x17
-#define VN_CHARACTER_EMOTION_XXXX_THINKING4 0x18// "concerned thinking lightly"
-#define VN_CHARACTER_EMOTION_XXXX_THINKING5 0x19// "daydreaming"
-#define VN_CHARACTER_EMOTION_XXXX_THINKING6 0x1A// "concerned thinking heavy"
-#define VN_CHARACTER_EMOTION_XXXX_THINKING7 0x1B// "pleasant daydreaming"
-#define VN_CHARACTER_EMOTION_XXXX_THINKING8 0x1C// not really sure
-#define VN_CHARACTER_EMOTION_ANIME_MOM 0x1D
-#define VN_CHARACTER_EMOTION_XXXX_THINKING9 0x1E// not really sure
-#define VN_CHARACTER_EMOTION_ANIME_MOM_SMUG 0x1F
-#define VN_CHARACTER_EMOTION_CURIOUS 0x20
-#define VN_CHARACTER_EMOTION_HAPPY 0x21
-#define VN_CHARACTER_EMOTION_CONCERNED_WORRIED 0x22
-#define VN_CHARACTER_EMOTION_HAPPY_PROUD_SLIGHT 0x23
-#define VN_CHARACTER_EMOTION_NOT_BELIEVING 0x24//"Mhm, suuure"
-#define VN_CHARACTER_EMOTION_HAPPY_TIRED 0x25
-#define VN_CHARACTER_EMOTION_CONCERNED_SLIGHT 0x26
-#define VN_CHARACTER_EMOTION_HAPPY_PROUD 0x27
-#define VN_CHARACTER_EMOTION_XXXX_THINKING10 0x28// sort of tsundere
-#define VN_CHARACTER_EMOTION_XXXX_THINKING11 0x29// "thinking of something nice"
-#define VN_CHARACTER_EMOTION_XXXX_THINKING12 0x2A// big sister vibes
-#define VN_CHARACTER_EMOTION_XXXX_THINKING13 0x2B// "vibin"
-#define VN_CHARACTER_EMOTION_XXXX_THINKING14 0x2C// not really sure
-#define VN_CHARACTER_EMOTION_XXXX_THINKING15 0x2D// not really sure
-#define VN_CHARACTER_EMOTION_XXXX_THINKING16 0x2E// not really sure
-#define VN_CHARACTER_EMOTION_XXXX_THINKING17 0x2F// not really sure
-#define VN_CHARACTER_EMOTION_CONCERNED 0x30
-#define VN_CHARACTER_EMOTION_RELIEVED 0x31
-#define VN_CHARACTER_EMOTION_CONCERNED_VERY 0x32
-#define VN_CHARACTER_EMOTION_RELIEVED_SMUG 0x33//"slightly smug"
-#define VN_CHARACTER_EMOTION_CONCERNED_3 0x34// "slightly worried"
-#define VN_CHARACTER_EMOTION_CONCERNED_4 0x35// "slightly smug"
-#define VN_CHARACTER_DISAPPOINTED 0x36// "slightly worried"
-#define VN_CHARACTER_EMOTION_CONCERNED_5 0x37// "slightly smugger"
-#define VN_CHARACTER_EMOTION_CONCERNED_THINKING 0x38
-#define VN_CHARACTER_EMOTION_SMUG_1 0x39
-#define VN_CHARACTER_EMOTION_CONCERNED_THINKING_DEEP 0x3A
-#define VN_CHARACTER_EMOTION_SMUG_2 0x3B
-#define VN_CHARACTER_EMOTION_XXXX_THINKING18 0x3C// not really sure
-#define VN_CHARACTER_EMOTION_XXXX_THINKING19 0x3D// not really sure
-#define VN_CHARACTER_EMOTION_XXXX_THINKING20 0x3E// not really sure
-#define VN_CHARACTER_EMOTION_XXXX_THINKING21 0x3F// not really sure
-#define VN_CHARACTER_EMOTION_SERIOUS 0x40
-#define VN_CHARACTER_EMOTION_READY 0x41
-#define VN_CHARACTER_EMOTION_SERIOUS_ANGRY 0x42
-#define VN_CHARACTER_EMOTION_SMUG 0x43
-#define VN_CHARACTER_EMOTION_ANGRY 0x44
-#define VN_CHARACTER_EMOTION_ANGRY_PROUD 0x45
-#define VN_CHARACTER_EMOTION_ANGRY_VERY 0x46
-#define VN_CHARACTER_EMOTION_SMUG_VERY 0x47
-#define VN_CHARACTER_EMOTION_SERIOUS_THINKING_VERY 0x48
-#define VN_CHARACTER_EMOTION_SMUG_THINKING 0x49
-#define VN_CHARACTER_EMOTION_ANGRY_THINKING 0x4A
-#define VN_CHARACTER_EMOTION_SMUG_THINKING_VERY 0x4B
-#define VN_CHARACTER_EMOTION_XXXX_THINKING22 0x4C// not really sure
-#define VN_CHARACTER_EMOTION_HAPPY_FAKE_THINKING_ANGRY 0x4D
-#define VN_CHARACTER_EMOTION_XXXX_THINKING23 0x4E// not really sure
-#define VN_CHARACTER_EMOTION_BOASTFUL 0x4F
-
-
-typedef struct {
-  float x, y, z;
-  float yaw, pitch, roll;
-  float scaleX, scaleY;
-
-  bool talking;
-  float blinkStart;
-
-  uint8_t emotion;
-
-  primitive_t primitive;
-  texture_t *texture;
-
-  int32_t baseWidth, baseHeight;
-  int32_t faceX, faceY;
-  int32_t faceWidth, faceHeight;
-} vncharacter_t; 
\ No newline at end of file
diff --git a/include/dawn/vn/vnconversation.h b/include/dawn/vn/vnconversation.h
deleted file mode 100644
index d80ecb4b..00000000
--- a/include/dawn/vn/vnconversation.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../display/animation/queue.h"
-#include "vncharacter.h"
-#include "vntextbox.h"
-
-typedef struct _vnconversation_t vnconversation_t;
-
-typedef struct {
-  /** Pointer to the original conversation */
-  vnconversation_t *conversation;
-
-  /** Storage for pointer to text for text conversation elements */
-  char *text;
-
-  /** Character this conversation piece belongs to */
-  vncharacter_t *character;
-
-  /** Character's emotion */
-  uint8_t emotion;
-} vnconversationitemdata_t;
-
-/** Representation of a conversation, laid out similarly to a timeline. */
-typedef struct _vnconversation_t {
-  /** Internal Textbox for text elements */
-  vntextbox_t textbox;
-
-  /** Data Storage for items' data */
-  vnconversationitemdata_t itemData[ANIMATION_QUEUE_ITEM_MAX];
-
-  /** Internal Queue for queueing the conversation */
-  queue_t actionQueue;
-} vnconversation_t;
\ No newline at end of file
diff --git a/include/dawn/vn/vnscene.h b/include/dawn/vn/vnscene.h
deleted file mode 100644
index a7cf0e1e..00000000
--- a/include/dawn/vn/vnscene.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "vncharacter.h"
-#include "vnconversation.h"
-#include "vntextbox.h"
-
-/** Maximum number of Visual Novel Characters the scene can support */
-#define VN_SCENE_CHARACTERS_MAX 6
-
-typedef struct {
-  float cameraX;
-  float cameraY;
-  float cameraZ;
-  float cameraLookX;
-  float cameraLookY;
-  float cameraLookZ;
-
-  /** Camera used for rendering, updated frequently */
-  camera_t camera;
-
-  /** Internal conversation element */
-  vnconversation_t conversation;
-
-  /** Character array */
-  vncharacter_t characters[VN_SCENE_CHARACTERS_MAX];
-  uint8_t characterCount;
-} vnscene_t;
\ No newline at end of file
diff --git a/include/dawn/vn/vntextbox.h b/include/dawn/vn/vntextbox.h
deleted file mode 100644
index 051540e5..00000000
--- a/include/dawn/vn/vntextbox.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include "../libs.h"
-#include "../display/animation/timeline.h"
-#include "../display/font.h"
-#include "../ui/frame.h"
-#include "../util/flags.h"
-
-/** Amount of characters scrolled, per second */
-#define VN_TEXTBOX_SCROLL_SPEED 60
-
-#define VN_TEXTBOX_FONT_SIZE FONT_SIZE_DEFAULT
-
-#define VN_TEXTBOX_STATE_CLOSED flagDefine(0)
-
-typedef struct {
-  /** Stores the maximum width that this textbox can take up */
-  float widthMax;
-
-  /** Font that the text box uses */
-  font_t *font;
-
-  /** Box State Flags */
-  uint8_t state;
-
-  /** How many rows of text at most can be displayed in a single text box */
-  int32_t linesMax;
-  int32_t lineCurrent;
-
-  /** Readonly values for the dimensions of the textbox */
-  float width, height;
-
-  /** Animation of the textbox */
-  float textScroll;
-
-  /** Information about the current rendered text */
-  fonttextinfo_t textInfo;
-
-  /** Primitive to hold talking text */
-  primitive_t primitive;
-
-  /** The frame for the textbox */
-  frame_t frame;
-
-  /** Current spoken text, tracked in-case of re-render */
-  char *text;
-} vntextbox_t;
\ No newline at end of file
diff --git a/platform/glfw/glwfwplatform.h b/platform/glfw/glwfwplatform.h
index ca5b2dac..14353489 100644
--- a/platform/glfw/glwfwplatform.h
+++ b/platform/glfw/glwfwplatform.h
@@ -4,8 +4,7 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-
-#include <dawn/dawn.h>
+#include "../../src/libs.h"
 #include "../../src/display/render.h"
 #include "../../src/game/game.h"
 #include "../../src/input/input.h"
diff --git a/src/display/animation/animation.h b/src/display/animation/animation.h
index 7ddcda4b..73950da4 100644
--- a/src/display/animation/animation.h
+++ b/src/display/animation/animation.h
@@ -5,7 +5,8 @@
  * https://opensource.org/licenses/MIT
  */
 
-#include <dawn/dawn.h>
+#pragma once
+#include "../../libs.h"
 
 /**
  * Animation tool for converting 0-1 space into a 0-0.5 back to zero space. This
diff --git a/include/dawn/display/animation/easing.h b/src/display/animation/easing.h
similarity index 100%
rename from include/dawn/display/animation/easing.h
rename to src/display/animation/easing.h
diff --git a/src/display/animation/queue.h b/src/display/animation/queue.h
index f56b7136..a24c6338 100644
--- a/src/display/animation/queue.h
+++ b/src/display/animation/queue.h
@@ -6,8 +6,58 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "../../util/array.h"
+#include "../../engine/engine.h"
+
+#define ANIMATION_QUEUE_ITEM_MAX 128
+#define ANIMATION_QUEUE_START 0xFF
+
+typedef struct _queueaction_t queueaction_t;
+typedef struct _queue_t queue_t;
+
+/**
+ * Callback for queue events.
+ * @param conversation Conversation this text is attached to.
+ * @param text Text item that is being used in the callback
+ * @param i Index of the item in the queue.
+ */
+typedef void queuecallback_t(queue_t *queue, queueaction_t *action, uint8_t i);
+
+typedef struct _queueaction_t {
+  /** Index that the action is within the queue */
+  uint8_t index;
+
+  /** Pointer to any custom user data */
+  void *data;
+
+  /** Callback to fire the moment the action is active in the queue */
+  queuecallback_t *onStart;
+
+  /** Callback to fire when this action has ended */
+  queuecallback_t *onEnd;
+
+  /** Callback to fire every update of this queue while action is active. */
+  queuecallback_t *onUpdate;
+} queueaction_t;
+
+typedef struct _queue_t {
+  /** Array of items within the queue. */
+  queueaction_t items[ANIMATION_QUEUE_ITEM_MAX];
+  uint8_t count;
+
+  /** Current index within the array of actions that is currently processing */
+  uint8_t current;
+  
+  /** Internal timeline tracking */
+  float timeline;
+
+  /** Time that the current aciton started */
+  float actionStarted;
+
+  /** Delay Queue Item Storage */
+  float delays[ANIMATION_QUEUE_ITEM_MAX];
+} queue_t;
 
 /**
  * Initialize the queue set.
diff --git a/src/display/animation/timeline.h b/src/display/animation/timeline.h
index 2a95752f..f5c09de5 100644
--- a/src/display/animation/timeline.h
+++ b/src/display/animation/timeline.h
@@ -4,7 +4,77 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
+
+/** Maximum number of actions a timeline can support, smaller than 0xFF */
+#define TIMELINE_ACTION_COUNT_MAX 128
+
+/** Type forwarders */
+typedef struct _timeline_t timeline_t;
+typedef struct _timelineaction_t timelineaction_t;
+
+/**
+ * Callback for when a timeline event occurs
+ * @param timeline The timeline that fired this callback.
+ * @param action The action that this callback is attached to.
+ * @param i The index that this action is within the timeline.
+ */
+typedef void timelinecallback_t(timeline_t *timeline, timelineaction_t *action,
+  uint8_t i
+);
+
+typedef struct _timelineaction_t {
+  /** Pointer to any custom user data the timeline action wants to use. */
+  void *data;
+
+  /**
+   * The time that this action should occur within the timeline
+   * set to 0 or less to start immediately.
+   */
+  float start;
+
+  /**
+   * The duration of the action, this will decide for how long onDuration will
+   * be called for, and when onEnd should be called.
+   * Set to a negative number to have this continue forever.
+   * Set to 0 to only fire the onStart. 
+   * onStart can fire with either onDuration and onEnd on the same frame, but
+   * onEnd and onDuration cannot fire the same frame.
+   */
+  float duration;
+
+  /**
+   * Enables animation looping. This works by forcing start to be equal to the
+   * current time at the point in time that onEnd is called. This will also stop
+   * onStart being called so ensure that your onStart and onEnd logic works.
+   */
+  bool loop;
+
+  timelinecallback_t *onStart;
+  
+  timelinecallback_t *onDuration;
+
+  timelinecallback_t *onEnd;
+} timelineaction_t;
+
+typedef struct _timeline_t {
+  /** The current time as far as the timeline is concerned */
+  float current;
+  
+  /** The time of the last "frame" as far as the timeline is concerned */
+  float previous;
+
+  /** The frame time diff, essentially current = previous + diff */
+  float diff;
+
+  /** User pointer, allows you to point to some other data */
+  void *user;
+
+  /** Actions within the timeline */
+  timelineaction_t actions[TIMELINE_ACTION_COUNT_MAX];
+  uint8_t actionCount;
+} timeline_t;
+
 
 /**
  * Initializes a timeline back to its default state.
diff --git a/src/display/bitmapfont.h b/src/display/bitmapfont.h
index 90daf304..e524a121 100644
--- a/src/display/bitmapfont.h
+++ b/src/display/bitmapfont.h
@@ -6,8 +6,26 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "spritebatch.h"
+#include "tileset.h"
+
+/** Which is the first character within the font tilemap */
+#define BITMAP_FONT_CHAR_START 33
+
+/** Center a font along the X axis */
+#define BITMAP_FONT_CENTER_X 9876543
+
+/** Center a font along the Y axis */
+#define BITMAP_FONT_CENTER_Y -BITMAP_FONT_CENTER_X
+
+/** Align right edge of font to origin */
+#define BITMAP_FONT_RIGHT_X (BITMAP_FONT_CENTER_X-1)
+
+typedef struct {
+  float width, height;
+  int32_t lines;
+} bitmapfontmeasure_t;
 
 /**
  * Get the division for a given character.
diff --git a/src/display/camera.h b/src/display/camera.h
index 8531d392..5efa59b2 100644
--- a/src/display/camera.h
+++ b/src/display/camera.h
@@ -4,9 +4,19 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+#include "../util/math.h"
 #include "matrix.h"
 
+/** The math for the camera is stored here. */
+typedef struct {
+  /** View Matrix (Where the camera looks) */
+  matrix_t view;
+
+  /** Projection Matrix (How the camera looks) */
+  matrix_t projection;
+} camera_t;
+
 /**
  * Make a camera look at a position in world space while itself being positioned
  * within world space.
diff --git a/src/display/font.h b/src/display/font.h
index caa0b728..6c0c4c88 100644
--- a/src/display/font.h
+++ b/src/display/font.h
@@ -6,13 +6,84 @@
  */
 
 #pragma once
-
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "texture.h"
 #include "primitive.h"
 #include "primitives/quad.h"
 #include "../util/mem.h"
 
+/** Which character (ASCII) to start the font from */
+#define FONT_FIRST_CHAR 32
+
+/** How many characters (after the first char) to generate */
+#define FONT_NUM_CHARS 96
+
+/** Width of the loaded font texture */
+#define FONT_TEXTURE_WIDTH 1024
+
+/** Height of the loaded font texture */
+#define FONT_TEXTURE_HEIGHT FONT_TEXTURE_WIDTH
+
+/** Refer to STBTT docs for OpenGL Fill Mode v d3d Fill Modes */
+#define FONT_FILL_MODE 1
+
+/** Passed to STBTT for scaling the font, essentially the font resolution */
+#define FONT_TEXTURE_SIZE 64.0f
+
+/** The global scale, just used to provide fine control of font sizes */
+#define FONT_GLOBAL_SCALE 0.5f;
+
+/** Default Font Size (on which all font scales are based) */
+#define FONT_SIZE_DEFAULT 16.0f
+
+// Chars
+#define FONT_NEWLINE '\n'
+#define FONT_SPACE ' '
+
+// Heights
+#define FONT_LINE_HEIGHT FONT_TEXTURE_SIZE * 0.75f
+#define FONT_INITIAL_LINE FONT_LINE_HEIGHT * 0.75f
+#define FONT_SPACE_SIZE FONT_TEXTURE_SIZE * 0.45f
+
+/** Maximum number of characters a font text info can hold. */
+#define FONT_TEXT_INFO_CHARS_MAX 1024
+
+/** Maximum number of newlines that a font text info can hold. */
+#define FONT_TEXT_INFO_LINES_MAX FONT_TEXT_INFO_CHARS_MAX/50
+
+/** Representation of a font that can be used to render text */
+typedef struct {
+  texture_t texture;
+  stbtt_bakedchar characterData[FONT_NUM_CHARS];
+} font_t;
+
+typedef struct {
+  /** What (real character) index the line starts at */
+  int32_t start;
+  /** How many (real) characters the line is in length */
+  int32_t length;
+} fonttextinfoline_t;
+
+typedef struct {
+  /** How many raw chars are in the string */
+  int32_t length;
+
+  /** How many real characters (non whitespace) are in the string */
+  int32_t realLength;
+
+  /** How many lines is the string? Trailing newlines will count */
+  int32_t lineCount;
+
+  /** The real character info for each line */
+  fonttextinfoline_t lines[FONT_TEXT_INFO_LINES_MAX];
+
+  /** Dimensions of the string */
+  float width, height;
+
+  /** Array of precalculated quads */
+  stbtt_aligned_quad quads[FONT_TEXT_INFO_CHARS_MAX];
+} fonttextinfo_t;
+
 /**
  * Initializes Font from raw TTF data.
  * @param font Font to initialize
diff --git a/src/display/framebuffer.h b/src/display/framebuffer.h
index e8bc2e71..77393192 100644
--- a/src/display/framebuffer.h
+++ b/src/display/framebuffer.h
@@ -6,8 +6,15 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "texture.h"
+#include "render.h"
+
+typedef struct {
+  GLuint fboId;
+  GLuint rboId;
+  texture_t texture;
+} framebuffer_t;
 
 /**
  * Initializes frame buffer that can be rendered to.
diff --git a/src/display/matrix.h b/src/display/matrix.h
index 8f505368..ccd92b5b 100644
--- a/src/display/matrix.h
+++ b/src/display/matrix.h
@@ -6,7 +6,16 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+/**
+ * Representation for a matrix. Used as a highlevel wrapper for the math 
+ * functions that sit underneath this API.
+ */
+typedef struct {
+  /** Internal Matrix API */
+  mat4 internalMatrix;
+} matrix_t;
 
 /**
  * Makes matrix identity.
diff --git a/src/display/primitive.h b/src/display/primitive.h
index cff1c23c..cd73c26b 100644
--- a/src/display/primitive.h
+++ b/src/display/primitive.h
@@ -6,7 +6,34 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+#define PRIMITIVE_POSITIONS_PER_VERTICE 3
+#define PRIMITIVE_COORDINATES_PER_VERTICE 2
+
+/** Structure containing information about a primitive */
+typedef struct {
+  /** How many vertices are in the primitive */
+  int32_t verticeCount;
+  /** How many indices are in the primitive */
+  int32_t indiceCount;
+
+  /** Pointer to the vertex buffer on the GPU */
+  GLuint vertexBuffer;
+  /** Pointer to the index buffer on the GPU */
+  GLuint indexBuffer;
+} primitive_t;
+
+/** Structure containing vertice position information */
+typedef struct {
+  /** Coordinates */
+  float x, y, z;
+  /** Texture UVs */
+  float u, v;
+} vertice_t;
+
+/** Indice that references a specific vertice */
+typedef unsigned int indice_t;
 
 /**
  * Creates a new primitive.
diff --git a/src/display/primitives/cube.h b/src/display/primitives/cube.h
index 8f0bc62a..2082e87f 100644
--- a/src/display/primitives/cube.h
+++ b/src/display/primitives/cube.h
@@ -4,13 +4,12 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "../primitive.h"
 
 #define CUBE_VERTICE_COUNT 8
 #define CUBE_INDICE_COUNT 36
 
-
 /**
  * Buffer the vertices and indices of a cube onto a primitive.
  * @param primitive Primitive to buffer to.
diff --git a/src/display/primitives/quad.h b/src/display/primitives/quad.h
index a42a53bc..39eb6c9a 100644
--- a/src/display/primitives/quad.h
+++ b/src/display/primitives/quad.h
@@ -4,7 +4,7 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "../primitive.h"
 
 #define QUAD_VERTICE_COUNT 4
diff --git a/src/display/primitives/skywall.h b/src/display/primitives/skywall.h
index a3fae043..16493a7c 100644
--- a/src/display/primitives/skywall.h
+++ b/src/display/primitives/skywall.h
@@ -4,7 +4,8 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
+#include "../../util/math.h"
 #include "../primitive.h"
 
 /** How many slices in each cylinder. */
diff --git a/src/display/render.h b/src/display/render.h
index 8b912df7..29731f3f 100644
--- a/src/display/render.h
+++ b/src/display/render.h
@@ -4,9 +4,18 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "framebuffer.h"
 
+/**
+ * Contains information about the current render state, can be used for querying
+ * how the renderer is currently set up.
+ */
+typedef struct {
+  /** Resolution (in pixels). Floats to allow subpixels in future. */
+  float width, height;
+} render_t;
+
 /**
  * Initialize the renderer.
  */
diff --git a/src/display/renderlist.h b/src/display/renderlist.h
index 82d6213a..0b1e4a68 100644
--- a/src/display/renderlist.h
+++ b/src/display/renderlist.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../game/game.h"
 #include "framebuffer.h"
 #include "primitive.h"
@@ -15,6 +15,27 @@
 #include "primitives/quad.h"
 #include "../util/dynarray.h"
 
+typedef struct {
+  framebuffer_t frame;
+  shader_t *shader;
+} renderpass_t;
+
+typedef struct {
+  framebuffer_t frame;
+  primitive_t quad;
+
+  dynarray_t passes;
+  void *user;
+} renderlist_t;
+
+typedef void renderitemcallback_t(
+  renderlist_t *list, renderpass_t *pass, engine_t *engine, int32_t i
+);
+
+typedef struct {
+  renderitemcallback_t *onRender;
+} renderitem_t;
+
 void renderListInit(renderlist_t *list, int32_t passes, int32_t width, int32_t height);
 renderpass_t * renderListGetPass(renderlist_t *list, int32_t pass);
 int32_t renderPassAdd(renderlist_t *list);
diff --git a/src/display/scene.h b/src/display/scene.h
index 80f97c23..fea417ec 100644
--- a/src/display/scene.h
+++ b/src/display/scene.h
@@ -6,9 +6,46 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "camera.h"
 #include "shader.h"
+#include "../engine/engine.h"
+
+/** Maximum number of items a scene can support */
+#define SCENE_ITEMS_MAX 32
+
+
+typedef struct _scene_t scene_t;
+typedef struct _sceneitem_t sceneitem_t;
+
+/**
+ * Callback for when scene events occur.
+ * 
+ * @param scene The scene that is being evented.
+ * @param i The index of the current scene item.
+ * @param engine The game's engine.
+ */
+typedef void sceneitemcallback_t(
+  scene_t *scene, int32_t i, engine_t *engine
+);
+
+typedef struct _sceneitem_t {
+  sceneitemcallback_t *onUpdate;
+  sceneitemcallback_t *onRender;
+  sceneitemcallback_t *onDispose;
+} sceneitem_t;
+
+typedef struct _scene_t {
+  /** Camera that is used to render the scene */
+  camera_t camera;
+
+  /** Any custom user data pointer */
+  void *user;
+
+  /** Items within the scene */
+  sceneitem_t items[SCENE_ITEMS_MAX];
+  int32_t itemCount;
+} scene_t;
 
 void sceneInit(scene_t *scene);
 
diff --git a/src/display/shader.h b/src/display/shader.h
index a4b08bf5..96d1ff56 100644
--- a/src/display/shader.h
+++ b/src/display/shader.h
@@ -6,8 +6,49 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "matrix.h"
+#include "camera.h"
+#include "texture.h"
+
+#define SHADER_UNI_VIEW "u_View"
+#define SHADER_UNI_PROJ "u_Proj"
+#define SHADER_UNI_TEXT "u_Text"
+#define SHADER_UNI_MODL "u_Modl"
+#define SHADER_UNI_COLR "u_Colr"
+
+/** Representation of a shader uniform */
+typedef GLuint shaderuniform_t;
+
+/**
+ * Structure containing information about an OpenGL Shader. For simplicity sake
+ * we demand certain uninforms to be present on the shader target.
+ */
+typedef struct {
+  /** Pointer to an uploaded vertex shader program */
+  shaderuniform_t shaderVertex;
+
+  /** Pointer to an uploaded fragment shader program */
+  shaderuniform_t shaderFrag;
+
+  /** Pointer to an uploaded shader program linked */
+  shaderuniform_t shaderProgram;
+
+  /** Matrix for the view matrix */
+  shaderuniform_t uniView;
+
+  /** Matrix for the projection matrix */
+  shaderuniform_t uniProj;
+
+  /** Uniform for the current texture */
+  shaderuniform_t uniText;
+
+  /** Uniform for the current model world position */
+  shaderuniform_t uniModl;
+
+  /** Uniform for the color multiplier */
+  shaderuniform_t uniColr;
+} shader_t;
 
 /**
  * Compiles a shader from vertex and fragment shader code.
diff --git a/src/display/spritebatch.h b/src/display/spritebatch.h
index 42972ebe..4b734b36 100644
--- a/src/display/spritebatch.h
+++ b/src/display/spritebatch.h
@@ -4,10 +4,22 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "primitive.h"
 #include "primitives/quad.h"
 
+/** Definition of a Sprite Batch. */
+typedef struct {
+  /** Maximum sprites the batch can hold. */
+  int32_t maxSprites;
+
+  /** The current/next sprite index. */
+  int32_t currentSprite;
+
+  /** Internal primitive */
+  primitive_t primitive;
+} spritebatch_t;
+
 /**
  * Creates a new Sprite Batch made of standard quads.
  *
diff --git a/src/display/texture.h b/src/display/texture.h
index 122bd12c..8f1745e1 100644
--- a/src/display/texture.h
+++ b/src/display/texture.h
@@ -4,7 +4,34 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+/**
+ * Structure detailing information about a texture.
+ * Because we plan to upload the pixels of a texture into the GPU, we don't
+ * store the pixels in memory because we don't need to!
+ */
+typedef struct {
+  /** Width (in pixels) of the texture */
+  int32_t width;
+  /** Height (in pixels) of the texture */
+  int32_t height;
+  /** Texture ID on the GPU */
+  GLuint id;
+} texture_t;
+
+/** Information about a single pixel. */
+typedef struct {
+  /** RGBA Color values */
+  uint8_t r, g, b, a;
+} pixel_t;
+
+#define PIXEL_COLOR_WHITE ((pixel_t){ .r = 255, .g = 255, .b = 255, .a = 255 })
+#define PIXEL_COLOR_RED ((pixel_t){ .r = 255, .g = 0, .b = 0, .a = 255 })
+#define PIXEL_COLOR_GREEN ((pixel_t){ .r = 0, .g = 255, .b = 0, .a = 255 })
+#define PIXEL_COLOR_BLUE ((pixel_t){ .r = 0, .g = 0, .b = 255, .a = 255 })
+#define PIXEL_COLOR_BLACK ((pixel_t){ .r = 0, .g = 0, .b = 0, .a = 255 })
+#define PIXEL_COLOR_TRANSPARENT ((pixel_t){ .r = 0, .g = 0, .b = 0, .a = 0 })
 
 /**
  * Initializes a texture that can be written in to.
diff --git a/src/display/tileset.h b/src/display/tileset.h
index d1e54dd0..6b3fb3ba 100644
--- a/src/display/tileset.h
+++ b/src/display/tileset.h
@@ -4,7 +4,27 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+/** Division of a texture */
+typedef struct {
+  float x0, y0, x1, y1;
+} tilesetdiv_t;
+
+/** Definition of a Tileset */
+typedef struct {
+  /** Count of X/Y divisions */
+  int32_t columns, rows;
+
+  /** Size of each divison (in pixels) */
+  float divX, divY;
+
+  /** Count of divisions (unused) */
+  int32_t count;
+
+  /** Division information */
+  tilesetdiv_t *divisions;
+} tileset_t;
 
 /**
  * Create a tileset. Tilesets will be pre-divided to save performance later.
diff --git a/src/engine/engine.h b/src/engine/engine.h
index ab42febc..03a9b054 100644
--- a/src/engine/engine.h
+++ b/src/engine/engine.h
@@ -6,11 +6,23 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+#include "../game/game.h"
 #include "../input/input.h"
 #include "../epoch/epoch.h"
 #include "../display/render.h"
 
+typedef struct {
+  /** Time Manager for the game */
+  epoch_t time;
+
+  /** Render Manager for the game */
+  render_t render;
+
+  /** Input Manager for the game */
+  input_t input;
+} engine_t;
+
 /**
  * Initializes the provided engine. This will initialize all of the various
  * managers for the game to use.
diff --git a/src/epoch/epoch.h b/src/epoch/epoch.h
index cbdddc0d..a777dc76 100644
--- a/src/epoch/epoch.h
+++ b/src/epoch/epoch.h
@@ -6,7 +6,40 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+#define EPOCH_FIXED_STEP 0.016f
+#define EPOCH_SMALLEST_STEP 0.001f
+
+typedef struct {
+  /**
+   * Current time (as a float of seconds since game start).
+   * 
+   * When time is initialized this will start at a fixed value of 2/60ths of a 
+   * second, regardless of what engine the game is running.
+   * 
+   * This is to avoid any divide by zero errors.
+   */
+  float current;
+
+  /**
+   * Last Time (as a float of seconds since the game start).
+   * 
+   * This value will start at 1/60th of a second regardless of engine the game
+   * is running on to avoid divide by zero errors.
+   */
+  float last;
+
+  /**
+   * Varying timestep that occured since the last frame. 
+   */
+  float delta;
+
+  /**
+   * Fixed timestep that is not affected by framerate but remains consistent.
+   */
+  float fixedDelta;
+} epoch_t;
 
 /**
  * Initializes the epoch time tracking.
diff --git a/src/file/asset.h b/src/file/asset.h
index fde7ddd5..0806f269 100644
--- a/src/file/asset.h
+++ b/src/file/asset.h
@@ -6,12 +6,16 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../display/shader.h"
 #include "../display/texture.h"
 #include "../display/font.h"
+#include "../script/scripter.h"
 #include "xml.h"
 
+/** Definition of an asset ready to be buffered */
+typedef FILE assetbuffer_t;
+
 /**
  * Method to load an asset into memory as a raw string.
  * @param assetName Path leading to the asset within the root asset directory.
diff --git a/src/file/csv.h b/src/file/csv.h
index b7de9993..1ba0121a 100644
--- a/src/file/csv.h
+++ b/src/file/csv.h
@@ -6,10 +6,92 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "asset.h"
 #include "../util/array.h"
 
+/** Maximum characters that a cell can support */
+#define CSV_BUFFER_SIZE 32
+
+/** Maximum characters in any given cell */
+#define CSV_CELL_SIZE_MAX 1024
+
+/** Maximum number of columns/cells in a given row */
+#define CSV_ROW_COLUMNS_MAX 16
+
+/** Count of characters maximum that a row can support */
+#define CSV_ROW_CHARACTERS_MAX CSV_CELL_SIZE_MAX * CSV_ROW_COLUMNS_MAX
+
+/** Result of a CSV buffer operation. */
+typedef struct {
+  /** How many rows within the CSV */
+  int32_t rowCount;
+  /** Count of columns in the CSV, this is the longest row in the CSV.  */
+  int32_t columnCount;
+  /** How many cells within the CSV */
+  int32_t cellCount;
+} csvbufferresult_t;
+
+/** Callback to receive data for each cell in a CSV being buffered */
+typedef bool csvbuffercallback_t(
+  assetbuffer_t *asset, void *user, int32_t row, int32_t column, char *data
+);
+
+/** Representation of a CSV Row's complete data. */
+typedef struct {
+  /** Characters within the row */
+  char data[CSV_ROW_CHARACTERS_MAX];
+  /** Pointer to the start of each string within the row */
+  char *columns[CSV_ROW_COLUMNS_MAX];
+  /** How many columns within the row */
+  int32_t columnCount;
+} csvrow_t;
+
+/** Callback to receive buffer data for a CSV row */
+typedef bool csvbufferrowcallback_t(
+  assetbuffer_t *asset, void *user, int32_t row, csvrow_t *csv
+);
+
+/** Callback to receive buffer data for a CSV row, but includes CSV headers. */
+typedef bool csvbufferrowwitheaderscallback_t(
+  assetbuffer_t *asset, void *user, int32_t row,
+  csvrow_t *header, csvrow_t *current
+);
+
+/** Data used by the cell callback for when the row buffering is progressing */
+typedef struct {
+  /** Which row the current buffer is on */
+  int32_t row;
+  /** Information about the current row being parsed */
+  csvrow_t rowCurrent;
+  /** Pointer to custom user data */
+  void *user;
+  /** Pointer to custom user callback */
+  csvbufferrowcallback_t *callback;
+} csvbufferrowdata_t;
+
+/** Data used by the row callback for when the header row is parsed */
+typedef struct {
+  /** Information about the header row */
+  csvrow_t headerRow;
+  /** Pointer to custom user data */
+  void *user;
+  /** Pointer to custom user callback */
+  csvbufferrowwitheaderscallback_t *callback;
+} csvbufferrowwithheadersdata_t;
+
+/** Data used while searching a CSV */
+typedef struct {
+  /** Row to store the data in */
+  csvrow_t *row;
+  /** Row's index */
+  int32_t rowIndex;
+  /** Column to check */
+  int32_t column;
+  /** Value to check row */
+  char *value;
+} csvsearchdata_t;
+
 /**
  * Buffer each cell within a CSV Asset Buffer with a callback.
  * 
diff --git a/src/file/xml.h b/src/file/xml.h
index 471a8c03..8a4ec919 100644
--- a/src/file/xml.h
+++ b/src/file/xml.h
@@ -6,7 +6,36 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+#define XML_DOING_NOTHING 0x00
+#define XML_PARSING_TAG_NAME 0x01
+#define XML_LOOKING_FOR_ATTRIBUTE 0x02
+#define XML_PARSING_ATTRIBUTE_NAME 0x03
+#define XML_LOOKING_FOR_ATTRIBUTE_VALUE 0x04
+#define XML_PARSING_ATTRIBUTE_VALUE 0x05
+#define XML_PARSING_VALUE 0x06
+#define XML_PARSING_CHILD 0x07
+#define XML_PARSING_CLOSE 0x08
+
+#define XML_TEXT_BUFFER_MAX 256
+#define XML_CHILD_COUNT_MAX 16
+#define XML_ATTRIBUTE_MAX 16
+
+typedef struct _xml_t xml_t;
+
+typedef struct _xml_t {
+  char *node;
+  char *value;
+
+  char *attributeNames[XML_ATTRIBUTE_MAX];
+  char *attributeDatas[XML_ATTRIBUTE_MAX];
+  uint8_t attributeCount;
+
+  xml_t *children;
+  uint8_t childrenCount;
+} xml_t;
+
 
 /**
  * Load an XML child from a string buffer.
diff --git a/src/game/dawn/dawngame.h b/src/game/dawn/dawngame.h
index 27876fd8..d63e8099 100644
--- a/src/game/dawn/dawngame.h
+++ b/src/game/dawn/dawngame.h
@@ -6,7 +6,12 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
+#include "../game.h"
+
+typedef struct {
+  int32_t INeedSomePropertyToStopCompilerComplaining;
+} dawngame_t;
 
 /**
  * Initializes the Dawn Game instance.
diff --git a/src/game/game.h b/src/game/game.h
index 0090fa1b..cdcf87ad 100644
--- a/src/game/game.h
+++ b/src/game/game.h
@@ -4,7 +4,7 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../engine/engine.h"
 #include "../locale/language.h"
 
@@ -16,6 +16,20 @@
   #include "sandbox/sandboxscene.h"
 #endif
 
+/** Describes the current game */
+typedef struct {
+  /** Engine for the game */
+  engine_t engine;
+
+  #if SETTING_GAME == SETTING_GAME_POKER
+    pokergame_t pokerGame;
+  #elif SETTING_GAME == SETTING_GAME_DAWN
+    dawngame_t dawnGame;
+  #elif SETTING_GAME == SETTING_GAME_SANDBOX
+    sandboxscene_t sandboxScene;
+  #endif
+} game_t;
+
 /**
  * Initialize the game context.
  * 
diff --git a/src/game/poker/actions/action.h b/src/game/poker/actions/action.h
index 28570fe2..ab9e44ba 100644
--- a/src/game/poker/actions/action.h
+++ b/src/game/poker/actions/action.h
@@ -6,8 +6,9 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "../../../display/animation/queue.h"
+#include "../pokergame.h"
 
 /**
  * Adds an action to the poker game scene's queue.
diff --git a/src/game/poker/actions/bet.h b/src/game/poker/actions/bet.h
index ea2b9ee2..83eb347a 100644
--- a/src/game/poker/actions/bet.h
+++ b/src/game/poker/actions/bet.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "action.h"
 #include "restack.h"
 #include "../../../poker/turn.h"
diff --git a/src/game/poker/actions/look.h b/src/game/poker/actions/look.h
index 9ec8c501..05ccb30c 100644
--- a/src/game/poker/actions/look.h
+++ b/src/game/poker/actions/look.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "action.h"
 #include "../../../display/animation/queue.h"
 #include "../pokerworld.h"
diff --git a/src/game/poker/actions/restack.h b/src/game/poker/actions/restack.h
index eda0df5a..7aed9e00 100644
--- a/src/game/poker/actions/restack.h
+++ b/src/game/poker/actions/restack.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "action.h"
 #include "../../../display/animation/queue.h"
 #include "../pokergame.h"
diff --git a/src/game/poker/actions/round.h b/src/game/poker/actions/round.h
index 21abd770..915b0fde 100644
--- a/src/game/poker/actions/round.h
+++ b/src/game/poker/actions/round.h
@@ -4,7 +4,7 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "action.h"
 #include "../../../poker/bet.h"
 #include "../../../poker/actions/round.h"
diff --git a/src/game/poker/actions/start.h b/src/game/poker/actions/start.h
index c5019ff1..cac2b80c 100644
--- a/src/game/poker/actions/start.h
+++ b/src/game/poker/actions/start.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "../../../vn/conversation/talk.h"
 #include "../../../display/animation/queue.h"
 #include "../../../poker/actions/match.h"
diff --git a/src/game/poker/discussion/pokerdiscussion.h b/src/game/poker/discussion/pokerdiscussion.h
deleted file mode 100644
index c0b301e5..00000000
--- a/src/game/poker/discussion/pokerdiscussion.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Copyright (c) 2021 Dominic Masters
- * 
- * This software is released under the MIT License.
- * https://opensource.org/licenses/MIT
- */
-
-#pragma once
-#include <dawn/dawn.h>
-#include "../../../vn/conversation/vnconversation.h"
-#include "../../../vn/conversation/talk.h"
-#include "../actions/look.h"
-
-/**
- * Retreives the discussion based on some discussion data.
- * @param disc The discussion data to buffer into.
- * @param data The discussion data.
- */
-void pokerDiscussionGet(pokerdiscussion_t *disc, pokerdiscussiondata_t *data);
-
-/**
- * Queue a discussion data result onto the conversation stack.
- * 
- * @param data The discussion data.
- */
-void pokerDiscussionQueue(pokerdiscussiondata_t *data);
\ No newline at end of file
diff --git a/src/game/poker/discussion/pokerdiscussion.c b/src/game/poker/pokerdiscussion.c
similarity index 100%
rename from src/game/poker/discussion/pokerdiscussion.c
rename to src/game/poker/pokerdiscussion.c
diff --git a/include/dawn/game/poker/pokerdiscussion.h b/src/game/poker/pokerdiscussion.h
similarity index 68%
rename from include/dawn/game/poker/pokerdiscussion.h
rename to src/game/poker/pokerdiscussion.h
index 68ff091c..c3834b6e 100644
--- a/include/dawn/game/poker/pokerdiscussion.h
+++ b/src/game/poker/pokerdiscussion.h
@@ -7,7 +7,9 @@
 
 #pragma once
 #include "../../libs.h"
-#include "pokergame.h"
+#include "../../vn/conversation/vnconversation.h"
+#include "../../vn/conversation/talk.h"
+#include "actions/look.h"
 
 /** Maximum number of messages that the discussion buffer can hold */
 #define POKER_DISCUSSION_MESSAGE_COUNT_MAX 32
@@ -36,4 +38,18 @@ typedef struct {
   uint8_t players[POKER_DISCUSSION_MESSAGE_COUNT_MAX];
   uint8_t emotions[POKER_DISCUSSION_MESSAGE_COUNT_MAX];
   uint8_t count;
-} pokerdiscussion_t;
\ No newline at end of file
+} pokerdiscussion_t;
+
+/**
+ * Retreives the discussion based on some discussion data.
+ * @param disc The discussion data to buffer into.
+ * @param data The discussion data.
+ */
+void pokerDiscussionGet(pokerdiscussion_t *disc, pokerdiscussiondata_t *data);
+
+/**
+ * Queue a discussion data result onto the conversation stack.
+ * 
+ * @param data The discussion data.
+ */
+void pokerDiscussionQueue(pokerdiscussiondata_t *data);
\ No newline at end of file
diff --git a/src/game/poker/pokergame.h b/src/game/poker/pokergame.h
index b1e2b168..65b22cc9 100644
--- a/src/game/poker/pokergame.h
+++ b/src/game/poker/pokergame.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "pokergameassets.h"
 #include "../../poker/poker.h"
 #include "../../vn/conversation/talk.h"
@@ -17,6 +17,51 @@
 #include "pokerworld.h"
 #include "actions/start.h"
 
+#define POKER_GAME_SEAT_COUNT 8
+#define POKER_GAME_SEAT_FOR_PLAYER(p) (p - (POKER_PLAYER_COUNT/2))
+#define POKER_GAME_SEAT_DEALER POKER_GAME_SEAT_FOR_PLAYER(POKER_DEALER_INDEX)
+
+/**
+ * Return the seat for a given player index, also works for the dealer index.
+ * @param i The players index.
+ * @return The players seat number.
+ */
+#define pokerGameSeatFromIndex(i) (\
+  i == POKER_DEALER_INDEX ? \
+  POKER_GAME_SEAT_DEALER : \
+  POKER_GAME_SEAT_FOR_PLAYER(i) \
+)
+
+#define POKER_GAME_PENNY_BASE_WIDTH 1000
+#define POKER_GAME_PENNY_BASE_HEIGHT 1920
+#define POKER_GAME_PENNY_FACE_X 367
+#define POKER_GAME_PENNY_FACE_Y 256
+#define POKER_GAME_PENNY_FACE_WIDTH 280
+#define POKER_GAME_PENNY_FACE_HEIGHT 280
+
+typedef struct {
+  /** Poker Game State */
+  poker_t poker;
+
+  /** Visual Novel Engine */
+  vnscene_t scene;
+
+  /** Assets (Files) for the game. */
+  pokergameassets_t assets;
+
+  /** Poker Game World. */
+  pokerworld_t world;
+
+  /** UI For the Game */
+  pokerui_t ui;
+
+  /** Data for the actions */
+  pokergameactiondata_t actionData[ANIMATION_QUEUE_ITEM_MAX];
+
+  /** Pointer back to the game engine */
+  engine_t *engine;
+} pokergame_t;
+
 /**
  * Initializes the game state for the poker game.
  * 
diff --git a/include/dawn/game/poker/pokergameaction.h b/src/game/poker/pokergameaction.h
similarity index 89%
rename from include/dawn/game/poker/pokergameaction.h
rename to src/game/poker/pokergameaction.h
index 25e3ebe9..7569d9f7 100644
--- a/include/dawn/game/poker/pokergameaction.h
+++ b/src/game/poker/pokergameaction.h
@@ -6,8 +6,7 @@
  */
 
 #pragma once
-#include "../../libs.h"
-
+#include <dawn/dawn.h>
 
 typedef struct {
   uint8_t lookAtPlayer;
diff --git a/src/game/poker/pokergameassets.h b/src/game/poker/pokergameassets.h
index a79e0c45..4cbdc613 100644
--- a/src/game/poker/pokergameassets.h
+++ b/src/game/poker/pokergameassets.h
@@ -6,11 +6,23 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "../../file/asset.h"
 #include "../../locale/language.h"
 #include "../../display/texture.h"
 
+typedef struct {
+  font_t font;
+  shader_t shader;
+  language_t language;
+
+  texture_t testTexture;
+  texture_t roomTexture;
+  texture_t cardTexture;
+
+  texture_t pennyTexture;
+} pokergameassets_t;
+
 /**
  * Load and initializes all the assets used by the poker game.
  * 
diff --git a/src/game/poker/pokerworld.h b/src/game/poker/pokerworld.h
index 2d35dbd2..7e2e74e9 100644
--- a/src/game/poker/pokerworld.h
+++ b/src/game/poker/pokerworld.h
@@ -6,13 +6,28 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "../../display/shader.h"
 #include "../../display/primitive.h"
 #include "../../display/primitives/skywall.h"
 #include "../../vn/vnscene.h"
 #include "../../vn/vncharacter.h"
 
+#define POKER_WORLD_SEAT_DISTANCE -1
+#define POKER_WORLD_SEAT_ROTATION(n) (n * mathDeg2Rad(45.0f))
+
+#define POKER_WORLD_SEAT_POSITION_X(n) ( \
+  POKER_WORLD_SEAT_DISTANCE * (float)sin(POKER_WORLD_SEAT_ROTATION(n)) \
+)
+#define POKER_WORLD_SEAT_POSITION_Y -0.2f
+#define POKER_WORLD_SEAT_POSITION_Z(n) ( \
+  POKER_WORLD_SEAT_DISTANCE * (float)cos(POKER_WORLD_SEAT_ROTATION(n)) \
+)
+
+typedef struct {
+  primitive_t skywall;
+} pokerworld_t;
+
 /**
  * Initialize the poker renderer.
  * 
diff --git a/src/game/poker/ui/pokercardui.h b/src/game/poker/ui/pokercardui.h
index 05fea690..534896bc 100644
--- a/src/game/poker/ui/pokercardui.h
+++ b/src/game/poker/ui/pokercardui.h
@@ -6,9 +6,8 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "../../../ui/image.h"
 #include "../../../poker/card.h"
 
-
 void pokerCardSetImage(image_t *image, texture_t *texture, card_t card);
\ No newline at end of file
diff --git a/src/game/poker/ui/pokerplayerui.h b/src/game/poker/ui/pokerplayerui.h
index 73ae67b2..f68bf942 100644
--- a/src/game/poker/ui/pokerplayerui.h
+++ b/src/game/poker/ui/pokerplayerui.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "../../../ui/label.h"
 #include "../../../ui/image.h"
 #include "../../../display/framebuffer.h"
@@ -15,10 +15,27 @@
 #include "../../../display/primitives/cube.h"
 #include "../../../display/camera.h"
 #include "../../../vn/vncharacter.h"
-
 #include "../../../ui/grid.h"
 #include "../../../ui/align.h"
 
+#define POKER_PLAYER_UI_IMAGE_SIZE 64
+#define POKER_PLAYER_UI_WIDTH 300
+#define POKER_PLAYER_UI_HEIGHT POKER_PLAYER_UI_IMAGE_SIZE
+
+#define POKER_PLAYER_UI_IMAGE_RESOLUTION POKER_PLAYER_UI_IMAGE_SIZE * 2
+#define POKER_PLAYER_UI_IMAGE_DIST 0.8f
+#define POKER_PLAYER_UI_IMAGE_Y 0.1f
+#define POKER_PLAYER_UI_PADDING 8
+#define POKER_PLAYER_UI_CHIPS_ANIMATION_SPEED 0.5f
+
+typedef struct {
+  framebuffer_t frame;
+  primitive_t quad;
+  label_t label;
+
+  grid_t grid;
+} pokerplayerui_t;
+
 void pokerPlayerUiInit(pokerplayerui_t *ui);
 
 void pokerPlayerUiUpdate(
diff --git a/src/game/poker/ui/pokerui.h b/src/game/poker/ui/pokerui.h
index 9d0f9c09..db21105c 100644
--- a/src/game/poker/ui/pokerui.h
+++ b/src/game/poker/ui/pokerui.h
@@ -6,11 +6,16 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../../libs.h"
 #include "../../../ui/label.h"
 #include "pokerplayerui.h"
 #include "pokercardui.h"
 
+typedef struct {
+  pokerplayerui_t player[POKER_PLAYER_COUNT];
+  image_t card;
+} pokerui_t;
+
 /**
  * Initializes the UI Module.
  * 
diff --git a/src/game/sandbox/sandboxscene.c b/src/game/sandbox/sandboxscene.c
index 4d8532b0..b289f7c1 100644
--- a/src/game/sandbox/sandboxscene.c
+++ b/src/game/sandbox/sandboxscene.c
@@ -16,10 +16,6 @@ bool sandboxSceneInit(sandboxscene_t *game, engine_t *engine) {
     "shaders/textured.vert", "shaders/textured.frag"
   );
 
-  scripterInit(&scripter, engine);
-  assetScripterAppend(&scripter, "scripts/main.js");
-  scripterInvokeMethodSimple(&scripter, "init");
-
   return true;
 }
 
@@ -48,5 +44,4 @@ void sandboxSceneUpdate(sandboxscene_t *game, engine_t *engine) {
 }
 
 void sandboxSceneDispose(sandboxscene_t *game) {
-  scripterDispose(&scripter);
 }
\ No newline at end of file
diff --git a/src/game/sandbox/sandboxscene.h b/src/game/sandbox/sandboxscene.h
index c9a0e485..8ac61539 100644
--- a/src/game/sandbox/sandboxscene.h
+++ b/src/game/sandbox/sandboxscene.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "../../display/camera.h"
 #include "../../display/shader.h"
 #include "../../display/font.h"
@@ -26,6 +26,15 @@
 #include "../../ui/image.h"
 #include "../../ui/framedtextmenu.h"
 
+typedef struct {
+  camera_t camera;
+
+  primitive_t primitive;
+  texture_t texture;
+  shader_t shader;
+  font_t font;
+} sandboxscene_t;
+
 /**
  * Initialize the sandbox scene test game.
  * 
diff --git a/src/input/input.h b/src/input/input.h
index 81d90d8a..865aa22b 100644
--- a/src/input/input.h
+++ b/src/input/input.h
@@ -4,9 +4,73 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../util/list.h"
 
+/** Debug Inputs */
+#define INPUT_NULL        (inputbind_t)0x00
+
+/** Real Inputs (Starts at 32/0x20) */
+#define INPUT_UP          (inputbind_t)0x20
+#define INPUT_DOWN        (inputbind_t)0x21
+#define INPUT_LEFT        (inputbind_t)0x22
+#define INPUT_RIGHT       (inputbind_t)0x23
+#define INPUT_ACCEPT      (inputbind_t)0x24
+
+/** Additional sources */
+#define INPUT_MOUSE_X     (inputsource_t)0x10
+#define INPUT_MOUSE_Y     (inputsource_t)0x11
+
+#define INPUT_BIND_COUNT 0x40
+#define INPUT_SOURCE_COUNT 0xFF
+
+/**
+ * Input Bind, a specific action bind reference for the game engine to use.
+ * e.g. "Jump" or "Walk Forward".
+ */
+typedef uint8_t inputbind_t;
+
+/**
+ * Input source identifier. It's up to the platform itself to decide what the
+ * hell this number refers to. For most platforms it will be an input, such as a
+ * keyboard scancode or a (pad number * button count) + button.
+ */
+typedef uint8_t inputsource_t;
+
+/**
+ * Value that represents the state of an input. Defined as 0-1 where 0 is set
+ * to be completely off / netural state, and 1 is completely on / full state.
+ */
+typedef float inputval_t;
+
+/**
+ * Structure for the entire input mapping.
+ */
+typedef struct {
+  /** Float of the input between 0 and 1. */
+  inputval_t inputsA[INPUT_BIND_COUNT];
+  /** Float of the input between 0 and 1. */
+  inputval_t inputsB[INPUT_BIND_COUNT];
+
+  /** Flippable state */
+  inputval_t *current, *previous;
+
+  /**
+   * Binding Map, Array of lists where index = binding and entry is a list of
+   * input sources.
+   */
+  list_t *bindMap[INPUT_BIND_COUNT];
+
+  /**
+   * Input buffer array. Keeps track of raw values from the inputs.
+   * The engine will read from the buffer when necessary.
+   */
+  inputval_t buffer[INPUT_SOURCE_COUNT];
+
+  /** Float of the GameTime that the input was actuated last. */
+  float times[INPUT_BIND_COUNT];
+} input_t;
+
 /**
  * Initializes the input manager.
  * 
diff --git a/include/dawn/libs.h b/src/libs.h
similarity index 100%
rename from include/dawn/libs.h
rename to src/libs.h
diff --git a/src/locale/language.h b/src/locale/language.h
index 5ef52104..a88a64d8 100644
--- a/src/locale/language.h
+++ b/src/locale/language.h
@@ -11,6 +11,29 @@
 #include "../file/asset.h"
 #include "../file/csv.h"
 
+/** Column name for the KEY within the CSV */
+#define LANGUAGE_HEADER_KEY "Key"
+/** Column name for the VALUE within the CSV */
+#define LANGUAGE_HEADER_VALUE "Value"
+
+/** Definition for a Language */
+typedef struct {
+  /** The buffer to read the asset from. */
+  assetbuffer_t *asset;
+  /** CSV Row for the header */
+  csvrow_t header;
+  /** The index in the header row that the key column is in. */
+  int32_t headerIndexKey;
+  /** The index in the header row that the value column is in. */
+  int32_t headerIndexValue;
+} language_t;
+
+typedef struct {
+  language_t *language;
+  csvrow_t *row;
+  char *key;
+} languagecsvget_t;
+
 /**
  * Initializes a language.
  * @param language Language to initialize.
diff --git a/src/physics/aabb.h b/src/physics/aabb.h
index 9e8f8202..d8232d69 100644
--- a/src/physics/aabb.h
+++ b/src/physics/aabb.h
@@ -10,6 +10,24 @@
 #include "sphere.h"
 #include "../input/input.h"
 
+typedef struct {
+  float hitX;
+  float hitY;
+
+  float normalX;
+  float normalY;
+} aabbpointhit2d_t;
+
+typedef struct {
+  float time;
+  
+  float normalX;
+  float normalY;
+
+  float hitX;
+  float hitY;
+} aabbvectorhit2d_t;
+
 /**
  * Perform a test against a point and an AABB.
  * 
diff --git a/src/poker/bet.h b/src/poker/bet.h
index d4d832cb..196b0522 100644
--- a/src/poker/bet.h
+++ b/src/poker/bet.h
@@ -6,6 +6,39 @@
 #pragma once
 #include <dawn/dawn.h>
 
+/** How many chips each player has by defautl */
+#define POKER_BET_PLAYER_CHIPS_DEFAULT 10000
+
+/** The default blind cost for the big blind. */
+#define POKER_BET_BLIND_BIG_DEFAULT 600
+
+/** The default blind cost for the small blind. (Defaults half big blind) */
+#define POKER_BET_BLIND_SMALL_DEFAULT (POKER_BET_BLIND_BIG_DEFAULT/2)
+
+/**
+ * The default betting player for the round.
+ * 
+ * @param poker Pointer to the poker instance.
+ * @return The Poker round default betting player.
+ */
+#define POKER_BET_ROUND_PLAYER_DEFAULT(poker) ( \
+  ((poker)->roundSmallBlind + 1) % POKER_PLAYER_COUNT \
+)
+
+typedef struct {
+  /** Blinds */
+  int32_t blindSmall, blindBig;
+
+  /** How big the current bet is for the round. */
+  int32_t currentBet;
+  
+  /** For Betting round, which player is currently betting */
+  uint8_t better;
+
+  /** Current pot of chips */
+  int32_t pot;
+} pokerbet_t;
+
 /**
  * Initializes/resets the poker bet context.
  * 
diff --git a/src/poker/card.h b/src/poker/card.h
index e643e4bd..1854356f 100644
--- a/src/poker/card.h
+++ b/src/poker/card.h
@@ -5,9 +5,110 @@
  * https://opensource.org/licenses/MIT
  */
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../util/array.h"
 
+////////////////////////////////////////////////////////////////////////////////
+// Cards
+////////////////////////////////////////////////////////////////////////////////
+
+// Aces
+#define CARD_CLUBS_TWO 0x00
+#define CARD_CLUBS_THREE 0x01
+#define CARD_CLUBS_FOUR 0x02
+#define CARD_CLUBS_FIVE 0x03
+#define CARD_CLUBS_SIX 0x04
+#define CARD_CLUBS_SEVEN 0x05
+#define CARD_CLUBS_EIGHT 0x06
+#define CARD_CLUBS_NINE 0x07
+#define CARD_CLUBS_TEN 0x08
+#define CARD_CLUBS_JACK 0x09
+#define CARD_CLUBS_QUEEN 0x0A
+#define CARD_CLUBS_KING 0x0B
+#define CARD_CLUBS_ACE 0x0C
+
+// Diamonds
+#define CARD_DIAMONDS_TWO 0x0D
+#define CARD_DIAMONDS_THREE 0x0E
+#define CARD_DIAMONDS_FOUR 0x0F
+#define CARD_DIAMONDS_FIVE 0x10
+#define CARD_DIAMONDS_SIX 0x11
+#define CARD_DIAMONDS_SEVEN 0x12
+#define CARD_DIAMONDS_EIGHT 0x13
+#define CARD_DIAMONDS_NINE 0x14
+#define CARD_DIAMONDS_TEN 0x15
+#define CARD_DIAMONDS_JACK 0x16
+#define CARD_DIAMONDS_QUEEN 0x17
+#define CARD_DIAMONDS_KING 0x18
+#define CARD_DIAMONDS_ACE 0x19
+
+// Hearts
+#define CARD_HEARTS_TWO 0x1A
+#define CARD_HEARTS_THREE 0x1B
+#define CARD_HEARTS_FOUR 0x1C
+#define CARD_HEARTS_FIVE 0x1D
+#define CARD_HEARTS_SIX 0x1E
+#define CARD_HEARTS_SEVEN 0x1F
+#define CARD_HEARTS_EIGHT 0x20
+#define CARD_HEARTS_NINE 0x21
+#define CARD_HEARTS_TEN 0x22
+#define CARD_HEARTS_JACK 0x23
+#define CARD_HEARTS_QUEEN 0x24
+#define CARD_HEARTS_KING 0x25
+#define CARD_HEARTS_ACE 0x26
+
+// Spades
+#define CARD_SPADES_TWO 0x27
+#define CARD_SPADES_THREE 0x28
+#define CARD_SPADES_FOUR 0x29
+#define CARD_SPADES_FIVE 0x2A
+#define CARD_SPADES_SIX 0x2B
+#define CARD_SPADES_SEVEN 0x2C
+#define CARD_SPADES_EIGHT 0x2D
+#define CARD_SPADES_NINE 0x2E
+#define CARD_SPADES_TEN 0x2F
+#define CARD_SPADES_JACK 0x30
+#define CARD_SPADES_QUEEN 0x31
+#define CARD_SPADES_KING 0x32
+#define CARD_SPADES_ACE 0x33
+
+////////////////////////////////////////////////////////////////////////////////
+// Suits
+////////////////////////////////////////////////////////////////////////////////
+#define CARD_SUIT_CLUBS 0x00
+#define CARD_SUIT_DIAMONDS 0x01
+#define CARD_SUIT_HEARTS 0x02
+#define CARD_SUIT_SPADES 0x03
+
+////////////////////////////////////////////////////////////////////////////////
+// Card numbers
+////////////////////////////////////////////////////////////////////////////////
+#define CARD_TWO 0x00
+#define CARD_THREE 0x01
+#define CARD_FOUR 0x02
+#define CARD_FIVE 0x03
+#define CARD_SIX 0x04
+#define CARD_SEVEN 0x05
+#define CARD_EIGHT 0x06
+#define CARD_NINE 0x07
+#define CARD_TEN 0x08
+#define CARD_JACK 0x09
+#define CARD_QUEEN 0x0A
+#define CARD_KING 0x0B
+#define CARD_ACE 0x0C
+
+/** Count of cards in each suit */
+#define CARD_COUNT_PER_SUIT 13
+
+/** Count of suits */
+#define CARD_SUIT_COUNT 4
+
+/** Standard Card Deck Size */
+#define CARD_DECK_SIZE 52
+
+/** Type Representing a card's id */
+typedef uint8_t card_t;
+
 /**
  * Returns the suit of a given card.
  * @param card to get the suit for.
diff --git a/src/poker/dealer.h b/src/poker/dealer.h
index 3b56d540..701beaf6 100644
--- a/src/poker/dealer.h
+++ b/src/poker/dealer.h
@@ -4,10 +4,35 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+#include "poker.h"
 #include "card.h"
 #include "player.h"
 
+/** How many cards the dealer can hold in their hand */
+#define POKER_DEALER_HAND_SIZE 5
+
+/** How many cards the grave can hold */
+#define POKER_DEALER_GRAVE_SIZE CARD_DECK_SIZE
+
+/** Which VN Character index is the dealer */
+#define POKER_DEALER_INDEX POKER_PLAYER_HUMAN_INDEX
+
+/** Representation of the dealer state */
+typedef struct {
+  /** Current Card Deck */
+  card_t deck[CARD_DECK_SIZE];
+  uint8_t deckSize;
+
+  /** Dealer Hand */
+  card_t cards[POKER_DEALER_HAND_SIZE];
+  uint8_t cardsFacing;
+
+  /** Card grave (where spent cards go when burned */
+  card_t grave[POKER_DEALER_GRAVE_SIZE];
+  uint8_t graveSize;
+} pokerdealer_t;
+
 /**
  * Initializes/Resets a dealer state.
  * 
diff --git a/src/poker/player.h b/src/poker/player.h
index f68dde2d..0efdbfb1 100644
--- a/src/poker/player.h
+++ b/src/poker/player.h
@@ -5,9 +5,55 @@
  * https://opensource.org/licenses/MIT
  */
 
-#include <dawn/dawn.h>
+#pragma once
+#include "../libs.h"
 #include "card.h"
 
+/** How many cards a player can hold in their hand */
+#define POKER_PLAYER_HAND 2
+
+/** How many players in a poker game (excludes dealer) */
+#define POKER_PLAYER_COUNT 5
+
+
+////////////////////////////////////////////////////////////////////////////////
+// Player States
+////////////////////////////////////////////////////////////////////////////////
+/** State for whether or not a player has folded */
+#define POKER_PLAYER_STATE_FOLDED flagDefine(0)
+
+/** State for whether or not a player is showing their hand */
+#define POKER_PLAYER_STATE_SHOWING flagDefine(1)
+
+/** State for whether or not the player is out */
+#define POKER_PLAYER_STATE_OUT flagDefine(2)
+
+/** Flag that is reset at the start of each round, and set when move occurs. */
+#define POKER_PLAYER_STATE_ROUND_MOVE flagDefine(3)
+
+/** The index that the player who is the human... is */
+#define POKER_PLAYER_HUMAN_INDEX 0x02
+
+////////////////////////////////////////////////////////////////////////////////
+// Player Definition
+////////////////////////////////////////////////////////////////////////////////
+
+/** Poker Player State */
+typedef struct {
+  /** Cards in the players' hand */
+  card_t cards[POKER_PLAYER_HAND];
+  uint8_t cardCount;
+
+  /** Current State of player */
+  uint8_t state;
+  
+  /** Chips in players' posession */
+  int32_t chips;
+  
+  /** Current bet in current round player has placed */
+  int32_t currentBet;
+} pokerplayer_t;
+
 /**
  * Returns true if the player is still alive and in the current game/
  * Defined as: Not out, not folded.
diff --git a/src/poker/poker.h b/src/poker/poker.h
index 97d43ce5..b00f08b4 100644
--- a/src/poker/poker.h
+++ b/src/poker/poker.h
@@ -6,4 +6,45 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
\ No newline at end of file
+#include "../libs.h"
+
+/** How many cards to deal each player during the deal round */
+#define POKER_DEAL_CARD_EACH 2
+
+/** How many cards are dealt for the flop, turn and river */
+#define POKER_FLOP_CARD_COUNT 3
+#define POKER_TURN_CARD_COUNT 1
+#define POKER_RIVER_CARD_COUNT 1
+
+
+#define POKER_STATE_NULL 0x00
+#define POKER_STATE_STARTING_MATCH 0x01
+#define POKER_STATE_STARTING_ROUND 0x02
+#define POKER_STATE_TAKING_BLINDS 0x03
+#define POKER_STATE_DEALING 0x04
+#define POKER_STATE_CARDS_FLOPPING 0x05
+#define POKER_STATE_BETTING 0x06
+#define POKER_STATE_DECIDING_WINNER 0x07
+
+typedef struct {
+  /** Poker betting state */
+  pokerbet_t bet;
+  
+  /** Player States */
+  pokerdealer_t dealer;
+  pokerplayer_t players[POKER_PLAYER_COUNT];
+
+  /** Winning player states */
+  pokerwinner_t winner;
+
+  /** The current player that is the dealer */
+  uint8_t roundDealer;
+
+  /** Which player is the small blind for this round */
+  uint8_t roundSmallBlind;
+
+  /** Which player is the big blind for this round */
+  uint8_t roundBigBlind;
+
+  uint8_t state;
+} poker_t;
\ No newline at end of file
diff --git a/src/poker/turn.h b/src/poker/turn.h
index 0f3a39e1..23402557 100644
--- a/src/poker/turn.h
+++ b/src/poker/turn.h
@@ -6,7 +6,24 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+#define POKER_TURN_TYPE_OUT 0x00
+#define POKER_TURN_TYPE_FOLD 0x01
+#define POKER_TURN_TYPE_BET 0x02
+#define POKER_TURN_TYPE_CALL 0x03
+#define POKER_TURN_TYPE_ALL_IN 0x04
+#define POKER_TURN_TYPE_CHECK 0x05
+
+/** The turn that a player/the AI decided to do for its turn */
+typedef struct {
+  /** What type of action the turn is */
+  uint8_t type;
+  /** How many chips they did in their turn (if applicable) */
+  int32_t chips;
+  /** How confident the AI is about their turn. */
+  float confidence;
+} pokerturn_t;
 
 /**
  * Returns the AI result for a turn done by a non human player.
diff --git a/src/poker/winner.h b/src/poker/winner.h
index 7a459a34..48c7959b 100644
--- a/src/poker/winner.h
+++ b/src/poker/winner.h
@@ -6,9 +6,53 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "card.h"
 #include "player.h"
+#include "winner.h"
+
+/** Size of the FULL hand used to calculate a winning. */
+#define POKER_WINNING_FULL_SIZE POKER_PLAYER_HAND+POKER_DEALER_HAND_SIZE
+
+/** How many cards make a winning set */
+#define POKER_WINNING_SET_SIZE 5
+
+/** Winning Types */
+#define POKER_WINNING_TYPE_NULL 0x00
+#define POKER_WINNING_TYPE_ROYAL_FLUSH 0x01
+#define POKER_WINNING_TYPE_STRAIGHT_FLUSH 0x02
+#define POKER_WINNING_TYPE_FOUR_OF_A_KIND 0x03
+#define POKER_WINNING_TYPE_FULL_HOUSE 0x04
+#define POKER_WINNING_TYPE_FLUSH 0x05
+#define POKER_WINNING_TYPE_STRAIGHT 0x06
+#define POKER_WINNING_TYPE_THREE_OF_A_KIND 0x07
+#define POKER_WINNING_TYPE_TWO_PAIR 0x08
+#define POKER_WINNING_TYPE_PAIR 0x09
+#define POKER_WINNNIG_TYPE_HIGH_CARD 0x0A
+
+/** Holds information about a player's winning state */
+typedef struct {
+  /** The full set of both the dealer and player's hand */
+  card_t full[POKER_WINNING_FULL_SIZE];
+  uint8_t fullSize;
+  
+  /** Holds the winning set */
+  card_t set[POKER_WINNING_SET_SIZE];
+  uint8_t setSize;
+
+  /** Winning Type */
+  uint8_t type;
+
+  /** If there was a kicker card it will be here, otherwise -1 for no kicker */
+  card_t kicker;
+} pokerplayerwinning_t;
+
+typedef struct {
+  /** Winning States */
+  pokerplayerwinning_t winnings[POKER_PLAYER_COUNT];
+  uint8_t winners[POKER_PLAYER_COUNT];
+  uint8_t winnerCount;
+} pokerwinner_t;
 
 /**
  * Returns the full hand for a given player including the best cards on the 
diff --git a/src/script/api/io.c b/src/script/api/io.c
new file mode 100644
index 00000000..b061b301
--- /dev/null
+++ b/src/script/api/io.c
@@ -0,0 +1,24 @@
+/**
+ * Copyright (c) 2021 Dominic Masters
+ * 
+ * This software is released under the MIT License.
+ * https://opensource.org/licenses/MIT
+ */
+
+#include "io.h"
+
+scripterreturn_t _scriptPrint(scriptercontext_t *ctx) {
+  duk_push_string(ctx, " ");
+  duk_insert(ctx, 0);
+  duk_join(ctx, duk_get_top(ctx) - 1);
+  printf("%s\n", duk_safe_to_string(ctx, -1));
+  return 0;
+}
+
+void scriptsApiIo(scripter_t *scripter) {
+  scripterDefineMethod(scripter,
+    SCRIPT_IO_PRINT_NAME,
+    SCRIPT_IO_PRINT_ARGS,
+    &_scriptPrint
+  );
+}
\ No newline at end of file
diff --git a/src/script/api/io.h b/src/script/api/io.h
new file mode 100644
index 00000000..d5388bf9
--- /dev/null
+++ b/src/script/api/io.h
@@ -0,0 +1,15 @@
+// Copyright (c) 2021 Dominic Masters
+// 
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include "../../libs.h"
+#include "../scripter.h"
+
+/** Print */
+#define SCRIPT_IO_PRINT_NAME "print"
+#define SCRIPT_IO_PRINT_ARGS SCRIPTER_VARIABLE_ARGUMENT_COUNT
+scripterreturn_t _scriptPrint(scriptercontext_t *ctx);
+
+void scriptsApiIo(scripter_t *scripter);
\ No newline at end of file
diff --git a/src/script/scripter.c b/src/script/scripter.c
index b39d7373..26c958b1 100644
--- a/src/script/scripter.c
+++ b/src/script/scripter.c
@@ -17,6 +17,7 @@ void scripterInit(scripter_t *scripter, engine_t *engine) {
   duk_put_global_string(scripter->context, SCRIPTER_SELF_NAME);
 
   // Inject API
+  scriptsApiIo(scripter);
 }
 
 void scripterDispose(scripter_t *scripter) {
diff --git a/src/script/scripter.h b/src/script/scripter.h
index a5e9413a..be1ee708 100644
--- a/src/script/scripter.h
+++ b/src/script/scripter.h
@@ -6,7 +6,27 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+#include "api/io.h"
+#include "../engine/engine.h"
+
+/** Implies that the arguments the function will take is variable */
+#define SCRIPTER_VARIABLE_ARGUMENT_COUNT DUK_VARARGS
+
+/** Global context defintion of the pointer referring back to the scripter */
+#define SCRIPTER_SELF_NAME "__scripter"
+
+/** Type forwarders */
+typedef duk_context scriptercontext_t;
+typedef duk_ret_t scripterreturn_t;
+
+typedef struct {
+  duk_context *context;
+  engine_t *engine;
+  void *user;
+} scripter_t;
+
+typedef scripterreturn_t scriptermethod_t(scriptercontext_t *context);
 
 /**
  * Initialize the scripter engine.
diff --git a/src/ui/align.h b/src/ui/align.h
index dbe25b1d..d89b81c6 100644
--- a/src/ui/align.h
+++ b/src/ui/align.h
@@ -6,7 +6,20 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+#define ALIGN_POS_CENTER flagDefine(0)
+#define ALIGN_POS_START flagDefine(1)
+#define ALIGN_POS_END flagDefine(2)
+
+#define ALIGN_SIZE_FILL flagDefine(3)
+#define ALIGN_SIZE_ORIGINAL flagDefine(4)
+#define ALIGN_SIZE_RATIO flagDefine(5)
+
+typedef struct {
+  float x, y;
+  float width, height;
+} align_t;
 
 /**
  * Return the alignment for a specific access, really this doesn't need to be
diff --git a/src/ui/breakpoint.h b/src/ui/breakpoint.h
index e08ffb57..b9cfd3c0 100644
--- a/src/ui/breakpoint.h
+++ b/src/ui/breakpoint.h
@@ -4,7 +4,28 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+/** Maximum breakpoints that the list can support. */
+#define BREAKPOINT_COUNT_MAX 0x04
+
+/** Callback for when a new breakpint is reached. */
+typedef void breakpointcallback_t(void *user, uint8_t i, float breakpoint);
+
+typedef struct {
+  /** List of breakpoints */
+  float breakpoints[BREAKPOINT_COUNT_MAX];
+  uint8_t breakpointCount;
+
+  /** Which breakpoint is current */
+  uint8_t breakpointCurrent;
+
+  /** Pointer to any custom user data. */
+  void *user;
+
+  /** Callback for when a breakpoint is reached */
+  breakpointcallback_t *onBreakpoint;
+} breakpointlist_t;
 
 /**
  * Initialize a breakpoint.
diff --git a/src/ui/frame.h b/src/ui/frame.h
index 9090797d..015d9066 100644
--- a/src/ui/frame.h
+++ b/src/ui/frame.h
@@ -5,12 +5,25 @@
  * https://opensource.org/licenses/MIT
  */
 
-#include <dawn/dawn.h>
+#pragma once
+#include "../libs.h"
 #include "../display/shader.h"
 #include "../display/primitive.h"
 #include "../display/primitives/quad.h"
 #include "../display/font.h"
 
+/** Size of the border (in pixels) on each edge */
+#define FRAME_BORDER_SIZE 16
+/** Total border size for a given frame on each axis */
+#define FRAME_BORDER_SIZE_FULL FRAME_BORDER_SIZE * 2
+/** How many quads are within the frame */
+#define FRAME_PRIMITIVE_COUNT 9
+
+typedef struct {
+  texture_t *texture;
+  primitive_t primitive;
+} frame_t;
+
 /**
  * Initialize a GUI Frame.
  * 
diff --git a/src/ui/framedtextmenu.h b/src/ui/framedtextmenu.h
index a11ed924..0e62b8a9 100644
--- a/src/ui/framedtextmenu.h
+++ b/src/ui/framedtextmenu.h
@@ -6,12 +6,21 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../engine/engine.h"
+#include "../libs.h"
 #include "frame.h"
 #include "textmenu.h"
 #include "grid.h"
 #include "menu.h"
 
+/** The default gutter for the grid of a framed text menu */
+#define FRAMED_TEXT_MENU_GUTTER_DEFAULT 8.0f
+
+typedef struct {
+  frame_t frame;
+  textmenu_t menu;
+} framedtextmenu_t;
+
 /**
  * Initialize a framed text ui element.
  * 
diff --git a/src/ui/grid.h b/src/ui/grid.h
index eab27fdd..1c74cff0 100644
--- a/src/ui/grid.h
+++ b/src/ui/grid.h
@@ -6,9 +6,40 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "align.h"
 
+/** Maximum number of columns a grid can have */
+#define GRID_COLUMN_COUNT_MAX 16
+/** Maximum number of rows a grid can have */
+#define GRID_ROW_COUNT_MAX GRID_COLUMN_COUNT_MAX
+
+/** Cell size for "auto", basically to fill the remaining space evenly */
+#define GRID_CEL_SIZE_AUTO -1
+
+/** Definitio of a grid */
+typedef struct {
+  /** Count of columns/rows in the grid */
+  uint8_t columns, rows;
+
+  /** Cell Definitions, used to control how the cells will size themselves */
+  float columnDefinitions[GRID_COLUMN_COUNT_MAX];
+  float rowDefinitions[GRID_COLUMN_COUNT_MAX];
+  
+  /** Settings to control gutters (space between cells) and border (of grid) */
+  float gutterX, gutterY;
+  float borderX, borderY;
+
+  /** Calculated sizes and positions for each cell */
+  float columnSizes[GRID_COLUMN_COUNT_MAX];
+  float columnPositions[GRID_COLUMN_COUNT_MAX];
+  float rowSizes[GRID_ROW_COUNT_MAX];
+  float rowPositions[GRID_COLUMN_COUNT_MAX];
+
+  /** Cached size of the grid */
+  float width, height;
+} grid_t;
+
 /**
  * Initialize a grid system.
  * 
diff --git a/src/ui/image.h b/src/ui/image.h
index 27447782..76e5cb8e 100644
--- a/src/ui/image.h
+++ b/src/ui/image.h
@@ -6,11 +6,17 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../display/primitive.h"
 #include "../display/primitives/quad.h"
 #include "../display/shader.h"
 
+typedef struct {
+  texture_t *texture;
+  primitive_t quad;
+  float width, height;
+} image_t;
+
 /**
  * Initialize an image.
  * 
diff --git a/src/ui/label.h b/src/ui/label.h
index fe405a8a..74a4536b 100644
--- a/src/ui/label.h
+++ b/src/ui/label.h
@@ -4,11 +4,20 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../display/shader.h"
 #include "../display/primitive.h"
 #include "../display/font.h"
 
+/** Representation of a Label UI Element */
+typedef struct {
+  font_t *font;
+  float fontSize;
+  float maxWidth;
+  fonttextinfo_t info;
+  primitive_t primitive;
+} label_t;
+
 /**
  * Initialize a Label UI Element.
  * @param label Label to initialize.
diff --git a/src/ui/menu.h b/src/ui/menu.h
index 498463f4..75d705bc 100644
--- a/src/ui/menu.h
+++ b/src/ui/menu.h
@@ -6,10 +6,35 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../input/input.h"
 #include "../epoch/epoch.h"
 #include "../util/array.h"
+#include "../engine/engine.h"
+
+/** The maximum number of items a menu can hold */
+#define MENU_ITEMS_MAX 32
+
+/** Callback for when menu events are fired. */
+typedef void menucallback_t(void *user, uint8_t i);
+
+typedef struct {
+  uint8_t x;
+  uint8_t y;
+  uint8_t width;
+  uint8_t height;
+} menuitem_t;
+
+typedef struct {
+  menuitem_t items[MENU_ITEMS_MAX];
+  uint8_t itemCount;
+  uint8_t selected;
+  uint8_t cursorX;
+  uint8_t cursorY;
+
+  void *user;
+  menucallback_t *onSelect;
+} menu_t;
 
 /**
  * Initialize a menu.
diff --git a/src/ui/rectangle.h b/src/ui/rectangle.h
index b53c0a1e..cb572296 100644
--- a/src/ui/rectangle.h
+++ b/src/ui/rectangle.h
@@ -6,12 +6,18 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../display/texture.h"
 #include "../display/shader.h"
 #include "../display/primitive.h"
 #include "../display/primitives/quad.h"
 
+typedef struct {
+  float width, height;
+  texture_t texture;
+  primitive_t quad;
+} rectangle_t;
+
 void rectangleInit(rectangle_t *rectangle);
 
 void rectangleSetColor(rectangle_t *rectangle, pixel_t color);
diff --git a/src/ui/textmenu.h b/src/ui/textmenu.h
index a0b55a03..b9d2208a 100644
--- a/src/ui/textmenu.h
+++ b/src/ui/textmenu.h
@@ -6,12 +6,31 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "menu.h"
 #include "grid.h"
 #include "label.h"
 #include "rectangle.h"
 
+/** Colour of the selection box for the text menu */
+#define TEXTMENU_SELECTION_COLOR ((pixel_t){.r=0xFF,.g=0xFF,.b=0xFF,.a=0x64})
+
+/** Callback type for when an item is selected */
+typedef void textmenucallback_t(void *user, uint8_t i, char *text);
+
+typedef struct {
+  menu_t menu;
+  grid_t grid;
+  font_t *font;
+  rectangle_t rectangle;
+
+  char *texts[MENU_ITEMS_MAX];
+  label_t labels[MENU_ITEMS_MAX];
+
+  textmenucallback_t *onSelect;
+  void *user;
+} textmenu_t;
+
 /** Callback to be notified from the menu when the menu items are selected. */
 void _textMenuOnSelect(void *user, uint8_t i);
 
diff --git a/src/util/array.h b/src/util/array.h
index fb240808..c3de15d2 100644
--- a/src/util/array.h
+++ b/src/util/array.h
@@ -6,7 +6,16 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+/**
+ * Definition of a callback that is used to sort an array.
+ * 
+ * @param left The left element in the array.
+ * @param right The right element in the array.
+ * @return -1 for Left priority, 1 for Right and 0 for Equal.
+ */
+typedef int32_t arraysort_t(const void*, const void*);
 
 /**
  * Retreive the pointer to an elment within the array of unknown type.
diff --git a/src/util/dynarray.h b/src/util/dynarray.h
index 755c908a..6c3e17c8 100644
--- a/src/util/dynarray.h
+++ b/src/util/dynarray.h
@@ -6,9 +6,24 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "array.h"
 
+/** Custom Array Definition */
+typedef struct {
+  /** The data storage */
+  void *data;
+
+  /** Size of each element within the array */
+  size_t size;
+  
+  /** The count of elements currently in the array */
+  int32_t length;
+
+  /** Total count of elements the array can hold */
+  int32_t total;
+} dynarray_t;
+
 /**
  * Create a dynamic array. Dynamic arrays are a more highlevel array style that
  * can offer great flexibility and ease-of-use, at the cost of memory, memory
diff --git a/include/dawn/util/flags.h b/src/util/flags.h
similarity index 100%
rename from include/dawn/util/flags.h
rename to src/util/flags.h
diff --git a/src/util/list.h b/src/util/list.h
index ced5c0e1..d5072f8f 100644
--- a/src/util/list.h
+++ b/src/util/list.h
@@ -4,7 +4,31 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
+
+/**
+ * Entry within a given linked list.
+ * @param data* The pointer to the data that is within the entry.
+ * @param prev* Pointer to the previous entry in the list.
+ * @param next* Pointer to the next entry in the list.
+ */
+typedef struct listentry_t {
+  void *data;
+  struct listentry_t *prev;
+  struct listentry_t *next;
+} listentry_t;
+
+/**
+ * Linked List of elements, Doubly Linked.
+ * @param size The count of elements currently within the list
+ * @param start* First element within the list.
+ * @param end* Last element within the list.
+ */
+typedef struct {
+  uint32_t size;
+  listentry_t *start;
+  listentry_t *end;
+} list_t;
 
 /**
  * Creates a new linked list
diff --git a/include/dawn/util/math.h b/src/util/math.h
similarity index 100%
rename from include/dawn/util/math.h
rename to src/util/math.h
diff --git a/src/util/mem.h b/src/util/mem.h
index 1a07451e..0b0e13c6 100644
--- a/src/util/mem.h
+++ b/src/util/mem.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 
 /**
  * Resizes a buffer to hold new amounts of data. Essentially a 3 step process of
diff --git a/include/dawn/util/rand.h b/src/util/rand.h
similarity index 98%
rename from include/dawn/util/rand.h
rename to src/util/rand.h
index 9501bc54..89571a43 100644
--- a/include/dawn/util/rand.h
+++ b/src/util/rand.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "math.h"
 
 /**
diff --git a/src/util/string.h b/src/util/string.h
index 4454a844..1f3838ec 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -4,9 +4,33 @@
 // https://opensource.org/licenses/MIT
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "array.h"
 
+#define STRING_HANDLEBAR_KEY_MAXLENGTH 32
+
+#define STRING_STACK_STRING_SIZE 256
+#define STRING_STACK_STRING_COUNT 128
+#define STRING_STACK_BUFFER STRING_STACK_STRING_SIZE * STRING_STACK_STRING_COUNT
+
+/** Representation of a String Handlebar Variable */
+typedef struct {
+  /** The key to use to replace in the source */
+  char *key;
+  /** The value to replace it with */
+  char *value;
+} stringhandlebarvariable_t;
+
+/** Definition of a string stack to push and pop strings from. */
+typedef struct {
+  /** Raw char buffer, for holding strings */
+  char buffer[STRING_STACK_BUFFER];
+  /** Strings themselves */
+  char *strings[STRING_STACK_STRING_COUNT];
+  /** How many strings are on the stack */
+  int32_t size;
+} stringstack_t;
+
 /**
  * Replaces handlebars within the string with items from the list of variables.
  * Output of replacement is stored in the buffer provided. Handlebars within the
diff --git a/src/vn/conversation/talk.h b/src/vn/conversation/talk.h
index fb39db43..2e3320de 100644
--- a/src/vn/conversation/talk.h
+++ b/src/vn/conversation/talk.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "vnconversation.h"
 #include "../../display/animation/queue.h"
 
diff --git a/src/vn/conversation/vnconversation.h b/src/vn/conversation/vnconversation.h
index e4d85e26..6865d69b 100644
--- a/src/vn/conversation/vnconversation.h
+++ b/src/vn/conversation/vnconversation.h
@@ -6,12 +6,40 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include  "../ui/vntextbox.h"
 #include "../../util/array.h"
 #include "../../display/animation/timeline.h"
 #include "../../display/animation/queue.h"
 
+typedef struct _vnconversation_t vnconversation_t;
+
+typedef struct {
+  /** Pointer to the original conversation */
+  vnconversation_t *conversation;
+
+  /** Storage for pointer to text for text conversation elements */
+  char *text;
+
+  /** Character this conversation piece belongs to */
+  vncharacter_t *character;
+
+  /** Character's emotion */
+  uint8_t emotion;
+} vnconversationitemdata_t;
+
+/** Representation of a conversation, laid out similarly to a timeline. */
+typedef struct _vnconversation_t {
+  /** Internal Textbox for text elements */
+  vntextbox_t textbox;
+
+  /** Data Storage for items' data */
+  vnconversationitemdata_t itemData[ANIMATION_QUEUE_ITEM_MAX];
+
+  /** Internal Queue for queueing the conversation */
+  queue_t actionQueue;
+} vnconversation_t;
+
 /**
  * Initialize the conversation set. After adding your first conversation element
  * then ensure you call vnConversationNext to begin the conversation.
diff --git a/src/vn/ui/vntextbox.h b/src/vn/ui/vntextbox.h
index 53299c66..52249408 100644
--- a/src/vn/ui/vntextbox.h
+++ b/src/vn/ui/vntextbox.h
@@ -6,7 +6,7 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../../libs.h"
 #include "../../display/primitive.h"
 #include "../../display/shader.h"
 #include "../../display/animation/timeline.h"
@@ -14,6 +14,47 @@
 #include "../../display/primitives/quad.h"
 #include "../../input/input.h"
 #include "../../ui/frame.h"
+#include "../../engine/engine.h"
+
+/** Amount of characters scrolled, per second */
+#define VN_TEXTBOX_SCROLL_SPEED 60
+
+#define VN_TEXTBOX_FONT_SIZE FONT_SIZE_DEFAULT
+
+#define VN_TEXTBOX_STATE_CLOSED flagDefine(0)
+
+typedef struct {
+  /** Stores the maximum width that this textbox can take up */
+  float widthMax;
+
+  /** Font that the text box uses */
+  font_t *font;
+
+  /** Box State Flags */
+  uint8_t state;
+
+  /** How many rows of text at most can be displayed in a single text box */
+  int32_t linesMax;
+  int32_t lineCurrent;
+
+  /** Readonly values for the dimensions of the textbox */
+  float width, height;
+
+  /** Animation of the textbox */
+  float textScroll;
+
+  /** Information about the current rendered text */
+  fonttextinfo_t textInfo;
+
+  /** Primitive to hold talking text */
+  primitive_t primitive;
+
+  /** The frame for the textbox */
+  frame_t frame;
+
+  /** Current spoken text, tracked in-case of re-render */
+  char *text;
+} vntextbox_t;
 
 /**
  * Initializes the Visual Novel Text Box to its initial state.
diff --git a/src/vn/vncharacter.h b/src/vn/vncharacter.h
index e1de59cf..c5539a3d 100644
--- a/src/vn/vncharacter.h
+++ b/src/vn/vncharacter.h
@@ -6,13 +6,128 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "../display/texture.h"
 #include "../display/tileset.h"
 #include "../display/primitive.h"
 #include "../display/shader.h"
 #include "../display/primitives/quad.h"
 #include "../display/animation/animation.h"
+#include "../engine/engine.h"
+
+#define VN_CHARACTER_BLINK_TIME_RANGE_MAX 6
+#define VN_CHARACTER_SIZE 0.5
+
+/** How many quads the VN Character has. Base, Eyes, Mouth and Eyebrows */
+#define VN_CHARACTER_QUAD_COUNT 4
+
+/** The Quads */
+#define VN_CHARACTER_QUAD_BASE 0
+#define VN_CHARACTER_QUAD_EYEBROWS 1
+#define VN_CHARACTER_QUAD_EYES 2
+#define VN_CHARACTER_QUAD_MOUTH 3
+
+/** How many frames does each mouth set have */
+#define VN_CHARACTER_TALKING_FRAME_COUNT 3
+
+#define VN_CHARACTER_EMOTION_BORED 0x00
+#define VN_CHARACTER_EMOTION_BORED_SMILING 0x01
+#define VN_CHARACTER_EMOTION_BORED_DISAGREE 0x02
+#define VN_CHARACTER_EMOTION_BORED_AGREE 0x03
+#define VN_CHARACTER_EMOTION_SHORT 0x04
+#define VN_CHARACTER_EMOTION_SMUG_SLIGHT 0x05
+#define VN_CHARACTER_EMOTION_BORED_ANNOYED 0x06
+#define VN_CHARACTER_EMOTION_BORED_PROUD 0x07
+#define VN_CHARACTER_EMOTION_BORED_THINKING 0x08
+#define VN_CHARACTER_EMOTION_HAPPY_THINKING 0x09
+#define VN_CHARACTER_EMOTION_SERIOUS_THINKING 0x0A
+#define VN_CHARACTER_EMOTION_SMUG_THINKING_SLIGHT 0x0B
+#define VN_CHARACTER_EMOTION_XXXX_THINKING 0x0C// "concerned thinking"
+#define VN_CHARACTER_EMOTION_HAPPY_FAKE_THINKING 0x0D
+#define VN_CHARACTER_EMOTION_XXXX_THINKING2 0x0E// "serious concerned thinking"
+#define VN_CHARACTER_EMOTION_XXXX_THINKING3 0x0F // "Happy pleased thinking"
+#define VN_CHARACTER_EMOTION_BORED_LISTENING 0x10
+#define VN_CHARACTER_EMOTION_HUMBLED 0x11
+#define VN_CHARACTER_EMOTION_CONCERNED_1 0x12
+#define VN_CHARACTER_EMOTION_PROUD 0x13
+#define VN_CHARACTER_EMOTION_DEADPAN 0x14
+#define VN_CHARACTER_EMOTION_SMIRK 0x15
+#define VN_CHARACTER_EMOTION_CONCERNED_2 0x16
+#define VN_CHARACTER_EMOTION_TEASING 0x17
+#define VN_CHARACTER_EMOTION_XXXX_THINKING4 0x18// "concerned thinking lightly"
+#define VN_CHARACTER_EMOTION_XXXX_THINKING5 0x19// "daydreaming"
+#define VN_CHARACTER_EMOTION_XXXX_THINKING6 0x1A// "concerned thinking heavy"
+#define VN_CHARACTER_EMOTION_XXXX_THINKING7 0x1B// "pleasant daydreaming"
+#define VN_CHARACTER_EMOTION_XXXX_THINKING8 0x1C// not really sure
+#define VN_CHARACTER_EMOTION_ANIME_MOM 0x1D
+#define VN_CHARACTER_EMOTION_XXXX_THINKING9 0x1E// not really sure
+#define VN_CHARACTER_EMOTION_ANIME_MOM_SMUG 0x1F
+#define VN_CHARACTER_EMOTION_CURIOUS 0x20
+#define VN_CHARACTER_EMOTION_HAPPY 0x21
+#define VN_CHARACTER_EMOTION_CONCERNED_WORRIED 0x22
+#define VN_CHARACTER_EMOTION_HAPPY_PROUD_SLIGHT 0x23
+#define VN_CHARACTER_EMOTION_NOT_BELIEVING 0x24//"Mhm, suuure"
+#define VN_CHARACTER_EMOTION_HAPPY_TIRED 0x25
+#define VN_CHARACTER_EMOTION_CONCERNED_SLIGHT 0x26
+#define VN_CHARACTER_EMOTION_HAPPY_PROUD 0x27
+#define VN_CHARACTER_EMOTION_XXXX_THINKING10 0x28// sort of tsundere
+#define VN_CHARACTER_EMOTION_XXXX_THINKING11 0x29// "thinking of something nice"
+#define VN_CHARACTER_EMOTION_XXXX_THINKING12 0x2A// big sister vibes
+#define VN_CHARACTER_EMOTION_XXXX_THINKING13 0x2B// "vibin"
+#define VN_CHARACTER_EMOTION_XXXX_THINKING14 0x2C// not really sure
+#define VN_CHARACTER_EMOTION_XXXX_THINKING15 0x2D// not really sure
+#define VN_CHARACTER_EMOTION_XXXX_THINKING16 0x2E// not really sure
+#define VN_CHARACTER_EMOTION_XXXX_THINKING17 0x2F// not really sure
+#define VN_CHARACTER_EMOTION_CONCERNED 0x30
+#define VN_CHARACTER_EMOTION_RELIEVED 0x31
+#define VN_CHARACTER_EMOTION_CONCERNED_VERY 0x32
+#define VN_CHARACTER_EMOTION_RELIEVED_SMUG 0x33//"slightly smug"
+#define VN_CHARACTER_EMOTION_CONCERNED_3 0x34// "slightly worried"
+#define VN_CHARACTER_EMOTION_CONCERNED_4 0x35// "slightly smug"
+#define VN_CHARACTER_DISAPPOINTED 0x36// "slightly worried"
+#define VN_CHARACTER_EMOTION_CONCERNED_5 0x37// "slightly smugger"
+#define VN_CHARACTER_EMOTION_CONCERNED_THINKING 0x38
+#define VN_CHARACTER_EMOTION_SMUG_1 0x39
+#define VN_CHARACTER_EMOTION_CONCERNED_THINKING_DEEP 0x3A
+#define VN_CHARACTER_EMOTION_SMUG_2 0x3B
+#define VN_CHARACTER_EMOTION_XXXX_THINKING18 0x3C// not really sure
+#define VN_CHARACTER_EMOTION_XXXX_THINKING19 0x3D// not really sure
+#define VN_CHARACTER_EMOTION_XXXX_THINKING20 0x3E// not really sure
+#define VN_CHARACTER_EMOTION_XXXX_THINKING21 0x3F// not really sure
+#define VN_CHARACTER_EMOTION_SERIOUS 0x40
+#define VN_CHARACTER_EMOTION_READY 0x41
+#define VN_CHARACTER_EMOTION_SERIOUS_ANGRY 0x42
+#define VN_CHARACTER_EMOTION_SMUG 0x43
+#define VN_CHARACTER_EMOTION_ANGRY 0x44
+#define VN_CHARACTER_EMOTION_ANGRY_PROUD 0x45
+#define VN_CHARACTER_EMOTION_ANGRY_VERY 0x46
+#define VN_CHARACTER_EMOTION_SMUG_VERY 0x47
+#define VN_CHARACTER_EMOTION_SERIOUS_THINKING_VERY 0x48
+#define VN_CHARACTER_EMOTION_SMUG_THINKING 0x49
+#define VN_CHARACTER_EMOTION_ANGRY_THINKING 0x4A
+#define VN_CHARACTER_EMOTION_SMUG_THINKING_VERY 0x4B
+#define VN_CHARACTER_EMOTION_XXXX_THINKING22 0x4C// not really sure
+#define VN_CHARACTER_EMOTION_HAPPY_FAKE_THINKING_ANGRY 0x4D
+#define VN_CHARACTER_EMOTION_XXXX_THINKING23 0x4E// not really sure
+#define VN_CHARACTER_EMOTION_BOASTFUL 0x4F
+
+typedef struct {
+  float x, y, z;
+  float yaw, pitch, roll;
+  float scaleX, scaleY;
+
+  bool talking;
+  float blinkStart;
+
+  uint8_t emotion;
+
+  primitive_t primitive;
+  texture_t *texture;
+
+  int32_t baseWidth, baseHeight;
+  int32_t faceX, faceY;
+  int32_t faceWidth, faceHeight;
+} vncharacter_t; 
 
 /**
  * Initialize a VN Character.
diff --git a/src/vn/vnscene.h b/src/vn/vnscene.h
index a87728a2..384f7f31 100644
--- a/src/vn/vnscene.h
+++ b/src/vn/vnscene.h
@@ -6,13 +6,35 @@
  */
 
 #pragma once
-#include <dawn/dawn.h>
+#include "../libs.h"
 #include "vncharacter.h"
 #include "conversation/vnconversation.h"
 #include "ui/vntextbox.h"
 #include "../display/camera.h"
 #include "../display/shader.h"
 
+/** Maximum number of Visual Novel Characters the scene can support */
+#define VN_SCENE_CHARACTERS_MAX 6
+
+typedef struct {
+  float cameraX;
+  float cameraY;
+  float cameraZ;
+  float cameraLookX;
+  float cameraLookY;
+  float cameraLookZ;
+
+  /** Camera used for rendering, updated frequently */
+  camera_t camera;
+
+  /** Internal conversation element */
+  vnconversation_t conversation;
+
+  /** Character array */
+  vncharacter_t characters[VN_SCENE_CHARACTERS_MAX];
+  uint8_t characterCount;
+} vnscene_t;
+
 void vnSceneInit(vnscene_t *scene, font_t *font, texture_t *text);
 
 void vnSceneUpdate(vnscene_t *scene, engine_t *engine);