diff --git a/Build.lua b/Build.lua
new file mode 100644
index 0000000..fdbe2da
--- /dev/null
+++ b/Build.lua
@@ -0,0 +1,15 @@
+-- project "Fencer-Template" change this
+  architecture "x64"
+  configurations { "Debug", "Release", "Dist" }
+  startproject "Game"
+
+  filter "system:windows"
+    buildoptions { "/EHsc", "/Zc:preprocessor" }
+
+  OutputDir = "%{cfg.system}-%{cfg.architecture}/${cfg.buildcfg}"
+
+  group "Core"
+    include "core/Build-Core.lua"
+  group ""
+
+  include "game/Build-Game.lua"
diff --git a/core/Build-Core.lua b/core/Build-Core.lua
new file mode 100644
index 0000000..09bc80e
--- /dev/null
+++ b/core/Build-Core.lua
@@ -0,0 +1,32 @@
+project "Fencer-Core"
+  kind "StaticLib"
+  language "C"
+  targetdir "bin/%{cfg.buildcfg}"
+  staticruntime "off"
+
+  files { "src/**.c" }
+  includedirs { "src/" }
+
+  targetdir ( "../bin" .. OutputDir .. "/%{prj.name}" )
+  objdir ( "../intermediate" .. OutputDir .. "/%{prj.name}" )
+
+  filter "system:windows"
+    systemversion "latest"
+    defines {}
+
+  filter "configurations:Debug"
+    defines { "DEBUG" }
+    runtime "Debug"
+    symbols "On"
+
+  filter "configurations:Release"
+    defines { "RELEASE" }
+    runtime "Release"
+    optimize "On"
+    symbols "On"
+
+  filter "configurations:Dist"
+    defines { "DIST" }
+    runtime "Release"
+    optimize "On"
+    symbols "Off"
diff --git a/src/asset.h b/core/src/asset.h
similarity index 100%
rename from src/asset.h
rename to core/src/asset.h
diff --git a/src/assets.c b/core/src/assets.c
similarity index 100%
rename from src/assets.c
rename to core/src/assets.c
diff --git a/src/assets.h b/core/src/assets.h
similarity index 100%
rename from src/assets.h
rename to core/src/assets.h
diff --git a/src/behaviour_entity.h b/core/src/behaviour_entity.h
similarity index 100%
rename from src/behaviour_entity.h
rename to core/src/behaviour_entity.h
diff --git a/src/camera.c b/core/src/camera.c
similarity index 100%
rename from src/camera.c
rename to core/src/camera.c
diff --git a/src/camera.h b/core/src/camera.h
similarity index 100%
rename from src/camera.h
rename to core/src/camera.h
diff --git a/src/collision.c b/core/src/collision.c
similarity index 100%
rename from src/collision.c
rename to core/src/collision.c
diff --git a/src/collision.h b/core/src/collision.h
similarity index 100%
rename from src/collision.h
rename to core/src/collision.h
diff --git a/src/debug.c b/core/src/debug.c
similarity index 100%
rename from src/debug.c
rename to core/src/debug.c
diff --git a/src/debug.h b/core/src/debug.h
similarity index 100%
rename from src/debug.h
rename to core/src/debug.h
diff --git a/src/drop.h b/core/src/drop.h
similarity index 100%
rename from src/drop.h
rename to core/src/drop.h
diff --git a/src/game_world.c b/core/src/game_world.c
similarity index 100%
rename from src/game_world.c
rename to core/src/game_world.c
diff --git a/src/game_world.h b/core/src/game_world.h
similarity index 100%
rename from src/game_world.h
rename to core/src/game_world.h
diff --git a/src/input.c b/core/src/input.c
similarity index 100%
rename from src/input.c
rename to core/src/input.c
diff --git a/src/input.h b/core/src/input.h
similarity index 100%
rename from src/input.h
rename to core/src/input.h
diff --git a/src/input_axis.c b/core/src/input_axis.c
similarity index 100%
rename from src/input_axis.c
rename to core/src/input_axis.c
diff --git a/src/input_axis.h b/core/src/input_axis.h
similarity index 100%
rename from src/input_axis.h
rename to core/src/input_axis.h
diff --git a/src/list.c b/core/src/list.c
similarity index 100%
rename from src/list.c
rename to core/src/list.c
diff --git a/src/list.h b/core/src/list.h
similarity index 100%
rename from src/list.h
rename to core/src/list.h
diff --git a/src/physics_entity.c b/core/src/physics_entity.c
similarity index 100%
rename from src/physics_entity.c
rename to core/src/physics_entity.c
diff --git a/src/physics_entity.h b/core/src/physics_entity.h
similarity index 100%
rename from src/physics_entity.h
rename to core/src/physics_entity.h
diff --git a/src/physics_world.c b/core/src/physics_world.c
similarity index 100%
rename from src/physics_world.c
rename to core/src/physics_world.c
diff --git a/src/physics_world.h b/core/src/physics_world.h
similarity index 100%
rename from src/physics_world.h
rename to core/src/physics_world.h
diff --git a/src/player_input.c b/core/src/player_input.c
similarity index 100%
rename from src/player_input.c
rename to core/src/player_input.c
diff --git a/src/player_input.h b/core/src/player_input.h
similarity index 100%
rename from src/player_input.h
rename to core/src/player_input.h
diff --git a/src/program.c b/core/src/program.c
similarity index 100%
rename from src/program.c
rename to core/src/program.c
diff --git a/src/program.h b/core/src/program.h
similarity index 100%
rename from src/program.h
rename to core/src/program.h
diff --git a/src/render.c b/core/src/render.c
similarity index 100%
rename from src/render.c
rename to core/src/render.c
diff --git a/src/render.h b/core/src/render.h
similarity index 100%
rename from src/render.h
rename to core/src/render.h
diff --git a/src/rigidbody.c b/core/src/rigidbody.c
similarity index 100%
rename from src/rigidbody.c
rename to core/src/rigidbody.c
diff --git a/src/rigidbody.h b/core/src/rigidbody.h
similarity index 100%
rename from src/rigidbody.h
rename to core/src/rigidbody.h
diff --git a/src/shape.c b/core/src/shape.c
similarity index 100%
rename from src/shape.c
rename to core/src/shape.c
diff --git a/src/shape.h b/core/src/shape.h
similarity index 100%
rename from src/shape.h
rename to core/src/shape.h
diff --git a/src/sprite.c b/core/src/sprite.c
similarity index 100%
rename from src/sprite.c
rename to core/src/sprite.c
diff --git a/src/sprite.h b/core/src/sprite.h
similarity index 100%
rename from src/sprite.h
rename to core/src/sprite.h
diff --git a/src/sprite_entity.c b/core/src/sprite_entity.c
similarity index 100%
rename from src/sprite_entity.c
rename to core/src/sprite_entity.c
diff --git a/src/sprite_entity.h b/core/src/sprite_entity.h
similarity index 100%
rename from src/sprite_entity.h
rename to core/src/sprite_entity.h
diff --git a/src/spritesheet.c b/core/src/spritesheet.c
similarity index 100%
rename from src/spritesheet.c
rename to core/src/spritesheet.c
diff --git a/src/spritesheet.h b/core/src/spritesheet.h
similarity index 100%
rename from src/spritesheet.h
rename to core/src/spritesheet.h
diff --git a/src/transform.h b/core/src/transform.h
similarity index 100%
rename from src/transform.h
rename to core/src/transform.h
diff --git a/src/transformable.c b/core/src/transformable.c
similarity index 100%
rename from src/transformable.c
rename to core/src/transformable.c
diff --git a/src/transformable.h b/core/src/transformable.h
similarity index 100%
rename from src/transformable.h
rename to core/src/transformable.h
diff --git a/src/typeclass_helpers.h b/core/src/typeclass_helpers.h
similarity index 100%
rename from src/typeclass_helpers.h
rename to core/src/typeclass_helpers.h
diff --git a/src/vmath.h b/core/src/vmath.h
similarity index 100%
rename from src/vmath.h
rename to core/src/vmath.h
diff --git a/design/Core.md b/design/Core.md
deleted file mode 100644
index 01cc239..0000000
--- a/design/Core.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# Mechanics
-
-## Movement
-
-Slow and considered.
-The walking speed is slow, the running speed slightly less so.
-Walkable parts of environments are relatively small.
-
-## Combat
-
-
-
-## Exploration
-
-Resources are scattered throughout the environment.
-It should be rewarding to stop and gather them.
-
-## Upgrades
-
-
-
-# Dynamics
-
-## Careful Progress
-
-The player should be careful and considered during second to second gameplay.
diff --git a/game/Build-Game.lua b/game/Build-Game.lua
new file mode 100644
index 0000000..7472c23
--- /dev/null
+++ b/game/Build-Game.lua
@@ -0,0 +1,34 @@
+project "Game"
+  kind "ConsoleApp"
+  language "C"
+  staticruntime "Off"
+  targetdir "bin/%{cfg.buildcfg}"
+
+  files { "src/*.c" }
+  includedirs {
+    "src/",
+    "../core/src"
+  }
+  links {
+    "Fencer-Core"
+  }
+
+  targetdir ("../bin" .. OutputDir .. "/%{prj.name}" )
+  objdir ("../intermediate" .. OutputDir .. "/%{prj.name}" )
+
+  filter "configurations:Debug"
+    defines { "DEBUG" }
+    runtime "Debug"
+    symbols "On"
+
+  filter "configurations:Release"
+    defines { "RELEASE" }
+    runtime "Release"
+    optimize "On"
+    symbols "On"
+
+  filter "configurations:Dist"
+    defines { "DIST" }
+    runtime "Release"
+    optimize "On"
+    symbols "Off"
diff --git a/src/fencer.c b/game/src/fencer.c
similarity index 100%
rename from src/fencer.c
rename to game/src/fencer.c
diff --git a/premake5.lua b/premake5.lua
deleted file mode 100644
index e97d585..0000000
--- a/premake5.lua
+++ /dev/null
@@ -1,20 +0,0 @@
-workspace "fencer"
-  configurations { "Debug", "Release" }
-  location "."
-
-project "fencer"
-  kind "WindowedApp"
-  language "C"
-  location "build/"
-  files { "src/**.c" }
-  links { "SDL2", "SDL2_image", "cjson", "m" }
-  buildoptions { "-Wall", "-DVMATH_SDL=1" }
-  targetdir "bin/"
-  filter "configurations:Debug"
-    defines { "DEBUG" }
-    buildoptions { "-g3" }
-    symbols "On"
-  filter "configurations:Release"
-    buildoptions { "-g0" }
-    defines { "NDEBUG" }
-    optimize "On"