Skip to content
Pablo Rodriguez

Puzzle System

Create flexible puzzle mechanics based on simple lock-and-key principles that can support various puzzle types:

  • Arrow Component: Root for positioning control
  • Static Mesh: Visual representation of puzzle (door, barrier, chest)
  • Puzzle Logic: Validation system for solution checking
  • Arrow Component: Root for positioning
  • Static Mesh: Visual representation of puzzle piece (lever, button, orb)
  • Box Collision: Interaction detection
  • Puzzle Reference: Connection to main puzzle actor

Create interface-based communication between puzzle pieces and main puzzle:

// Puzzle Interface System
Interface_Puzzle_Piece(Actor) {
// Called when puzzle piece is activated
// Receives reference to the activating piece
AddActorToCollectedPieces(Actor);
ValidatePuzzleCompletion();
}

Create straightforward puzzle requiring all pieces to be collected:

  • Puzzle_Pieces Array: Instance editable array of required puzzle pieces
  • Puzzle_Pieces_Collected Array: Runtime tracking of activated pieces
  • Completion Logic: Compare array lengths for puzzle completion
// Basic Puzzle Completion
OnPuzzlePieceActivated(PuzzlePiece) {
Puzzle_Pieces_Collected.AddUnique(PuzzlePiece);
if (Puzzle_Pieces_Collected.Num() >= Puzzle_Pieces.Num()) {
// Puzzle Complete
DestroyActor(Self); // Remove puzzle barrier
SpawnCompletionEffects();
}
}

Configure puzzle pieces for interaction:

  • Puzzle Variable: Reference to main puzzle actor (instance editable)
  • Interaction Integration: Use existing Interface_Interact system
  • Visual Feedback: Effects when piece is activated

Create puzzles requiring specific activation order:

  • Passcode Boolean: Enable passcode mode for order-sensitive puzzles
  • Collected Pieces Validation: Check exact sequence match
// Passcode Puzzle Validation
OnPuzzlePieceActivated(PuzzlePiece) {
if (Passcode_Enabled) {
Puzzle_Pieces_Collected.Add(PuzzlePiece); // Allow duplicates
ValidateSequence();
} else {
Puzzle_Pieces_Collected.AddUnique(PuzzlePiece);
}
}
ValidateSequence() {
ForEach(piece in Puzzle_Pieces_Collected) {
expected_piece = Puzzle_Pieces[CurrentIndex];
if (piece != expected_piece) {
// Wrong sequence - reset puzzle
Puzzle_Pieces_Collected.Empty();
SpawnFailureEffects();
return;
}
}
// Sequence still valid - check if complete
if (Puzzle_Pieces_Collected.Num() >= Puzzle_Pieces.Num()) {
CompletePuzzle();
}
}

Provide clear feedback for puzzle interactions:

  • Niagara Location Sphere: Position for effect spawning
  • Success VFX: Green omnidirectional burst for completion
  • Failure VFX: Red omnidirectional burst for wrong sequence
  • Audio Integration: Sound effects for success and failure states
// Puzzle Feedback System
SpawnCompletionEffects() {
effect_location = Niagara_Location.GetWorldLocation();
SpawnSystemAtLocation(Green_Success_VFX, effect_location);
PlaySound2D(Success_Audio);
}
SpawnFailureEffects() {
effect_location = Niagara_Location.GetWorldLocation();
SpawnSystemAtLocation(Red_Failure_VFX, effect_location);
PlaySound2D(Failure_Audio);
}

Framework supports multiple puzzle variations:

  • Setup: 5 levers that must all be activated
  • Use Case: Unlock doors, disable barriers, activate mechanisms
  • Setup: 4 pillars that must be activated in specific order
  • Use Case: Combination locks, ritual sequences, security systems
  • Setup: Scattered objects that must all be found and activated
  • Use Case: Hidden switches, treasure hunt mechanics

Position puzzles strategically in levels:

  • Progression Gates: Block access to new areas until solved
  • Optional Content: Reward exploration with puzzle-gated treasures
  • Difficulty Scaling: Simple collection puzzles early, complex sequences later

Create specialized puzzle types:

  • Door Puzzle: Uses door mesh, blocks passage
  • Chest Puzzle: Uses treasure chest, contains rewards
  • Mechanism Puzzle: Uses machinery, activates environmental changes
  • State Changes: Visual/audio feedback when pieces activate
  • Progress Indication: Show player how many pieces remain
  • Environmental Integration: Puzzles that feel connected to world lore

The puzzle system provides engaging problem-solving gameplay while maintaining simple, extensible architecture that supports both basic collection challenges and complex sequence-based puzzles.