> 2026-09-10
A two-person Project Big Mart working session that moved the game from its design outline into concrete class and component architecture. Most of the meeting went to sketching a UML-style class diagram — Player and GameState as orchestrators, plus UI, Enemy, and Items classes and reusable Movement, Animation, and Stamina components — alongside a running debate about composition-over-inheritance in Godot, where UI state should live, and how to structure the codebase now so a later multiplayer pass stays additive rather than a rewrite. The rest was a hands-on Godot walkthrough: touring the scene tree, inspector, and @export wiring, reading through the proto controller script, consolidating the loose controller into a dedicated Player scene with stamina fields, and committing the day's work to a personal branch. It closed on a long tangent about how refreshing it felt to design and code without AI, and where that leaves developer craft and identity.
- 01.Decision to move Project Big Mart from its design outline into concrete class/component architecture, sketching structure before writing more code
- 02.Progress since the last session: a player controller and a test environment scene exist in the repo, nothing beyond that yet
- 03.Draft class list — Player and GameState as orchestrators, plus UI, Enemy (store entities with AI behavior), and Items/Interactables
- 04.GameState responsibilities: task list and assignment, hauntings, paranormal events (possibly a subclass), win/loss conditions, and a shift timer/clock
- 05.Reusable node components identified: Movement, Animation, and Stamina
- 06.Player and enemy movement kept as separate components — input-driven vs. AI/algorithmic — rather than one shared class
- 07.Animation as a single shared component connected to both player and enemy nodes, keeping animation logic in one place
- 08.Composition-over-inheritance in Godot: reusable components (health bar, hitbox/hurtbox, movement) attached via @export slots instead of deep inheritance trees, with examples like reusing a health-bar component across entities or making an arbitrary object player-controllable by adding a movement component
- 09.Where UI state should live — settled on a UI overlay shown in the gameplay scene once the player starts, with UI values reflecting underlying player/game-state values; a UI state machine considered but deemed optional
- 10.Scene structure: a menu scene and a gameplay scene, with UI overlaid on gameplay
- 11.Multiplayer deferred — build single-player first but structure state around a central collective game-state tracker (the eventual server authority) so the later multiplayer pass stays additive (more conditionals, swapping hard-coded values for state-fed ones)
- 12.MVP scope re-confirmed from the prior night's notes: single-player first, one map, simple tasks, a few paranormal events, one stat
- 13.MVP uses stamina instead of health — a slowly draining, sanity-style meter that drains faster while sprinting or during certain activities; the store-wide haunting meter is separate level state and rises faster when paranormal events are solved
- 14.Inventory as a simple Roblox-style single-row hotbar — starts empty, items appear as picked up, with a holster/bag expansion floated for later
- 15.Departments handled through GameState and config-driven task assignment rather than a Department class or per-player job/training system (judged too rigid and less fun) — everyone is a generic associate given varied tasks
- 16.Tunable values (movement speeds, stamina drain) exposed through Godot's inspector via @export, overriding code defaults so tuning needs no code edits
- 17.Godot walkthrough — the scene/node tree, inspector, and script view, and how @export creates typed, type-safe slots for wiring a component node into a parent so the parent can call its functions
- 18.Read-through of the proto controller script: _ready() as the on-load/constructor step, mouse capture/release and look-around handling, a free-fly debug mode, and _physics_process as a 60fps per-physics-frame state observer
- 19.Controller movement math — read input, normalize, move_toward, move_and_slide (with a note not to remove move_and_slide) — plus a fix to the camera look/rotation clamp so it respects a scaled-up controller instead of the default height
- 20.Scene restructure — a dedicated Player scene holding the proto controller plus a stamina script, swapped into the game scene in place of the loose controller, with the player capsule scaled back up
- 21.Environment nodes (lighting, floor) grouped under a level/map node; a separate UI scene created under scenes/
- 22.Stamina fields added to the player script live — an exported max_stamina (int, 100) and an exported stamina defaulting to max; snake_case adopted as the naming convention; no minimum-stamina constant, just a <= 0 death threshold with a guard against negatives
- 23.Note that Godot's inspector shows an exported value as 0 until runtime because exported defaults resolve at runtime; missing script autocomplete traced to a stale Godot language server rather than a Copilot feature
- 24.Godot version mismatch between the two machines (4.7 vs a newer 4.x patch) — opening the project on a newer version marks files changed, forces a discard-before-pull, and risks build incompatibility
- 25.Version-control workflow — the day's work committed to a personal branch in the shared repo; forking considered but rejected to avoid juggling multiple repos, with a plan to grant push access and merge between personal branches; VS Code's 'generate commit message' feature (from Supermaven) noted alongside a preference for conventional commit messages
- 26.Testing kept to manual playtesting for now
- 27.Extended tangent on designing and coding without AI — working through architecture on pen and paper and how fulfilling it felt — and on AI's effect on developer craft and identity
- 28.Whether AI output will become indistinguishable from work made with intent and passion, across art and software
- 29.LLMs framed as pattern recognition and information banks with no internal motives, dependent on external input, with an argument that the GPT training approach may be plateauing and something more fundamental is needed for AGI
- 30.'Grokking' and generalization — visualizing it in a model's vector-embedding space, the origin of the name 'Grok', and AGI as a possible paradigm shift that may be centuries away, if it happens at all
- →Big Mart moves from design outline into class/component architecture, kept on scope with a UML-style class diagram
- →Build single-player first, with state structured around a central game-state tracker so multiplayer can be layered on later without a rewrite
- →Draft class/component list agreed — Player and GameState as orchestrators; UI, Enemy, and Items classes; separate Movement components for player and enemy; one shared Animation component; a Stamina component
- →Departments handled via GameState and config-driven task assignment — no Department class or per-player job system
- →MVP uses a stamina meter rather than health; inventory is a single-row Roblox-style hotbar
- →Proto controller consolidated into a dedicated Player scene (controller plus stamina) and swapped into the game scene; environment nodes grouped under a level node; a separate UI scene created
- →Version control: one shared repo with work on personal branches merged between them (no forks), with push access to be granted for that
- →Testing stays manual playtesting for now