Mercurial > mamba
annotate mamba/sprites.py @ 600:93cb9c1d2bb2
Update stray .iteritems to Python 3.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 14 Jan 2023 19:33:57 +0100 |
parents | 6c61d5862310 |
children |
rev | line source |
---|---|
50 | 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 | 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 | 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 | 9 |
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 | 27 def tile_sizify(pos): |
28 ts_x, ts_y = TILE_SIZE | |
29 p_x, p_y = pos | |
30 return (ts_x * p_x, ts_y * p_y) | |
31 | |
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 |
508
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
39 def find_special_sprites(): |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
40 results = [] |
600
93cb9c1d2bb2
Update stray .iteritems to Python 3.
Simon Cross <hodgestar@gmail.com>
parents:
508
diff
changeset
|
41 for cls_name, cls in globals().items(): |
508
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
42 if isinstance(cls, type) and issubclass(cls, Sprite): |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
43 if hasattr(cls, 'get_sprite_args'): |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
44 results.append((cls_name, cls)) |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
45 return results |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
46 |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
47 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
48 class SpriteImageVariants(object): |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
49 VARIANTS = { |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
50 '....': ('-0', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
51 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
52 'X...': ('-1', (mutators.R90,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
53 '.X..': ('-1', (mutators.R270,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
54 '..X.': ('-1', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
55 '...X': ('-1', (mutators.R180,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
56 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
57 'XX..': ('-2o', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
58 '..XX': ('-2o', (mutators.R90,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
59 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
60 'X.X.': ('-2a', (mutators.R180,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
61 'X..X': ('-2a', (mutators.R270,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
62 '.XX.': ('-2a', (mutators.R90,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
63 '.X.X': ('-2a', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
64 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
65 '.XXX': ('-3', (mutators.R90,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
66 'X.XX': ('-3', (mutators.R270,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
67 'XX.X': ('-3', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
68 'XXX.': ('-3', (mutators.R180,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
69 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
70 'XXXX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
71 } |
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 def __init__(self, base_image_name): |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
74 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
|
75 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
76 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
|
77 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
|
78 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
|
79 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
|
80 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
|
81 |
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 class SolidSpriteImageVariants(SpriteImageVariants): |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
84 VARIANTS = { |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
85 '....': ('-0', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
86 |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
87 'X...': ('-1', (mutators.R270,)), |
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
88 '.X..': ('-1', (mutators.R90,)), |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
89 '..X.': ('-1', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
90 '...X': ('-1', (mutators.R180,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
91 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
92 'XX..': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
93 '..XX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
94 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
95 'X.X.': ('-2a', (mutators.R180,)), |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
96 'X..X': ('-2a', (mutators.R90,)), |
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
97 '.XX.': ('-2a', (mutators.R270,)), |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
98 '.X.X': ('-2a', (mutators.NULL,)), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
99 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
100 '.XXX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
101 'X.XX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
102 'XX.X': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
103 'XXX.': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
104 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
105 'XXXX': ('', ()), |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
106 } |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
107 |
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
108 |
50 | 109 class BaseSprite(Sprite): |
110 tileset = 'common' | |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
111 variants_class = None |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
112 variants = None |
180
d9ee0e50a78f
Teach editor about THING_MAP
Neil Muller <drnlmuller@gmail.com>
parents:
168
diff
changeset
|
113 name = None |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
114 alive = True |
130
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
115 |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
116 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
|
117 mutators=()): |
98 | 118 super(BaseSprite, self).__init__() |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
119 if name is not None: |
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
120 self.name = name |
98 | 121 if tileset is not None: |
122 self.tileset = tileset | |
123 if image_name is not None: | |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
124 self.image_name = image_name |
130
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
125 self.image = self.load_image(image_name, mutators=mutators) |
56 | 126 |
98 | 127 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
|
128 return load_tile_image(image_name, self.tileset, mutators) |
50 | 129 |
130 def set_tile_pos(self, tile_pos): | |
81
c8d6ca296884
Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents:
71
diff
changeset
|
131 self.tile_pos = tile_pos |
199
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
132 self.rect = Rect(tile_sizify(tile_pos), TILE_SIZE) |
50 | 133 |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
134 def get_variant(self, top, bottom, left, right): |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
135 if self.variants is None: |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
136 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
|
137 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
|
138 |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
139 def use_variant(self, *args): |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
140 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
|
141 self.image = self.load_image(*self.get_variant(*args)) |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
142 |
163
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
143 |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
144 class TileSprite(BaseSprite): |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
145 def __init__(self, tile_char, solid=False, **kw): |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
146 super(TileSprite, self).__init__(**kw) |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
147 self.tile_char = tile_char |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
148 self.solid = solid |
41e8d4ce3af2
TileSprites are less magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
162
diff
changeset
|
149 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
150 def get_solid(self, snake, segment): |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
151 return self.solid |
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
152 |
243 | 153 def interact(self, world, segment): |
154 if self.get_solid(world.snake, segment): | |
372
1655f8c0d96e
The grammar nazi commit
Stefano Rivera <stefano@rivera.za.net>
parents:
359
diff
changeset
|
155 article = 'a' |
1655f8c0d96e
The grammar nazi commit
Stefano Rivera <stefano@rivera.za.net>
parents:
359
diff
changeset
|
156 if self.name[0] in 'aeiou': |
1655f8c0d96e
The grammar nazi commit
Stefano Rivera <stefano@rivera.za.net>
parents:
359
diff
changeset
|
157 article = 'an' |
1655f8c0d96e
The grammar nazi commit
Stefano Rivera <stefano@rivera.za.net>
parents:
359
diff
changeset
|
158 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
|
159 |
50 | 160 |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
161 class SingleImageTileSprite(TileSprite): |
121
f670ef33ae2e
Comment SingleImageTileSprite convention
Neil Muller <drnlmuller@gmail.com>
parents:
105
diff
changeset
|
162 image_name = None # subclasses will override this |
f670ef33ae2e
Comment SingleImageTileSprite convention
Neil Muller <drnlmuller@gmail.com>
parents:
105
diff
changeset
|
163 |
104 | 164 def __init__(self, **kw): |
165 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
|
166 kw.setdefault('name', self.name) |
104 | 167 super(SingleImageTileSprite, self).__init__(**kw) |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
168 |
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
169 |
56 | 170 class DoorSprite(TileSprite): |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
171 name = 'door' |
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
172 |
104 | 173 def __init__(self, colour, **kw): |
57 | 174 self.colour = colour |
104 | 175 super(DoorSprite, self).__init__(**kw) |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
176 self.image = self.load_image( |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
177 *colour_with_fittings("door", self.tileset, colour)) |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
178 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
179 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
|
180 return COLOURS[self.colour] != segment.colour |
144
b292370c4548
Rearranged the orientation stuff. :-)
Jeremy Thurgood <firxen@gmail.com>
parents:
136
diff
changeset
|
181 |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
182 |
207
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
183 class DirectionalTile(SingleImageTileSprite): |
234 | 184 def __init__(self, direction=RIGHT, **kw): |
185 super(DirectionalTile, self).__init__(**kw) | |
186 self.set_direction(direction) | |
187 | |
199
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
188 def set_direction(self, direction): |
81
c8d6ca296884
Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents:
71
diff
changeset
|
189 self.direction = direction |
199
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
190 mutator = { |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
191 UP: mutators.UP, |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
192 DOWN: mutators.DOWN, |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
193 LEFT: mutators.LEFT, |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
194 RIGHT: mutators.RIGHT, |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
195 }[direction] |
986e72d2cb4d
Rejiggered entrances and shifted directions around.
Jeremy Thurgood <firxen@gmail.com>
parents:
183
diff
changeset
|
196 self.image = self.load_image(self.image_name, (mutator,)) |
81
c8d6ca296884
Better level entry points.
Jeremy Thurgood <firxen@gmail.com>
parents:
71
diff
changeset
|
197 |
207
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
198 def get_solid(self, snake, segment): |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
199 dx, dy = self.direction |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
200 sx, sy = segment.orientation |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
201 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
|
202 return True |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
203 return False |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
204 |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
205 |
234 | 206 class ArrowSprite(DirectionalTile): |
207 image_name = 'arrow-r' | |
208 name = 'arrow' | |
209 | |
248
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
210 def rotate(self): |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
211 self.set_direction({LEFT: UP, |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
212 UP: RIGHT, |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
213 RIGHT: DOWN, |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
214 DOWN: LEFT}[self.direction]) |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
215 |
385 | 216 def interact(self, world, segment): |
386
d760a309d0bf
Whoops, only check the head
Stefano Rivera <stefano@rivera.za.net>
parents:
385
diff
changeset
|
217 if segment.is_head: |
d760a309d0bf
Whoops, only check the head
Stefano Rivera <stefano@rivera.za.net>
parents:
385
diff
changeset
|
218 world.snake.force_new_direction(self.direction) |
385 | 219 super(ArrowSprite, self).interact(world, segment) |
220 | |
248
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
221 |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
222 class FlipArrows(SingleImageTileSprite): |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
223 image_name = 'flip-arrows' |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
224 name = 'flip' |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
225 |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
226 def interact(self, snake, segment): |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
227 FlipArrowsEvent.post() |
de3b4048e54a
Hook up tile arrow rotation
Stefano Rivera <stefano@rivera.za.net>
parents:
246
diff
changeset
|
228 |
234 | 229 |
207
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
230 class EntrySprite(DirectionalTile): |
484
4e0b097e657b
use new entrance tile
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
483
diff
changeset
|
231 image_name = 'entrance-r' |
207
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
232 name = 'entrance' |
dd2c735fdaf4
Arrow tiles are walls from the pointy end.
Jeremy Thurgood <firxen@gmail.com>
parents:
205
diff
changeset
|
233 |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
234 |
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
235 class ExitSprite(SingleImageTileSprite): |
287 | 236 image_name = 'exit' |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
237 name = 'exit' |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
238 |
243 | 239 def interact(self, world, segment): |
240 world.snake.exit_level() | |
213 | 241 |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
242 |
244
c629dabe2038
Make tunnel arrows face in the right direction.
Simon Cross <hodgestar@gmail.com>
parents:
243
diff
changeset
|
243 class TunnelSprite(DirectionalTile): |
268 | 244 image_name = 'tunnel-r' |
230
e4f983b68ef5
Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents:
218
diff
changeset
|
245 name = 'tunnel entrance' |
e4f983b68ef5
Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents:
218
diff
changeset
|
246 tileset = 'lab' |
e4f983b68ef5
Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents:
218
diff
changeset
|
247 |
243 | 248 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
|
249 direction = { |
230
e4f983b68ef5
Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents:
218
diff
changeset
|
250 'north': UP, 'south': DOWN, |
e4f983b68ef5
Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents:
218
diff
changeset
|
251 'east': LEFT, 'west': RIGHT, |
e4f983b68ef5
Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents:
218
diff
changeset
|
252 }[direction] |
244
c629dabe2038
Make tunnel arrows face in the right direction.
Simon Cross <hodgestar@gmail.com>
parents:
243
diff
changeset
|
253 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
|
254 self.other_id = other_id |
230
e4f983b68ef5
Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents:
218
diff
changeset
|
255 |
243 | 256 def interact(self, world, segment): |
257 head = world.snake.head | |
258 if segment is head and head.orientation == self.direction: | |
259 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
|
260 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
|
261 |
508
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
262 @classmethod |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
263 def get_sprite_args(cls): |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
264 """Arguments for the tile constructor""" |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
265 return [('Other ID:', None), |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
266 ('Direction', ('north', 'east', 'south', 'west'))] |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
267 |
230
e4f983b68ef5
Start of advanced sprite definitions.
Simon Cross <hodgestar@gmail.com>
parents:
218
diff
changeset
|
268 |
357 | 269 class ButtonSprite(SingleImageTileSprite): |
270 image_name = 'button' | |
271 name = 'button' | |
272 tileset = 'lab' | |
273 | |
274 def __init__(self, other_id): | |
275 super(ButtonSprite, self).__init__(tile_char=None) | |
276 self.other_id = other_id | |
277 | |
278 def interact(self, world, segment): | |
279 head = world.snake.head | |
280 if segment is head: | |
281 other = world.get_sprite(self.other_id) | |
282 other.button_pushed() | |
283 | |
508
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
284 @classmethod |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
285 def get_sprite_args(cls): |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
286 """Arguments for the tile constructor""" |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
287 return [('Other ID:', None)] |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
288 |
357 | 289 |
290 class GateSprite(SingleImageTileSprite): | |
291 closed_name = 'closed_gate' | |
508
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
292 image_name = 'closed_gate' |
359
5ea0b6eb2831
simple buttons and gates
Neil Muller <drnlmuller@gmail.com>
parents:
357
diff
changeset
|
293 open_image = 'floor' |
357 | 294 name = 'gate' |
295 tileset = 'lab' | |
296 | |
297 def __init__(self): | |
298 self.image_name = self.closed_name | |
299 self.opened = False | |
300 super(GateSprite, self).__init__(tile_char=None) | |
301 | |
302 def get_solid(self, snake, segment): | |
303 return not self.opened | |
304 | |
305 def button_pushed(self): | |
306 self.opened = True | |
307 # Update image | |
308 self.image_name = self.open_image | |
309 self.image = self.load_image(self.image_name, mutators=()) | |
310 | |
508
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
311 @classmethod |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
312 def get_sprite_args(cls): |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
313 """Arguments for the tile constructor""" |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
314 return [] |
6c61d5862310
Massive speical sprite editor rewrite
Neil Muller <drnlmuller@gmail.com>
parents:
484
diff
changeset
|
315 |
357 | 316 |
71
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
317 class PuddleSprite(SingleImageTileSprite): |
58557a89ec86
Some tile improvements and stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
57
diff
changeset
|
318 image_name = 'puddle' |
168
0fffb97db193
Add name field to sprites for editor
Neil Muller <drnlmuller@gmail.com>
parents:
164
diff
changeset
|
319 name = 'puddle' |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
320 variants_class = SolidSpriteImageVariants |
130
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
321 |
9bef49d6db86
Ugly yucky half-done tile orientation magic.
Jeremy Thurgood <firxen@gmail.com>
parents:
121
diff
changeset
|
322 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
|
323 super(PuddleSprite, self).__init__(**kw) |
136
00ada2e29798
Somewhat better (but still hideous) image variant support.
Jeremy Thurgood <firxen@gmail.com>
parents:
135
diff
changeset
|
324 self.image = self.load_image(*self.get_variant(*variant)) |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
325 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
326 def get_solid(self, snake, segment): |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
327 if snake.can_swim(): |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
328 return False |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
329 return True |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
330 |
243 | 331 def interact(self, world, segment): |
183 | 332 segment.set_colour(segment.GREEN) |
246 | 333 super(PuddleSprite, self).interact(world, segment) |
183 | 334 |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
335 |
253 | 336 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
|
337 image_name = 'fire' |
253 | 338 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
|
339 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
|
340 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
|
341 |
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
|
342 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
|
343 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
|
344 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
|
345 |
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
|
346 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
|
347 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
|
348 return super(FireSprite, self).load_image(image_name, mutators) |
253 | 349 |
255 | 350 def get_solid(self, snake, segment): |
351 if snake.flame_retardant(): | |
352 return False | |
353 return True | |
354 | |
355 def interact(self, world, segment): | |
356 segment.set_colour(segment.GREEN) | |
357 super(FireSprite, self).interact(world, segment) | |
358 | |
253 | 359 |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
360 class EdibleTile(SingleImageTileSprite): |
316
cd544a311f11
Move directory names into sound.py for simplicity
Neil Muller <drnlmuller@gmail.com>
parents:
306
diff
changeset
|
361 sound_name = 'squeak.ogg' |
282 | 362 |
363 def __init__(self, **kw): | |
364 if self.sound_name: | |
365 load_sound(self.sound_name, self.sound_name) | |
366 super(EdibleTile, self).__init__(**kw) | |
367 | |
243 | 368 def interact(self, world, segment): |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
369 if not segment.is_head: |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
370 return |
282 | 371 if self.sound_name: |
372 play_sound(self.sound_name) | |
243 | 373 world.snake.head.mouth_open() |
374 self.eat(world.snake) | |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
375 self.alive = False |
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
376 self.kill() |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
377 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
378 def eat(self, snake): |
218
10804ae58066
Open mouth when eating things
Stefano Rivera <stefano@rivera.za.net>
parents:
213
diff
changeset
|
379 pass |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
380 |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
381 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
382 class BigMouse(EdibleTile): |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
383 image_name = "rat-big" |
483
1e7d6f43928f
Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents:
386
diff
changeset
|
384 name = 'rat-big' |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
385 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
386 def eat(self, snake): |
203
8009742103e7
Add a segment when driving over the big rat.
Simon Cross <hodgestar@gmail.com>
parents:
202
diff
changeset
|
387 snake.add_segment() |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
388 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
389 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
390 class SmallMouse(EdibleTile): |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
391 image_name = "rat-small" |
483
1e7d6f43928f
Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents:
386
diff
changeset
|
392 name = 'rat-small' |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
393 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
394 def eat(self, snake): |
202
498c1d659a94
Remove a segment when driving over the small rat.
Simon Cross <hodgestar@gmail.com>
parents:
200
diff
changeset
|
395 snake.remove_segment() |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
396 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
397 |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
398 class Frog(EdibleTile): |
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
399 image_name = "frog" |
483
1e7d6f43928f
Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents:
386
diff
changeset
|
400 name = 'frog' |
162
7fbbe27120a9
Rodents! Amphibians! Import juggling!
Jeremy Thurgood <firxen@gmail.com>
parents:
144
diff
changeset
|
401 |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
402 def eat(self, snake): |
181
061d711ba570
Interact with the world.
Jeremy Thurgood <firxen@gmail.com>
parents:
180
diff
changeset
|
403 snake.mutate('amphibious') |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
404 |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
405 |
249 | 406 class Snail(EdibleTile): |
407 image_name = "snail" | |
483
1e7d6f43928f
Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents:
386
diff
changeset
|
408 name = 'snail' |
249 | 409 |
410 def eat(self, snake): | |
263
c7c9d71ac6ea
Lizards and snails are extra delicious.
Jeremy Thurgood <firxen@gmail.com>
parents:
255
diff
changeset
|
411 snake.adjust_speed(-15) |
249 | 412 |
413 | |
414 class Lizard(EdibleTile): | |
415 image_name = "lizard" | |
483
1e7d6f43928f
Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents:
386
diff
changeset
|
416 name = 'lizard' |
249 | 417 |
418 def eat(self, snake): | |
263
c7c9d71ac6ea
Lizards and snails are extra delicious.
Jeremy Thurgood <firxen@gmail.com>
parents:
255
diff
changeset
|
419 snake.adjust_speed(15) |
249 | 420 |
421 | |
422 class Salamander(EdibleTile): | |
423 image_name = "salamander" | |
483
1e7d6f43928f
Name some unnamed things.
Jeremy Thurgood <firxen@gmail.com>
parents:
386
diff
changeset
|
424 name = "salamander" |
249 | 425 |
426 def eat(self, snake): | |
255 | 427 snake.mutate('flame-retardant') |
249 | 428 |
429 | |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
430 class Painter(TileSprite): |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
431 def __init__(self, colour, **kw): |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
432 super(Painter, self).__init__(**kw) |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
433 self.colour = colour |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
434 self.image = self.load_image( |
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
435 *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
|
436 |
243 | 437 def interact(self, world, segment): |
182
0a955d2536f0
Painted Jezebel! (Assuming you name your snake Jezebel.)
Jeremy Thurgood <firxen@gmail.com>
parents:
181
diff
changeset
|
438 segment.set_colour(COLOURS[self.colour]) |