annotate gamelib/scenes/cryo.py @ 94:ce23fad8ecb3

More complex shaped interactables
author Neil Muller <neil@dip.sun.ac.za>
date Tue, 24 Aug 2010 00:56:31 +0200
parents 542ede2896bb
children 7590586180f5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39
088a101f5b94 Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 35
diff changeset
1 """Cryo room where the prisoner starts out."""
088a101f5b94 Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 35
diff changeset
2
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
3 import random
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
4
86
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
5 from gamelib.state import Scene, Item, Thing, Result, \
94
ce23fad8ecb3 More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents: 91
diff changeset
6 InteractImage, InteractNoImage, InteractRectUnion
39
088a101f5b94 Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 35
diff changeset
7
28
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
8
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
9 class Cryo(Scene):
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
10
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
11 FOLDER = "cryo"
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
12 BACKGROUND = "cryo_room.png"
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
13
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
14 INITIAL_DATA = {
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
15 'accessible': True,
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
16 }
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
17
28
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
18 def __init__(self, state):
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
19 super(Cryo, self).__init__(state)
35
ebc76bc0c067 First item!
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
20 self.add_item(Triangle("triangle"))
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
21 self.add_item(TitaniumLeg("titanium_leg"))
86
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
22 self.add_thing(CryoUnitAlpha())
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
23 self.add_thing(CryoRoomDoor())
89
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
24 self.add_thing(CryoComputer())
35
ebc76bc0c067 First item!
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
25
ebc76bc0c067 First item!
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
26
ebc76bc0c067 First item!
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
27 class Triangle(Item):
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
28 "Test item. Needs to go away at some point."
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
29
35
ebc76bc0c067 First item!
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
30 INVENTORY_IMAGE = "triangle.png"
ebc76bc0c067 First item!
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
31
ebc76bc0c067 First item!
Simon Cross <hodgestar+bzr@gmail.com>
parents: 28
diff changeset
32
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
33 class TitaniumLeg(Item):
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
34 "Titanium leg, found on a piratical corpse."
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
35
91
542ede2896bb Link in femur inventory image.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 89
diff changeset
36 INVENTORY_IMAGE = "titanium_femur.png"
28
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
37
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
38
39
088a101f5b94 Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 35
diff changeset
39 class CryoUnitAlpha(Thing):
67
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
40 "Cryo unit containing titanium leg."
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
41
86
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
42 NAME = "cryo.unit.1"
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
43
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
44 INTERACTS = {
94
ce23fad8ecb3 More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents: 91
diff changeset
45 "unit": InteractRectUnion(((520, 430, 80, 50), (550, 470, 90, 60),
ce23fad8ecb3 More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents: 91
diff changeset
46 (600, 510, 60, 40)))
86
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
47 }
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
48
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
49 INITIAL = "unit"
67
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
50
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
51 INITIAL_DATA = {
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
52 'contains_titanium_leg': True,
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
53 }
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
54
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
55 def interact_without(self):
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
56 self.state.add_inventory_item('titanium_leg')
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
57 self.set_data('contains_titanium_leg', False)
78
6bfebfbce42e Partial message support
Neil Muller <neil@dip.sun.ac.za>
parents: 67
diff changeset
58 return Result("The corpse in this cryo unit has a prosthetic leg made out of titanium. You take it.")
67
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
59
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
60 def is_interactive(self):
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
61 return self.get_data('contains_titanium_leg')
39
088a101f5b94 Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 35
diff changeset
62
94
ce23fad8ecb3 More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents: 91
diff changeset
63 def get_description(self):
ce23fad8ecb3 More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents: 91
diff changeset
64 if self.get_data('contains_titanium_leg'):
ce23fad8ecb3 More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents: 91
diff changeset
65 return "A broken cryo chamber, with an poor unfortunate corpse inside"
ce23fad8ecb3 More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents: 91
diff changeset
66 return "A broken cryo chamber. The corpse inside is missing a leg"
ce23fad8ecb3 More complex shaped interactables
Neil Muller <neil@dip.sun.ac.za>
parents: 91
diff changeset
67
39
088a101f5b94 Add an example Thing to cryo scene.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 35
diff changeset
68
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
69 class CryoRoomDoor(Thing):
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
70 "Door to the cryo room."
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
71
86
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
72 NAME = "cryo.door"
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
73
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
74 INTERACTS = {
87
4c6fea1b242b Fix interact positions.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 86
diff changeset
75 "ajar": InteractImage(290, 260, "door_ajar.png"),
4c6fea1b242b Fix interact positions.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 86
diff changeset
76 "open": InteractImage(290, 260, "door_open.png"),
86
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
77 }
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
78
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
79 INITIAL = "ajar"
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
80
55
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
81 INITIAL_DATA = {
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
82 'open': False,
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
83 }
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
84
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
85 def interact_with_titanium_leg(self, item):
55
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
86 self.open_door()
78
6bfebfbce42e Partial message support
Neil Muller <neil@dip.sun.ac.za>
parents: 67
diff changeset
87 return Result("You wedge the titanium leg into the chain and twist. With a satisfying *snap*, the chain breaks and the door opens.")
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
88
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
89 def interact_without(self):
78
6bfebfbce42e Partial message support
Neil Muller <neil@dip.sun.ac.za>
parents: 67
diff changeset
90 return Result("It moves slightly and then stops. A chain on the other side is preventing it from opening completely.")
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
91
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
92 def interact_default(self, item):
78
6bfebfbce42e Partial message support
Neil Muller <neil@dip.sun.ac.za>
parents: 67
diff changeset
93 return Result(random.choice([
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
94 "Sadly, this isn't that sort of game.",
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
95 "Your valiant efforts are foiled by the Evil Game Designer.",
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
96 "The door resists. Try something else, perhaps?",
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
97 ]))
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
98
56
75bf3d3689e9 Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents: 55
diff changeset
99 def is_interactive(self):
75bf3d3689e9 Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents: 55
diff changeset
100 return not self.get_data('open')
75bf3d3689e9 Refactor thing interactivity and add "fake" bridge scene.
Jeremy Thurgood <firxen@gmail.com>
parents: 55
diff changeset
101
55
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
102 def open_door(self):
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
103 self.set_data('open', True)
86
593bddfacf18 Refactor Things a bit to render images.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 78
diff changeset
104 self.set_interact("open")
55
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
105 self.state.scenes['bridge'].set_data('accessible', True)
67
6b0f7364f3bf Inventory-related game state.
Jeremy Thurgood <firxen@gmail.com>
parents: 63
diff changeset
106 self.state.remove_inventory_item('titanium_leg')
55
2e2f6ff54780 Part of the cryo door puzzle.
Jeremy Thurgood <firxen@gmail.com>
parents: 41
diff changeset
107
63
3087be3463e0 Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents: 56
diff changeset
108 def get_description(self):
3087be3463e0 Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents: 56
diff changeset
109 if self.get_data('open'):
3087be3463e0 Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents: 56
diff changeset
110 return 'An open doorway leads to the rest of the ship'
3087be3463e0 Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents: 56
diff changeset
111 return 'A rusty door. It is currently closed'
3087be3463e0 Some framework support for better message handling
Neil Muller <neil@dip.sun.ac.za>
parents: 56
diff changeset
112
41
ad6f56bfa8b7 Cryo door, titanium leg and some interaction prototypes.
Jeremy Thurgood <firxen@gmail.com>
parents: 39
diff changeset
113
89
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
114 class CryoComputer(Thing):
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
115 "Computer in the cryo room."
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
116
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
117 NAME = "cryo.computer"
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
118
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
119 INTERACTS = {
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
120 "info": InteractImage(416, 290, "comp_info.png"),
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
121 "warn": InteractImage(416, 290, "comp_warn.png"),
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
122 "error": InteractImage(416, 290, "comp_error.png"),
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
123 }
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
124
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
125 INITIAL = "info"
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
126
4625efe69c37 Hook up cryo computer.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 87
diff changeset
127
28
0f25f7b9b37a Add loading of initial state.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff changeset
128 SCENES = [Cryo]