changeset 10:b87fd9e8c365

more detailed skeleton animation
author Radomir Dopieralski <moindev@sheep.art.pl>
date Wed, 27 Aug 2008 19:56:05 +0200
parents 31534af99229
children a6f9541f58b1
files level.map qq.py skeleton.png
diffstat 3 files changed, 28 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/level.map	Wed Aug 27 18:11:36 2008 +0200
+++ b/level.map	Wed Aug 27 19:56:05 2008 +0200
@@ -1,21 +1,23 @@
 [level]
+tileset = dungeon.png
 \#: wall
 \.: floor
 \@: player
 \S: skeleton
 \b: crate
+\>: stairs
 map:    ###.###########
         #.......#.#.#.#
-        #......#.#.#.##
+        #.>....#.#.#.##
         #...@.......#.#
         #......s...#.##
-        #...........#..
+        #..............
         ##.#.#.#...#.##
-        #.#.#.#.....#.#
-        ##.#.b.#......#
+        #...........#.#
+        ##.#.#.#......#
         ...........s..#
-        ##.##.###.....#
-        #..##.###...#.#
+        ##.##.###..b..#
+        #..##.###.bb#.#
         ##.##.###....##
         #.....###...#.#
         ###############
--- a/qq.py	Wed Aug 27 18:11:36 2008 +0200
+++ b/qq.py	Wed Aug 27 19:56:05 2008 +0200
@@ -99,9 +99,8 @@
 
     def stand_animation(self):
         while True:
-            for frame in self.frames:
-                self.image = frame[0]
-                yield None
+            for frame in self.frames[0]:
+                self.image = frame
                 yield None
                 yield None
 
@@ -161,6 +160,7 @@
         'floor': 1,
         'skeleton': Skeleton,
         'crate': Crate,
+        'stairs': 4,
     }
     def __init__(self, filename="level.map"):
         parser = ConfigParser.ConfigParser()
@@ -172,7 +172,8 @@
             if option.startswith('\\'):
                 self.key[option[1]] = parser.get("level", option).strip()
         tile_width, tile_height = 24, 16
-        self.tiles = load_tiles("dungeon.png", tile_width, tile_height)
+        self.tiles = load_tiles(parser.get("level", "tileset"),
+                                tile_width, tile_height)
         width = len(self.map[0])
         height = len(self.map)
         self.image = pygame.Surface((width*tile_width, height*tile_height))
@@ -183,8 +184,16 @@
             for c in line:
                 tile = self.item_names[self.key[c]]
                 if tile:
-                    self.image.blit(self.tiles[0][3], (x*tile_width, y*tile_height))
+                    # floor
+                    if isinstance(tile, int):
+                        floor = tile
+                    else:
+                        floor = 1
+                        self.items[(x, y)] = tile((x, y))
+                    self.image.blit(self.tiles[floor-1][3],
+                                    (x*tile_width, y*tile_height))
                 else:
+                    # wall
                     if self(x, y+1):
                         if self(x+1, y) and self(x-1, y):
                             tile_image = self.tiles[3][2]
@@ -214,8 +223,6 @@
                         else:
                             overlay_image = self.tiles[1][0]
                         self.overlays[(x, y)] = overlay_image
-                if tile != 1 and tile != 0:
-                    self.items[(x, y)] = tile
                 x += 1
             y += 1
 
@@ -241,9 +248,8 @@
         self.sprites = SortedUpdates()
         self.overlays = pygame.sprite.RenderUpdates()
         self.level = level
-        for pos, kind in level.items.iteritems():
-            item = kind(pos)
-            if kind == Player:
+        for pos, item in level.items.iteritems():
+            if isinstance(item, Player):
                 self.player = item
             self.sprites.add(item)
             self.shadows.add(Shadow(item))
@@ -286,8 +292,12 @@
                 self.control()
                 self.player.update()
             self.shadows.update()
+            # Don't add shadows to dirty rectangles, as they already fit inside
+            # sprite rectangles.
             self.shadows.draw(self.screen)
             dirty = self.sprites.draw(self.screen)
+            # Don't add ovelays to dirty rectangles, only the places where
+            # sprites are need to be updated.
             self.overlays.draw(self.screen)
             pygame.display.update(dirty)
             clock.tick(15)
Binary file skeleton.png has changed