> cat /wizhelp/wizadvanced3

========================================================================
                  Advanced: Puzzle Systems
========================================================================

Creating interactive puzzles and complex room mechanics.

COLOR SEQUENCE PUZZLE:
Example from TDCJ prison area:

```python
# Terminal room tracks the puzzle state
terminal_room = Room(
    name="puzzle_terminal",
    description="A computer terminal displays colored lights."
)

# Initialize puzzle
terminal_room.color_sequence = ['red', 'blue', 'green', 'yellow']
terminal_room.switches_flipped = []
terminal_room.puzzle_complete = False

# Switch rooms
switch_room = Room(name="red_switch_room")
switch_room.switch_color = 'red'
switch_room.switch_flipped = False
```

SWITCH HANDLER:
```python
def handle_flip(player, params):
    if params != "switch":
        player.message("Flip what?")
        return
    
    room = player.game_state.rooms.get(player._location)
    
    # Check if already flipped
    if room.switch_flipped:
        player.message("The switch is already flipped.")
        return
    
    # Flip it
    room.switch_flipped = True
    color = room.switch_color
    
    # Update puzzle state
    terminal = player.game_state.rooms.get("puzzle_terminal")
    terminal.switches_flipped.append(color)
    
    # Check sequence
    pos = len(terminal.switches_flipped) - 1
    if terminal.switches_flipped[pos] != terminal.color_sequence[pos]:
        # Wrong! Reset
        player.message("BZZT! Wrong sequence. Resetting...")
        reset_puzzle()
    elif len(terminal.switches_flipped) == 4:
        # Complete!
        complete_puzzle(player)
    else:
        # Correct so far
        remaining = 4 - len(terminal.switches_flipped)
        player.message(f"Click! {remaining} switches remain...")
```

RIDDLE DOORS:
```python
def riddle_door(player):
    # Store riddle state on player
    if not hasattr(player, 'riddle_attempts'):
        player.riddle_attempts = 0
    
    return False, "A voice speaks: 'What has hands but cannot clap?'"

# Add command to room
def answer_riddle(player, params):
    if "clock" in params.lower():
        player.message("Correct! The door swings open.")
        # Remove the can_traverse restriction
        for exit in room.exits:
            if exit.name == "north":
                del exit.can_traverse
    else:
        player.riddle_attempts += 1
        if player.riddle_attempts >= 3:
            player.message("Wrong! You are teleported away!")
            player.move("entrance")
        else:
            player.message("Wrong answer. Try again.")

room.custom_commands = {"answer": answer_riddle}
```

LEVER PUZZLE:
```python
# Track lever states
room.levers = {
    'red': False,
    'blue': False,
    'green': False
}

def pull_lever(player, params):
    if not params:
        player.message("Pull which lever?")
        return
    
    color = params.lower()
    if color not in room.levers:
        player.message("No such lever.")
        return
    
    # Toggle lever
    room.levers[color] = not room.levers[color]
    state = "up" if room.levers[color] else "down"
    player.message(f"You pull the {color} lever {state}.")
    
    # Check solution (red up, blue down, green up)
    if (room.levers['red'] and 
        not room.levers['blue'] and 
        room.levers['green']):
        player.message("Click! A secret door opens!")
        # Add new exit
        room.exits.append(Exit("secret", "treasure_room"))

room.custom_commands = {"pull": pull_lever}
```

PRESSURE PLATES:
```python
def on_enter(player):
    # Weight puzzle
    total_weight = sum(item.weight for item in player.inventory.get_all())
    
    if total_weight > 100:
        player.message("Click! The pressure plate sinks.")
        # Open door
        for exit in room.exits:
            if exit.name == "east":
                exit.can_traverse = None
    else:
        player.message("Nothing happens. Perhaps you're too light?")

room.on_enter = on_enter
```

========================================================================    

> _