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 |
|---|---|---|
| 01 | The project itself; a player that walks with weight | project setup · CharacterBody2D · acceleration via move_toward |
| 02 | One chasing enemy, and a spawner that won't stop | Path2D ring spawning · fake velocity · the enemy-cap decision |
| 03 | Thirty enemies that are all slightly different | per-enemy stats · a dead-zone bug you predict first · frame-skipping |
| 04 | Hits that do damage, knockback, floating numbers, death | Area2D hitbox/hurtbox · physics layers · the damage path |
| 05 | An auto-attacking weapon whose hitbox is live for exactly the right frames | animation-driven hit frames · where damage belongs |
| 06 | Kills leave experience, and experience finds you | the two-phase magnet · a signal seam you're tempted to skip |
| 07 | A paused menu with three choices that change the build | pause and process_mode · upgrade Resources · the exp curve |
| 08 | The same game at 300 enemies, still at 60 fps | the Monitor panel · per-frame budgets · a text pool |
| 09 | Death, restart, a score — and proof the slice is yours | scene 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.