Mercurial > pyntnclick
view gamelib/scenes/cryo.py @ 158:7a21a594ad57
r150 Screenshot
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Wed, 25 Aug 2010 00:14:55 +0200 |
parents | 153dcb313057 |
children | 0db92b3b5833 |
line wrap: on
line source
"""Cryo room where the prisoner starts out.""" import random from albow.music import change_playlist, get_music, PlayList from pygame.colordict import THECOLORS from pygame.color import Color from gamelib import speech from gamelib.sound import get_sound from gamelib.cursor import CursorSprite from gamelib.state import Scene, Item, Thing, Result, \ InteractImage, InteractNoImage, InteractRectUnion, \ InteractAnimated from gamelib.constants import DEBUG class Cryo(Scene): FOLDER = "cryo" BACKGROUND = "cryo_room.png" INITIAL_DATA = { 'accessible': True, 'greet' : True } # sounds that will be played randomly as background noise MUSIC = [ 'drip1.ogg', 'drip2.ogg', 'creaking.ogg', 'silent.ogg', 'silent.ogg', ] def __init__(self, state): super(Cryo, self).__init__(state) self.add_item(TitaniumLeg("titanium_leg")) self.add_thing(CryoUnitAlpha()) self.add_thing(CryoRoomDoor()) self.add_thing(CryoComputer()) self.add_thing(GenericCryoUnit(2, "An empty cryo chamber.", "Prisoner 81e4-c8900480e635. Embezzlement. 10 years.", ((155, 430, 50, 35), (125, 450, 60, 35), (95, 470, 60, 35), (55, 490, 60, 55)))) self.add_thing(GenericCryoUnit(3, "A working cryo chamber. The frosted glass obscures the details of the occupant.", "Prisoner 9334-ce1eb0243bab. Murder. 40 years.", ((215, 430, 50, 35), (205, 450, 50, 35), (185, 470, 50, 35), (125, 505, 80, 40)))) self.add_thing(GenericCryoUnit(4, "A broken cryo chamber. The skeleton inside has been picked clean.", "Prisoner bfbc-8bf4c6b7492b. Importing illegal alien biomatter. 15 years.", ((275, 430, 50, 70), (255, 460, 50, 70), (235, 490, 50, 60)))) self.add_thing(GenericCryoUnit(5, "A working cryo chamber. The frosted glass obscures the details of the occupant.", "Prisoner b520-99495b8c41ce. Copyright infringment. 60 years.", ((340, 430, 50, 70), (330, 500, 60, 50)))) def enter(self): # Setup music pieces = [get_music(x, prefix='sounds') for x in self.MUSIC] background_playlist = PlayList(pieces, random=True, repeat=True) change_playlist(background_playlist) if self.get_data('greet'): self.set_data('greet', False) return Result("Greetings Prisoner id. You have woken early under" " the terms of the emergency conscription act to help with" " repairs to the ship. Your behaviour during this time will" " be added to your record and will be relayed to " " prison officials when we reach the destination." " Please report to the bridge.") def leave(self): # Stop music change_playlist(None) class TitaniumLeg(Item): "Titanium leg, found on a piratical corpse." INVENTORY_IMAGE = "titanium_femur.png" CURSOR = CursorSprite('titanium_femur_cursor.png', 47, 3) class CryoUnitAlpha(Thing): "Cryo unit containing titanium leg." NAME = "cryo.unit.1" INTERACTS = { "unit": InteractRectUnion(( (530, 430, 80, 50), (560, 470, 70, 50), (600, 510, 70, 40), )) } INITIAL = "unit" INITIAL_DATA = { 'contains_titanium_leg': True, } def interact_without(self): return Result(detail_view='cryo_detail') def get_description(self): if self.get_data('contains_titanium_leg'): return "A broken cryo chamber, with an poor unfortunate corpse inside." return "A broken cryo chamber. The corpse inside is missing a leg." class GenericCryoUnit(Thing): "Generic Cryo unit" INITIAL = 'unit' def __init__(self, number, description, detailed_description, areas): super(GenericCryoUnit, self).__init__() self.description = description self.detailed_description = detailed_description self.name = 'cryo.unit.%d' % number self.interacts = { 'unit' : InteractRectUnion(areas) } if DEBUG: # Individual colors to make debugging easier self._interact_hilight_color = Color(THECOLORS.keys()[number]) def interact_without(self): return Result(self.detailed_description) def get_description(self): return self.description class CryoRoomDoor(Thing): "Door to the cryo room." NAME = "cryo.door" INTERACTS = { "shut": InteractNoImage(290, 260, 99, 152), "ajar": InteractImage(290, 260, "door_ajar.png"), "open": InteractImage(290, 260, "door_open.png"), } INITIAL = "shut" INITIAL_DATA = { 'door': "shut", } def interact_with_titanium_leg(self, item): if self.get_data('door') == "ajar": self.open_door() return Result("You wedge the titanium femur into the chain and twist. With a satisfying *snap*, the chain breaks and the door opens.") elif self.get_data('door') == "shut": text = "You bang on the door with the titanium femur. It makes a clanging sound." speech.say(self.name, text) return Result(text, soundfile='clang.ogg') else: return Result("You wave the femur in the doorway. Nothing happens.") def interact_without(self): if self.get_data('door') == "shut": self.half_open_door() if self.get_data('door') != "open": return Result("It moves slightly and then stops. A chain on the other side is preventing it from opening completely.") else: self.state.set_current_scene('map') return None def interact_default(self, item): return Result(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 True def half_open_door(self): self.set_data('door', "ajar") self.set_interact("ajar") def open_door(self): self.set_data('door', "open") self.set_interact("open") self.state.scenes['bridge'].set_data('accessible', True) self.state.scenes['mess'].set_data('accessible', True) def get_description(self): if self.get_data('door') == "open": return 'An open doorway leads to the rest of the ship.' elif self.get_data('door') == "ajar": return "A rusty door. It can't open all the way because of a chain on the other side." return 'A rusty door. It is currently closed.' class CryoComputer(Thing): "Computer in the cryo room." NAME = "cryo.computer" INTERACTS = { "info": InteractAnimated(416, 290, ["comp_info.png", "comp_warn.png"], 10), "warn": InteractImage(416, 290, "comp_warn.png"), "error": InteractImage(416, 290, "comp_error.png"), } INITIAL = "info" class TitaniumLegThing(Thing): "Triangle in the cryo room." NAME = "cryo.titanium_leg" INTERACTS = { "leg": InteractImage(50, 50, "triangle.png"), } INITIAL = "leg" def interact_without(self): self.state.add_inventory_item('titanium_leg') self.state.current_scene.things['cryo.unit.1'].set_data('contains_titanium_leg', False) self.scene.remove_thing(self) return Result("The skeletal occupant of this cryo unit has an artificial femur made of titanium. You take it.") def get_description(self): return "This femur looks synthetic." class PlaqueThing(Thing): "Plaque on the detailed cryo chamber" NAME = "cryo.plaque" INTERACTS = { "plaque": InteractImage(150, 150, "triangle.png"), } INITIAL = "plaque" def interact_without(self): return Result("The plaque is welded to the unit. You can't shift it") def get_description(self): return "'Prisoner 98cc-764e646391ee. War crimes. 45 years." class CryoUnitWithCorpse(Scene): FOLDER = "cryo" BACKGROUND = "cryo_unit_detail.png" NAME = "cryo_detail" SIZE = (300, 300) def __init__(self, state): super(CryoUnitWithCorpse, self).__init__(state) self.add_thing(TitaniumLegThing()) self.add_thing(PlaqueThing()) SCENES = [Cryo] DETAIL_VIEWS = [CryoUnitWithCorpse]