diff --git a/CMakeLists.txt b/CMakeLists.txt
index 161ae90..c4a7b0d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -44,7 +44,7 @@ add_library(fennec STATIC
# MEMORY ===============================================================================================================
include/fennec/memory/allocator.h
- include/fennec/memory/bits.h
+ include/fennec/lang/bits.h
include/fennec/memory/memory.h
include/fennec/memory/new.h source/memory/new.cpp
include/fennec/memory/pointers.h
diff --git a/PLANNING.md b/PLANNING.md
new file mode 100644
index 0000000..9d56c51
--- /dev/null
+++ b/PLANNING.md
@@ -0,0 +1,203 @@
+
+
+# Planning Documentation for fennec
+
+## Table of Contents
+
+ 1. [Introduction](#introduction)
+ 2. [C++ Language](#c-language)
+ 3. [Math Library](#math-library)
+
+
+## Introduction
+
+This file serves as a general planning document for engine structure, systems, pipelines, and implementation.
+
+
+Implementations of core engine systems should strive to be `O(1)` in implementations,
+both in terms of runtime and memory performance. This is obviously not a realistic goal,
+so rather than the entire engine striving to be `O(1)` we should more specifically look
+at achieving `O(1)` performance on hot paths.
+
+Functions should be highly verbose, and in debug mode any bugprone or erroneous behaviour should throw
+assertions. **DO NOT USE EXCEPTIONS**.
+
+System implementations should be independent of architecture or platforms. i.e. the code of the graphics system should
+not care if OpenGL or Vulkan is used and should not use any direct calls to OpenGL or Vulkan.
+
+
+## C++ Language Library (`lang`)
+
+Implement header files for standard functions relating to the C++ Language.
+So far this is implemented on an as-needed basis.
+
+
+## Math Library (`math`)
+
+Implement math functions according to the [OpenGL 4.6 Shading Language Specification](https://registry.khronos.org/OpenGL/specs/gl/GLSLangSpec.4.60.pdf).
+
+Additional extensions should be implemented to provide standard definitions for functions predominantly related
+to Linear Algebra, Mathematical Analysis, and Discrete Analysis. Additional extensions will be implemented on a
+as-needed basis.
+
+
+## Memory Library (`memory`)
+
+Implement headers related to memory allocation in C++.
+
+ * Smart Pointers
+ - Memory Allocation
+
+
+## Language Processing (`proclang`)
+
+Pronounced [pɹˈɒkh,læŋ](https://itinerarium.github.io/phoneme-synthesis/?w=pɹˈɒkh,læŋ)
+
+No, this won't include Machine Learning, it will mostly include tools for processing human-readable files.
+fennec should be able to use Doxygen and LaTeX externally. Consider including binaries with releases.
+
+ * String Analysis (`proclang/strings`)
+ * Search
+ * Manipulation
+ * Delimiting
+ * Regex
+
+ - File Formats (`proclang/formats`)
+ - Serialization
+ - JSON
+ - HTML
+ - XML
+ - YAML
+ - Configuration
+ - INI
+ - TOML
+ - Documents
+ - ODF
+ - Markdown
+ - PDF
+ - Spreadsheets & Tables
+ - ODS
+ - CSV
+
+**MAYBE**
+ * Compilation (`proclang/code`)
+ * Lexical Analysis
+ * Syntax Analysis
+ * Semantic Analysis
+ * Intermediate Code Generation
+ * Optimization
+ * Target Code Generation
+
+
+## Core (`core`)
+
+This will be the core of the engine.
+
+ - Event System
+ - Core Engine Loop
+ - System Manager
+
+The priority sequence of the main systems is as follows:
+
+**3D Systems will apply *before* their 2D Variants**
+
+ - **Update**
+ - Scripts
+ - AI
+ - **Physics**
+ - Newtonian Commit
+ - Apply Forces (Updates Acceleration and Torque)
+ - Apply Torque & Acceleration (Updates Velocities)
+ - Apply Velocities (Updates Position and Rotation)
+ - Constraint Resolution
+ - Collision Detection
+ - Collision Resolution (Adjust for Clipping)
+ - Soft Bodies resolve before Rigid Bodies
+ - Collision Response
+ - Calculate Forces
+ -
+ - **Graphics**
+
+## 3D Scene (`scene3d`)
+
+* In-Array Directed Tree
+ * Elegant method for providing `O(1)` insertions and `O(log(n))` deletions.
+* Bounding Volume Hierarchy
+ * Octree
+
+
+## 3D Graphics (`gfx3d`)
+
+Links:
+ - https://en.wikipedia.org/wiki/Octree
+ - https://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study/
+ - https://learnopengl.com/PBR/Lighting
+ - https://learnopengl.com/PBR/IBL/Diffuse-irradiance
+ - https://en.wikipedia.org/wiki/Schlick%27s_approximation
+ - https://pixelandpoly.com/ior.html
+ - https://developer.download.nvidia.com/SDK/10/opengl/screenshots/samples/dual_depth_peeling.html
+
+**DirectX will never have official support.** If you would like to make a fork, have at it, but know I will hold a deep disdain for you.
+
+This is the set of stages for the graphics pipeline that runs every frame:
+
+ - LOD Selection
+ - Visibility Buffer & Culling
+
+ * G-Buffer Pass
+ * Depth - Stencil
+ * 24-Bit Depth Buffer
+ * 8-Bit Stencil Buffer, used to represent the lighting model.
+ * Diffuse - RGB8
+ * Emission - RGB8
+ * Normal - RGB8
+ * Specular - RGB8
+ * R → Roughness
+ * G → Specularity (sometimes called metallicism)
+ * B → Index of Refraction (IOR)
+
+ - Lighting Buffer - RGB16
+ - Lighting Pass
+ - Generate Dynamic Shadows
+ - Generate Dynamic Reflections (Optional)
+ - SSAO (Optional)
+ - Apply Lighting Model
+
+ * Forward Pass
+ * Translucent Materials
+ * Materials with Forward Shading enabled.
+
+ - Post Processing
+ - Depth of Field (Optional)
+ - Bloom (Optional)
+ - Tonemapping (Optional)
+ - HDR Correction
+
+## 3D Physics `(physics3d)`
+
+Links:
+ - https://www.researchgate.net/publication/264839743_Simulating_Ocean_Water
+ - https://arxiv.org/pdf/2109.00104
+ - https://www.youtube.com/watch?v=rSKMYc1CQHE
+
+Systems
+
+ * Rigid Body System
+ - Particle Physics
+ * Soft Body Physics
+ * Elastics → Finite Element Simulation
+ * Cloth → Position-Based Dynamics
+ * Water
+ * Oceans → iWave
+ * Reasoning: iWave provides interactive lightweight fluid dynamics suitable for flat planes of water.
+
+
+ * 3D Fluid Dynamics → Smoothed-Particle Hydrodynamics
+ * Reasoning: This is the simplest method for simulating 3D bodies of water. This should exclusively be
+ used for small scale simulations where self-interactive fluids are necessary. I.E. pouring water into
+ a glass.
+
+
+ * 2D Fluid Dynamics → Force-Based Dynamics
+ * Reasoning: This model, like iWave, provides lightweight interactive fluid dynamics, but is more easily
+ adapted to flowing surfaces such as streams and rivers.
\ No newline at end of file
diff --git a/README.md b/README.md
index 2b9f76a..23e86e8 100644
--- a/README.md
+++ b/README.md
@@ -61,6 +61,8 @@ fennec Standards:
In the case of global functions, helpers should be placed in a similarly named file in a subdirectory and namespace called `detail`.
Helper functions should be documented with C-Style comments, however it is not necessary to provide Doxygen documentation.
+ - **DO NOT USE C++ EXCEPTIONS** they will not be supported because they are shit. No, I won't elaborate.
+
The C++ stdlib is reimplemented in the fennec engine.
diff --git a/include/fennec/memory/bits.h b/include/fennec/lang/bits.h
similarity index 94%
rename from include/fennec/memory/bits.h
rename to include/fennec/lang/bits.h
index db1881e..e9794b7 100644
--- a/include/fennec/memory/bits.h
+++ b/include/fennec/lang/bits.h
@@ -17,8 +17,8 @@
// =====================================================================================================================
-#ifndef FENNEC_MEMORY_BITS_H
-#define FENNEC_MEMORY_BITS_H
+#ifndef FENNEC_LANG_BITS_H
+#define FENNEC_LANG_BITS_H
#include
#include
@@ -48,4 +48,4 @@ constexpr ToT bit_cast(const FromT& from)
}
-#endif // FENNEC_MEMORY_BITS_H
+#endif // FENNEC_LANG_BITS_H
diff --git a/include/fennec/lang/float.h b/include/fennec/lang/float.h
index 6cce568..96c5fa1 100644
--- a/include/fennec/lang/float.h
+++ b/include/fennec/lang/float.h
@@ -30,7 +30,7 @@
#ifndef FENNEC_LANG_FLOAT_H
#define FENNEC_LANG_FLOAT_H
-#include
+#include
#define FLT_HAS_INFINITY 1
#define FLT_HAS_QUIET_NAN 1
diff --git a/include/fennec/math/common.h b/include/fennec/math/common.h
index eee217d..4654b2c 100644
--- a/include/fennec/math/common.h
+++ b/include/fennec/math/common.h
@@ -276,7 +276,7 @@
#include
#include
-#include
+#include <../lang/bits.h>
namespace fennec
{