Alongside my game projects, I'm interested in digging deeper into some of the
technical foundations behind games and simulations.
These are areas I'm currently experimenting with.
Some will become standalone projects, while others will find their way into my
games.
C / C++
- Memory & data structures
- Pointers and manual memory management
- Data-oriented programming
- Performance and profiling
- Modern C++
- Parallelism
Game AI
- Steering behaviours
- Pathfinding
- A*
- Decision systems
- Tactical AI
- Learning
Simulation
- Particle systems
- N-body simulation
- Springs and constraints
- Cloth simulation
- Flocking / Boids
- Fluid simulation
- Terrain erosion
Optimisation
- Bin packing
- Scheduling
- Spatial partitioning
- Heuristics
- Genetic algorithms
- Parallelisation
Data Analysis
- NumPy
- Pandas
- Matplotlib
- Statistics
- Experimental design
- Performance analysis
- Visualisation
Why This?
I've spent a lot of time working on conventional web and backend software, so I'm particularly interested in problems where the computer is doing something computationally interesting.
Roadmap
Current priority
Continue developing Legends of Rahnok and complete the core-feature port to Godot 4.
The technical experiments below support this work
| Status |
Project |
Technical focus |
GamePasta output |
| Current |
Godot Terrain |
Procedural terrain, noise, terrain generation |
Terrain article + mini game + terrain tech demo |
| Current |
C Text RPG |
C, data structures, game architecture |
Terminal dungeon crawler |
| Future |
Simulation |
Godot, systems, components, decisions |
Tavern simulation game, Rahnok NPCs |
| Future |
Simulation |
emergent behaviour |
Faction system Legends of Rahnok |
| Future |
Pathfinding |
C, Graphs, BFS, Dijkstra, A* |
Pac-Man-style experiment + pathfinding article |
| Future |
Procedural Generation |
Godot, graph rewrite algorithm |
Dungeon exploration game, Legends of Rahnok |
| Future |
Dynamic Worlds |
Mutable terrain, dynamic pathfinding |
Digging / destructible-world experiment |
| Future |
Dynamic Worlds |
Obstacle placement, NPC memory |
Rahnok feature / article |
| Future |
2D Physics |
C, Raylib, vectors, physics, collision |
Physics article + Flappy Bird clone |
| Future |
Physics & Gravity |
Forces, gravity, integration, simulation |
Asteroids / Spacewar / Lunar Lander experiment |
| Future |
Game AI |
Game trees, minimax, agents |
Tic-Tac-Toe / turn-based AI experiment |
| Future |
Simulation |
Cellular automata, emergent behaviour |
Conway's Game of Life experiment |
| Future |
Ballistics |
Projectile motion, trajectory solving |
artillery game, 3D bow physics into Legends of Rahnok |
| Future |
Autonomous Agents |
Steering, Seek, Arrive, Pursuit, waypoints |
Racing / agent behaviour experiment |
| Future |
Raycasting |
C, Raylib, spatial computation, rendering |
Small raycast dungeon |
Current Projects
C Text RPG
Goal: Build a small text-based RPG from scratch in C, using the project to learn C fundamentals and implement my own data structures. Later, add a Raylib frontend and publish it on my website.
- [ ✓ ] Set up the C project and build system
- [ ✓ ] Create the terminal command loop
- [ ] Implement player, rooms, enemies and basic combat
- [ ] Build and use a dynamic array for inventory
- [ ] Build and use a hash table
- [ ] Represent the dungeon as a graph
- [ ] Separate game logic from the terminal interface
- [ ] Add a Raylib frontend
- [ ] Build the game for WebAssembly
- [ ] Publish the finished game on my website
Godot Terrain
Goal: Build a re usable terrain generation resource in Godot for use in Legends of Rahnok, Write an article / tutorial about how I implemented it. Build a tech demo
showcasing the terrain and deploy it to github page, publish a stand alone mini game featuring terrain.
- [ ✓ ] Build terrain generation algorithm in Godot
- [ ✓ ] Write an article about how it works
- [ ✓ ] Implement into Legends of Rahnok
- [ ] Deploy a tech demo
- [ ] Stand alone terrain exploration game
Learning goals
C Programming
- [ ] Build a command-line program from scratch
- [ ] Build a dynamic array using
malloc / realloc
- [ ] Build a linked list
- [ ] Build a stack and queue
- [ ] Build a hash table
- [ ] Build a binary tree
- [ ] Build a priority queue
- [ ] Build a graph representation
- [ ] Implement a memory-safe resource cleanup pattern
- [ ] Debug a deliberate memory leak
- [ ] Debug a deliberate buffer overflow
- [ ] Build a small C program using multiple source/header files
Game AI
Relevant resources:
Artificial Intelligence for Games — Ian Millington & John Funge
CS50 — Introduction to Artificial Intelligence
Search
- [ ] Build a DFS visualiser
- [ ] Build a BFS visualiser
- [ ] Build a Dijkstra visualiser
- [ ] Build an A* visualiser
- [ ] Compare search algorithms on the same maps
- [ ] Add weighted terrain to the pathfinding demo
- [ ] Add multiple agents using the pathfinder
Movement
- [ ] Build a Seek demo
- [ ] Build an Arrive demo
- [ ] Build a Pursue / Evade demo
- [ ] Build a Wander demo
- [ ] Build a Separation demo
- [ ] Combine multiple steering behaviours
- [ ] Build a simple crowd simulation
Simulation
Relevant resources:
Artificial Intelligence for Games — Ian Millington & John Funge
Numerical Methods in Scientific Computing — TU Delft
Particles
- [ ] Build a basic particle simulator
- [ ] Add gravity
- [ ] Add boundary collisions
- [ ] Add particle lifetime and emitters
- [ ] Add attractors
- [ ] Add multiple interacting forces
Physics
- [ ] Build an N-body gravity simulator
- [ ] Compare Euler and Verlet integration
- [ ] Measure energy conservation
- [ ] Experiment with timestep size
- [ ] Build a spring system
- [ ] Build a cloth simulation
- [ ] Build a Boids simulation
- [ ] Add predators to the Boids simulation
Performance
- [ ] Profile the N-body simulation
- [ ] Measure scaling as particle count increases
- [ ] Implement spatial partitioning
- [ ] Compare brute-force and spatial partitioning
- [ ] Implement Barnes-Hut
- [ ] Compare accuracy vs performance
Python & Data Analysis
Relevant resource:
University of Helsinki — Data Analysis with Python
Link
Data Analysis with Python
- [ ] Complete the NumPy section
- [ ] Complete the Matplotlib section
- [ ] Complete the Pandas section
- [ ] Complete the Data Manipulation section
- [ ] Complete the Statistical Analysis section
- [ ] Complete the Regression section
- [ ] Complete the Classification section
- [ ] Complete the Clustering section
- [ ] Complete the Machine Learning section
- [ ] Complete the Data Visualisation exercises
SQL
- [ ] Work through SQL window functions and CTEs
- [ ] Complete CMU Advanced SQL lectures
- [ ] Analyse electricity data using window functions and CTEs
- [ ] Analyse logistics data with joins, aggregation, CTEs and window functions.
- [ ] Optimise several slow queries using indexes and EXPLAIN ANALYZE
- [ ] Combine SQL + Python to analyse a real dataset
Operations Research & Optimisation
- [ ] Build a school timetable generator
- [ ] Build a delivery route planner
- [ ] Build a backpack/item packing optimiser
- [ ] Build a worker/job scheduling simulator
- [ ] Build a resource allocation experiment
Resources
Books
Courses
- CS50's Introduction to Artificial Intelligence
- University of Helsinki — Data Analysis with Python
data sets
Tools
- C
- C++
- Python
- NumPy
- Matplotlib
- Raylib
- CMake
The eventual goal is to develop a useful combination of skills,
And, most importantly, build interesting things along the way.