view gamelib/scenes/cryo.py @ 67:6b0f7364f3bf

Inventory-related game state.
author Jeremy Thurgood <firxen@gmail.com>
date Mon, 23 Aug 2010 20:18:29 +0200
parents 3087be3463e0
children 6bfebfbce42e
line wrap: on
line source

"""Cryo room where the prisoner starts out."""

import random

from gamelib.state import Scene, Item, Thing


class Cryo(Scene):

    FOLDER = "cryo"
    BACKGROUND = "cryo_room.png"

    INITIAL_DATA = {
        'accessible': True,
        }

    def __init__(self, state):
        super(Cryo, self).__init__(state)
        self.add_item(Triangle("triangle"))
        self.add_item(TitaniumLeg("titanium_leg"))
        self.add_thing(CryoUnitAlpha("cryo.unit.1", (20, 20, 200, 200)))
        self.add_thing(CryoRoomDoor("cryo.door", (200, 200, 400, 300)))


class Triangle(Item):
    "Test item. Needs to go away at some point."

    INVENTORY_IMAGE = "triangle.png"


class TitaniumLeg(Item):
    "Titanium leg, found on a piratical corpse."

    INVENTORY_IMAGE = "titanium_leg.png"


class CryoUnitAlpha(Thing):
    "Cryo unit containing titanium leg."

    FOLDER = "cryo"
    IMAGE = "cryo_unit_alpha"

    INITIAL_DATA = {
        'contains_titanium_leg': True,
        }

    def interact_without(self):
        self.message("The corpse in this cryo unit has a prosthetic leg made out of titanium. You take it.")
        self.state.add_inventory_item('titanium_leg')
        self.set_data('contains_titanium_leg', False)

    def is_interactive(self):
        return self.get_data('contains_titanium_leg')


class CryoRoomDoor(Thing):
    "Door to the cryo room."

    FOLDER = "cryo"
    IMAGE = "cryo_door_closed"

    INITIAL_DATA = {
        'open': False,
        }

    def interact_with_titanium_leg(self, item):
        self.message("You wedge the titanium leg into the chain and twist. With a satisfying *snap*, the chain breaks and the door opens.")
        self.open_door()

    def interact_without(self):
        self.message("It moves slightly and then stops. A chain on the other side is preventing it from opening completely.")

    def interact_default(self, item):
        self.message(random.choice([
                    "Sadly, this isn't that sort of game.",
                    "Your valiant efforts are foiled by the Evil Game Designer.",
                    "The door resists. Try something else, perhaps?",
                    ]))

    def is_interactive(self):
        return not self.get_data('open')

    def open_door(self):
        self.set_data('open', True)
        self.state.scenes['bridge'].set_data('accessible', True)
        self.state.remove_inventory_item('titanium_leg')

    def get_description(self):
        if self.get_data('open'):
            return 'An open doorway leads to the rest of the ship'
        return 'A rusty door. It is currently closed'


SCENES = [Cryo]