Mercurial > rinkhals
annotate gamelib/equipment.py @ 190:c5ec3ff32d11
Commit regenerated splash images.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 04 Sep 2009 18:09:37 +0000 |
parents | 37af9e5dd292 |
children | 9d31cfc3afde |
rev | line source |
---|---|
84 | 1 """Stuff for animals to use.""" |
2 | |
3 import random | |
99
f5d56688943b
Added background music support, and daytime and night time music (really animal sounds, not music)
David Fraser <davidf@sjsoft.com>
parents:
84
diff
changeset
|
4 import sound |
84 | 5 |
6 class Equipment(object): | |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
7 IS_EQUIPMENT = True |
161
9b4213f6ea7f
improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
158
diff
changeset
|
8 DRAW_LAYER = 0 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
9 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
10 def __init__(self): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
11 self._buy_price = self.BUY_PRICE |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
12 self._sell_price = self.SELL_PRICE |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
13 self._name = self.NAME |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
14 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
15 def buy_price(self): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
16 return self._buy_price |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
17 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
18 def sell_price(self): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
19 return self._sell_price |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
20 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
21 def name(self): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
22 return self._name |
84 | 23 |
24 class Weapon(Equipment): | |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
25 IS_WEAPON = True |
161
9b4213f6ea7f
improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
158
diff
changeset
|
26 DRAW_LAYER = 10 |
84 | 27 |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
28 def _get_parameter(self, parameter, wielder): |
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
29 mod_attr = 'MODIFY_%s_%s' % (self.TYPE, parameter) |
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
30 param = getattr(self, parameter) |
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
31 return getattr(wielder.abode, mod_attr, lambda r: r)(param) |
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
32 |
84 | 33 def in_range(self, gameboard, wielder, target): |
34 """Can the lucky wielder hit the potentially unlucky target with this?""" | |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
35 return wielder.pos.dist(target.pos) <= self._get_parameter('RANGE', wielder) |
84 | 36 |
37 def hit(self, gameboard, wielder, target): | |
38 """Is the potentially unlucky target actually unlucky?""" | |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
39 if hasattr(self, 'HIT_SOUND'): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
40 sound.play_sound(self.HIT_SOUND) |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
41 roll = random.randint(1, 100) |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
42 base_hit = self._get_parameter('BASE_HIT', wielder) |
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
43 range_penalty = self._get_parameter('RANGE_PENALTY', wielder) |
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
44 return roll > (100-base_hit) + range_penalty*wielder.pos.dist(target.pos) |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
45 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
46 def place(self, animal): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
47 for eq in animal.equipment: |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
48 if is_weapon(eq): |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
49 return False |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
50 return True |
84 | 51 |
52 class Rifle(Weapon): | |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
53 TYPE = "GUN" |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
54 NAME = "rifle" |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
55 BUY_PRICE = 100 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
56 SELL_PRICE = 75 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
57 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
58 RANGE = 3 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
59 BASE_HIT = 55 |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
60 RANGE_PENALTY = 15 |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
61 HIT_SOUND = "fire-rifle.ogg" |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
62 |
146 | 63 CHICKEN_IMAGE_FILE = 'sprites/equip_rifle.png' |
64 | |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
65 class Knife(Weapon): |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
66 TYPE = "KNIFE" |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
67 NAME = "knife" |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
68 BUY_PRICE = 25 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
69 SELL_PRICE = 15 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
70 |
120
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
71 RANGE = 1 |
5621f5074c8d
Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
72 BASE_HIT = 70 |
189
37af9e5dd292
Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents:
174
diff
changeset
|
73 RANGE_PENALTY = 0 |
84 | 74 |
146 | 75 CHICKEN_IMAGE_FILE = 'sprites/equip_knife.png' |
76 | |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
77 class Armour(Equipment): |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
78 IS_ARMOUR = True |
161
9b4213f6ea7f
improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
158
diff
changeset
|
79 DRAW_LAYER = 5 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
80 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
81 def __init__(self): |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
82 super(Armour, self).__init__() |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
83 self.hitpoints = self.STARTING_HITPOINTS |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
84 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
85 def place(self, animal): |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
86 """Give additional lives""" |
167
1d4d2202ef9f
one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
161
diff
changeset
|
87 for eq in animal.equipment: |
1d4d2202ef9f
one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
161
diff
changeset
|
88 if eq.NAME == self.NAME: |
1d4d2202ef9f
one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
161
diff
changeset
|
89 return False |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
90 return True |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
91 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
92 def survive_damage(self): |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
93 self.hitpoints -= 1 |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
94 if self.hitpoints > 0: |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
95 self._sell_price = int(self._sell_price*self.hitpoints/float(self.hitpoints+1)) |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
96 return True |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
97 return False |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
98 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
99 class Helmet(Armour): |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
100 NAME = "helmet" |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
101 BUY_PRICE = 25 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
102 SELL_PRICE = 15 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
103 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
104 STARTING_HITPOINTS = 1 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
105 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
106 CHICKEN_IMAGE_FILE = 'sprites/helmet.png' |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
107 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
108 class Kevlar(Armour): |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
109 NAME = "kevlar" |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
110 BUY_PRICE = 100 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
111 SELL_PRICE = 75 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
112 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
113 STARTING_HITPOINTS = 2 |
158
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
114 |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
115 CHICKEN_IMAGE_FILE = 'sprites/kevlar.png' |
baf857805867
armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
146
diff
changeset
|
116 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
117 def is_equipment(obj): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
118 """Return true if obj is a build class.""" |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
119 return getattr(obj, "IS_EQUIPMENT", False) and hasattr(obj, "NAME") |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
120 |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
121 def is_weapon(obj): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
122 return is_equipment(obj) and getattr(obj, 'IS_WEAPON', False) |
84 | 123 |
174
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
124 def is_armour(obj): |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
125 return is_equipment(obj) and getattr(obj, 'IS_ARMOUR', False) |
ff168162974e
armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
167
diff
changeset
|
126 |
109
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
127 EQUIPMENT = [] |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
128 for name in dir(): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
129 obj = eval(name) |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
130 try: |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
131 if is_equipment(obj): |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
132 EQUIPMENT.append(obj) |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
133 except TypeError: |
48019afde338
Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents:
99
diff
changeset
|
134 pass |