annotate mamba/sprites.py @ 483:1e7d6f43928f

Name some unnamed things.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 17 Sep 2011 22:25:47 +0200
parents d760a309d0bf
children 4e0b097e657b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 from pygame.sprite import Sprite
199
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
2 from pygame import Rect
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3
212
e768056b0588 Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
4 from mamba.data import load_tile_image
199
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
5 from mamba.constants import TILE_SIZE, UP, DOWN, LEFT, RIGHT
248
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
6 from mamba.engine import FlipArrowsEvent
282
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
7 from mamba.sound import load_sound, play_sound
130
9bef49d6db86 Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 121
diff changeset
8 from mamba import mutators
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
10
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
11 COLOURS = {
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
12 'red': mutators.RED,
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
13 'blue': mutators.BLUE,
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
14 'yellow': mutators.YELLOW,
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
15 }
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
16
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
17
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
18 def colour_with_fittings(image_name, tileset, colour):
212
e768056b0588 Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
19 fittings_mutator = mutators.Overlay("%s-fittings" % (image_name,), tileset)
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
20 return image_name, (COLOURS[colour], fittings_mutator)
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
21
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
22
300
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
23 def get_detail_mutator(image_name, tileset):
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
24 return mutators.Overlay("%s-detail" % (image_name,), tileset)
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
25
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
26
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
27 def tile_sizify(pos):
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28 ts_x, ts_y = TILE_SIZE
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29 p_x, p_y = pos
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
30 return (ts_x * p_x, ts_y * p_y)
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
31
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32
230
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
33 def find_sprite(class_name):
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
34 cls = globals()[class_name]
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
35 assert isinstance(cls, type) and issubclass(cls, Sprite)
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
36 return cls
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
37
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
38
136
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
39 class SpriteImageVariants(object):
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
40 VARIANTS = {
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
41 '....': ('-0', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
42
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
43 'X...': ('-1', (mutators.R90,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
44 '.X..': ('-1', (mutators.R270,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
45 '..X.': ('-1', (mutators.NULL,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
46 '...X': ('-1', (mutators.R180,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
47
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
48 'XX..': ('-2o', (mutators.NULL,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
49 '..XX': ('-2o', (mutators.R90,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
50
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
51 'X.X.': ('-2a', (mutators.R180,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
52 'X..X': ('-2a', (mutators.R270,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
53 '.XX.': ('-2a', (mutators.R90,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
54 '.X.X': ('-2a', (mutators.NULL,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
55
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
56 '.XXX': ('-3', (mutators.R90,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
57 'X.XX': ('-3', (mutators.R270,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
58 'XX.X': ('-3', (mutators.NULL,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
59 'XXX.': ('-3', (mutators.R180,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
60
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
61 'XXXX': ('', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
62 }
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
63
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
64 def __init__(self, base_image_name):
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
65 self.base_image_name = base_image_name
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
66
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
67 def __call__(self, top, bottom, left, right):
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
68 variant_str = ''.join('X' if d else '.'
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
69 for d in [top, bottom, left, right])
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
70 variant_suffix, mutators = self.VARIANTS[variant_str]
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
71 return (self.base_image_name + variant_suffix, mutators)
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
72
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
73
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
74 class SolidSpriteImageVariants(SpriteImageVariants):
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
75 VARIANTS = {
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
76 '....': ('-0', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
77
144
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
78 'X...': ('-1', (mutators.R270,)),
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
79 '.X..': ('-1', (mutators.R90,)),
136
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
80 '..X.': ('-1', (mutators.NULL,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
81 '...X': ('-1', (mutators.R180,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
82
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
83 'XX..': ('', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
84 '..XX': ('', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
85
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
86 'X.X.': ('-2a', (mutators.R180,)),
144
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
87 'X..X': ('-2a', (mutators.R90,)),
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
88 '.XX.': ('-2a', (mutators.R270,)),
136
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
89 '.X.X': ('-2a', (mutators.NULL,)),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
90
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
91 '.XXX': ('', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
92 'X.XX': ('', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
93 'XX.X': ('', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
94 'XXX.': ('', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
95
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
96 'XXXX': ('', ()),
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
97 }
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
98
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
99
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
100 class BaseSprite(Sprite):
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
101 tileset = 'common'
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
102 variants_class = None
136
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
103 variants = None
180
d9ee0e50a78f Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents: 168
diff changeset
104 name = None
181
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
105 alive = True
130
9bef49d6db86 Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 121
diff changeset
106
168
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
107 def __init__(self, tileset=None, image_name=None, name=None,
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
108 mutators=()):
98
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 81
diff changeset
109 super(BaseSprite, self).__init__()
168
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
110 if name is not None:
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
111 self.name = name
98
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 81
diff changeset
112 if tileset is not None:
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 81
diff changeset
113 self.tileset = tileset
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 81
diff changeset
114 if image_name is not None:
144
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
115 self.image_name = image_name
130
9bef49d6db86 Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 121
diff changeset
116 self.image = self.load_image(image_name, mutators=mutators)
56
e730ec8b82e8 Some doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 50
diff changeset
117
98
7ce2d2d8381a Refactor BaseSprite.
Simon Cross <hodgestar@gmail.com>
parents: 81
diff changeset
118 def load_image(self, image_name, mutators=()):
212
e768056b0588 Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents: 207
diff changeset
119 return load_tile_image(image_name, self.tileset, mutators)
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
120
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
121 def set_tile_pos(self, tile_pos):
81
c8d6ca296884 Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents: 71
diff changeset
122 self.tile_pos = tile_pos
199
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
123 self.rect = Rect(tile_sizify(tile_pos), TILE_SIZE)
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
124
136
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
125 def get_variant(self, top, bottom, left, right):
144
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
126 if self.variants is None:
136
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
127 self.variants = self.variants_class(self.image_name)
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
128 return self.variants(top, bottom, left, right)
130
9bef49d6db86 Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 121
diff changeset
129
144
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
130 def use_variant(self, *args):
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
131 if self.variants_class is not None:
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
132 self.image = self.load_image(*self.get_variant(*args))
144
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
133
163
41e8d4ce3af2 TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 162
diff changeset
134
41e8d4ce3af2 TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 162
diff changeset
135 class TileSprite(BaseSprite):
41e8d4ce3af2 TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 162
diff changeset
136 def __init__(self, tile_char, solid=False, **kw):
41e8d4ce3af2 TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 162
diff changeset
137 super(TileSprite, self).__init__(**kw)
41e8d4ce3af2 TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 162
diff changeset
138 self.tile_char = tile_char
41e8d4ce3af2 TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 162
diff changeset
139 self.solid = solid
41e8d4ce3af2 TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 162
diff changeset
140
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
141 def get_solid(self, snake, segment):
144
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
142 return self.solid
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
143
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
144 def interact(self, world, segment):
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
145 if self.get_solid(world.snake, segment):
372
1655f8c0d96e The grammar nazi commit
Stefano Rivera <stefano@rivera.za.net>
parents: 359
diff changeset
146 article = 'a'
1655f8c0d96e The grammar nazi commit
Stefano Rivera <stefano@rivera.za.net>
parents: 359
diff changeset
147 if self.name[0] in 'aeiou':
1655f8c0d96e The grammar nazi commit
Stefano Rivera <stefano@rivera.za.net>
parents: 359
diff changeset
148 article = 'an'
1655f8c0d96e The grammar nazi commit
Stefano Rivera <stefano@rivera.za.net>
parents: 359
diff changeset
149 world.snake.crash('You hit %s %s' % (article, self.name))
181
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
150
50
1b725035b8ef Levels that are visible.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
151
71
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
152 class SingleImageTileSprite(TileSprite):
121
f670ef33ae2e Comment SingleImageTileSprite convention
Neil Muller <drnlmuller@gmail.com>
parents: 105
diff changeset
153 image_name = None # subclasses will override this
f670ef33ae2e Comment SingleImageTileSprite convention
Neil Muller <drnlmuller@gmail.com>
parents: 105
diff changeset
154
104
5b92ff941de3 Refactor sprites.
Jeremy Thurgood <firxen@gmail.com>
parents: 98
diff changeset
155 def __init__(self, **kw):
5b92ff941de3 Refactor sprites.
Jeremy Thurgood <firxen@gmail.com>
parents: 98
diff changeset
156 kw.setdefault('image_name', self.image_name)
168
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
157 kw.setdefault('name', self.name)
104
5b92ff941de3 Refactor sprites.
Jeremy Thurgood <firxen@gmail.com>
parents: 98
diff changeset
158 super(SingleImageTileSprite, self).__init__(**kw)
71
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
159
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
160
56
e730ec8b82e8 Some doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 50
diff changeset
161 class DoorSprite(TileSprite):
168
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
162 name = 'door'
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
163
104
5b92ff941de3 Refactor sprites.
Jeremy Thurgood <firxen@gmail.com>
parents: 98
diff changeset
164 def __init__(self, colour, **kw):
57
cd5ad2c45e2d Minor level fiddlery.
Jeremy Thurgood <firxen@gmail.com>
parents: 56
diff changeset
165 self.colour = colour
104
5b92ff941de3 Refactor sprites.
Jeremy Thurgood <firxen@gmail.com>
parents: 98
diff changeset
166 super(DoorSprite, self).__init__(**kw)
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
167 self.image = self.load_image(
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
168 *colour_with_fittings("door", self.tileset, colour))
71
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
169
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
170 def get_solid(self, snake, segment):
205
2b5956bedf64 Set colour of default new segment to colour of snake head.
Simon Cross <hodgestar@gmail.com>
parents: 203
diff changeset
171 return COLOURS[self.colour] != segment.colour
144
b292370c4548 Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents: 136
diff changeset
172
71
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
173
207
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
174 class DirectionalTile(SingleImageTileSprite):
234
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
175 def __init__(self, direction=RIGHT, **kw):
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
176 super(DirectionalTile, self).__init__(**kw)
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
177 self.set_direction(direction)
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
178
199
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
179 def set_direction(self, direction):
81
c8d6ca296884 Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents: 71
diff changeset
180 self.direction = direction
199
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
181 mutator = {
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
182 UP: mutators.UP,
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
183 DOWN: mutators.DOWN,
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
184 LEFT: mutators.LEFT,
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
185 RIGHT: mutators.RIGHT,
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
186 }[direction]
986e72d2cb4d Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents: 183
diff changeset
187 self.image = self.load_image(self.image_name, (mutator,))
81
c8d6ca296884 Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents: 71
diff changeset
188
207
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
189 def get_solid(self, snake, segment):
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
190 dx, dy = self.direction
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
191 sx, sy = segment.orientation
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
192 if not (dx + sx or dy + sy):
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
193 return True
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
194 return False
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
195
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
196
234
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
197 class ArrowSprite(DirectionalTile):
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
198 image_name = 'arrow-r'
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
199 name = 'arrow'
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
200
248
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
201 def rotate(self):
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
202 self.set_direction({LEFT: UP,
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
203 UP: RIGHT,
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
204 RIGHT: DOWN,
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
205 DOWN: LEFT}[self.direction])
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
206
385
80ba03bec6ad Make arrows work
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
207 def interact(self, world, segment):
386
d760a309d0bf Whoops, only check the head
Stefano Rivera <stefano@rivera.za.net>
parents: 385
diff changeset
208 if segment.is_head:
d760a309d0bf Whoops, only check the head
Stefano Rivera <stefano@rivera.za.net>
parents: 385
diff changeset
209 world.snake.force_new_direction(self.direction)
385
80ba03bec6ad Make arrows work
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
210 super(ArrowSprite, self).interact(world, segment)
80ba03bec6ad Make arrows work
Stefano Rivera <stefano@rivera.za.net>
parents: 372
diff changeset
211
248
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
212
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
213 class FlipArrows(SingleImageTileSprite):
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
214 image_name = 'flip-arrows'
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
215 name = 'flip'
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
216
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
217 def interact(self, snake, segment):
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
218 FlipArrowsEvent.post()
de3b4048e54a Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents: 246
diff changeset
219
234
530b2edea0e6 ARROWED
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 230
diff changeset
220
207
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
221 class EntrySprite(DirectionalTile):
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
222 image_name = 'arrow-r'
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
223 name = 'entrance'
dd2c735fdaf4 Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents: 205
diff changeset
224
71
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
225
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
226 class ExitSprite(SingleImageTileSprite):
287
d57b7f668028 Exity exits.
Jeremy Thurgood <firxen@gmail.com>
parents: 282
diff changeset
227 image_name = 'exit'
168
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
228 name = 'exit'
71
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
229
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
230 def interact(self, world, segment):
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
231 world.snake.exit_level()
213
7a9be9add4c7 Hook up exit.
Simon Cross <hodgestar@gmail.com>
parents: 212
diff changeset
232
71
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
233
244
c629dabe2038 Make tunnel arrows face in the right direction.
Simon Cross <hodgestar@gmail.com>
parents: 243
diff changeset
234 class TunnelSprite(DirectionalTile):
268
01c21e4f2997 Hook up tunnel image.
Simon Cross <hodgestar@gmail.com>
parents: 263
diff changeset
235 image_name = 'tunnel-r'
230
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
236 name = 'tunnel entrance'
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
237 tileset = 'lab'
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
238
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
239 def __init__(self, other_id, direction):
244
c629dabe2038 Make tunnel arrows face in the right direction.
Simon Cross <hodgestar@gmail.com>
parents: 243
diff changeset
240 direction = {
230
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
241 'north': UP, 'south': DOWN,
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
242 'east': LEFT, 'west': RIGHT,
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
243 }[direction]
244
c629dabe2038 Make tunnel arrows face in the right direction.
Simon Cross <hodgestar@gmail.com>
parents: 243
diff changeset
244 super(TunnelSprite, self).__init__(tile_char=None, direction=direction)
c629dabe2038 Make tunnel arrows face in the right direction.
Simon Cross <hodgestar@gmail.com>
parents: 243
diff changeset
245 self.other_id = other_id
230
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
246
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
247 def interact(self, world, segment):
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
248 head = world.snake.head
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
249 if segment is head and head.orientation == self.direction:
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
250 other = world.get_sprite(self.other_id)
252
8198492745b1 Try not to let head wander during teleporting (it's bad for your health).
Simon Cross <hodgestar@gmail.com>
parents: 249
diff changeset
251 head.shift_tile_and_pixels((other.tile_pos, self.direction))
230
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
252
e4f983b68ef5 Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents: 218
diff changeset
253
357
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
254 class ButtonSprite(SingleImageTileSprite):
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
255 image_name = 'button'
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
256 name = 'button'
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
257 tileset = 'lab'
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
258
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
259 def __init__(self, other_id):
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
260 super(ButtonSprite, self).__init__(tile_char=None)
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
261 self.other_id = other_id
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
262
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
263 def interact(self, world, segment):
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
264 head = world.snake.head
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
265 if segment is head:
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
266 other = world.get_sprite(self.other_id)
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
267 other.button_pushed()
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
268
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
269
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
270 class GateSprite(SingleImageTileSprite):
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
271 closed_name = 'closed_gate'
359
5ea0b6eb2831 simple buttons and gates
Neil Muller <drnlmuller@gmail.com>
parents: 357
diff changeset
272 open_image = 'floor'
357
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
273 name = 'gate'
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
274 tileset = 'lab'
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
275
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
276 def __init__(self):
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
277 self.image_name = self.closed_name
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
278 self.opened = False
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
279 super(GateSprite, self).__init__(tile_char=None)
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
280
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
281 def get_solid(self, snake, segment):
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
282 return not self.opened
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
283
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
284 def button_pushed(self):
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
285 self.opened = True
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
286 # Update image
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
287 self.image_name = self.open_image
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
288 self.image = self.load_image(self.image_name, mutators=())
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
289
ff1c39075452 Button and gate sprites
Neil Muller <drnlmuller@gmail.com>
parents: 323
diff changeset
290
71
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
291 class PuddleSprite(SingleImageTileSprite):
58557a89ec86 Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 57
diff changeset
292 image_name = 'puddle'
168
0fffb97db193 Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents: 164
diff changeset
293 name = 'puddle'
136
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
294 variants_class = SolidSpriteImageVariants
130
9bef49d6db86 Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 121
diff changeset
295
9bef49d6db86 Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 121
diff changeset
296 def __init__(self, variant=(0, 0, 0, 0), **kw):
9bef49d6db86 Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents: 121
diff changeset
297 super(PuddleSprite, self).__init__(**kw)
136
00ada2e29798 Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents: 135
diff changeset
298 self.image = self.load_image(*self.get_variant(*variant))
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
299
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
300 def get_solid(self, snake, segment):
181
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
301 if snake.can_swim():
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
302 return False
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
303 return True
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
304
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
305 def interact(self, world, segment):
183
045f6b4301eb Water washes.
Jeremy Thurgood <firxen@gmail.com>
parents: 182
diff changeset
306 segment.set_colour(segment.GREEN)
246
e54ba3f8f180 Fix call to interact.
Simon Cross <hodgestar@gmail.com>
parents: 244
diff changeset
307 super(PuddleSprite, self).interact(world, segment)
183
045f6b4301eb Water washes.
Jeremy Thurgood <firxen@gmail.com>
parents: 182
diff changeset
308
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
309
253
2a969e3445ae fire bad
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 252
diff changeset
310 class FireSprite(SingleImageTileSprite):
300
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
311 image_name = 'fire'
253
2a969e3445ae fire bad
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 252
diff changeset
312 name = 'fire'
300
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
313 variants_class = SolidSpriteImageVariants
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
314 detail = 'fire-detail'
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
315
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
316 def __init__(self, variant=(0, 0, 0, 0), **kw):
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
317 super(FireSprite, self).__init__(**kw)
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
318 self.image = self.load_image(*self.get_variant(*variant))
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
319
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
320 def load_image(self, image_name, mutators=()):
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
321 mutators += (get_detail_mutator(self.image_name, self.tileset),)
35ca26f8305a fire is now an orange puddle with a right-way-up red flame
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 294
diff changeset
322 return super(FireSprite, self).load_image(image_name, mutators)
253
2a969e3445ae fire bad
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 252
diff changeset
323
255
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
324 def get_solid(self, snake, segment):
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
325 if snake.flame_retardant():
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
326 return False
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
327 return True
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
328
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
329 def interact(self, world, segment):
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
330 segment.set_colour(segment.GREEN)
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
331 super(FireSprite, self).interact(world, segment)
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
332
253
2a969e3445ae fire bad
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 252
diff changeset
333
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
334 class EdibleTile(SingleImageTileSprite):
316
cd544a311f11 Move directory names into sound.py for simplicity
Neil Muller <drnlmuller@gmail.com>
parents: 306
diff changeset
335 sound_name = 'squeak.ogg'
282
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
336
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
337 def __init__(self, **kw):
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
338 if self.sound_name:
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
339 load_sound(self.sound_name, self.sound_name)
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
340 super(EdibleTile, self).__init__(**kw)
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
341
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
342 def interact(self, world, segment):
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
343 if not segment.is_head:
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
344 return
282
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
345 if self.sound_name:
56cd71696dff Use some sound files
Neil Muller <drnlmuller@gmail.com>
parents: 268
diff changeset
346 play_sound(self.sound_name)
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
347 world.snake.head.mouth_open()
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
348 self.eat(world.snake)
181
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
349 self.alive = False
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
350 self.kill()
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
351
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
352 def eat(self, snake):
218
10804ae58066 Open mouth when eating things
Stefano Rivera <stefano@rivera.za.net>
parents: 213
diff changeset
353 pass
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
354
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
355
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
356 class BigMouse(EdibleTile):
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
357 image_name = "rat-big"
483
1e7d6f43928f Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents: 386
diff changeset
358 name = 'rat-big'
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
359
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
360 def eat(self, snake):
203
8009742103e7 Add a segment when driving over the big rat.
Simon Cross <hodgestar@gmail.com>
parents: 202
diff changeset
361 snake.add_segment()
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
362
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
363
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
364 class SmallMouse(EdibleTile):
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
365 image_name = "rat-small"
483
1e7d6f43928f Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents: 386
diff changeset
366 name = 'rat-small'
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
367
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
368 def eat(self, snake):
202
498c1d659a94 Remove a segment when driving over the small rat.
Simon Cross <hodgestar@gmail.com>
parents: 200
diff changeset
369 snake.remove_segment()
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
370
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
371
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
372 class Frog(EdibleTile):
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
373 image_name = "frog"
483
1e7d6f43928f Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents: 386
diff changeset
374 name = 'frog'
162
7fbbe27120a9 Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents: 144
diff changeset
375
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
376 def eat(self, snake):
181
061d711ba570 Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents: 180
diff changeset
377 snake.mutate('amphibious')
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
378
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
379
249
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
380 class Snail(EdibleTile):
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
381 image_name = "snail"
483
1e7d6f43928f Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents: 386
diff changeset
382 name = 'snail'
249
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
383
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
384 def eat(self, snake):
263
c7c9d71ac6ea Lizards and snails are extra delicious.
Jeremy Thurgood <firxen@gmail.com>
parents: 255
diff changeset
385 snake.adjust_speed(-15)
249
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
386
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
387
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
388 class Lizard(EdibleTile):
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
389 image_name = "lizard"
483
1e7d6f43928f Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents: 386
diff changeset
390 name = 'lizard'
249
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
391
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
392 def eat(self, snake):
263
c7c9d71ac6ea Lizards and snails are extra delicious.
Jeremy Thurgood <firxen@gmail.com>
parents: 255
diff changeset
393 snake.adjust_speed(15)
249
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
394
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
395
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
396 class Salamander(EdibleTile):
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
397 image_name = "salamander"
483
1e7d6f43928f Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents: 386
diff changeset
398 name = "salamander"
249
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
399
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
400 def eat(self, snake):
255
59166ae6e864 fire works
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 253
diff changeset
401 snake.mutate('flame-retardant')
249
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
402
cb68024bdd35 Moar animals
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 248
diff changeset
403
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
404 class Painter(TileSprite):
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
405 def __init__(self, colour, **kw):
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
406 super(Painter, self).__init__(**kw)
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
407 self.colour = colour
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
408 self.image = self.load_image(
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
409 *colour_with_fittings("spray", self.tileset, colour))
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
410
243
f9cc701a6be0 Hook up tunnels.
Simon Cross <hodgestar@gmail.com>
parents: 234
diff changeset
411 def interact(self, world, segment):
182
0a955d2536f0 Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents: 181
diff changeset
412 segment.set_colour(COLOURS[self.colour])