Mistakes / Gotchas

Short, searchable list of things that cost us time.

stablegodotdebugging
On this page
Dialog correctly at bottom of screen
After the Control-anchor fix: dialog stays at the bottom of the viewport on a CanvasLayer.

High-signal only. Details live in Debugging Godot.

MistakeFix
Platformer template gravity in a top-down jamRemove gravity; drive velocity from Input.get_vector
WASD not in Input MapAdd keys to ui_* or custom actions
$Old/Path after UI restructureUpdate @onready / use groups → avoids null instance
Positioning Control like Node2DAnchors + offsets; CanvasLayer for HUD/dialog
Dialog at top of screenBottom anchors; negative offsets
lines = array into Array[Dictionary]lines.assign(array)
Off-by-one / repeating first dialog lineReset index; handle input once; advance then show
Assuming empty dialog is fineGuard is_empty(); provide fallback lines
--check-only autoload false positivesBoot a real scene
Screenshot offset by one roomawait RenderingServer.frame_post_draw
Headless never exits--quit-after
centered props on full-room canvasescentered = false
Enum insert shifts Station ids in .tscnRe-set exported ids
Touching nav regions without overlapOverlap walkable rects ~10px
Asking nav paths on frame 0await physics_frame before spawn
Guest script fails in --script modeMisleading CharacterBody2D assign error — use scene run
Rescaling room art to fix actor sizeScale characters only
Chairs as solid obstacles near standsSkip collision on tiny floor props
Double E opens and advances dialogis_open check + set_input_as_handled
Camera limits tighter than viewGrow room rect to viewport size / zoom

Would do next time

  • Prefer %UniqueName for dialog labels early.
  • Snapshot Station enum → string in scene files if Godot version allows clearer serialization.
  • Keep a permanent tools/verify_*.tscn instead of throwaway harnesses only.