$ status: online · Szczecin · writing between builds
frame_budget.cpp — CodeNook
A dark desk at night with a monitor showing a code editor, glowing cyan on the keyboard
16.6 msthe whole budget, per frame

game dev blog · szczecin

The unglamorous parts of shipping games, written down.

CodeNook is one developer's notebook on engine internals, gameplay code and tooling — postmortems with real frame times, architecture breakdowns with the actual code, and the mistakes I only understood in hindsight. No listicles. No hype. Just the detail I wish someone had written for me.

Archive
140+ deep-dives
Languages
C++ · C# · shaders
Cadence
updated most weeks
Sponsored
zero, ever
140+deep-dive posts in the archive
4years of write-ups, no gaps
60+downloadable source samples
0sponsored posts, ever

latest

Fresh from the editor

Everything here started as a real problem in a real build. Read them free; members get the source, the project files and the follow-up Q&A.

Macro of a graphics card heatsink lit in cool blue

2026-07-14 · 18 min read

Cutting a frame from 22 ms to 16 without new hardware

A profiler-led teardown of a stutter I chased for two weeks. Turned out to be a cache-hostile update loop, not the GPU. Numbers, flame graphs and the two-line fix.

#profiling#performance#engine
Read the write-up →
Abstract dark 3D engine viewport with teal wireframe geometry

2026-06-30 · 24 min read

A hit-detection system that survived contact with players

How I moved from naive per-frame overlap checks to a swept-shape approach that felt fair — including the edge cases players found within an hour of launch.

#gameplay#physics#architecture
Read the write-up →
Close-up of a dark mechanical keyboard with cyan backlight

2026-06-12 · 15 min read

The in-house tool that paid for itself in a weekend

Building a tiny asset-import validator that caught the mistakes our whole team kept making. Small tools, big leverage — and why I stopped waiting for "official" ones.

#tooling#pipeline#editor
Read the write-up →
Dark workstation tower with soft teal indicator lights in a dim room

2026-05-28 · 21 min read

Save systems are harder than the game they save

Versioning, migration and the day a patch corrupted three hours of someone's progress. A design for save data that can change shape without breaking old files.

#serialization#shipping#postmortem
Read the write-up →

grep -r ~/archive

The back catalogue, at a glance

A slice of what's in the archive. Titles are free to read; the src column marks the posts whose source, project files and benchmarks are unlocked with Pro.

Recent CodeNook posts with date, tags, read time and access
DateTitleTagsReadsrc
2026-07-14Cutting a frame from 22 ms to 16 ms#profiling #engine18m◆ Pro
2026-06-30Hit-detection that survived players#gameplay #physics24m◆ Pro
2026-06-12The tool that paid for itself in a weekend#tooling #pipeline15mfree
2026-05-28Save systems are harder than the game#serialization #shipping21m◆ Pro
2026-05-09A fixed timestep, explained line by line#physics #engine19m◆ Pro
2026-04-22Why my entity store got 3× faster#data-oriented #perf17mfree

140+ more where these came from — four years of write-ups with no gaps and no sponsored posts. Members read the whole thing in one place.

series

Long threads worth following

Some subjects don't fit in one post. These run over several, building on each other — start at part one and read forward.

01

Writing a small engine

From an empty main() to a rendering loop, an entity store and a frame allocator — every decision explained, nothing skipped.

7 parts · code included
02

Gameplay feel

Coyote time, input buffering, camera lag and screen shake — the tiny systems that separate stiff from satisfying.

5 parts · with demos
03

Shipping on a deadline

Cut lists, bug triage, the last-week freeze and the postmortem — how a project actually crosses the line.

4 parts · real timelines
04

Data-oriented, honestly

What actually got faster when I restructured for cache locality — and where the pattern quietly made things worse.

6 parts · benchmarks

this month's deep dive

How a fixed timestep quietly fixed our physics

Our jumps felt different on every machine. The culprit wasn't the physics math — it was tying it to a variable frame rate. This one walks through the accumulator loop line by line, the interpolation that keeps rendering smooth, and the two bugs the change introduced.

  • Why your update rate and your frame rate should never be the same number
  • The interpolation that removes the judder a fixed step introduces
  • Spiral-of-death protection when a machine can't keep up
Read the full deep dive
Dark 3D engine viewport with teal wireframe physics shapes

tail -f ~/members.thread

From the members' thread

Unedited replies from the Pro thread — the working programmers who read the write-ups, pull the source and argue the trade-offs in the comments.

  • Pixel-art avatar of ola_dev

    @ola_devgameplay programmer · Unity

    The fixed-timestep deep dive was the first thing that made the accumulator loop click for me. I'd copied that pattern from three tutorials and never understood the interpolation until this. Shipped the change the same week — jumps finally feel identical on the QA laptop and my desktop.
  • Pixel-art avatar of mkwiatek_codes

    @mkwiatek_codesengine dev · custom C++

    What I pay for is the source, not the prose. The entity-store sample dropped my update loop from 4.1 ms to 1.3 ms once I stopped chasing pointers the way the post warned against. Real numbers, real diffs, and someone who answers when I post a follow-up.
  • Flat-geometric avatar of tess.builds

    @tess.buildssolo indie dev

    The save-system write-up saved me a rewrite. I asked in the thread about versioning an old field and got a concrete migration answer within a day — not a link, an actual approach with the edge case I'd missed.
  • Pixel-art avatar of rafcz_gamedev

    @rafcz_gamedevtools programmer

    No listicles, no sponsored fluff — that's rare now. The asset-validator post is basically the tool my whole team wanted; I forked the sample and had it running in an afternoon. Been a member two years and I read every post the day it lands.
A tidy dark developer desk with a laptop, notebook and coffee

whoami · the author

A programmer who ships, writing between builds

I've spent years on the code side of small and mid-size game teams — gameplay, engine plumbing, the tools nobody sees. CodeNook is where I write down what actually worked, what broke, and the numbers behind both, mostly so I stop relearning the same lessons.

Every post here comes from a real build, not a tutorial project. If I share a fix, I shipped it. If I share a mistake, I made it. The code samples are the ones I'd hand a teammate, cleaned up just enough to read.

// keyboard-first, opinion-second, always happy to be corrected in the members' thread

cat README.md

New here? Read in this order

140 posts is a lot to land on cold. If you're just arriving, this is the path most members say clicked for them — foundations first, then the fun.

  1. Start with the small engine series. It sets the vocabulary the rest of the blog leans on — loops, allocators, entity stores.
  2. Then the fixed-timestep deep dive. Once the loop makes sense, this is where physics stops feeling like magic.
  3. Move to gameplay feel. Coyote time, input buffering, camera lag — the posts people quote most.
  4. Finish with a postmortem or two. Read how the ideas survive contact with a real deadline.

membership

CodeNook Pro

The writing stays free to read. Pro is for developers who want the working parts — source, project files and a place to ask. One tier, month to month, cancel whenever. Price in Polish złoty.

// codenook_pro --monthly

Pro membership

39 zł / month

  • Full archive — every deep-dive, past and future
  • Downloadable source samples and project files
  • Private members' Q&A thread on every post
  • Early access to new write-ups before they're public
  • Vote on what I dig into next
Become a member — 39 zł/mo

What you're actually paying for

Not a paywall on the ideas — those stay open. Pro funds the time it takes to write things properly: to profile twice, to strip the code down to something readable, and to answer the "but what about…" questions in the thread.

"Cancelled after a busy month, came back the next. It was still there, no fuss." — a member

Prefer a year up front? Annual works out cheaper — mention it in the form and I'll set it up.

What free readers get versus CodeNook Pro members
What you getFreePro · 39 zł/mo
Read every article
Downloadable source samples
Full project files & benchmarks
Members' Q&A thread
Early access to new posts
Vote on what I write next
Sponsored postsnevernever

man codenook

Prefer to talk before you subscribe?

There's a person behind this, not a content team. Read the backstory or send a line — I answer my own inbox, usually within a day.

the changelog

New post? You'll know.

A short email when something goes up — the title, why it might matter to you, and a link. No drip campaigns, no upsells. Unsubscribe in one click.

Roughly one email a week. Your address goes nowhere else.

man codenook · questions

Before you join

The common questions, laid out like a man page — read top to bottom, no clicking to expand.

Q: Do I need to be an advanced programmer?
You need to be comfortable reading code. The posts assume you know a systems language and can follow a loop, but I explain the domain — engines, gameplay, tooling — from the ground up. Plenty of members are juniors reading to level up.
Q: What language are the samples in?
Mostly C++ and C#, with the occasional shader or script. The ideas travel, though — the reasoning matters more than the syntax, and I try to keep the samples engine-agnostic where I can.
Q: How often do new posts go up?
Most weeks, sometimes two, occasionally none if a piece needs more profiling. I'd rather be late than post filler. Members get everything first.
Q: Can I read a post before paying?
Yes — the articles are free to read. Pro unlocks the source samples, project files and the members' thread, plus the full back catalogue in one place.
Q: Can I cancel any time?
Any time, from your account, no email required. You keep access until the end of the month you've paid for.
Q: Do you take requests?
Members vote on upcoming topics and can pitch ideas in the thread. A good chunk of the archive started as someone's question.

git commit -m "joined"

Become a member

Fill this in and you'll get a payment link and your login by email — nothing is charged on this page. Questions first? Write to [email protected] or call +48 693 876 543.