A Wreckage of Usefulness

I frequently consider throwing all my work away.

The definition of "all" varies depending on the day. Some days it's my space game. Some days it's both the game and the framework that supports it. Some days it's my career, my university degree in Computer Science, and beyond.

I am unafraid of work, to the point of being stupid and forgetful about the value of, and time invested in, work already done. I forget what I've done and I think it would be easy to recover or recreate it.

Here's an inventory. The state of my project, all the things I consider throwing away; a year of my life. Tens of thousands of lines of C. A reminder to myself to never give up.

A reminder to forgetful people like me, to take stock before making rash decisions.

The Platform

  • Abstract data types
    • Hashset
    • Aligned memory pool
    • Queue
    • Stack
    • Variant
  • Window management framework and universal timing loop
  • Fast bitwise occupancy tests
  • Macro library
    • Type manipulation
    • Compile time log2
    • Thread safe static initialization and deinitialization
  • Color interconversions for HSV, RGBI, RGBA, uint32
  • Error diagnosis and reporting with Windows, Mac platform-specific error dialogs (TODO: Linux)
  • Dynamic entity system implementation (abandoned)
  • GL object wrappers
    • Buffer object
    • Effect chain
    • LOD model loader
    • Custom binary model format and Blender exporter
  • Shader library
    • Shader include resolution system
    • Shader vertex attribute and uniform caching
  • Skybox implementation and shader
  • Sprite batch implementation
    • Sprite batch shader
    • Sprite sheet loader
  • Texture loader
  • Texture atlas
  • VAO wrapper
  • Mesh indexer
  • A* implementation (TODO: test)
  • Macro-based hash function generation for address, memory range and numeric types, with function chaining
  • Morton code implementations for (2d, 3d vectors) x (32 bit, 64 bit output)
  • Immediate mode UI library (IMUI/IMGUI) with input contexts, extensively configurable theme and standalone theme editor
  • Input mapper with touch adaptation layer
  • Localization library
    • String key-value pairs
    • Locale-specific resources
    • Debug-mode periodic locale flush
  • Printf-based log with configurable log level and ANSI output support
  • Math library
    • Easing functions
    • Endian conversion
    • Vector library
    • Frustum
    • Floating point and integer rectangles
    • Floating point and integer vec[2,3,4] (+ SSE accelerated vec4)
    • Floating point matrices[3x3,4x4] (+ SSE accelerated mat4)
    • Plane
    • Quaternion
    • Sphere
    • Optimized min, max, clamp, mix
    • Unit conversion
  • Memory library
    • Aligned dynamic memory wrappers & shims
    • Generic dynamic buffer class
  • Platform standardization
  • Processor count for Windows, Mac, Linux (TODO: test Linux)
  • Random library
    • Float, integer, vector, select byte from set
    • Perlin
    • Simplex
  • File system resource layer integrating with PhysFS
    • Dynamic buffer backed with dirty detection
    • Debug-mode periodic resource flush
    • Reliable path concatenation
  • Physical file system abstraction (bypassing/predating PhysFS)
  • Heap and merge sort platform shims
  • String library
    • Capitalization utilities
    • Platform-independent multibyte <--> wide character conversion
    • Search
    • Unicode traversal for UTF-8
  • Markov chain string generator
  • Synchronization library
    • Platform independent sync primitives
    • Worker dispatch queue
  • Freetype-backed GL font rendering system
    • Text buffer for large static text chunks
    • Character cache for dynamic strings
    • Formatting support: size, bold, italic, underline, overline, strikethrough, outline, alignment
  • Platform independent high-resolution timer
  • Blackbody SRGB conversion
    • 1000-40000 kelvin
    • C and GLSL implementations
  • Astronomy utilities
    • Pareto-based random star generator
    • Star classifier
    • Star magnitude conversion and absolute/relative utilities

The Game

  • Audio API
    • FMOD backend
    • ObjectAL backend
  • Camera system
    • Pluggable controllers and attribute smoothing
    • Projection and frustum testing
  • Collision system
    • AABB and per-face collision testing
    • Relaxation-based collision resolver
  • Context system (independently launchable game states)
    • game
    • logo
    • main menu
    • SDK tools
    • resource preloader
  • Engine process queue
    • Statically and dynamically installable ordered execution callbacks
  • Entity system (statically configured)
    • Aligned component pools with fast iteration
    • Metadata control (hierarchy, tags)
    • Lifecycle event listeners
    • Prototype parser
  • Processor manager
    • Statically and dynamically installable processor queue
    • Variable execution rate within fixed timestep engine via frame divisors
    • Pause manager and optionally pausable processors
    • Independent per-processor timestep tracking
  • Entity and processor implementations with new, delete, clone, serialize, deserialize implementations
    • Extent
    • Light
    • Newtonian dynamics
    • Particle emitter
    • Person
    • Player
    • Structure
    • Transform
    • Virtual email with time-delay transport agent
  • Preference storage and defaults
  • Independent repeatable seedable RNGs
  • Pluggable render service
    • Render profiles with inheritable property sets and device name matching
    • Render-to-texture cache
    • Render effect chain
    • Person renderer with vertex shader texture coordinate calculation, phong lighting via UBOs + emissive textures
    • Structure renderer with solid, cutaway, ghost and debug modes
    • Structure shader with vertex shader texture coordinate calculation, bump mapping, phong lighting via UBOs + emissive textures
  • Scene manager with pluggable layers
    • Camera
    • Clear
    • Fog
    • Light
    • Particle
    • Skybox
  • Structures
    • Individually transformable voxel elements
    • Voxel hidden face culling with allowances for cutaway modes
    • Multiple mesh options per voxel type
    • Multiple mesh selection options
    • Configurable voxel batching (fixed size, buffer-limited size)
    • Fast membership and modification tests
    • Serialize, clone
    • Structure merge assembly or non-merge population based on special in-structure marker voxels
    • Fast, sparse per-voxel variant property assignment
  • Star catalog
    • On-demand repeatable random star generation
    • Multiple-star systems
    • Random planet generation with habitability assessment
  • Game scenarios
  • Timers
    • Independent engine frame, game frame and screen frame counters
    • Time span calculation with localizable approximation
  • Views and UI
    • Space view with dynamic star background
    • Planetary view with terrain and structures
    • Experimental first person view (abandoned)
    • Console UI with pluggable activity pages
    • Game menu with load, save, delete saves, overwrite
    • SDK view (Structure editor, particle emitter editor, NPC editor)
  • Modified libraries
    • 5 Pixel Font by Christopher Gassib (GL3 layer)
    • cJSON by Dave Gamble (Cleanup, comments, entity decoding, conversion to C99 types)
    • GLSW by Philip Rideout (Rebuilt dependency resolution)
    • Mintomic by Jeff Preshing (Apple compatibility)
    • SOIL by Jonathan Dunmer (OpenGL ES caps)

Would giving up now be crazy? Yes, it would, and the option gets crazier every day.