Overview
This week focused on pushing the project forward from core systems into a more playable loop and a cleaner front-end experience. I expanded the decal painting system with color selection and improved HUD feedback, while also making major upgrades to the procedural maze flow—start/end placement, spawn handling, and better in-level generation control. Midweek, I moved toward a more modular content pipeline by converting the room template into a Blueprint for future variety. To tie it together, I implemented a start menu level and GameInstance-driven settings flow, including a working maze preview in the menu with a camera rail that adapts to maze size.

Major Accomplishments
- Implemented a functional start menu flow (Level_Menu + GM_Menu + HUD_Menu + GI_Maze) to set maze size/seed, start game, quit, and generate random seed.
- Added a menu “Preview Maze” feature that generates a preview using chosen settings and adjusts camera rail position based on maze size.
- Upgraded the procedural maze system with automatic start placement, randomized exterior exit placement, and a guaranteed solvable path between start/end.
- Expanded the decal painting system with a 0–9 color picker and HUD preview that updates based on selected color.
- Converted the room template into a Blueprint to support future modular room variation and packaging into PCG modules.
Systems Developed or Updated
Decal Painting System
- Allows placing decals with selectable type, rotation, color changes, and removal.
- Added a color picker workflow: keys 0–9 map to assigned colors; selecting a color updates both the placed decal and the HUD preview.
- HUD preview now auto-updates available decal color indicators (currently hard-coded to a 10-color set).
- Added an “activated” boolean gate to simplify testing without removing the component.
- Current state: Functional (needs polish for runtime color configurability).

Procedural Maze Generation (PCG Host + Maze Logic)
- Generates a maze volume and ensures a valid path from start to exit.
- Replaced manual start trigger placement with automatic selection of the cell closest to maze center (with a +350 Z offset to prevent floor clipping).
- Exit placement now randomly selects from exterior perimeter points; removed dependence on trigger boxes for start/end logic.
- Adjusted endpoint scale to avoid intersection issues that caused multiple exit openings on corners.
- Player start now matches the maze start location; player is teleported to a spawned start marker once generation completes.
- Implemented the maze as a Blueprint Actor to better accommodate runtime logic and settings.
- Current state: Functional (workflow improvements pending).

Spawn / Load Handling (Dark Room Bootstrap)
- Uses a “dark room” spawn area while the maze generates, then teleports the player to the generated start marker.
- Works for now, but the transition needs improvement (input lock, reset timing, and ideally a fade/loading screen).
- Current state: Prototype.
Modular Room Template Blueprint
- Rebuilt the room template as a Blueprint to support future room variety (e.g., selectively hiding/removing walls).
- Plan is to bake this Blueprint into a packed level and use that as a PCG module.
- Current state: In Progress.
Material Color Variation Prototype
- Created a proof-of-concept material setup to introduce slight tint variation across meshes sharing the same texture/material.
- Intended to reduce repetition (especially on walls) without requiring many unique assets.
- Current state: Prototype.

Menu System + Settings Pipeline
- Added
Level_Menuas the game’s entry map withGM_MenuandHUD_Menu. - Created
GI_Mazeto store selected maze settings (size, seed, etc.). - Added
GM_Mazeto pass the chosen seed/size to the maze host for generation. - Set project defaults: Game Default Map =
Level_Menu, Default GameMode =GM_Menu, GameInstance =GI_Maze. - Implemented correct input mode switching (menu input vs in-game input) and cursor handling.
- Current state: Functional.

Problems Encountered and Solutions
Problem: Decal removal trace wouldn’t hit decals reliably in the maze.
Cause: The custom trace channel defaulted to Block, so too many things (likely player capsule/mesh) blocked the trace before it reached the decal collision sphere.
Solution: Set the DecalPlayer trace channel default to Ignore, then explicitly set Block only on the decal collision sphere.
Problem: Maze PCG host wouldn’t generate after moving logic into a Blueprint Actor.
Cause: The actor lacked a “volume-like” component, so PCG had no usable bounds context (unlike a typical PCG Volume setup).
Solution: Added a collision/volume component to provide bounds so the PCG graph could generate as expected.
Problem: GameInstance casting logic broke construction-script/editor testing for the maze actor.
Cause: Casting to the GameInstance failed in contexts where the GameInstance isn’t created (editor construction script / non-play runtime context).
Solution: Avoided relying on GameInstance casting in construction-time logic and kept runtime-only access patterns for play sessions.
Current Project State
The project is in an early prototype / system implementation phase, but major building blocks are now working together: procedural maze generation with automatic start/end handling, a functional decal painting workflow, and a start menu that drives maze settings into gameplay. The menu preview feature is a strong step toward a polished front-end, and the move toward modular room Blueprints sets up future content variety. Some areas are still clearly prototype (dark-room bootstrapping, transitions, and editor/runtime workflow quirks), but the core loop is becoming more cohesive.
Next Week Plan
- Improve the maze load transition: add input lock during generation and implement a fade/loading-style transition instead of relying on the dark room alone.
- Refine the menu preview workflow and ensure runtime generation settings behave consistently (especially around partitioning for final builds).
- Continue the modular room pipeline: bake Blueprint room templates into packed levels and validate them as PCG modules.
- Decide whether decal colors should be runtime configurable (and if so, convert the hard-coded color set into editable data).
- Tighten the maze host/editor workflow so construction-time previews don’t depend on runtime-only systems (GameInstance access, play-only data).

