zombie-escape 1.13.1__tar.gz → 1.14.4__tar.gz

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.
Files changed (55) hide show
  1. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/PKG-INFO +100 -39
  2. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/README.md +98 -37
  3. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/pyproject.toml +1 -1
  4. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/__about__.py +1 -1
  5. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/colors.py +7 -21
  6. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/entities.py +100 -191
  7. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/export_images.py +39 -33
  8. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/ambient.py +2 -6
  9. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/footprints.py +8 -11
  10. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/interactions.py +17 -58
  11. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/layout.py +20 -46
  12. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/movement.py +7 -21
  13. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/spawn.py +12 -40
  14. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/state.py +1 -0
  15. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/survivors.py +5 -16
  16. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/utils.py +4 -13
  17. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/input_utils.py +8 -31
  18. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/level_blueprints.py +112 -69
  19. zombie_escape-1.14.4/src/zombie_escape/level_constants.py +21 -0
  20. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/locales/ui.en.json +12 -0
  21. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/locales/ui.ja.json +12 -0
  22. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/localization.py +3 -11
  23. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/models.py +26 -9
  24. zombie_escape-1.14.4/src/zombie_escape/render/__init__.py +30 -0
  25. zombie_escape-1.14.4/src/zombie_escape/render/core.py +992 -0
  26. zombie_escape-1.14.4/src/zombie_escape/render/hud.py +444 -0
  27. zombie_escape-1.14.4/src/zombie_escape/render/overview.py +218 -0
  28. zombie_escape-1.14.4/src/zombie_escape/render/shadows.py +343 -0
  29. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/render_assets.py +11 -33
  30. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/rng.py +4 -8
  31. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/screens/__init__.py +14 -30
  32. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/screens/game_over.py +43 -15
  33. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/screens/gameplay.py +41 -104
  34. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/screens/settings.py +19 -104
  35. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/screens/title.py +36 -176
  36. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/stage_constants.py +192 -67
  37. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/zombie_escape.py +1 -1
  38. zombie_escape-1.13.1/src/zombie_escape/level_constants.py +0 -13
  39. zombie_escape-1.13.1/src/zombie_escape/render.py +0 -1746
  40. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/.gitignore +0 -0
  41. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/LICENSE.txt +0 -0
  42. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/__init__.py +0 -0
  43. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/__main__.py +0 -0
  44. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/assets/fonts/Silkscreen-Regular.ttf +0 -0
  45. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/assets/fonts/misaki_gothic.ttf +0 -0
  46. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/config.py +0 -0
  47. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/entities_constants.py +0 -0
  48. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/font_utils.py +0 -0
  49. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/__init__.py +0 -0
  50. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay/constants.py +0 -0
  51. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/gameplay_constants.py +0 -0
  52. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/progress.py +0 -0
  53. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/render_constants.py +0 -0
  54. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/screen_constants.py +0 -0
  55. {zombie_escape-1.13.1 → zombie_escape-1.14.4}/src/zombie_escape/world_grid.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: zombie-escape
3
- Version: 1.13.1
3
+ Version: 1.14.4
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>
7
7
  License-Expression: MIT
8
8
  License-File: LICENSE.txt
9
- Classifier: Development Status :: 4 - Beta
9
+ Classifier: Development Status :: 5 - Production/Stable
10
10
  Classifier: License :: OSI Approved :: MIT License
11
11
  Classifier: Programming Language :: Python
12
12
  Classifier: Programming Language :: Python :: 3.10
@@ -99,49 +99,110 @@ Open **Settings** from the title to toggle gameplay assists:
99
99
 
100
100
  #### Characters
101
101
 
102
- | Name | Image | Notes |
103
- | --- | --- | --- |
104
- | Player | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/player.png" width="64"> | Blue circle with small hands. |
105
- | Zombie (Normal) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/zombie-normal.png" width="64"> | Chases the player once detected. |
106
- | Car | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/car.png" width="64"> | Driveable escape vehicle with durability. |
107
- | Buddy (Stage 3) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/buddy.png" width="64"> | A green survivor you can rescue. |
108
- | Survivors (Stage 4) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/survivor.png" width="64"> | Civilians to evacuate by car. |
109
-
110
- - **Player:** Controlled with the WASD or arrow keys. When carrying fuel a tiny yellow square appears near the sprite so you can immediately see whether you're ready to drive.
111
- - **Zombie:** When out of sight, the zombie's movement mode will randomly switch every certain time (moving horizontally/vertically only, side-to-side movement, random movement, etc.).
112
- - **Car:**
113
- - The car has durability. Durability decreases when colliding with internal walls or hitting zombies.
114
- - If durability reaches 0, the car is destroyed and you are dumped on foot; you must track down another parked car hidden in the level.
115
- - When you're already driving, ramming a parked car instantly restores your current car's health. On Stage 4 this also increases the safe passenger limit by five.
116
- - After roughly 5 minutes of play, a small triangle near the player points toward the objective: fuel first (Stage 2 before pickup), car after fuel is collected (Stage 2/3), or car directly (Stage 1/4).
117
- - **Buddy (Stage 3):**
118
- - Zombies only choose to pursue the buddy if they are on-screen; otherwise they ignore them.
119
- - If a zombie tags the buddy off-screen, the buddy quietly respawns somewhere else instead of ending the run.
120
- - Touch the buddy on foot to make them follow you (at 70% of player speed). Touch them while driving to pick them up.
121
- - If you bash an inner wall or steel beam, the buddy will drift toward that spot and help chip away at it.
122
- - **Survivors (Stage 4):**
123
- - They stand still until you get close, then shuffle toward you at about one-third of player speed.
124
- - Zombies can convert them if both are on-screen; the survivor shouts a line and turns instantly.
125
- - They only board the car; your safe capacity starts at five but grows by five each time you sideswipe a parked car while already driving. Speed loss is based on how full the car is relative to that capacity, so extra slots mean quicker getaways.
102
+ <table>
103
+ <colgroup>
104
+ <col style="width:20%">
105
+ <col>
106
+ <col>
107
+ </colgroup>
108
+ <thead>
109
+ <tr>
110
+ <th>Name</th>
111
+ <th>Image</th>
112
+ <th>Notes</th>
113
+ </tr>
114
+ </thead>
115
+ <tbody>
116
+ <tr>
117
+ <td>Player</td>
118
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/player.png" width="64"></td>
119
+ <td>Blue circle with small hands; controlled with WASD/arrow keys. When carrying fuel, a tiny yellow square appears near the sprite.</td>
120
+ </tr>
121
+ <tr>
122
+ <td>Zombie (Normal)</td>
123
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/zombie-normal.png" width="64"></td>
124
+ <td>Chases the player once detected; out of sight it periodically switches movement modes.</td>
125
+ </tr>
126
+ <tr>
127
+ <td>Car</td>
128
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/car.png" width="64"></td>
129
+ <td>Driveable escape vehicle with durability; wall hits and zombie collisions reduce health. If it breaks, you're on foot until you find another car. Ramming a parked car restores health (and in Stage 4 increases safe passenger capacity). After ~5 minutes, a small triangle points to the current objective.</td>
130
+ </tr>
131
+ <tr>
132
+ <td>Buddy (Stage 3)</td>
133
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/buddy.png" width="64"></td>
134
+ <td>Green survivor you can rescue; zombies only target them on-screen and off-screen catches just respawn them. Touch on foot to follow (70% speed), touch while driving to pick up. Helps chip away at walls you bash.</td>
135
+ </tr>
136
+ <tr>
137
+ <td>Survivors (Stage 4)</td>
138
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/survivor.png" width="64"></td>
139
+ <td>Civilians to evacuate by car; they idle until approached, then follow at ~1/3 speed. On-screen zombie contact converts them. They only board cars; safe capacity starts at five and grows by five when you sideswipe parked cars, with speed loss based on how full the car is.</td>
140
+ </tr>
141
+ </tbody>
142
+ </table>
126
143
 
127
144
  #### Items
128
145
 
129
- | Name | Image | Notes |
130
- | --- | --- | --- |
131
- | Flashlight | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/flashlight.png" width="64"> | Each pickup expands your visible radius by about 20% (grab two to reach the max boost). |
132
- | Fuel Can (Stages 2 & 3) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/fuel.png" width="64"> | Must be collected before driving the car in fuel-run stages. |
133
- | Steel Beam (optional) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/steel-beam.png" width="64"> | Same collision as inner walls but with triple durability. |
146
+ <table>
147
+ <colgroup>
148
+ <col style="width:20%">
149
+ <col>
150
+ <col>
151
+ </colgroup>
152
+ <thead>
153
+ <tr>
154
+ <th>Name</th>
155
+ <th>Image</th>
156
+ <th>Notes</th>
157
+ </tr>
158
+ </thead>
159
+ <tbody>
160
+ <tr>
161
+ <td>Flashlight</td>
162
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/flashlight.png" width="64"></td>
163
+ <td>Each pickup expands your visible radius by about 20% (grab two to reach the max boost).</td>
164
+ </tr>
165
+ <tr>
166
+ <td>Fuel Can (Stages 2 & 3)</td>
167
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/fuel.png" width="64"></td>
168
+ <td>Must be collected before driving the car in fuel-run stages.</td>
169
+ </tr>
170
+ <tr>
171
+ <td>Steel Beam (optional)</td>
172
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/steel-beam.png" width="64"></td>
173
+ <td>Same collision as inner walls but with 1.5x durability.</td>
174
+ </tr>
175
+ </tbody>
176
+ </table>
134
177
 
135
178
  #### Environment
136
179
 
137
- | Name | Image | Notes |
138
- | --- | --- | --- |
139
- | Outer Wall | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/wall-outer.png" width="64"> | Nearly indestructible; each side has exits. |
140
- | Inner Wall | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/wall-inner.png" width="64"> | Breakable by the player; zombies chip away slowly. |
141
-
142
- - **Walls:** Outer walls are gray; inner walls are beige.
143
- - **Outer Walls:** Walls surrounding the stage that are nearly indestructible. Each side has at least three openings (exits).
144
- - **Inner Walls:** Beige walls randomly placed inside the building. Inner wall segments each have durability. **The player can break these walls** by repeatedly colliding with a segment to reduce its durability; when it reaches 0, the segment is destroyed and disappears. Zombies can also wear down walls, but far more slowly. The car cannot break walls.
180
+ <table>
181
+ <colgroup>
182
+ <col style="width:20%">
183
+ <col>
184
+ <col>
185
+ </colgroup>
186
+ <thead>
187
+ <tr>
188
+ <th>Name</th>
189
+ <th>Image</th>
190
+ <th>Notes</th>
191
+ </tr>
192
+ </thead>
193
+ <tbody>
194
+ <tr>
195
+ <td>Outer Wall</td>
196
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/wall-outer.png" width="64"></td>
197
+ <td>Gray perimeter walls that are nearly indestructible; each side has a single opening (exit).</td>
198
+ </tr>
199
+ <tr>
200
+ <td>Inner Wall</td>
201
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/wall-inner.png" width="64"></td>
202
+ <td>Beige interior walls with durability. The player can break them by repeated collisions; zombies wear them down slowly; the car cannot break them.</td>
203
+ </tr>
204
+ </tbody>
205
+ </table>
145
206
 
146
207
  ### Win/Lose Conditions
147
208
 
@@ -70,49 +70,110 @@ Open **Settings** from the title to toggle gameplay assists:
70
70
 
71
71
  #### Characters
72
72
 
73
- | Name | Image | Notes |
74
- | --- | --- | --- |
75
- | Player | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/player.png" width="64"> | Blue circle with small hands. |
76
- | Zombie (Normal) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/zombie-normal.png" width="64"> | Chases the player once detected. |
77
- | Car | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/car.png" width="64"> | Driveable escape vehicle with durability. |
78
- | Buddy (Stage 3) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/buddy.png" width="64"> | A green survivor you can rescue. |
79
- | Survivors (Stage 4) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/survivor.png" width="64"> | Civilians to evacuate by car. |
80
-
81
- - **Player:** Controlled with the WASD or arrow keys. When carrying fuel a tiny yellow square appears near the sprite so you can immediately see whether you're ready to drive.
82
- - **Zombie:** When out of sight, the zombie's movement mode will randomly switch every certain time (moving horizontally/vertically only, side-to-side movement, random movement, etc.).
83
- - **Car:**
84
- - The car has durability. Durability decreases when colliding with internal walls or hitting zombies.
85
- - If durability reaches 0, the car is destroyed and you are dumped on foot; you must track down another parked car hidden in the level.
86
- - When you're already driving, ramming a parked car instantly restores your current car's health. On Stage 4 this also increases the safe passenger limit by five.
87
- - After roughly 5 minutes of play, a small triangle near the player points toward the objective: fuel first (Stage 2 before pickup), car after fuel is collected (Stage 2/3), or car directly (Stage 1/4).
88
- - **Buddy (Stage 3):**
89
- - Zombies only choose to pursue the buddy if they are on-screen; otherwise they ignore them.
90
- - If a zombie tags the buddy off-screen, the buddy quietly respawns somewhere else instead of ending the run.
91
- - Touch the buddy on foot to make them follow you (at 70% of player speed). Touch them while driving to pick them up.
92
- - If you bash an inner wall or steel beam, the buddy will drift toward that spot and help chip away at it.
93
- - **Survivors (Stage 4):**
94
- - They stand still until you get close, then shuffle toward you at about one-third of player speed.
95
- - Zombies can convert them if both are on-screen; the survivor shouts a line and turns instantly.
96
- - They only board the car; your safe capacity starts at five but grows by five each time you sideswipe a parked car while already driving. Speed loss is based on how full the car is relative to that capacity, so extra slots mean quicker getaways.
73
+ <table>
74
+ <colgroup>
75
+ <col style="width:20%">
76
+ <col>
77
+ <col>
78
+ </colgroup>
79
+ <thead>
80
+ <tr>
81
+ <th>Name</th>
82
+ <th>Image</th>
83
+ <th>Notes</th>
84
+ </tr>
85
+ </thead>
86
+ <tbody>
87
+ <tr>
88
+ <td>Player</td>
89
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/player.png" width="64"></td>
90
+ <td>Blue circle with small hands; controlled with WASD/arrow keys. When carrying fuel, a tiny yellow square appears near the sprite.</td>
91
+ </tr>
92
+ <tr>
93
+ <td>Zombie (Normal)</td>
94
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/zombie-normal.png" width="64"></td>
95
+ <td>Chases the player once detected; out of sight it periodically switches movement modes.</td>
96
+ </tr>
97
+ <tr>
98
+ <td>Car</td>
99
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/car.png" width="64"></td>
100
+ <td>Driveable escape vehicle with durability; wall hits and zombie collisions reduce health. If it breaks, you're on foot until you find another car. Ramming a parked car restores health (and in Stage 4 increases safe passenger capacity). After ~5 minutes, a small triangle points to the current objective.</td>
101
+ </tr>
102
+ <tr>
103
+ <td>Buddy (Stage 3)</td>
104
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/buddy.png" width="64"></td>
105
+ <td>Green survivor you can rescue; zombies only target them on-screen and off-screen catches just respawn them. Touch on foot to follow (70% speed), touch while driving to pick up. Helps chip away at walls you bash.</td>
106
+ </tr>
107
+ <tr>
108
+ <td>Survivors (Stage 4)</td>
109
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/survivor.png" width="64"></td>
110
+ <td>Civilians to evacuate by car; they idle until approached, then follow at ~1/3 speed. On-screen zombie contact converts them. They only board cars; safe capacity starts at five and grows by five when you sideswipe parked cars, with speed loss based on how full the car is.</td>
111
+ </tr>
112
+ </tbody>
113
+ </table>
97
114
 
98
115
  #### Items
99
116
 
100
- | Name | Image | Notes |
101
- | --- | --- | --- |
102
- | Flashlight | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/flashlight.png" width="64"> | Each pickup expands your visible radius by about 20% (grab two to reach the max boost). |
103
- | Fuel Can (Stages 2 & 3) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/fuel.png" width="64"> | Must be collected before driving the car in fuel-run stages. |
104
- | Steel Beam (optional) | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/steel-beam.png" width="64"> | Same collision as inner walls but with triple durability. |
117
+ <table>
118
+ <colgroup>
119
+ <col style="width:20%">
120
+ <col>
121
+ <col>
122
+ </colgroup>
123
+ <thead>
124
+ <tr>
125
+ <th>Name</th>
126
+ <th>Image</th>
127
+ <th>Notes</th>
128
+ </tr>
129
+ </thead>
130
+ <tbody>
131
+ <tr>
132
+ <td>Flashlight</td>
133
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/flashlight.png" width="64"></td>
134
+ <td>Each pickup expands your visible radius by about 20% (grab two to reach the max boost).</td>
135
+ </tr>
136
+ <tr>
137
+ <td>Fuel Can (Stages 2 & 3)</td>
138
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/fuel.png" width="64"></td>
139
+ <td>Must be collected before driving the car in fuel-run stages.</td>
140
+ </tr>
141
+ <tr>
142
+ <td>Steel Beam (optional)</td>
143
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/steel-beam.png" width="64"></td>
144
+ <td>Same collision as inner walls but with 1.5x durability.</td>
145
+ </tr>
146
+ </tbody>
147
+ </table>
105
148
 
106
149
  #### Environment
107
150
 
108
- | Name | Image | Notes |
109
- | --- | --- | --- |
110
- | Outer Wall | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/wall-outer.png" width="64"> | Nearly indestructible; each side has exits. |
111
- | Inner Wall | <img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/wall-inner.png" width="64"> | Breakable by the player; zombies chip away slowly. |
112
-
113
- - **Walls:** Outer walls are gray; inner walls are beige.
114
- - **Outer Walls:** Walls surrounding the stage that are nearly indestructible. Each side has at least three openings (exits).
115
- - **Inner Walls:** Beige walls randomly placed inside the building. Inner wall segments each have durability. **The player can break these walls** by repeatedly colliding with a segment to reduce its durability; when it reaches 0, the segment is destroyed and disappears. Zombies can also wear down walls, but far more slowly. The car cannot break walls.
151
+ <table>
152
+ <colgroup>
153
+ <col style="width:20%">
154
+ <col>
155
+ <col>
156
+ </colgroup>
157
+ <thead>
158
+ <tr>
159
+ <th>Name</th>
160
+ <th>Image</th>
161
+ <th>Notes</th>
162
+ </tr>
163
+ </thead>
164
+ <tbody>
165
+ <tr>
166
+ <td>Outer Wall</td>
167
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/wall-outer.png" width="64"></td>
168
+ <td>Gray perimeter walls that are nearly indestructible; each side has a single opening (exit).</td>
169
+ </tr>
170
+ <tr>
171
+ <td>Inner Wall</td>
172
+ <td><img src="https://raw.githubusercontent.com/tos-kamiya/zombie-escape/main/imgs/exports/wall-inner.png" width="64"></td>
173
+ <td>Beige interior walls with durability. The player can break them by repeated collisions; zombies wear them down slowly; the car cannot break them.</td>
174
+ </tr>
175
+ </tbody>
176
+ </table>
116
177
 
117
178
  ### Win/Lose Conditions
118
179
 
@@ -14,7 +14,7 @@ authors = [
14
14
  { name = "Toshihiro Kamiya", email = "kamiya@mbj.nifty.com" },
15
15
  ]
16
16
  classifiers = [
17
- "Development Status :: 4 - Beta",
17
+ "Development Status :: 5 - Production/Stable",
18
18
  "Programming Language :: Python",
19
19
  "Programming Language :: Python :: 3.10",
20
20
  "Programming Language :: Python :: 3.11",
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2025-present Toshihiro Kamiya <kamiya@mbj.nifty.com>
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
- __version__ = "1.13.1"
4
+ __version__ = "1.14.4"
@@ -142,42 +142,28 @@ def get_environment_palette(key: str | None) -> EnvironmentPalette:
142
142
 
143
143
  if not key:
144
144
  return ENVIRONMENT_PALETTES[DEFAULT_AMBIENT_PALETTE_KEY]
145
- return ENVIRONMENT_PALETTES.get(
146
- key, ENVIRONMENT_PALETTES[DEFAULT_AMBIENT_PALETTE_KEY]
147
- )
145
+ return ENVIRONMENT_PALETTES.get(key, ENVIRONMENT_PALETTES[DEFAULT_AMBIENT_PALETTE_KEY])
148
146
 
149
147
 
150
148
  def ambient_palette_key_for_flashlights(count: int) -> str:
151
149
  """Return the palette key for the provided flashlight inventory count."""
152
150
 
153
- return (
154
- DEFAULT_AMBIENT_PALETTE_KEY if max(0, count) > 0 else NO_FLASHLIGHT_PALETTE_KEY
155
- )
151
+ return DEFAULT_AMBIENT_PALETTE_KEY if max(0, count) > 0 else NO_FLASHLIGHT_PALETTE_KEY
156
152
 
157
153
 
158
154
  # World colors (default palette versions preserved for backwards compatibility).
159
155
  INTERNAL_WALL_COLOR: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.inner_wall
160
- INTERNAL_WALL_BORDER_COLOR: tuple[int, int, int] = (
161
- _DEFAULT_ENVIRONMENT_PALETTE.inner_wall_border
162
- )
156
+ INTERNAL_WALL_BORDER_COLOR: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.inner_wall_border
163
157
  OUTER_WALL_COLOR: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.outer_wall
164
- OUTER_WALL_BORDER_COLOR: tuple[int, int, int] = (
165
- _DEFAULT_ENVIRONMENT_PALETTE.outer_wall_border
166
- )
158
+ OUTER_WALL_BORDER_COLOR: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.outer_wall_border
167
159
  FLOOR_COLOR_PRIMARY: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.floor_primary
168
- FLOOR_COLOR_SECONDARY: tuple[int, int, int] = (
169
- _DEFAULT_ENVIRONMENT_PALETTE.floor_secondary
170
- )
160
+ FLOOR_COLOR_SECONDARY: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.floor_secondary
171
161
  FLOOR_COLOR_OUTSIDE: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.outside
172
162
  FOOTPRINT_COLOR: tuple[int, int, int] = (110, 200, 255)
173
163
  STEEL_BEAM_COLOR: tuple[int, int, int] = (110, 50, 50)
174
164
  STEEL_BEAM_LINE_COLOR: tuple[int, int, int] = (180, 90, 90)
175
- FALL_ZONE_FLOOR_PRIMARY: tuple[int, int, int] = (
176
- _DEFAULT_ENVIRONMENT_PALETTE.fall_zone_primary
177
- )
178
- FALL_ZONE_FLOOR_SECONDARY: tuple[int, int, int] = (
179
- _DEFAULT_ENVIRONMENT_PALETTE.fall_zone_secondary
180
- )
165
+ FALL_ZONE_FLOOR_PRIMARY: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.fall_zone_primary
166
+ FALL_ZONE_FLOOR_SECONDARY: tuple[int, int, int] = _DEFAULT_ENVIRONMENT_PALETTE.fall_zone_secondary
181
167
 
182
168
 
183
169
  __all__ = [