zombie-escape 1.10.0__py3-none-any.whl → 1.12.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import math
6
+ from dataclasses import dataclass
6
7
 
7
8
  import pygame
8
9
 
@@ -10,14 +11,14 @@ from .colors import (
10
11
  BLACK,
11
12
  BLUE,
12
13
  DARK_RED,
14
+ ORANGE,
13
15
  RED,
16
+ STEEL_BEAM_COLOR,
17
+ STEEL_BEAM_LINE_COLOR,
14
18
  TRACKER_OUTLINE_COLOR,
15
19
  WALL_FOLLOWER_OUTLINE_COLOR,
16
20
  YELLOW,
17
21
  EnvironmentPalette,
18
- ORANGE,
19
- STEEL_BEAM_COLOR,
20
- STEEL_BEAM_LINE_COLOR,
21
22
  get_environment_palette,
22
23
  )
23
24
  from .render_constants import (
@@ -43,6 +44,101 @@ def _draw_outlined_circle(
43
44
  pygame.draw.circle(surface, outline_color, center, radius, width=outline_width)
44
45
 
45
46
 
47
+ @dataclass(frozen=True)
48
+ class PolygonSpec:
49
+ size: tuple[int, int]
50
+ polygons: list[list[tuple[int, int]]]
51
+
52
+
53
+ FUEL_CAN_SPEC = PolygonSpec(
54
+ size=(13, 17),
55
+ polygons=[
56
+ [
57
+ (1, 1),
58
+ (7, 1),
59
+ (12, 6),
60
+ (12, 16),
61
+ (1, 16),
62
+ ],
63
+ [
64
+ (10, 1),
65
+ (12, 3),
66
+ (9, 4),
67
+ (7, 3),
68
+ ],
69
+ ],
70
+ )
71
+
72
+ FLASHLIGHT_SPEC = PolygonSpec(
73
+ size=(12, 10),
74
+ polygons=[
75
+ [
76
+ (1, 2),
77
+ (8, 2),
78
+ (8, 7),
79
+ (1, 7),
80
+ ],
81
+ [
82
+ (8, 1),
83
+ (11, 1),
84
+ (11, 8),
85
+ (8, 8),
86
+ ],
87
+ ],
88
+ )
89
+
90
+ SHOES_SPEC = PolygonSpec(
91
+ size=(14, 10),
92
+ polygons=[
93
+ [
94
+ (1, 1),
95
+ (7, 1),
96
+ (7, 4),
97
+ (13, 6),
98
+ (13, 9),
99
+ (1, 9),
100
+ ],
101
+ ],
102
+ )
103
+
104
+
105
+ def _scale_polygons(
106
+ spec: PolygonSpec,
107
+ dst_size: tuple[int, int],
108
+ ) -> list[list[tuple[int, int]]]:
109
+ src_w, src_h = spec.size
110
+ dst_w, dst_h = dst_size
111
+ scale_x = dst_w / max(1, src_w)
112
+ scale_y = dst_h / max(1, src_h)
113
+ scaled = []
114
+ for poly in spec.polygons:
115
+ scaled.append(
116
+ [
117
+ (
118
+ int(round(x * scale_x)),
119
+ int(round(y * scale_y)),
120
+ )
121
+ for x, y in poly
122
+ ]
123
+ )
124
+ return scaled
125
+
126
+
127
+ def _draw_polygon_surface(
128
+ width: int,
129
+ height: int,
130
+ spec: PolygonSpec,
131
+ ) -> pygame.Surface:
132
+ surface = pygame.Surface((width, height), pygame.SRCALPHA)
133
+ draw_polygons = spec.polygons
134
+ if (width, height) != spec.size:
135
+ draw_polygons = _scale_polygons(spec, (width, height))
136
+ for poly in draw_polygons:
137
+ pygame.draw.polygon(surface, YELLOW, poly)
138
+ pygame.draw.polygon(surface, BLACK, poly, width=1)
139
+ return surface
140
+
141
+
46
142
  def build_beveled_polygon(
47
143
  width: int,
48
144
  height: int,
@@ -464,60 +560,15 @@ def paint_zombie_surface(
464
560
 
465
561
 
466
562
  def build_fuel_can_surface(width: int, height: int) -> pygame.Surface:
467
- surface = pygame.Surface((width, height), pygame.SRCALPHA)
468
-
469
- # Jerrycan silhouette with cut corner
470
- body_pts = [
471
- (1, 4),
472
- (width - 2, 4),
473
- (width - 2, height - 2),
474
- (1, height - 2),
475
- (1, 8),
476
- (4, 4),
477
- ]
478
- pygame.draw.polygon(surface, YELLOW, body_pts)
479
- pygame.draw.polygon(surface, BLACK, body_pts, width=2)
480
-
481
- cap_size = max(2, width // 4)
482
- cap_rect = pygame.Rect(width - cap_size - 2, 1, cap_size, 3)
483
- pygame.draw.rect(surface, YELLOW, cap_rect, border_radius=1)
484
- pygame.draw.rect(surface, BLACK, cap_rect, width=1, border_radius=1)
485
-
486
- # Cross brace accent
487
- brace_color = (240, 200, 40)
488
- pygame.draw.line(
489
- surface, brace_color, (3, height // 2), (width - 4, height // 2), width=2
490
- )
491
- pygame.draw.line(
492
- surface, BLACK, (3, height // 2), (width - 4, height // 2), width=1
493
- )
494
- return surface
563
+ return _draw_polygon_surface(width, height, FUEL_CAN_SPEC)
495
564
 
496
565
 
497
566
  def build_flashlight_surface(width: int, height: int) -> pygame.Surface:
498
- surface = pygame.Surface((width, height), pygame.SRCALPHA)
567
+ return _draw_polygon_surface(width, height, FLASHLIGHT_SPEC)
499
568
 
500
- body_color = (230, 200, 70)
501
- trim_color = (80, 70, 40)
502
- head_color = (200, 180, 90)
503
- beam_color = (255, 240, 180, 150)
504
569
 
505
- body_rect = pygame.Rect(1, 2, width - 4, height - 4)
506
- head_rect = pygame.Rect(
507
- body_rect.right - 3, body_rect.top - 1, 4, body_rect.height + 2
508
- )
509
- beam_points = [
510
- (head_rect.right + 4, head_rect.centery),
511
- (head_rect.right + 2, head_rect.top),
512
- (head_rect.right + 2, head_rect.bottom),
513
- ]
514
-
515
- pygame.draw.rect(surface, body_color, body_rect, border_radius=2)
516
- pygame.draw.rect(surface, trim_color, body_rect, width=1, border_radius=2)
517
- pygame.draw.rect(surface, head_color, head_rect, border_radius=2)
518
- pygame.draw.rect(surface, trim_color, head_rect, width=1, border_radius=2)
519
- pygame.draw.polygon(surface, beam_color, beam_points)
520
- return surface
570
+ def build_shoes_surface(width: int, height: int) -> pygame.Surface:
571
+ return _draw_polygon_surface(width, height, SHOES_SPEC)
521
572
 
522
573
 
523
574
  __all__ = [
@@ -539,4 +590,5 @@ __all__ = [
539
590
  "paint_zombie_surface",
540
591
  "build_fuel_can_surface",
541
592
  "build_flashlight_surface",
593
+ "build_shoes_surface",
542
594
  ]
@@ -30,21 +30,19 @@ class RenderAssets:
30
30
  player_radius: int
31
31
  fov_radius: int
32
32
  fog_radius_scale: float
33
- fog_hatch_pixel_scale: int
34
33
  fog_rings: list[FogRing]
35
34
  footprint_radius: int
36
35
  footprint_overview_radius: int
37
36
  footprint_lifetime_ms: int
38
37
  footprint_min_fade: float
39
38
  internal_wall_grid_snap: int
40
- flashlight_bonus_step: float
41
39
  flashlight_hatch_extra_scale: float
42
40
 
43
41
 
44
42
  FOG_RADIUS_SCALE = 1.2
45
- FOG_HATCH_PIXEL_SCALE = 2
46
43
 
47
- FLASHLIGHT_FOG_SCALE_STEP = 0.3
44
+ FLASHLIGHT_FOG_SCALE_ONE = FOG_RADIUS_SCALE + 0.3
45
+ FLASHLIGHT_FOG_SCALE_TWO = FOG_RADIUS_SCALE + 0.6
48
46
  FLASHLIGHT_HATCH_EXTRA_SCALE = 0.12
49
47
 
50
48
  FOOTPRINT_RADIUS = 2
@@ -53,12 +51,22 @@ FOOTPRINT_COLOR = (110, 200, 255)
53
51
  FOOTPRINT_LIFETIME_MS = 135000
54
52
  FOOTPRINT_MIN_FADE = 0.3
55
53
 
54
+ SHADOW_OVERSAMPLE = 2
55
+ SHADOW_STEPS = 10
56
+ SHADOW_MIN_RATIO = 0.0
57
+ SHADOW_RADIUS_RATIO = 0.3
58
+ ENTITY_SHADOW_RADIUS_MULT = 1.8
59
+ ENTITY_SHADOW_ALPHA = 48
60
+ ENTITY_SHADOW_EDGE_SOFTNESS = 0.32
61
+ PLAYER_SHADOW_RADIUS_MULT = 1.6
62
+ PLAYER_SHADOW_ALPHA_MULT = 0.8
63
+
56
64
  FOG_RINGS = [
57
- FogRing(radius_factor=0.529, thickness=2),
58
- FogRing(radius_factor=0.639, thickness=4),
59
- FogRing(radius_factor=0.748, thickness=6),
60
- FogRing(radius_factor=0.858, thickness=8),
61
- FogRing(radius_factor=0.968, thickness=12),
65
+ FogRing(radius_factor=0.536, thickness=2),
66
+ FogRing(radius_factor=0.645, thickness=3),
67
+ FogRing(radius_factor=0.754, thickness=5),
68
+ FogRing(radius_factor=0.863, thickness=8),
69
+ FogRing(radius_factor=0.972, thickness=12),
62
70
  ]
63
71
 
64
72
 
@@ -70,14 +78,12 @@ def build_render_assets(cell_size: int) -> RenderAssets:
70
78
  player_radius=PLAYER_RADIUS,
71
79
  fov_radius=FOV_RADIUS,
72
80
  fog_radius_scale=FOG_RADIUS_SCALE,
73
- fog_hatch_pixel_scale=FOG_HATCH_PIXEL_SCALE,
74
81
  fog_rings=FOG_RINGS,
75
82
  footprint_radius=FOOTPRINT_RADIUS,
76
83
  footprint_overview_radius=FOOTPRINT_OVERVIEW_RADIUS,
77
84
  footprint_lifetime_ms=FOOTPRINT_LIFETIME_MS,
78
85
  footprint_min_fade=FOOTPRINT_MIN_FADE,
79
86
  internal_wall_grid_snap=cell_size,
80
- flashlight_bonus_step=FLASHLIGHT_FOG_SCALE_STEP,
81
87
  flashlight_hatch_extra_scale=FLASHLIGHT_HATCH_EXTRA_SCALE,
82
88
  )
83
89
 
@@ -93,7 +99,17 @@ __all__ = [
93
99
  "FogRing",
94
100
  "RenderAssets",
95
101
  "FOG_RADIUS_SCALE",
96
- "FLASHLIGHT_FOG_SCALE_STEP",
102
+ "FLASHLIGHT_FOG_SCALE_ONE",
103
+ "FLASHLIGHT_FOG_SCALE_TWO",
104
+ "SHADOW_OVERSAMPLE",
105
+ "SHADOW_STEPS",
106
+ "SHADOW_MIN_RATIO",
107
+ "SHADOW_RADIUS_RATIO",
108
+ "ENTITY_SHADOW_RADIUS_MULT",
109
+ "ENTITY_SHADOW_ALPHA",
110
+ "ENTITY_SHADOW_EDGE_SOFTNESS",
111
+ "PLAYER_SHADOW_RADIUS_MULT",
112
+ "PLAYER_SHADOW_ALPHA_MULT",
97
113
  "FLASHLIGHT_HATCH_EXTRA_SCALE",
98
114
  "build_render_assets",
99
115
  ]
@@ -62,7 +62,7 @@ def game_over_screen(
62
62
  footprints_to_draw,
63
63
  fuel=game_data.fuel,
64
64
  flashlights=game_data.flashlights or [],
65
- stage=stage,
65
+ shoes=game_data.shoes or [],
66
66
  buddies=[
67
67
  survivor
68
68
  for survivor in game_data.groups.survivor_group
@@ -21,6 +21,7 @@ from ..gameplay import (
21
21
  nearest_waiting_car,
22
22
  place_flashlights,
23
23
  place_fuel_can,
24
+ place_shoes,
24
25
  process_player_input,
25
26
  setup_player_and_cars,
26
27
  spawn_initial_zombies,
@@ -118,31 +119,49 @@ def gameplay_screen(
118
119
 
119
120
  spawn_survivors(game_data, layout_data)
120
121
 
122
+ occupied_centers: set[tuple[int, int]] = set()
121
123
  if stage.requires_fuel:
122
124
  fuel_spawn_count = stage.fuel_spawn_count
123
125
  fuel_can = place_fuel_can(
124
126
  layout_data["walkable_cells"],
125
127
  player,
126
128
  cars=game_data.waiting_cars,
129
+ reserved_centers=occupied_centers,
127
130
  count=fuel_spawn_count,
128
131
  )
129
132
  if fuel_can:
130
133
  game_data.fuel = fuel_can
131
134
  game_data.groups.all_sprites.add(fuel_can, layer=1)
135
+ occupied_centers.add(fuel_can.rect.center)
132
136
  flashlight_count = stage.initial_flashlight_count
133
137
  flashlights = place_flashlights(
134
138
  layout_data["walkable_cells"],
135
139
  player,
136
140
  cars=game_data.waiting_cars,
141
+ reserved_centers=occupied_centers,
137
142
  count=max(0, flashlight_count),
138
143
  )
139
144
  game_data.flashlights = flashlights
140
145
  game_data.groups.all_sprites.add(flashlights, layer=1)
146
+ for flashlight in flashlights:
147
+ occupied_centers.add(flashlight.rect.center)
148
+
149
+ shoes_count = stage.initial_shoes_count
150
+ shoes_list = place_shoes(
151
+ layout_data["walkable_cells"],
152
+ player,
153
+ cars=game_data.waiting_cars,
154
+ reserved_centers=occupied_centers,
155
+ count=max(0, shoes_count),
156
+ )
157
+ game_data.shoes = shoes_list
158
+ game_data.groups.all_sprites.add(shoes_list, layer=1)
141
159
 
142
160
  spawn_initial_zombies(game_data, player, layout_data, config)
143
161
  update_footprints(game_data, config)
144
162
  while True:
145
163
  dt = clock.tick(fps) / 1000.0
164
+ current_fps = clock.get_fps()
146
165
  if game_data.state.game_over or game_data.state.game_won:
147
166
  if game_data.state.game_won:
148
167
  record_stage_clear(stage.id)
@@ -156,6 +175,7 @@ def gameplay_screen(
156
175
  game_data,
157
176
  config=config,
158
177
  hint_color=None,
178
+ fps=current_fps,
159
179
  present_fn=present,
160
180
  )
161
181
  if game_data.state.game_over_message:
@@ -259,6 +279,7 @@ def gameplay_screen(
259
279
  game_data,
260
280
  config=config,
261
281
  do_flip=not show_pause_overlay,
282
+ fps=current_fps,
262
283
  present_fn=present,
263
284
  )
264
285
  if show_pause_overlay:
@@ -327,7 +348,11 @@ def gameplay_screen(
327
348
  car_ref = game_data.car
328
349
  pad_vector = read_gamepad_move(controller, joystick)
329
350
  player_dx, player_dy, car_dx, car_dy = process_player_input(
330
- keys, player_ref, car_ref, pad_input=pad_vector
351
+ keys,
352
+ player_ref,
353
+ car_ref,
354
+ shoes_count=game_data.state.shoes_count,
355
+ pad_input=pad_vector,
331
356
  )
332
357
  update_entities(
333
358
  game_data,
@@ -407,6 +432,7 @@ def gameplay_screen(
407
432
  config=config,
408
433
  hint_target=hint_target,
409
434
  hint_color=hint_color,
435
+ fps=current_fps,
410
436
  present_fn=present,
411
437
  )
412
438
 
@@ -156,6 +156,7 @@ STAGES: list[Stage] = [
156
156
  zombie_aging_duration_frames=ZOMBIE_AGING_DURATION_FRAMES * 2,
157
157
  initial_interior_spawn_rate=0.1,
158
158
  waiting_car_target_count=1,
159
+ initial_shoes_count=1,
159
160
  ),
160
161
  Stage(
161
162
  id="stage12",
@@ -176,6 +177,7 @@ STAGES: list[Stage] = [
176
177
  ],
177
178
  initial_flashlight_count=5,
178
179
  zombie_aging_duration_frames=ZOMBIE_AGING_DURATION_FRAMES * 2,
180
+ initial_shoes_count=1,
179
181
  ),
180
182
  Stage(
181
183
  id="stage13",
@@ -198,32 +200,47 @@ STAGES: list[Stage] = [
198
200
  for y in range(2, DEFAULT_GRID_ROWS - 2, 4)
199
201
  for x in range(2, DEFAULT_GRID_COLS - 2, 4)
200
202
  ],
203
+ initial_shoes_count=1,
201
204
  ),
202
205
  Stage(
203
206
  id="stage14",
204
207
  name_key="stages.stage14.name",
205
208
  description_key="stages.stage14.description",
206
- grid_cols=42,
207
- grid_rows=27,
208
- available=False,
209
+ grid_cols=34,
210
+ grid_rows=20,
211
+ available=True,
209
212
  requires_fuel=True,
210
213
  exterior_spawn_weight=0.2,
211
214
  interior_spawn_weight=0.1,
212
215
  interior_fall_spawn_weight=0.7,
216
+ fall_spawn_floor_ratio=0.05,
217
+ initial_flashlight_count=3,
218
+ zombie_aging_duration_frames=ZOMBIE_AGING_DURATION_FRAMES * 2,
219
+ initial_shoes_count=1,
220
+ ),
221
+ Stage(
222
+ id="stage15",
223
+ name_key="stages.stage15.name",
224
+ description_key="stages.stage15.description",
225
+ available=True,
226
+ buddy_required_count=1,
227
+ grid_cols=70,
228
+ grid_rows=20,
229
+ tile_size=35,
230
+ wall_algorithm="grid_wire",
231
+ requires_fuel=True,
232
+ initial_interior_spawn_rate=0.02,
233
+ exterior_spawn_weight=0.2,
234
+ interior_spawn_weight=0.1,
235
+ interior_fall_spawn_weight=0.7,
236
+ initial_flashlight_count=3,
237
+ zombie_normal_ratio=0.5,
238
+ zombie_wall_follower_ratio=0.5,
213
239
  fall_spawn_zones=[
214
- (4, 10, 3, 3),
215
- (5, 20, 3, 3),
216
- (15, 17, 3, 3),
217
- (22, 16, 3, 3),
218
- (17, 20, 3, 3),
219
- (26, 22, 3, 3),
220
- (31, 17, 3, 3),
221
- (33, 10, 3, 3),
222
- (34, 7, 3, 3),
223
- (35, 13, 3, 3),
240
+ (33, 2, 4, 16),
224
241
  ],
225
- initial_flashlight_count=5,
226
242
  zombie_aging_duration_frames=ZOMBIE_AGING_DURATION_FRAMES * 2,
243
+ initial_shoes_count=1,
227
244
  ),
228
245
  ]
229
246
  DEFAULT_STAGE_ID = "stage1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zombie-escape
3
- Version: 1.10.0
3
+ Version: 1.12.0
4
4
  Summary: Top-down zombie survival game built with pygame.
5
5
  Project-URL: Homepage, https://github.com/tos-kamiya/zombie-escape
6
6
  Author-email: Toshihiro Kamiya <kamiya@mbj.nifty.com>
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: Implementation :: CPython
17
17
  Requires-Python: >=3.10
18
18
  Requires-Dist: numpy
19
19
  Requires-Dist: platformdirs
20
- Requires-Dist: pygame
20
+ Requires-Dist: pygame-ce
21
21
  Requires-Dist: python-i18n
22
22
  Requires-Dist: typing-extensions; python_version < '3.11'
23
23
  Provides-Extra: dev
@@ -48,6 +48,7 @@ This game is a simple 2D top-down action game where the player aims to escape by
48
48
  <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/screenshot1.png" width="400">
49
49
  <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/screenshot2.png" width="400">
50
50
  <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/screenshot3.png" width="400">
51
+ <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/screenshot4.png" width="400">
51
52
 
52
53
  ## Controls
53
54
 
@@ -154,6 +155,8 @@ zombie-escape
154
155
 
155
156
  This project is licensed under the MIT License - see the [LICENSE.txt](LICENSE.txt) file for details.
156
157
 
158
+ This project depends on pygame-ce (repository: `https://github.com/pygame-community/pygame-ce`), which is licensed under GNU LGPL version 2.1.
159
+
157
160
  The bundled Silkscreen-Regular.ttf font follows the license terms of its original distribution.
158
161
  Please refer to the upstream website for details: https://fonts.google.com/specimen/Silkscreen
159
162
 
@@ -0,0 +1,47 @@
1
+ zombie_escape/__about__.py,sha256=kNaFL79PgwLtvJEtktI5T51KrzNULqPSzAhOAofAB4w,135
2
+ zombie_escape/__init__.py,sha256=YSQnUghet8jxSvaGmKfzHfXXLlnvWh_xk10WGTDO2HM,173
3
+ zombie_escape/colors.py,sha256=5MNq3MSBiSA2jNhyWIsgHU2qEo4wV0bTyD3-NDhUrbg,6631
4
+ zombie_escape/config.py,sha256=Ncvsz6HzBknSjecorkm7CrkrzWUIksD30ykLPueanyw,2008
5
+ zombie_escape/entities.py,sha256=ag4OXcx8F_pZIzO_9cRxpbKhskiQbfbzXdZeXHNi7qI,54410
6
+ zombie_escape/entities_constants.py,sha256=TJvNcANkH0slpXDFfF51S5LyIYGn4xEW-oMjEFXuuYc,3198
7
+ zombie_escape/font_utils.py,sha256=kkjcSlCTG3jO5zf5XUnirpJ-iL_Eg8ahzjZYGijF2JY,1206
8
+ zombie_escape/gameplay_constants.py,sha256=MdchWDi3p1xUOZuDsl5eH9KjazuApjuIYEddHkazEsw,984
9
+ zombie_escape/input_utils.py,sha256=0SHENZi5y-ybSxUX569RHihI_xbQWSI0FQ1q1ZE9U1c,5795
10
+ zombie_escape/level_blueprints.py,sha256=FbmiAaazw7sRj_OF_5EuVJJDklVKpHZM_qVff41K9Z0,11297
11
+ zombie_escape/level_constants.py,sha256=fSrPXfkuKHlv9XqmaRq6aR9UhjpqZK2iJJgMc-TXGXc,281
12
+ zombie_escape/localization.py,sha256=gp26FN_Od4eOeIK2aY0_QZ-9THw6yENh-cGTwglnMxw,6118
13
+ zombie_escape/models.py,sha256=TWFL3ZMjW3Tyj9xHEyO9OW_3lWl0Rxqiu4wX2M6pFp8,5006
14
+ zombie_escape/progress.py,sha256=WCFc7JeMY6noBjnTIFyHrXQJSM1j8PwyPA7S8ZQwjTE,1713
15
+ zombie_escape/render.py,sha256=RfCOYoY9IZByoWkSAL_YofPDSg_dZaTLe3OEWdl-PUA,53611
16
+ zombie_escape/render_assets.py,sha256=z9-CtwQ52sR7UqTwYFTWxaAyv6AIGuCkiOygQBNaXM8,16896
17
+ zombie_escape/render_constants.py,sha256=4xUd4V3VL4FApvHg8POCuMU4ttTdK9cvG1kzcWJmeNQ,3103
18
+ zombie_escape/rng.py,sha256=gMAgpzYoNN1FxRG3aQ9fdXTDNAg48Rqz8YnB1nJ4Fpw,3787
19
+ zombie_escape/screen_constants.py,sha256=MJaTlSWfN4VtN6pMqPQ6LF34XdJm0wqYLuRwa1pQuAU,559
20
+ zombie_escape/stage_constants.py,sha256=GqS1WLEEbO8CElx5757gLdTWW86w11Yd2URLG2JPn3M,7883
21
+ zombie_escape/world_grid.py,sha256=9ZKaur2fBOXiZEg5WlaAnoeHV6Lda092rJROraMW6zk,4553
22
+ zombie_escape/zombie_escape.py,sha256=mIrKb3iJed6KPem7fmcnL9yKkWWLIXTX5McoVcVIN8E,8492
23
+ zombie_escape/assets/fonts/Silkscreen-Regular.ttf,sha256=SVZ0CGAICeJRR-kiWsTzf0EOLfRadQaWxFAnUx-2Xxs,31960
24
+ zombie_escape/assets/fonts/misaki_gothic.ttf,sha256=CWPhHonV-kCaegSKUujqLWI9dkp5mEiPikKRERYRxOE,1171204
25
+ zombie_escape/gameplay/__init__.py,sha256=Q-6ifVss8Adnoo1hh9aUcN1fug6wXFVNkiFTWSHkazk,2387
26
+ zombie_escape/gameplay/ambient.py,sha256=hoCOz6ciyejU0nmJwdLqmVfaoo-01CrVSMRLpFMz93w,1446
27
+ zombie_escape/gameplay/constants.py,sha256=x_-b67fgvejZj00_lE-oJITcntb0Oi2ba2Zu9QyL3-0,1009
28
+ zombie_escape/gameplay/footprints.py,sha256=0yY6X3lI7bRL7kXS-ArWBqIipqrQdj8YJB3ryQuLrVE,1795
29
+ zombie_escape/gameplay/interactions.py,sha256=ETfa2BHvTxxI4PLV5wuOHRz5aCMIGljqXi7-3hVULNA,13922
30
+ zombie_escape/gameplay/layout.py,sha256=UXpBi_AOzaYndajqCqKENsIXqkoJmiZl-qxzrZW76GM,8823
31
+ zombie_escape/gameplay/movement.py,sha256=v3D1qr3zAcabektC6RXiJZ6Bsg8h9wPArH3hO6xP6Z4,9529
32
+ zombie_escape/gameplay/spawn.py,sha256=sRHXi5d_RgT9e4EhKHL-Wc78F2kNL3lbQGtpzeyF30Q,30686
33
+ zombie_escape/gameplay/state.py,sha256=4Kedqg2bmmL8tP62vCNCyZVUJytY_LHCygph8qm0QPE,4590
34
+ zombie_escape/gameplay/survivors.py,sha256=ruQqSiZZslARviUej_RQS3hlAnxA8DQZkE32fPPsHuk,11877
35
+ zombie_escape/gameplay/utils.py,sha256=4M9gkLbcE9nhUqLzBPGGF4nPSqZpbEhH4SjUZAwSd64,5805
36
+ zombie_escape/locales/ui.en.json,sha256=fHsEThNTKjVs3n1PEvdJLywxfk-HwZrHVAnnBPu5nZI,6505
37
+ zombie_escape/locales/ui.ja.json,sha256=ryOHPyiGxn8vGeDR7Q2ueIVoP-mA6dS1yDMhejjpPiQ,7079
38
+ zombie_escape/screens/__init__.py,sha256=BFLQzXqyrAhmm6b_2wlnK7lMm_n5HvBklVrzrJRwRn0,8387
39
+ zombie_escape/screens/game_over.py,sha256=a6udonlPr5HRQRMTjb2Y-Iu_ViOl1uuZK9TpUYNkiK8,6709
40
+ zombie_escape/screens/gameplay.py,sha256=B0rPugoGW82MpmmLTYKy4aDujw6rp_cNmT-aYxFG-tU,16125
41
+ zombie_escape/screens/settings.py,sha256=qgcnq8k-yeRbqweT9GsIefKWKvjOON_Gs2_SCZChY-8,21739
42
+ zombie_escape/screens/title.py,sha256=1LUEMTmFLmJNL0TKTbnP2oRGWb6zUV28d8sQQo8i3Po,23118
43
+ zombie_escape-1.12.0.dist-info/METADATA,sha256=Gd8c1J7rqlsaABKpNtEhYW89b9HZtWDFNbtgcIdRUo4,10718
44
+ zombie_escape-1.12.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
45
+ zombie_escape-1.12.0.dist-info/entry_points.txt,sha256=JprxC-vvkBJgsOp0WJnGBZRJ_ESjjmyS-nsPExeiLHU,49
46
+ zombie_escape-1.12.0.dist-info/licenses/LICENSE.txt,sha256=q-cJYG_K766eXSxQ7txWcWQ6nS2OF6c3HTVLesHbesU,1104
47
+ zombie_escape-1.12.0.dist-info/RECORD,,
@@ -1,47 +0,0 @@
1
- zombie_escape/__about__.py,sha256=rD0DkxtvcakK5xudYs0CYK3HVkzEUVrQ_oH-aR5EFkw,135
2
- zombie_escape/__init__.py,sha256=YSQnUghet8jxSvaGmKfzHfXXLlnvWh_xk10WGTDO2HM,173
3
- zombie_escape/colors.py,sha256=yD7pO4ZUBsm-saO0Fvwmxc1OO6aOnzMNU5TA6GTCt7Y,6629
4
- zombie_escape/config.py,sha256=Ncvsz6HzBknSjecorkm7CrkrzWUIksD30ykLPueanyw,2008
5
- zombie_escape/entities.py,sha256=apMwSzkdxUMhOC2Q1l-ZKCD-Dsi_F0abOBXOfN7bXa8,54020
6
- zombie_escape/entities_constants.py,sha256=9DsEF67OW_k4OUzIcuTfMGGEtxaKbvz8w9evv7B7Jm8,3097
7
- zombie_escape/font_utils.py,sha256=kkjcSlCTG3jO5zf5XUnirpJ-iL_Eg8ahzjZYGijF2JY,1206
8
- zombie_escape/gameplay_constants.py,sha256=I5g2xsd4Rck4d5tbWae2bm6Yfwp4ZAgujDLnDMsHxgM,758
9
- zombie_escape/input_utils.py,sha256=0SHENZi5y-ybSxUX569RHihI_xbQWSI0FQ1q1ZE9U1c,5795
10
- zombie_escape/level_blueprints.py,sha256=VZieyhG4kWd1l6u7_Owy2FxhYt63pWpvsmLx5yB8GOs,10609
11
- zombie_escape/level_constants.py,sha256=fSrPXfkuKHlv9XqmaRq6aR9UhjpqZK2iJJgMc-TXGXc,281
12
- zombie_escape/localization.py,sha256=gp26FN_Od4eOeIK2aY0_QZ-9THw6yENh-cGTwglnMxw,6118
13
- zombie_escape/models.py,sha256=JTE9IysbWZUv9YAXaK62pf6Z5BFVhx_YG_8UMQxSiXw,4813
14
- zombie_escape/progress.py,sha256=WCFc7JeMY6noBjnTIFyHrXQJSM1j8PwyPA7S8ZQwjTE,1713
15
- zombie_escape/render.py,sha256=y0hMS42RX7eu9j7_rbWBkU8PQGpGJe2O5fTJJPv1xJM,42733
16
- zombie_escape/render_assets.py,sha256=66lRKQZ9fII6930WeQchIJRFeLLu7J3Cr155svpDrUM,16489
17
- zombie_escape/render_constants.py,sha256=d07yNUlnKvm-NgN4xuLUShuUUS5vVxHo-ytPIGiTYoA,2703
18
- zombie_escape/rng.py,sha256=gMAgpzYoNN1FxRG3aQ9fdXTDNAg48Rqz8YnB1nJ4Fpw,3787
19
- zombie_escape/screen_constants.py,sha256=MJaTlSWfN4VtN6pMqPQ6LF34XdJm0wqYLuRwa1pQuAU,559
20
- zombie_escape/stage_constants.py,sha256=cslgIeGGQlVmZw00bgdG_j8ywA00MFWSTQU3j6kR6Sk,7289
21
- zombie_escape/world_grid.py,sha256=9ZKaur2fBOXiZEg5WlaAnoeHV6Lda092rJROraMW6zk,4553
22
- zombie_escape/zombie_escape.py,sha256=mIrKb3iJed6KPem7fmcnL9yKkWWLIXTX5McoVcVIN8E,8492
23
- zombie_escape/assets/fonts/Silkscreen-Regular.ttf,sha256=SVZ0CGAICeJRR-kiWsTzf0EOLfRadQaWxFAnUx-2Xxs,31960
24
- zombie_escape/assets/fonts/misaki_gothic.ttf,sha256=CWPhHonV-kCaegSKUujqLWI9dkp5mEiPikKRERYRxOE,1171204
25
- zombie_escape/gameplay/__init__.py,sha256=l89oVjZysKEyb18JNWsZmbO-YCOrSaG8Cq2yCPqnntQ,2351
26
- zombie_escape/gameplay/ambient.py,sha256=hoCOz6ciyejU0nmJwdLqmVfaoo-01CrVSMRLpFMz93w,1446
27
- zombie_escape/gameplay/constants.py,sha256=x_-b67fgvejZj00_lE-oJITcntb0Oi2ba2Zu9QyL3-0,1009
28
- zombie_escape/gameplay/footprints.py,sha256=0yY6X3lI7bRL7kXS-ArWBqIipqrQdj8YJB3ryQuLrVE,1795
29
- zombie_escape/gameplay/interactions.py,sha256=WisFHyi9IX-RM2IamZ8R0t51yluqTTnALnPdn8CRCn4,13246
30
- zombie_escape/gameplay/layout.py,sha256=f_BpBULO57hedE6-0-bmWlIKOajkwKndR9LELNmF6Ck,8015
31
- zombie_escape/gameplay/movement.py,sha256=3P7sdDkVdmZcQxK87RXNvnGmMF50u8TSKN2vkqkti7o,9131
32
- zombie_escape/gameplay/spawn.py,sha256=YTr8pvNHmSWVcSSArtIYjixrNua3pcFNtdHnTW6gceg,27969
33
- zombie_escape/gameplay/state.py,sha256=7PzW0wY7rTjnA96jY-yg1YvJ6cjttwiAFipiFl98HGo,4549
34
- zombie_escape/gameplay/survivors.py,sha256=ruQqSiZZslARviUej_RQS3hlAnxA8DQZkE32fPPsHuk,11877
35
- zombie_escape/gameplay/utils.py,sha256=4M9gkLbcE9nhUqLzBPGGF4nPSqZpbEhH4SjUZAwSd64,5805
36
- zombie_escape/locales/ui.en.json,sha256=Q8Tfu7tuA26UGNheDjG35wtlkWHnKWbK7eGeWhgvyQ0,6219
37
- zombie_escape/locales/ui.ja.json,sha256=6zVN-GjeIERah17DjZtxcjwqrpUZwSc-NugyNd8CpTY,6773
38
- zombie_escape/screens/__init__.py,sha256=BFLQzXqyrAhmm6b_2wlnK7lMm_n5HvBklVrzrJRwRn0,8387
39
- zombie_escape/screens/game_over.py,sha256=fU60JWLd4JqbX0qg6qf2ziSLVaix4yCPip7VBQungvs,6693
40
- zombie_escape/screens/gameplay.py,sha256=mE3kjuN4hEpnTZIwHn2csDsGIUuRQKp3p6vSsoNhUzY,15235
41
- zombie_escape/screens/settings.py,sha256=qgcnq8k-yeRbqweT9GsIefKWKvjOON_Gs2_SCZChY-8,21739
42
- zombie_escape/screens/title.py,sha256=1LUEMTmFLmJNL0TKTbnP2oRGWb6zUV28d8sQQo8i3Po,23118
43
- zombie_escape-1.10.0.dist-info/METADATA,sha256=sdsYo-RXO2rQrQ76e-Coyvt3hTw89EJcC284xNsVJ1E,10462
44
- zombie_escape-1.10.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
45
- zombie_escape-1.10.0.dist-info/entry_points.txt,sha256=JprxC-vvkBJgsOp0WJnGBZRJ_ESjjmyS-nsPExeiLHU,49
46
- zombie_escape-1.10.0.dist-info/licenses/LICENSE.txt,sha256=q-cJYG_K766eXSxQ7txWcWQ6nS2OF6c3HTVLesHbesU,1104
47
- zombie_escape-1.10.0.dist-info/RECORD,,