doc 1 of 11

Survivors Game — Learning Plan

The goal: a top-down auto-battler in the survivors mold — your weapon fires on its own, enemies arrive in a ring and never stop coming, kills drop experience that flies to you, and every level-up is a choice that slowly turns you into a different game. Built from scratch, every line typed and understood.

This isn't a copy-along tutorial. Early stages give you complete, explained code; later stages hand you less and less finished work on purpose — a skeleton to fill in, then just requirements — because writing it yourself is where the learning happens. Every stage ends with checks you can verify in the engine on your own.

When you're done, all of this is true#

  • The player walks with weight — acceleration in, friction out — and can't leave the world
  • Enemies spawn in a ring around you and chase; the spawner respects a 300-enemy cap
  • Your weapon fires on a timer, and the hitbox is only live for the attack's active frames
  • Damage numbers float up when things get hurt; enemies die and drop experience
  • Experience flies to you in two phases — a little arc, then a chase
  • Leveling up pauses the world and offers three real choices that change your build
  • The whole game still runs at 60 fps with 300 enemies, and you can say why
  • Zero untyped declarations — the warning panel is clean
  • You can explain every script file without opening it

What you'll learn#

New here: the spawner as a scene, not a system · Area2D-only combat (hitbox/hurtbox) and physics layers as a contract · the animation-driven hit frame · auto-attacking weapons with real timing · drops and the magnet curve · the pause-and-choose level-up · profiling a crowded scene and deciding what to skip.

Practiced along the way: typed GDScript everywhere, CharacterBody2D movement, groups and an autoload for cross-scene lookups, signals, custom Resources, tweens, git as a working habit.

This is the project where steering and enemy AI stop being diagrams: part of what you build here is exactly the "a thousand agents" problem those shelves describe, and stage 08 is where you measure the difference.

House motto: aim for improvement every day. One stage is one sitting; if a stage regularly spills into tomorrow, it's sized wrong — shrink the bite, not the ambition.

Stages#

#What you build (observable)What you learn
01The project itself; a player that walks with weightproject setup · CharacterBody2D · acceleration via move_toward
02One chasing enemy, and a spawner that won't stopPath2D ring spawning · fake velocity · the enemy-cap decision
03Thirty enemies that are all slightly differentper-enemy stats · a dead-zone bug you predict first · frame-skipping
04Hits that do damage, knockback, floating numbers, deathArea2D hitbox/hurtbox · physics layers · the damage path
05An auto-attacking weapon whose hitbox is live for exactly the right framesanimation-driven hit frames · where damage belongs
06Kills leave experience, and experience finds youthe two-phase magnet · a signal seam you're tempted to skip
07A paused menu with three choices that change the buildpause and process_mode · upgrade Resources · the exp curve
08The same game at 300 enemies, still at 60 fpsthe Monitor panel · per-frame budgets · a text pool
09Death, restart, a score — and proof the slice is yoursscene reload · rebuild-from-memory · self-review

A few stages ask you to make a real design decision between two sound options — those choices are flagged where they appear, with the trade-offs laid out. Record what you chose and why in the architecture document; future-you will thank you.