Player Experience Goal

The game rewards curiosity. Players should feel the satisfaction of piecing together a hidden truth through exploration.

Game Objectives

Players are told at the start how much gold they need to collect. Gold is earned by mining blocks and solving puzzles embedded in the map. Beneath this surface loop lies a hidden investigation: Who orchestrated the Gold Rush, What happened to the people in the mine, and how to break free. Resolving the hidden thread leads to a Boss encounter and the true ending.

Target Audience

Players who enjoy environmental storytelling and puzzle-platformers like Hollow Knight, and who find satisfaction in discovering secrets that reframe the entire game.

Core System Showcase

Map System

Maps are built on a GridMap and stored as ScriptableObjects. An in-editor visual map editor allows configuration of tile types, map dimensions, and individual grid cells. Multiple maps link together into a larger connected world.

At runtime, the map loading system ensures that when a new map is loaded, the previous map remains unaffected and preserved — including any changes the player made to it. A single map can contain multiple map-loader tiles, each pointing to a different destination map ID.

/// <summary>
/// 方块类型枚举
/// </summary>
public enum BlockType
{
    Destructible,           // 可以被挖取破坏的方块
    Indestructible,         // 不能被挖取破坏的方块
    Regenerative,           // 被破坏后在一定时间之后会再生的方块
    Falling,                // 会自然下落的方块
    ChainReaction,          // 会连锁破坏的方块
    Climbable,              // 可以攀爬的方块(类似于梯子)
    Teleporter,             // 传送方块
    Explosive,              // 爆炸方块
    Checkpoint,             // 存档点方块
    MapLoader,              // 加载指定新地图的方块
    Path,                   // 路径地块(空地块)
    Death,                  // 死亡地块
    ItemGate,               // 物品门:需要特定物品才能通过
    GoldGate,               // 金币门:需要足够金币才能通过
    MonsterSpawn,           // 怪物生成方块:在地图加载时生成怪物
    MapAnchor,              // 地图定位点:确定地图加载时的对齐位置
    InventoryInteract,      // 背包交互方块:玩家靠近显示提示,按下交互键打开背包
    NextDayTrigger,         // 下一天触发方块:玩家靠近显示提示,按下交互键触发下一天循环
    BossSpawn,              // Boss生成方块:在地图加载时生成Boss
    RegenerativeFalling,    // 可再生的Falling方块:被破坏后会在一定时间后再生
    RegenerativeBomb,       // 可再生的Bomb方块:被破坏后会在一定时间后再生
    MonsterRespawn,         // 怪物重生方块:怪物死亡后一段时间会生成新的怪物
    Spike,                  // 地刺方块:对触碰的玩家、Boss、怪物造成伤害
    BossTrigger,            // Boss触发方块:玩家按E键交互后触发对话并开始Boss战斗
    PasswordLock            // 密码锁门:玩家靠近后弹出密码面板,输入正确密码后门消失

Block Types

The block system is the mechanical heart of the game. Every block carries an ID, name, sprite, block type, physics layer, and collision tag. The full set of block types:

  • Standard mineable block — destroyed after enough hits

  • Indestructible block — cannot be mined

  • Regenerating block — respawns after a set delay

  • Collectible block — drops a story or puzzle-related item when mined

  • Falling block — collapses after its support is removed; crushes characters beneath it and knocks the player sideways to the nearest open tile

  • Chain block — destroying one triggers all adjacent chain blocks in sequence

  • Climbable block — acts as a ladder; does not block movement

  • Teleport block — transports the player to its paired destination block

  • Explosive block — flashes as a warning, then detonates after a delay, destroying blocks within a radius

  • Checkpoint block — saves progress on contact; player respawns here on death

  • Map loader block — triggers loading of the next map segment when entered

  • Monster spawn tile — enemy spawn point; enemies respawn here after a delay

  • Death tile — instantly triggers death and respawn on contact

  • Door block — requires a specific item ID to be destroyed

  • Void block — invisible boundary block at map edges

Block Destruction Rules
When any block is destroyed, its grid position is replaced with an empty path tile. From there, type-specific logic executes: regenerating blocks restore themselves after a delay; falling blocks begin their collapse sequence and resolve their original grid position once settled; chain blocks propagate destruction outward to all adjacent chain blocks recursively; explosive blocks enter a countdown with a flashing animation before detonating and clearing surrounding blocks by physics layer.

Enemy

The enemy will remain stationary, periodically scanning to its left and right. Upon detecting the player on the same row with no obstructions in between, it will charge up and launch a dash in that direction—destroying any destructible blocks it collides with along the way—before entering a stunned state once the charge concludes.

Tool System

Tools are stored in the player's inventory and fall into different categories: drills (determine how many hits a block requires to break), documents (carry story text), keys (unlock specific door blocks), and fragments (combine with other fragments to craft new items) .

The inventory opens via a keypress, pausing all gameplay except the inventory panel itself. Hovering over a tool displays its description. Compatible tools can be combined directly in the inventory.

Player & Mining

The player moves horizontally and jumps with ground detection supporting both LayerMask and Tile component methods. Character facing flips automatically based on movement direction, and the animator updates accordingly.

Mining is mouse-driven: left click mines, the drill sprite follows the cursor's position and rotation, and mining is restricted to blocks within a configurable range. Each block type has a durability value determining how many hits it takes to destroy.

Problem Solving & Innovation

The core problem: two narrative threads that never connected

How the problem was identified - Playtest

December 4, 2025, I showed the game to my classmates for the first time and let them play it.

Through direct playtest observation. The feedback noted that the game loop was incomplete — players experienced the surface objective (mine gold, submit to the overseer) and the hidden storyline as two separate, disconnected experiences. Neither thread reinforced the other in the player's mind.

Steps taken to find the cause

The root cause was a pacing issue: players following the main objective had no reason to engage with the hidden storyline, and the game never created pressure that forced them to look deeper. The two threads ran in parallel rather than converging.

Plan after the playtest

The solution chosen

Rather than adding more explicit story hints, the design used the main objective itself as a trap. The daily gold requirement was set to increase each day, but the mine's size and total available gold remained fixed. Players who only focused on mining would eventually hit a mathematical dead end — not enough gold to open the next door. This made ignoring the hidden storyline a losing strategy, forcing players to ask why the cycle felt unsustainable and pushing them to investigate.

Evidence it worked - Playtest Video

The original playtest feedback listed the hidden plotline as a positive surprise — players who found it were genuinely pleased. The redesign's goal was to make that discovery not accidental but inevitable, by engineering the main loop to break in a way that pointed toward the hidden one. The before state was two parallel threads; the after state was a main loop that actively directed players toward the underlying truth.