annotate gamelib/equipment.py @ 175:a4e3d26d16f0

Fix tile image for guardtower.
author Simon Cross <hodgestar@gmail.com>
date Thu, 03 Sep 2009 23:12:54 +0000
parents ff168162974e
children 37af9e5dd292
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 """Stuff for animals to use."""
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
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
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
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
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
23
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
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
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
27
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28 def in_range(self, gameboard, wielder, target):
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29 """Can the lucky wielder hit the potentially unlucky target with this?"""
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
30 return wielder.pos.dist(target.pos) <= self.RANGE
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
31
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32 def hit(self, gameboard, wielder, target):
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
33 """Is the potentially unlucky target actually unlucky?"""
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
34 if hasattr(self, 'HIT_SOUND'):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
35 sound.play_sound(self.HIT_SOUND)
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
36 roll = random.randint(1, 100)
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
37 return roll > (100-self.BASE_HIT) + self.RANGE_MODIFIER*wielder.pos.dist(target.pos)
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
38
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
39 def place(self, animal):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
40 for eq in animal.equipment:
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
41 if is_weapon(eq):
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
42 return False
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
43 return True
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
44
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
45 class Rifle(Weapon):
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
46 NAME = "rifle"
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
47 BUY_PRICE = 100
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
48 SELL_PRICE = 75
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
49
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
50 RANGE = 3
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
51 BASE_HIT = 55
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
52 RANGE_MODIFIER = 15
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
53 HIT_SOUND = "fire-rifle.ogg"
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
54
146
423050ec188b Equipment images.
Jeremy Thurgood <firxen@gmail.com>
parents: 120
diff changeset
55 CHICKEN_IMAGE_FILE = 'sprites/equip_rifle.png'
423050ec188b Equipment images.
Jeremy Thurgood <firxen@gmail.com>
parents: 120
diff changeset
56
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
57 class Knife(Weapon):
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
58 NAME = "knife"
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
59 BUY_PRICE = 25
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
60 SELL_PRICE = 15
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
61
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
62 RANGE = 1
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
63 BASE_HIT = 70
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
64 RANGE_MODIFIER = 0
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
65
146
423050ec188b Equipment images.
Jeremy Thurgood <firxen@gmail.com>
parents: 120
diff changeset
66 CHICKEN_IMAGE_FILE = 'sprites/equip_knife.png'
423050ec188b Equipment images.
Jeremy Thurgood <firxen@gmail.com>
parents: 120
diff changeset
67
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
68 class Armour(Equipment):
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
69 IS_ARMOUR = True
161
9b4213f6ea7f improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 158
diff changeset
70 DRAW_LAYER = 5
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
71
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
72 def __init__(self):
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
73 super(Armour, self).__init__()
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
74 self.hitpoints = self.STARTING_HITPOINTS
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
75
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
76 def place(self, animal):
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
77 """Give additional lives"""
167
1d4d2202ef9f one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 161
diff changeset
78 for eq in animal.equipment:
1d4d2202ef9f one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 161
diff changeset
79 if eq.NAME == self.NAME:
1d4d2202ef9f one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 161
diff changeset
80 return False
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
81 return True
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
82
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
83 def survive_damage(self):
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
84 self.hitpoints -= 1
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
85 if self.hitpoints > 0:
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
86 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
87 return True
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
88 return False
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
89
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
90 class Helmet(Armour):
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
91 NAME = "helmet"
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
92 BUY_PRICE = 25
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
93 SELL_PRICE = 15
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
94
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
95 STARTING_HITPOINTS = 1
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
96
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
97 CHICKEN_IMAGE_FILE = 'sprites/helmet.png'
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
98
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
99 class Kevlar(Armour):
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
100 NAME = "kevlar"
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
101 BUY_PRICE = 100
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
102 SELL_PRICE = 75
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 = 2
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/kevlar.png'
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
107
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
108 def is_equipment(obj):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
109 """Return true if obj is a build class."""
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
110 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
111
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
112 def is_weapon(obj):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
113 return is_equipment(obj) and getattr(obj, 'IS_WEAPON', False)
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
114
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
115 def is_armour(obj):
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
116 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
117
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
118 EQUIPMENT = []
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
119 for name in dir():
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
120 obj = eval(name)
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
121 try:
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
122 if is_equipment(obj):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
123 EQUIPMENT.append(obj)
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
124 except TypeError:
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
125 pass