AgentSkillsCN

godot-genre-puzzle

谜题游戏的专家级蓝图,包括撤销系统(通过命令模式实现状态回溯)、基于网格的逻辑(类似推箱子的机制)、非语言教程(通过关卡设计进行教学)、胜利条件检查、状态管理,以及视觉反馈(即时确认有效移动)。适用于逻辑谜题、物理谜题,或三消类游戏。触发关键词:puzzle_game、undo_system、command_pattern、grid_logic、non_verbal_tutorial、state_management。

SKILL.md
--- frontmatter
name: godot-genre-puzzle
description: "Expert blueprint for puzzle games including undo systems (Command pattern for state reversal), grid-based logic (Sokoban-style mechanics), non-verbal tutorials (teach through level design), win condition checking, state management, and visual feedback (instant confirmation of valid moves). Use for logic puzzles, physics puzzles, or match-3 games. Trigger keywords: puzzle_game, undo_system, command_pattern, grid_logic, non_verbal_tutorial, state_management."

Genre: Puzzle

Expert blueprint for puzzle games emphasizing clarity, experimentation, and "Aha!" moments.

NEVER Do

  • NEVER punish experimentation — Puzzles are about testing ideas. Always provide undo/reset. No punishment for trying.
  • NEVER require pixel-perfect input — Logic puzzles shouldn't need precision aiming. Use grid snapping or forgiving hitboxes.
  • NEVER allow undetected unsolvable states — Detect softlocks automatically or provide prominent "Reset Level" button.
  • NEVER hide the rules — Visual feedback must be instant and clear. A wire lighting up when connected teaches the rule.
  • NEVER skip non-verbal tutorials — Level 1 = introduce mechanic in isolation. Level 2 = trivial use. Level 3 = combine with existing mechanics.

Available Scripts

MANDATORY: Read the appropriate script before implementing the corresponding pattern.

command_undo_redo.gd

Command pattern for undo/redo. Stores reversible actions in dual stacks, clears redo on new action. Includes MoveCommand example.


Core Loop

  1. Observation: Player assesses the level layout and mechanics.
  2. Experimentation: Player interacts with elements (push, pull, toggle).
  3. Feedback: Game reacts (door opens, laser blocked).
  4. Epiphany: Player understands the logic ("Aha!" moment).
  5. Execution: Player executes the solution to advance.

Skill Chain

PhaseSkillsPurpose
1. Interactiongodot-input-handling, raycastingClicking, dragging, grid movement
2. Logiccommand-pattern, state-managementUndo/Redo, tracking level state
3. Feedbackgodot-tweening, juiceVisual confirmation of valid moves
4. Progressiongodot-save-load-systems, level-designUnlocking levels, tracking stars/score
5. Polishui-minimalismNon-intrusive HUD

Architecture Overview

1. Command Pattern (Undo System)

Essential for puzzle games. Never punish testing.

gdscript
# command.gd
class_name Command extends RefCounted

func execute() -> void: pass
func undo() -> void: pass

# level_manager.gd
var history: Array[Command] = []
var history_index: int = -1

func commit_command(cmd: Command) -> void:
    # Clear redo history if diverging
    if history_index < history.size() - 1:
        history = history.slice(0, history_index + 1)
        
    cmd.execute()
    history.append(cmd)
    history_index += 1

func undo() -> void:
    if history_index >= 0:
        history[history_index].undo()
        history_index -= 1

2. Grid System (TileMap vs Custom)

For grid-based puzzles (Sokoban), a custom data structure is often better than just reading physics.

gdscript
# grid_manager.gd
var grid_size: Vector2i = Vector2i(16, 16)
var objects: Dictionary = {} # Vector2i -> Node

func move_object(obj: Node, direction: Vector2i) -> bool:
    var start_pos = grid_pos(obj.position)
    var target_pos = start_pos + direction
    
    if is_wall(target_pos):
        return false
        
    if objects.has(target_pos):
        # Handle pushing logic here
        return false
        
    # Execute move
    objects.erase(start_pos)
    objects[target_pos] = obj
    tween_movement(obj, target_pos)
    return true

Key Mechanics Implementation

Win Condition Checking

Check victory state after every move.

gdscript
func check_win_condition() -> void:
    for target in targets:
        if not is_satisfied(target):
            return
    
    level_complete.emit()
    save_progress()

Non-Verbal Tutorials

Teach mechanics through level design, not text.

  1. Isolation: Level 1 introduces only the new mechanic in a safe room.
  2. Reinforcement: Level 2 requires using it to solve a trivial problem.
  3. Combination: Level 3 combines it with previous mechanics.

Common Pitfalls

  1. Strictness: Requiring pixel-perfect input for logic puzzles. Fix: Use grid snapping or forgiving hitboxes.
  2. Dead Ends: Allowing the player to get into an unsolvable state without realizing it. Fix: Auto-detect failure or provide a prominent "Reset" button.
  3. Obscurity: Hiding the rules. Fix: Visual feedback must be instant and clear (e.g., a wire lights up when connected).

Godot-Specific Tips

  • Tweens: Use create_tween() for all grid movements. It feels much better than instant snapping.
  • Custom Resources: Store level data (layout, starting positions) in .tres files for easy editing in the Inspector.
  • Signals: Use signals like state_changed to update UI/Visuals decoupled from the logic.

Reference