TeamSpecWishlist on Steam

Development blog

Articles about TeamSpec and its development process: networking, physics, rendering, and the engine changes underneath.
Latest · RenderingStacked Shaders in GodotHow TeamSpec stacks small shaders on top of any material in Godot: one compiled variant per material with every stacked shader behind a per-object bit, and what TeamSpec uses them for.Read the article
In this article
  1. Introduction
  2. The problem: Godot thinks in materials
  3. How I used to do it
  4. What I wanted instead
  5. Compile once per material, switch per object
  6. How one shader gets inside another
  1. EngineRunning TeamSpec's Integrated Server on Its Own ThreadHow TeamSpec's listen-host server moved off the main thread and onto a secondary SceneTree, the engine modifications it took, what gets shared between the trees, and the threading bugs that showed up along the way.7 July 2026 · updated 7 October 2026 · 14 min read
  2. NetworkingTeamSpec's Networking ArchitectureAn overview of TeamSpec's networking architecture: why MultiplayerSynchronizer and is_server() checks aren't enough, the server and client copies of every character, snapshots, input commands, prediction, lag compensation, projectiles, and how the server's per-tick work got fast enough.6 June 2026 · updated 7 October 2026 · 35 min read
  3. PhysicsThe Long Journey of Picking a Character Collision ShapeThe story of how TeamSpec's character collision shape evolved from a capsule to a cylinder to a box to a custom cylinder trace to the 16-sided convex polygon hull I eventually landed on. Updated July 2026: the hull survived, and the collision test underneath it got replaced with swept traces.5 June 2026 · updated 5 July 2026 · 19 min read
  4. NetworkingA Word on Networking in TeamSpecThis article talks about the challenges I am encountering and have overcome in TeamSpec's Net Code.13 December 2023 · 4 min read
  5. PhysicsAdvanced Character Controller PhysicsThis paper is about the theory behind implementing a comprehensive, multi purpose, and low level character controller. It is considered low level because all it needs from a physics engine is a collision detection algorithm that reports collision normals. I will be using Godot 4's 'move_and_collide()' function, a method native to the PhysicsBody3D class. Knowledge of vector algebra is required to understand this paper.19 January 2023 · 8 min read