annotate scripts/level-editor @ 634:20d6aef11249 default tip

Fix iCCC profiles in PNGs to avoid verbose warnings from libpng.
author Simon Cross <hodgestar@gmail.com>
date Fri, 27 Jan 2023 23:32:07 +0100
parents 5d59238f8996
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
1 #!/usr/bin/env python
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
2 "Skaapsteker level editor"
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
3
54
Stefano Rivera <stefano@rivera.za.net>
parents: 50
diff changeset
4 from __future__ import division
Stefano Rivera <stefano@rivera.za.net>
parents: 50
diff changeset
5
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6 import optparse
29
10c067be3e8f Patch sys.path
Stefano Rivera <stefano@rivera.za.net>
parents: 24
diff changeset
7 import os.path
10c067be3e8f Patch sys.path
Stefano Rivera <stefano@rivera.za.net>
parents: 24
diff changeset
8 import sys
10c067be3e8f Patch sys.path
Stefano Rivera <stefano@rivera.za.net>
parents: 24
diff changeset
9
31
6f1e43d2fda8 Gaar. That's not what I meant
Stefano Rivera <stefano@rivera.za.net>
parents: 30
diff changeset
10 sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
11
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12 import pygame
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
13 import pygame.key
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
14 from pygame.locals import (SWSURFACE, QUIT, KEYDOWN, K_UP, K_DOWN, K_LEFT,
45
7f7b4bfbaf0e Trivial text rendering widget
Stefano Rivera <stefano@rivera.za.net>
parents: 42
diff changeset
15 K_RIGHT, KMOD_SHIFT, K_q, K_ESCAPE)
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
16
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
17 from skaapsteker.constants import SCREEN
101
b502e732f821 Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents: 92
diff changeset
18 from skaapsteker.level import DebugLevel
92
f065109d80ae Add Player to level-editor, so it can use Level again
Stefano Rivera <stefano@rivera.za.net>
parents: 79
diff changeset
19 from skaapsteker.sprites.player import Player
54
Stefano Rivera <stefano@rivera.za.net>
parents: 50
diff changeset
20 from skaapsteker.widgets.text import Text
223
f675abd90529 player needs a world argument
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 101
diff changeset
21 from skaapsteker.gamestate import GameState
279
8d2e4b2a65bf fixed level editor
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 223
diff changeset
22 from skaapsteker.sound import SoundSystem
455
5d59238f8996 level editor update
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 279
diff changeset
23 from skaapsteker.data import filepath
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
24
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
25 FRAMERATE = 60
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
26
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
27 def run(levelname):
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
28 clock = pygame.time.Clock()
40
fa1bb94cfa76 Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents: 35
diff changeset
29 screen_surface = pygame.display.get_surface()
455
5d59238f8996 level editor update
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 279
diff changeset
30 game = GameState(None)
5d59238f8996 level editor update
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 279
diff changeset
31 game.load_game(filepath("game.json"))
279
8d2e4b2a65bf fixed level editor
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 223
diff changeset
32 player = Player(game.world, SoundSystem(False))
101
b502e732f821 Add ? object-placement-help tiles
Stefano Rivera <stefano@rivera.za.net>
parents: 92
diff changeset
33 level = DebugLevel(levelname, player)
40
fa1bb94cfa76 Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents: 35
diff changeset
34 level_surface = level.get_surface()
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
35 position = [0, 0]
69
e4089417766e FPS counter and tile sprite layering.
Jeremy Thurgood <firxen@gmail.com>
parents: 54
diff changeset
36 fpss = [FRAMERATE]
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
37 while True:
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
38 events = pygame.event.get()
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
39 for ev in events:
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
40 if ev.type is QUIT:
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
41 return
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
42 elif ev.type is KEYDOWN:
24
3d70de522b11 Bump tile size to 64
Stefano Rivera <stefano@rivera.za.net>
parents: 19
diff changeset
43 distance = 64
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
44 if ev.mod & KMOD_SHIFT != 0:
24
3d70de522b11 Bump tile size to 64
Stefano Rivera <stefano@rivera.za.net>
parents: 19
diff changeset
45 distance *= 10
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
46 if ev.key == K_UP:
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
47 position[1] -= distance
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
48 elif ev.key == K_DOWN:
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
49 position[1] += distance
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
50 elif ev.key == K_LEFT:
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
51 position[0] -= distance
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
52 elif ev.key == K_RIGHT:
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
53 position[0] += distance
45
7f7b4bfbaf0e Trivial text rendering widget
Stefano Rivera <stefano@rivera.za.net>
parents: 42
diff changeset
54 elif ev.key in (K_q, K_ESCAPE):
32
8abd0d6e8c61 Quit level editor
Stefano Rivera <stefano@rivera.za.net>
parents: 31
diff changeset
55 return
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
56
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
57 position[0] = max(position[0], 0)
35
38d2f7c43d86 Sprite-based tiles. \o/
Jeremy Thurgood <firxen@gmail.com>
parents: 33
diff changeset
58 position[0] = min(position[0], level.pixel_size[0] - SCREEN[0])
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
59 position[1] = max(position[1], 0)
35
38d2f7c43d86 Sprite-based tiles. \o/
Jeremy Thurgood <firxen@gmail.com>
parents: 33
diff changeset
60 position[1] = min(position[1], level.pixel_size[1] - SCREEN[1])
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
61
40
fa1bb94cfa76 Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents: 35
diff changeset
62 clip_rect = pygame.Rect(position, screen_surface.get_size())
fa1bb94cfa76 Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents: 35
diff changeset
63 level_surface.set_clip(clip_rect)
fa1bb94cfa76 Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents: 35
diff changeset
64 level.draw(level_surface)
75
95cb0b575e05 Enemies in level editor, tile layers.
Jeremy Thurgood <firxen@gmail.com>
parents: 69
diff changeset
65 level.sprites.draw(level_surface)
42
4a9e26f1f35a Remove area keyword for pygame 1.8 compatability
Neil Muller <drnlmuller@gmail.com>
parents: 40
diff changeset
66 screen_surface.blit(level_surface, (0, 0), clip_rect)
40
fa1bb94cfa76 Re-factor drawing to blit to a clip rect in the One True Level Surface before blitting that to the screen.
Simon Cross <hodgestar@gmail.com>
parents: 35
diff changeset
67
54
Stefano Rivera <stefano@rivera.za.net>
parents: 50
diff changeset
68 tilepos = (position[0] // 64, position[1] // 64)
Stefano Rivera <stefano@rivera.za.net>
parents: 50
diff changeset
69 text = Text("Level: %s.\nOffset: %r Tile: %r\nFPS: %.1f"
69
e4089417766e FPS counter and tile sprite layering.
Jeremy Thurgood <firxen@gmail.com>
parents: 54
diff changeset
70 % (levelname, position, tilepos, sum(fpss)/len(fpss)),
79
fe8652a060df Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
71 (10, 10),
54
Stefano Rivera <stefano@rivera.za.net>
parents: 50
diff changeset
72 color='white')
79
fe8652a060df Simple menu screen and TextChoice widget
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
73 text.draw(screen_surface)
45
7f7b4bfbaf0e Trivial text rendering widget
Stefano Rivera <stefano@rivera.za.net>
parents: 42
diff changeset
74
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
75 pygame.display.flip()
69
e4089417766e FPS counter and tile sprite layering.
Jeremy Thurgood <firxen@gmail.com>
parents: 54
diff changeset
76 fpss = (fpss + [1000 / clock.tick(FRAMERATE)])[-FRAMERATE:]
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
77
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
78 def main():
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
79 p = optparse.OptionParser(usage="%prog [options] levelname")
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
80 opts, args = p.parse_args()
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
81 if len(args) != 1:
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
82 p.error("Must provide level name")
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
83 pygame.display.init()
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
84 pygame.font.init()
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
85 pygame.display.set_mode(SCREEN, SWSURFACE)
33
14f6c6ac1605 silly ladder level plus typo correction
Adrianna Pińska <adrianna.pinska@gmail.com>
parents: 32
diff changeset
86 pygame.display.set_caption("Skaapsteker Level Editor")
19
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
87 pygame.key.set_repeat(100, 20)
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
88 run(args[0])
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
89
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
90 if __name__ == '__main__':
0831989ce8e1 Add simple level browser
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
91 main()