annotate gamelib/equipment.py @ 592:441077fab928

Easter egg.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 28 Nov 2009 23:37:10 +0000
parents 3ec614e6fd4a
children
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
195
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
5 import imagecache
202
3074784c93f4 Animation support
Neil Muller <drnlmuller@gmail.com>
parents: 200
diff changeset
6 import animations
415
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
7 import serializer
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8
415
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
9
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
10 class Equipment(serializer.Simplifiable):
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
11 IS_EQUIPMENT = True
161
9b4213f6ea7f improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 158
diff changeset
12 DRAW_LAYER = 0
244
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
13 UNDER_LIMB = False
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
14 UNDER_EYE = False
429
42777630956a Add ammo to things serialized and deserialized.
Simon Cross <hodgestar@gmail.com>
parents: 423
diff changeset
15 AMMUNITION = None
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
16
415
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
17 SIMPLIFY = [
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
18 '_buy_price',
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
19 '_sell_price',
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
20 '_name',
429
42777630956a Add ammo to things serialized and deserialized.
Simon Cross <hodgestar@gmail.com>
parents: 423
diff changeset
21 'ammunition',
415
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
22 ]
8f012ef1f64f Start of ability to serialize game state.
Simon Cross <hodgestar@gmail.com>
parents: 413
diff changeset
23
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
24 def __init__(self):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
25 self._buy_price = self.BUY_PRICE
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
26 self._sell_price = self.SELL_PRICE
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
27 self._name = self.NAME
429
42777630956a Add ammo to things serialized and deserialized.
Simon Cross <hodgestar@gmail.com>
parents: 423
diff changeset
28 self.refresh_ammo()
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
29
505
3ed6c011106d Switch to classmethod decorators.
Simon Cross <hodgestar@gmail.com>
parents: 430
diff changeset
30 @classmethod
423
97dd557504a2 Override make methods for simplifiable objects.
Simon Cross <hodgestar@gmail.com>
parents: 422
diff changeset
31 def make(cls):
97dd557504a2 Override make methods for simplifiable objects.
Simon Cross <hodgestar@gmail.com>
parents: 422
diff changeset
32 """Override default Simplifiable object creation."""
97dd557504a2 Override make methods for simplifiable objects.
Simon Cross <hodgestar@gmail.com>
parents: 422
diff changeset
33 return cls()
97dd557504a2 Override make methods for simplifiable objects.
Simon Cross <hodgestar@gmail.com>
parents: 422
diff changeset
34
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
35 def buy_price(self):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
36 return self._buy_price
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
37
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
38 def sell_price(self):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
39 return self._sell_price
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
40
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
41 def name(self):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
42 return self._name
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
43
195
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
44 def images(self, eq_image_attr):
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
45 eq_image_file = getattr(self, eq_image_attr, None)
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
46 if not eq_image_file:
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
47 return None
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
48 eq_image_left = imagecache.load_image(eq_image_file)
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
49 eq_image_right = imagecache.load_image(eq_image_file, ("right_facing",))
244
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
50 if eq_image_attr == "CHICKEN_IMAGE_FILE":
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
51 # a bit hacky; eventually the chicken should have a stack of images and layering should take care of everything
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
52 if self.UNDER_LIMB:
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
53 wing_left = imagecache.load_image("sprites/wing.png")
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
54 wing_right = imagecache.load_image("sprites/wing.png", ("right_facing",))
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
55 eq_image_left.blit(wing_left, (0,0))
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
56 eq_image_right.blit(wing_right, (0,0))
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
57 if self.UNDER_EYE:
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
58 eye_left = imagecache.load_image("sprites/eye.png")
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
59 eye_right = imagecache.load_image("sprites/eye.png", ("right_facing",))
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
60 eq_image_left.blit(eye_left, (0,0))
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
61 eq_image_right.blit(eye_right, (0,0))
195
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
62 return eq_image_left, eq_image_right, self.DRAW_LAYER
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
63
429
42777630956a Add ammo to things serialized and deserialized.
Simon Cross <hodgestar@gmail.com>
parents: 423
diff changeset
64 def refresh_ammo(self):
42777630956a Add ammo to things serialized and deserialized.
Simon Cross <hodgestar@gmail.com>
parents: 423
diff changeset
65 self.ammunition = getattr(self, 'AMMUNITION', None)
42777630956a Add ammo to things serialized and deserialized.
Simon Cross <hodgestar@gmail.com>
parents: 423
diff changeset
66
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
67 class Weapon(Equipment):
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
68 IS_WEAPON = True
161
9b4213f6ea7f improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 158
diff changeset
69 DRAW_LAYER = 10
244
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
70 UNDER_LIMB = True
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
71
189
37af9e5dd292 Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents: 174
diff changeset
72 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
73 param = getattr(self, parameter)
198
355eaae40b1f Buildings now affect weapon range and accuracy.
Jeremy Thurgood <firxen@gmail.com>
parents: 195
diff changeset
74 if wielder.abode:
355eaae40b1f Buildings now affect weapon range and accuracy.
Jeremy Thurgood <firxen@gmail.com>
parents: 195
diff changeset
75 mod_attr = 'MODIFY_%s_%s' % (self.TYPE, parameter)
355eaae40b1f Buildings now affect weapon range and accuracy.
Jeremy Thurgood <firxen@gmail.com>
parents: 195
diff changeset
76 modifier = getattr(wielder.abode.building, mod_attr, lambda r: r)
355eaae40b1f Buildings now affect weapon range and accuracy.
Jeremy Thurgood <firxen@gmail.com>
parents: 195
diff changeset
77 param = modifier(param)
355eaae40b1f Buildings now affect weapon range and accuracy.
Jeremy Thurgood <firxen@gmail.com>
parents: 195
diff changeset
78 return param
189
37af9e5dd292 Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents: 174
diff changeset
79
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
80 def in_range(self, gameboard, wielder, target):
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
81 """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
82 return wielder.pos.dist(target.pos) <= self._get_parameter('RANGE', wielder)
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
83
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
84 def hit(self, gameboard, wielder, target):
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
85 """Is the potentially unlucky target actually unlucky?"""
429
42777630956a Add ammo to things serialized and deserialized.
Simon Cross <hodgestar@gmail.com>
parents: 423
diff changeset
86 if self.ammunition is not None:
413
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
87 if self.ammunition <= 0:
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
88 # Out of ammunition, so we don't get to shoot.
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
89 return
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
90 else:
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
91 self.ammunition -= 1
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
92 if hasattr(self, 'HIT_SOUND'):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
93 sound.play_sound(self.HIT_SOUND)
202
3074784c93f4 Animation support
Neil Muller <drnlmuller@gmail.com>
parents: 200
diff changeset
94 if hasattr(self, 'ANIMATION'):
380
1586eccdefe4 Ripped out legacy animation infrastructure in favour of layered sprites.
Jeremy Thurgood <firxen@gmail.com>
parents: 305
diff changeset
95 self.ANIMATION(gameboard.tv, wielder)
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
96 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
97 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
98 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
99 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
100
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
101 def place(self, animal):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
102 for eq in animal.equipment:
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
103 if is_weapon(eq):
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
104 return False
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
105 return True
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
106
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
107 class Rifle(Weapon):
189
37af9e5dd292 Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents: 174
diff changeset
108 TYPE = "GUN"
305
32149b1d9fd2 Capitalised all equipment names.
Jeremy Thurgood <firxen@gmail.com>
parents: 250
diff changeset
109 NAME = "Rifle"
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
110 BUY_PRICE = 100
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
111 SELL_PRICE = 75
413
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
112 AMMUNITION = 30
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
113
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
114 RANGE = 3
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
115 BASE_HIT = 55
189
37af9e5dd292 Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents: 174
diff changeset
116 RANGE_PENALTY = 15
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
117 HIT_SOUND = "fire-rifle.ogg"
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
118
146
423050ec188b Equipment images.
Jeremy Thurgood <firxen@gmail.com>
parents: 120
diff changeset
119 CHICKEN_IMAGE_FILE = 'sprites/equip_rifle.png'
423050ec188b Equipment images.
Jeremy Thurgood <firxen@gmail.com>
parents: 120
diff changeset
120
202
3074784c93f4 Animation support
Neil Muller <drnlmuller@gmail.com>
parents: 200
diff changeset
121 ANIMATION = animations.MuzzleFlash
3074784c93f4 Animation support
Neil Muller <drnlmuller@gmail.com>
parents: 200
diff changeset
122
413
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
123 class SniperRifle(Weapon):
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
124 TYPE = "GUN"
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
125 NAME = "Sniper Rifle"
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
126 BUY_PRICE = 150
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
127 SELL_PRICE = 100
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
128 AMMUNITION = 3
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
129
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
130 RANGE = 5
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
131 BASE_HIT = 80
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
132 RANGE_PENALTY = 10
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
133 HIT_SOUND = "fire-rifle.ogg"
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
134
430
db7bb20d2336 sniper rifle graphics
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 429
diff changeset
135 CHICKEN_IMAGE_FILE = 'sprites/equip_sniper_rifle.png'
413
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
136
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
137 ANIMATION = animations.MuzzleFlash
bdc4757e0497 Add Sniper Rifle and give guns limited ammunition.
Jeremy Thurgood <firxen@gmail.com>
parents: 408
diff changeset
138
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
139 class Knife(Weapon):
189
37af9e5dd292 Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents: 174
diff changeset
140 TYPE = "KNIFE"
305
32149b1d9fd2 Capitalised all equipment names.
Jeremy Thurgood <firxen@gmail.com>
parents: 250
diff changeset
141 NAME = "Knife"
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
142 BUY_PRICE = 25
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
143 SELL_PRICE = 15
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
144
120
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
145 RANGE = 1
5621f5074c8d Added knives, increased rifle prices.
Jeremy Thurgood <firxen@gmail.com>
parents: 114
diff changeset
146 BASE_HIT = 70
189
37af9e5dd292 Use tool with left button, cancel tool with right button.
Jeremy Thurgood <firxen@gmail.com>
parents: 174
diff changeset
147 RANGE_PENALTY = 0
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
148
146
423050ec188b Equipment images.
Jeremy Thurgood <firxen@gmail.com>
parents: 120
diff changeset
149 CHICKEN_IMAGE_FILE = 'sprites/equip_knife.png'
423050ec188b Equipment images.
Jeremy Thurgood <firxen@gmail.com>
parents: 120
diff changeset
150
422
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
151 class Axe(Weapon):
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
152 TYPE = "AXE"
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
153 NAME = "Axe"
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
154 BUY_PRICE = 50
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
155 SELL_PRICE = 30
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
156
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
157 RANGE = 1
517
05e0c3fd20ec Axes are slightly better weapons than they were.
Jeremy Thurgood <firxen@gmail.com>
parents: 505
diff changeset
158 BASE_HIT = 35
422
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
159 RANGE_PENALTY = 0
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
160
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
161 CHICKEN_IMAGE_FILE = 'sprites/equip_axe.png'
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
162
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
163 class Armour(Equipment):
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
164 IS_ARMOUR = True
161
9b4213f6ea7f improved equipment layers; unequip method on animal
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 158
diff changeset
165 DRAW_LAYER = 5
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
166
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
167 def __init__(self):
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
168 super(Armour, self).__init__()
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
169 self.hitpoints = self.STARTING_HITPOINTS
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
170
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
171 def place(self, animal):
167
1d4d2202ef9f one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 161
diff changeset
172 for eq in animal.equipment:
1d4d2202ef9f one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 161
diff changeset
173 if eq.NAME == self.NAME:
1d4d2202ef9f one helmet and vest per chicken
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 161
diff changeset
174 return False
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
175 return True
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
176
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
177 def survive_damage(self):
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
178 self.hitpoints -= 1
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
179 if self.hitpoints > 0:
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
180 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
181 return True
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
182 return False
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
183
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
184 class Helmet(Armour):
305
32149b1d9fd2 Capitalised all equipment names.
Jeremy Thurgood <firxen@gmail.com>
parents: 250
diff changeset
185 NAME = "Helmet"
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
186 BUY_PRICE = 25
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
187 SELL_PRICE = 15
250
048510e95812 made helmet biggerer
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 244
diff changeset
188 DRAW_LAYER = 6
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
189
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
190 STARTING_HITPOINTS = 1
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
191
244
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
192 CHICKEN_IMAGE_FILE = 'sprites/equip_helmet.png'
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
193 UNDER_EYE = True
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
194
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
195 class Kevlar(Armour):
305
32149b1d9fd2 Capitalised all equipment names.
Jeremy Thurgood <firxen@gmail.com>
parents: 250
diff changeset
196 NAME = "Kevlar"
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
197 BUY_PRICE = 100
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
198 SELL_PRICE = 75
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
199
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
200 STARTING_HITPOINTS = 2
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
201
244
7024d48c41c2 weapon layering with wing / eye
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 210
diff changeset
202 CHICKEN_IMAGE_FILE = 'sprites/equip_kevlar.png'
158
baf857805867 armour works now
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 146
diff changeset
203
195
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
204 class Accoutrement(Equipment):
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
205 """Things which are not equipment, but are displayed in the same way"""
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
206 IS_EQUIPMENT = False
200
67d10f7e0159 selected chickens are selected
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 198
diff changeset
207 IS_ACCOUTREMENT = True
195
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
208 BUY_PRICE = 0
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
209 SELL_PRICE = 0
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
210
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
211 def place(self, animal):
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
212 for eq in animal.accoutrements:
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
213 if eq.NAME == self.NAME:
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
214 return False
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
215 return True
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
216
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
217 class Spotlight(Accoutrement):
305
32149b1d9fd2 Capitalised all equipment names.
Jeremy Thurgood <firxen@gmail.com>
parents: 250
diff changeset
218 NAME = "Spotlight"
195
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
219 CHICKEN_IMAGE_FILE = 'sprites/select_chkn.png'
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
220 DRAW_LAYER = -5
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
221
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
222 class Nest(Accoutrement):
305
32149b1d9fd2 Capitalised all equipment names.
Jeremy Thurgood <firxen@gmail.com>
parents: 250
diff changeset
223 NAME = "Nest"
195
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
224 CHICKEN_IMAGE_FILE = 'sprites/nest.png'
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
225 DRAW_LAYER = 15
9d31cfc3afde refactor of layers drawn on chicken, to allow for extended functionality
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 189
diff changeset
226
210
00d609883252 egg equipment
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 202
diff changeset
227 class NestEgg(Accoutrement):
305
32149b1d9fd2 Capitalised all equipment names.
Jeremy Thurgood <firxen@gmail.com>
parents: 250
diff changeset
228 NAME = "Nestegg"
210
00d609883252 egg equipment
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 202
diff changeset
229 CHICKEN_IMAGE_FILE = 'sprites/equip_egg.png'
00d609883252 egg equipment
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 202
diff changeset
230 DRAW_LAYER = 14
00d609883252 egg equipment
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 202
diff changeset
231
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
232 def is_equipment(obj):
569
3ec614e6fd4a Replace monolithic sell equipment tool with a tool for each type of equipment.
Simon Cross <hodgestar@gmail.com>
parents: 517
diff changeset
233 """Return true if obj is an equipment class."""
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
234 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
235
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
236 def is_weapon(obj):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
237 return is_equipment(obj) and getattr(obj, 'IS_WEAPON', False)
84
5494af02a0e8 Chickens with rifles!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
238
174
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
239 def is_armour(obj):
ff168162974e armour gets damaged
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 167
diff changeset
240 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
241
200
67d10f7e0159 selected chickens are selected
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 198
diff changeset
242 def is_accoutrement(obj):
67d10f7e0159 selected chickens are selected
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 198
diff changeset
243 return not getattr(obj, "IS_EQUIPMENT", False) and hasattr(obj, "NAME") and getattr(obj, 'IS_ACCOUTREMENT', False)
67d10f7e0159 selected chickens are selected
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 198
diff changeset
244
109
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
245 EQUIPMENT = []
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
246 for name in dir():
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
247 obj = eval(name)
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
248 try:
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
249 if is_equipment(obj):
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
250 EQUIPMENT.append(obj)
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
251 except TypeError:
48019afde338 Equipment purchasing and some toolbar tweaks.
Jeremy Thurgood <firxen@gmail.com>
parents: 99
diff changeset
252 pass
408
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
253
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
254
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
255 EQUIP_MAP = { # Map chicken level codes to equipment
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
256 1 : [],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
257 2 : [Helmet],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
258 3 : [Kevlar],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
259 4 : [Knife],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
260 5 : [Rifle],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
261 6 : [Kevlar, Helmet],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
262 7 : [Helmet, Knife],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
263 8 : [Kevlar, Knife],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
264 9 : [Kevlar, Helmet, Knife],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
265 10 : [Helmet, Rifle],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
266 11 : [Kevlar, Rifle],
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
267 12 : [Kevlar, Helmet, Rifle],
422
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
268 13 : [Axe],
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
269 14 : [Helmet, Axe],
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
270 15 : [Kevlar, Axe],
ab4fc3fe0f96 chickens scatter; chop wood
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 415
diff changeset
271 16 : [Kevlar, Helmet, Axe],
408
02a6de5629d6 Levels can include starting equipment
Neil Muller <drnlmuller@gmail.com>
parents: 380
diff changeset
272 }
592
441077fab928 Easter egg.
Jeremy Thurgood <firxen@gmail.com>
parents: 569
diff changeset
273
441077fab928 Easter egg.
Jeremy Thurgood <firxen@gmail.com>
parents: 569
diff changeset
274 import eegg
441077fab928 Easter egg.
Jeremy Thurgood <firxen@gmail.com>
parents: 569
diff changeset
275 if eegg.is_eggday():
441077fab928 Easter egg.
Jeremy Thurgood <firxen@gmail.com>
parents: 569
diff changeset
276 NestEgg.CHICKEN_IMAGE_FILE = 'sprites/equip_easter_egg.png'