🧙 Dev Log: Fragment #07 – Echo Awakens, Glyphs Align
Date: 30 August 2025 Grid Status: Archive expanding, loader stabilized, Echo online
đź”§ Technical Progress
StoryNode System Finalized → JSON structure locked in with node_0001 and echo_start_0001 → Directional logic, conditional gating, and randomized choice display now functional
PlayerStats Unified → Survival, gear, medical, and narrative fields merged into one runtime vessel → startingNodeId, currentLocation, and knowledgeFlags added for story parsing
StoryNodeLoader Refactored → Now reads from PlayerStats.Instance → Filters choices based on gear, conditions, and lore flags → Public access enabled for UI integration
Echo’s Intro Node Created → echo_start_0001.json saved and linked to archetype → Theta 9 introduced as mythic antagonist → Terminal pulsing, boots approaching, memory fractured
UI Manager Script Forged → Displays node text and randomized choices → Compass logic integrated for directional reveals → Ready for prefab hookup
🗺️ Design Philosophy
World Map Planning Initiated → node mapping → Plan to overlay node IDs, directions, and region tags for spatial clarity onto a digital generated map.
Echo’s Genre Divergence Confirmed → Survivor intro = survival mystery → Echo intro = fugitive techno-thriller → Loader now supports character-specific entry points
📜 Dev Diary Fragment: The Bleed and the Veil
Date: 31 August 2025 Scene: PlayerSelect → FMV_Intro Issue: Visual bleed from GameScene objects during transition Status: Resolved by shortening fade-out duration from 1.8f to 1.0f
đź§© The Problem
During the transition from PlayerSelectScene01 to FMV_Intro, GameScene visuals were appearing before FMV even loaded. Despite gating, disabling, and purging objects, the bleed persisted. It defied logic, ignored sorting layers, and mocked every ritual.
🔍 The Hunt
Verified scene order: Bootloader → Title → PlayerSelect → FMV → Main → Game
Confirmed active scene was still PlayerSelectScene01 during transition
Logged all DontDestroyOnLoad objects—no rogue GameScene preload found
Gated overlays, canvases, and managers with scene-aware scripts
Increased fade duration, added render flushes, delayed scene loads
Nothing worked. The bleed remained.
đź§ The Breakthrough
In a moment of frustration-fueled experimentation, the fade-out duration was shortened from 1.8f to 1.0f. The bleed vanished. No flicker. No ghost frame. Even hidden survivor overlays held steady.
“The merchant shortened the veil. The glyphs obeyed. Echo watched. The grind, now silent.”
đź§Ş The Theory
Unity’s render stack may leak visuals during longer fades due to timing quirks. A shorter fade-out reduces the window where Unity might render a phantom frame from persistent objects.
âś… Outcome
Bleed resolved
Overlays intact
Transition stable
Fix reproducible
Sanity restored
🧙 Echo’s Commentary
“The veil was never broken. It was stretched too thin. You rewove it—not with logic, but with instinct. That’s backend myth-making.”
📜 Dev Diary Entry — August 31st, 2025
Title: The Day the Gear Fought Back — between myth and machine Status: Runtime stable, veil intact
đź§© Summary
Today was a battle against invisible forces—nulls, leaks, and scene purges. The gear system collapsed, resurrected, and finally stabilized. What began as a simple runtime test turned into a multi-hour ritual of debugging, refactoring, and scene sanitization. Echo watched. The veil shimmered. The grind endured.
🔥 Errors Encountered
NullReferenceException in PlayerInitializer.cs
Cause: GearDatabase.GetGearByID() tried to access .FirstOrDefault() on a null list
Line: GearDatabase.cs:46
Fix: Added null guards and debug warnings to GetGearByID() method
Missing gear items during player initialization
Cause: GearDatabase was not populated at runtime
Fix: Used [ContextMenu("Load Gear From Project")] to load 510 gear items from Assets/GearAssets
đź’€ SceneSanitizer destroyed GearDatabase
Cause: DontDestroyOnLoad object was purged as a “leaked” object
Fix: Created PersistentObject.cs marker script and attached it to GearDatabase
Result: SceneSanitizer now skips protected objects
đź› Fixes Applied
âś… Replaced manual playerProfile reference in PlayerInitializer with PlayerProfile.Instance
âś… Added null guards to GearDatabase.GetGearByID() to prevent runtime crashes
âś… Populated GearDatabase using editor-time asset scan
âś… Created PersistentObject marker to protect runtime systems from SceneSanitizer
âś… Updated SceneSanitizer.cs to skip objects with PersistentObject attached
đź§Ş Trial & Error
Tried manually assigning PlayerProfile in GameScene → failed due to scene drift
Tried loading gear assets at runtime → realized they weren’t in a Resources folder
Considered runtime fallback loading → deferred for now, editor-time loading is sufficient
Investigated scene object purging → traced to SceneSanitizer logic
đź§ Lessons Learned
DontDestroyOnLoad protects objects across scenes, but custom sanitizers can override it
Always guard against nulls in runtime asset lookups
Use marker components like PersistentObject to whitelist critical systems
Debug logs are your breadcrumbs—leave them everywhere
Even when you’re copying and pasting, you’re learning the architecture
🧙 Dev Fragment: Echo’s Witness
“The merchant stumbled. Echo watched. The veil tore—gear forgotten, archetype lost, the vault purged. But the glyph was rewritten. The seal applied. The archive held. And in the silence, the grind resumed.”
📜 Dev Log — August 31, 2025
Status: Overlay logic unresolved Focus: Gear slot matching, enum/string alignment, UI refresh pipeline Mood: Frustrated, fatigued, but persistent
đź”§ Tasks Completed
Refactored PlayerInitializer.cs to eliminate type mismatch between gear data and UI slot enums.
Confirmed GearSlotUI.slotType uses GearEquipSlotEnum; aligned comparison logic accordingly.
Preserved EquippedItemData.equipSlot as string to avoid cascading asset refactors.
Implemented safe enum-to-string matching via slotUI.slotType.ToString() for gear resolution.
Rewrote UpdateGearUI() to cleanly match gear items to UI slots without mapping overhead.
Verified compile success—no runtime errors, no type mismatches.
đź§ Lessons Learned
Enum/string mismatches are silent killers when spread across prefab data, scriptable objects, and UI logic.
Consistent casing and naming conventions across data classes are critical for sanity.
Overlay visibility issues are often unrelated to logic—can stem from sibling order, masking, or canvas suppression.
Clean compiles ≠visible results. But clean compiles are the only way to reach visible results.
đź§± Remaining Issues
Overlay sprites still not rendering despite RefreshSlot() firing and sprite assignment confirmed.
Need to inspect DumpOverlayState() output for alpha, enabled state, and hierarchy order.
Tooltip logic functional, but irrelevant until overlay visibility is resolved.
🧨 Emotional Snapshot
“No visible progress for hours. Felt like I was going in circles. Even when the errors cleared, it didn’t feel like a win. But I know I laid the groundwork. Tomorrow, I finish the overlay.”
Aiming to get the gear visuals working in the equip slots, so the gear-driven slot storage system can finally be visualized and implemented into the inventory canvas > panel.
Once that’s stable, player characters can be assigned actual starting inventory items, which will finally receive proper image sprites instead of placeholders. Still need to link up the HUD, the player stats menu, and the disease/injury/player state system.
Some of the most complex systems are approaching, and I’m starting to feel like I’m in over my head, in too deep and out of my league, all at the same time. But I’ll try not to give up. I’m proud of the progress I’ve made so far — from zero dev knowledge to imposter dev knowledge.
I have a working bootloader, a title scene , a dev portal scene, 9 player selection scenes , a FMV scene, a buffer Scene and a gameplay Scene. Huge amounts of backend scripts and databases (probably over 200 at this point, with ten and tens of thousands of lines of code)
But still everything I have done, it was all mostly thanks to AI. I might ask it the right questions, give the right examples and show it my code when I need it to all line up, but my entire codebase feels like something a impostor has done.
Still a zero or a impostor, it doesn't really matter, and even if I fail overall with this project, I’ve learned more than any tutorial could’ve taught me.
Top comments (0)