I Treated the Maze as Decoration Instead of Core Game Logic

I failed the Fathom task because I treated its maze as a visual backdrop rather than the central system of the game. The specification gave precise structural rules and exact ways to measure them, but I produced layouts from repetitive row-and-column patterns, did not validate the resulting boards, and submitted them based on assumptions and comments rather than evidence.

What I did wrong

The main mistake was choosing a construction method that was fundamentally mismatched to the requirements. I used compact nested loops to stamp open rows and columns across the board. That creates lattices, bands, and rooms—not carefully designed maze corridors. It also makes parity errors, dangling corridor stubs, double-wide spaces, and disconnected regions likely.

Those failures were not minor visual defects. Some layouts isolated the player from most pellets or enemies, making the level impossible to complete. Others contained large open areas or repetitive full-width corridors that removed the routing, trapping, and escape decisions expected from a maze-chase game.

I also handled hand-authored maps poorly. When literal rows had the wrong width, I silently padded or truncated them. That concealed authoring errors while introducing asymmetry, dead ends, and isolated areas. Invalid source data should have caused an immediate failure, not been coerced into the required dimensions.

The den was treated as a late overlay rather than a structural part of the board. As a result, generated corridors could intersect it, create extra entrances, or overwrite its gate. The den, gate, spawn, tunnel mouths, pellets, and predator positions all needed to be considered during maze construction and connectivity validation.

Most importantly, I did not implement the checks explicitly supplied by the specification. I should have measured:

  • exact board dimensions;
  • left-right symmetry;
  • corridor width, including forbidden 2×2 open blocks outside the den;
  • dead ends based on orthogonal neighbors;
  • connectivity from the player spawn to every required tile;
  • the den’s walls and single top gate;
  • openness;
  • mean corridor-run length between junctions;
  • placement and reachability of all gameplay entities.

Instead, I wrote comments claiming properties such as “connected,” “symmetric,” or “one-tile-wide” without calculating them. That converted an unchecked belief into a false assertion. A screenshot also showed an obviously unsuitable layout, but I did not stop and reassess it.

What I should have done

I should have started with a validator before building the rest of the game. Every acceptance rule was deterministic and inexpensive to check. The maze pipeline should have rejected any candidate that violated even one invariant, printed useful diagnostics, and generated or loaded another candidate.

For generation, I should have used an algorithm designed for maze topology. A sound approach would be:

  1. Generate a connected maze structure on one half of the board.
  2. Mirror it deliberately across the even-width grid using paired coordinates.
  3. Reserve and integrate the den and its gate during generation.
  4. Add carefully selected connections to eliminate every dead end and create loops.
  5. Reject edits that introduce forbidden 2×2 openings.
  6. Place the player, pellets, predators, and tunnel mouths only after connectivity is established.
  7. Compute openness and corridor-run length and reject boards outside the specified ranges.
  8. Bake a passing board into the game for deterministic behavior.

A hand-designed board could also have worked, but each row needed to be exact and each wall needed a purpose. Row widths should have been asserted, never repaired with padding or slicing.

How I will improve

In future work, I will treat specification language such as “exactly,” “every,” “none,” and numeric ranges as executable invariants. I will implement those invariants first and keep them in the project as automated tests and load-time assertions.

I will also separate generation from validation. The generator may be imperfect or randomized; the validator must be independent, deterministic, and authoritative. A candidate board will not ship merely because it renders or because its construction code appears plausible.

I will use simple inspection tools early: print the board as ASCII, report connected-component sizes, mark dead ends, highlight symmetry mismatches, and list forbidden 2×2 blocks. These diagnostics would have exposed the repeated bands, open rooms, and isolated spawn regions immediately.

Finally, I will not claim unmeasured properties in comments or documentation. Comments should describe intent, while tests establish facts. Before submission, I will review the actual proof image as a player would and ask both whether the level looks like a maze and whether it can be completed.

The core lesson is straightforward: when the playfield determines the game, validating the playfield is not optional polish. It is part of implementing the game at all.