3 # level designer gui - this is used to design level graphics
4 # very rough and ready - main purpose is to allow quick game
5 # design. inputting levels by hand array is very tedious
14 # draw the level actually
15 def draw_level (screen
, leveldata
, tileset
):
19 for tilerow
, tilecol
, is_solid
in row
:
22 screen
.blit (tileset
, (j
*48, i
*48), pygame
.Rect (tilex
, tiley
, 48, 48))
24 utility
.put_text (screen
, j
*48+2, i
*48+2, 10, (255,255,0), "w")
28 def display_menu (screen
):
29 utility
.put_text (screen
, 490, 10, 10, (255,255,0), "p to pick tile")
30 utility
.put_text (screen
, 490, 50, 10, (255,255,0), "w to wall (solid)")
31 utility
.put_text (screen
, 490, 90, 10, (255,255,0), "<space> to place")
32 utility
.put_text (screen
, 490, 130, 10,(255,255,0), "Arrows to move around")
33 utility
.put_text (screen
, 490, 170, 10, (255,255,0), "s to Save level")
34 utility
.put_text (screen
, 490, 210, 10, (255,255,0), "q to Quit editor")
36 # draw the tile cursor
37 def draw_cursor (screen
, currow
, curcol
):
38 pygame
.draw
.rect (screen
, (255,255,255), (curcol
*48, currow
*48, 48, 48), 1)
41 def make_wall (leveldata
, row
, col
):
42 # get the actual data in that place
43 leveldata
[row
][col
][2] = not leveldata
[row
][col
][2]
45 # place a tile at current spot
46 def put_tile (leveldata
, row
, col
, tilerow
, tilecol
):
47 leveldata
[row
][col
][0] = tilerow
48 leveldata
[row
][col
][1] = tilecol
50 # picking a tile from the tileset
51 def pick_tile (screen
, tileset
):
54 totalrows
= tileset
.get_height () / 48
55 totalcols
= tileset
.get_width () / 48
58 screen
.fill (pygame
.Color (0, 0, 0))
59 screen
.blit (tileset
, (0, 0))
60 draw_cursor (screen
, selrow
, selcol
)
61 pygame
.display
.update ()
62 for event
in pygame
.event
.get ():
63 if event
.type == pygame
.KEYDOWN
:
64 if event
.key
== pygame
.K_ESCAPE
:
66 elif event
.key
== pygame
.K_SPACE
or event
.key
== pygame
.K_RETURN
:
68 elif event
.key
== pygame
.K_UP
:
71 selrow
= totalrows
- 1
72 elif event
.key
== pygame
.K_DOWN
:
74 if selrow
>= totalrows
:
76 elif event
.key
== pygame
.K_LEFT
:
79 selcol
= totalcols
- 1
80 elif event
.key
== pygame
.K_RIGHT
:
82 if selcol
>= totalcols
:
86 # the actual level editor
87 def level_editor (fname
):
89 leveldata
= cPickle
.load (file (fname
))
93 tileset
= pygame
.image
.load (os
.path
.join ("background", "tileset.png"))
94 screen
= pygame
.display
.set_mode ((720, 512))
95 pygame
.display
.set_caption ("Level editor")
97 tilerow
, tilecol
= 0, 0
100 screen
.fill (pygame
.Color (0, 0, 0))
101 display_menu (screen
)
102 draw_level (screen
, leveldata
, tileset
)
103 draw_cursor (screen
, currow
, curcol
)
104 pygame
.display
.update ()
105 for event
in pygame
.event
.get ():
106 if event
.type == pygame
.KEYDOWN
:
107 if event
.key
== ord ("q"):
110 elif event
.key
== ord ("s"):
111 cPickle
.dump (leveldata
, file (fname
, "w"))
112 print ("Level saved")
113 elif event
.key
== pygame
.K_DOWN
:
117 elif event
.key
== pygame
.K_UP
:
121 elif event
.key
== pygame
.K_LEFT
:
125 elif event
.key
== pygame
.K_RIGHT
:
129 elif event
.key
== pygame
.K_SPACE
or event
.key
== pygame
.K_RETURN
:
130 put_tile (leveldata
, currow
, curcol
, tilerow
, tilecol
)
131 elif event
.key
== ord ("p"):
132 tile
= pick_tile (screen
, tileset
)
136 elif event
.key
== ord ("w"):
137 make_wall (leveldata
, currow
, curcol
)
141 fname
= raw_input ("New level file path: ")
142 # prepare level with blank tiles
144 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
145 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
146 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
147 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
148 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
149 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
150 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
151 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
152 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
153 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
155 # save the level first
156 cPickle
.dump (leveldata
, file (fname
, "w"))
162 fname
= raw_input ("Level file to load: ")
168 print ("Level Editor for the Adventures of Butaba")
170 print ("1. Start a new level")
171 print ("2. Load existing level")
174 ch
= raw_input ("Your choice: ")
182 print ("Wrong choice. Must be 1, 2, or 3")
185 if __name__
=="__main__":