Compare commits

...

188 Commits

Author SHA1 Message Date
wszqkzqk
c88a018209
升级CI到python 3.12 (#21)
Signed-off-by: Zhou Qiankang <wszqkzqk@qq.com>
2025-06-23 10:40:10 +08:00
sanshi
11c3129ea0
格式化代码以及添加依赖文件配置 (#19)
* refactor: 格式化代码

* 添加依赖文件
2025-06-23 10:21:58 +08:00
wszqkzqk
72915de297
更新CI配置:升级Python版本并添加发布条件 (#20)
* 将CI工作流的Python版本从3.11升级到3.12
* 为所有发布步骤添加仓库条件检测,避免在fork仓库的PR中触发发布

Signed-off-by: Zhou Qiankang <wszqkzqk@qq.com>
2025-06-21 22:06:19 +08:00
wszqkzqk
268b32bba5
启用pygame缩放 (#18)
* Closes #17

Signed-off-by: Zhou Qiankang <wszqkzqk@qq.com>
2025-06-12 23:34:52 +08:00
星外之神
47b4ba1783
在夜晚关卡不推荐选择咖啡豆 (#16) 2023-11-24 10:32:11 +08:00
星外之神
9e63c5bf57
Update audio files & CI scripts
* 手动指定依赖文件

* ci

* 包括所有dll

* 手动修复dll包含

* update audio files

* 更改潜水僵尸设定
2023-10-14 13:45:49 +08:00
星外之神
78ba0efbcd
Update audio files & CI scripts
* 手动指定依赖文件

* ci

* 包括所有dll

* 手动修复dll包含

* update audio files
2023-10-11 21:59:47 +08:00
星外之神
70ffd9489d
Dev (#12)
* 手动指定依赖文件

* ci

* 手动修复dll包含
2023-06-01 09:59:48 +08:00
星外之神
daee48eb6e
Merge pull request #11 from wszqkzqk/dev
尝试修复CI
2023-06-01 01:04:54 +08:00
wszqkzqk
5267003c6f
尝试修复CI 2023-06-01 01:04:21 +08:00
星外之神
431d4ae662
Merge pull request #9 from wszqkzqk/dev
小修改: 类型注释 & CI
2023-06-01 00:46:03 +08:00
wszqkzqk
7efd1fcadf
重命名截屏 2023-06-01 00:42:16 +08:00
wszqkzqk
1bcef4d141
移除python 3.10 CI 2023-06-01 00:42:16 +08:00
wszqkzqk
2d368f8bf5
添加类型注解 2023-06-01 00:42:16 +08:00
wszqkzqk
388b3175e0
避免重复构建 2023-06-01 00:42:16 +08:00
星外之神
ffb48381a5
Merge pull request #8 from wszqkzqk/dev
小:统一括号缩进
2022-12-25 16:00:31 +08:00
wszqkzqk
6ac010321a 小:统一括号缩进 2022-12-25 16:00:01 +08:00
星外之神
d07983dbbd
Merge pull request #7 from wszqkzqk/dev
在README中更新数据和日志存储路径
2022-12-25 15:52:24 +08:00
wszqkzqk
fc5029fad3 在README中更新数据和日志存储路径 2022-12-25 15:51:55 +08:00
wszqkzqk
b18e442f66 Linux可执行文件说明 2022-12-13 18:37:19 +08:00
wszqkzqk
fd9253d410 恢复Linux单文件版构建 2022-12-13 18:06:58 +08:00
wszqkzqk
17de44a773 切换到Python 3.10 2022-12-11 14:29:09 +08:00
wszqkzqk
ac392595b0 运行时不禁用x11合成器(Linux) 2022-12-11 11:07:38 +08:00
wszqkzqk
926f40caf9 迁移存档位置 2022-12-10 19:46:14 +08:00
wszqkzqk
63e36df930 面向对象化 2022-11-04 11:16:35 +08:00
wszqkzqk
8ae6b88d8a 使用dev进行开发,master进行发布 2022-11-04 10:52:05 +08:00
星外之神
3ef4570334 恢复python3.10的使用 2022-10-30 17:23:59 +08:00
wszqkzqk
1ec9c19f41 升级Python版本 2022-10-30 11:16:14 +08:00
wszqkzqk
65b7c38078 增加权限设置的可读性 2022-10-30 11:14:42 +08:00
星外之神
05770cf502 统一变量命名风格 2022-10-05 21:28:14 +08:00
星外之神
6c2595d35c 进度推进说明 2022-10-05 18:37:33 +08:00
星外之神
3f22446a85 列入重新面向对象实现的计划 2022-09-14 07:56:51 +08:00
wszqkzqk
5baf11a3f1 优化标志使用 2022-09-14 07:49:05 +08:00
wszqkzqk
f496e576fd 更改不推荐的逻辑顺序,防止海蘑菇错误归类 2022-09-14 07:41:05 +08:00
星外之神
60911bebdd 删除部分冗余结构 2022-09-13 21:21:20 +08:00
星外之神
37d8b29f60 显示当前关卡不推荐选择的卡片提示 2022-09-13 17:22:46 +08:00
星外之神
2235f687dc 更改选中卡片显示 2022-09-13 16:02:12 +08:00
wszqkzqk
533820deda Merge branch 'master' of github.com:wszqkzqk/pypvz 2022-08-30 18:57:43 +08:00
星外之神
8ce2ccf734 统一变量命名风格 2022-08-30 15:06:03 +08:00
星外之神
57501a8f22 统一越界判断函数 2022-08-14 11:03:55 +08:00
星外之神
cf20f9733f 修复更多的地图越界bug 2022-08-14 10:58:12 +08:00
星外之神
f46585264d 修复铲子位置导致的列表越界bug 2022-08-14 10:53:40 +08:00
星外之神
f38e415add 将screen设置为抽象基类;重构 2022-08-11 16:11:11 +08:00
wszqkzqk
a0c8201d26 重构 2022-08-11 10:42:30 +08:00
wszqkzqk
ebf68c0393 Merge branch 'master' of github.com:wszqkzqk/pypvz 2022-08-10 20:26:38 +08:00
wszqkzqk
23824233df 重构 2022-08-10 20:26:30 +08:00
星外之神
5f83d8c805 关卡说明 2022-08-10 10:47:54 +08:00
星外之神
da1eb13946 增加可读性 2022-08-10 10:30:08 +08:00
wszqkzqk
777e937d98 重构 2022-08-09 20:23:47 +08:00
wszqkzqk
08ec7e2d00 平衡难度 2022-08-09 11:01:57 +08:00
wszqkzqk
b7b69cec61 更改卡片显示 2022-08-09 05:46:06 +08:00
wszqkzqk
9e01c018e4 更改缠绕海草攻击范围 2022-08-08 23:59:17 +08:00
wszqkzqk
544560c49e 重构表达式 2022-08-08 23:08:03 +08:00
星外之神
baeb003f5f 修改卡片显示 2022-08-08 18:26:46 +08:00
星外之神
2376922a77 指定编码 2022-08-08 17:34:15 +08:00
星外之神
f37f05b726 改用推导式以便pylance明确数据类型 2022-08-08 16:27:48 +08:00
wszqkzqk
10711a5509 减少try包括的语段 2022-08-08 12:29:14 +08:00
wszqkzqk
1c52ea88f4 更改权限处理方式 2022-08-08 12:21:13 +08:00
wszqkzqk
44ccabd74d 捕捉保存时权限问题 2022-08-08 12:12:36 +08:00
wszqkzqk
f3b602a30e 避免提示的歧义 2022-08-08 10:55:13 +08:00
wszqkzqk
7e93949f91 完善日志 2022-08-08 10:49:18 +08:00
wszqkzqk
6edaf34d11 完善日志机制 2022-08-08 10:38:45 +08:00
wszqkzqk
1c96110e28 整理 2022-08-08 09:05:41 +08:00
wszqkzqk
98463e524b 修复墓碑吞噬者可以种植在墓碑吞噬者上的bug 2022-08-06 15:39:39 +08:00
wszqkzqk
e010251b00 平衡难度 2022-08-06 15:36:47 +08:00
wszqkzqk
506900d21c 减少音乐前间隔 2022-08-06 13:50:30 +08:00
wszqkzqk
d07810afce 点击冒险模式后暂停普通音乐播放 2022-08-06 13:45:48 +08:00
wszqkzqk
139b5d3ef8 删除音频播放前的延迟 2022-08-06 13:44:28 +08:00
星外之神
8067508eb3 修复显示问题 2022-08-05 16:42:58 +08:00
星外之神
d93acfe9e3 修复4-1关的bug 2022-08-05 14:49:21 +08:00
星外之神
0493ec70d5 简化测试关卡 2022-08-05 14:23:36 +08:00
星外之神
95b4d789e5 压缩 2022-08-03 09:15:36 +08:00
wszqkzqk
6ae7007bb9 增加帮助菜单打开音效 2022-08-02 22:29:23 +08:00
星外之神
bf3fdc08b9 优化警告排版 2022-08-02 20:17:12 +08:00
星外之神
9801133724 修复小推车触发bug 2022-08-02 19:41:14 +08:00
星外之神
fde1661ec5 更改标题显示 2022-08-02 19:06:01 +08:00
星外之神
7240c61765 修复坚果保龄球闪退bug 2022-08-02 18:19:35 +08:00
星外之神
8cd22a1140 修复南瓜头bug“安倍晋三的保镖” 2022-08-02 14:49:27 +08:00
星外之神
ce62e9b35c 完善小推车设置 2022-08-02 13:35:25 +08:00
星外之神
9fa8fbb847 加入坚果保龄球2 2022-08-02 12:52:46 +08:00
星外之神
72cad4a3fd 暂时设定为大嘴花没有成功攻击时不发出声音 2022-08-01 23:19:21 +08:00
星外之神
80021191ff 更改大嘴花音效体验 2022-08-01 23:14:01 +08:00
星外之神
205ec949e1 更改小推车机制 2022-08-01 22:54:21 +08:00
星外之神
0f59007e82 修改小推车机制 2022-08-01 22:53:12 +08:00
星外之神
99deb7bbe8 植物卡片在冷却时间不足且阳光也不足时,叠加两者效果显示,即同时改变透明度与图像覆盖 2022-08-01 22:34:58 +08:00
星外之神
2862aa28b5 修复用str作key导致keyerror的问题 2022-08-01 22:30:25 +08:00
星外之神
ac3f7f56d7 统一变量命名规则 2022-08-01 14:44:29 +08:00
星外之神
172b736e2f 统一变量命名规则 2022-08-01 14:39:25 +08:00
星外之神
7c2b72152d 统一命名规则:function、method用驼峰命名法变量用下划线命名法 2022-08-01 14:37:39 +08:00
星外之神
93259a2380 修改成就显示位置 2022-08-01 11:38:51 +08:00
星外之神
177e426ed5 Merge branch 'master' of github.com:wszqkzqk/pypvz 2022-08-01 11:35:15 +08:00
星外之神
a1b7c389a0 平衡难度 2022-08-01 11:34:56 +08:00
wszqkzqk
cb94f49cf9 补全后缀名 2022-07-31 21:33:58 +08:00
星外之神
afda2a02c8 更改子弹生存时间 2022-07-31 10:46:02 +08:00
星外之神
76533796a3 更改毁灭菇阳光 2022-07-31 08:12:44 +08:00
wszqkzqk
6c65b27df6 显示标题 2022-07-30 20:04:30 +08:00
wszqkzqk
428b4df8e7 修复阳光错误 2022-07-30 19:52:45 +08:00
星外之神
a87233c920 忽略更多文件 2022-07-30 13:51:12 +08:00
星外之神
3117a85c88 设置帮助界面标题 2022-07-30 10:39:59 +08:00
星外之神
e00a640d76 添加截图 2022-07-30 10:34:51 +08:00
星外之神
8aea3e7c36 平衡难度 2022-07-30 10:28:53 +08:00
星外之神
02e77c081f 更改colorkey 2022-07-30 10:21:53 +08:00
星外之神
f939e10215 跟进自述文件 2022-07-30 10:12:51 +08:00
星外之神
05144d9a1b 加入帮助界面 2022-07-30 10:11:55 +08:00
星外之神
ad5bd75478 明确变量名含义 2022-07-29 23:23:28 +08:00
星外之神
b9a08ba9aa 完善说明 2022-07-29 22:39:46 +08:00
星外之神
68bfc3269e 要认真写commit的项目还是不要加这两个脚本了 2022-07-29 22:32:21 +08:00
wszqkzqk
286fd32444 整理函数调用 2022-07-29 22:19:11 +08:00
wszqkzqk
ae8492ded7 更改失败界面 2022-07-29 20:15:58 +08:00
wszqkzqk
428f57fac1 胜利界面音乐设定 2022-07-29 20:08:06 +08:00
wszqkzqk
b7452a0635 更改文字显示 2022-07-29 20:06:39 +08:00
wszqkzqk
7263521ef7 更改胜利、失败界面 2022-07-29 19:51:53 +08:00
wszqkzqk
20f6400e9a 修复漏参 2022-07-29 17:08:48 +08:00
wszqkzqk
5f4c571ff6 使用统一双引号 2022-07-29 17:06:17 +08:00
wszqkzqk
4e055429b0 规范常数表达 2022-07-29 17:02:45 +08:00
星外之神
2bca7f1d65 放宽Ag向日葵条件;加入新BGM 2022-07-29 16:21:45 +08:00
星外之神
dd090b022d 修复小游戏通关结果不正常的bug 2022-07-29 15:52:25 +08:00
星外之神
837e225335 微调 2022-07-29 15:16:36 +08:00
星外之神
51f80eb081 完善获得金向日葵的界面 2022-07-29 15:11:20 +08:00
星外之神
14f485e8f5 增加向日葵奖杯获得界面 2022-07-29 14:54:53 +08:00
星外之神
c80df793c4 改进日志;初步引入新界面 2022-07-29 14:01:32 +08:00
星外之神
698f2cbae9 说明最新状态 2022-07-29 12:05:58 +08:00
星外之神
8acb592508 将常数性质的json统一合并到python 2022-07-29 11:59:39 +08:00
星外之神
7c50a29f9e 将地图统一为python内容 2022-07-29 11:17:52 +08:00
星外之神
280d8c2a57 使用字体渲染实现返回按钮 2022-07-29 07:42:23 +08:00
星外之神
c2d1483fb6 更新截图 2022-07-28 23:52:27 +08:00
星外之神
dc87bcadb1 增加成就提示 2022-07-28 23:44:53 +08:00
星外之神
29f47bf789 平衡难度 2022-07-28 22:33:21 +08:00
星外之神
e8380e25ff 统一colorkey 2022-07-28 20:51:40 +08:00
星外之神
7164dd3beb 修复选卡模式下点击菜单会闪退的bug;更改封装 2022-07-28 20:00:40 +08:00
星外之神
be5309f328 修复初始时未应用存档内的音效音量设定的bug 2022-07-28 18:58:52 +08:00
星外之神
04b4bd140a 修复地图路径错误 2022-07-28 18:42:44 +08:00
星外之神
3dc97a4ed4 修正语病 2022-07-28 18:36:52 +08:00
星外之神
ca13fdf085 删除多余的调用 2022-07-28 18:36:03 +08:00
星外之神
290e5d60ff 修复寒冰射手子弹音效播放时闪退的bug 2022-07-28 18:33:36 +08:00
星外之神
59deb4afe4 整理path缩减代码 2022-07-28 18:22:51 +08:00
星外之神
3898dd920d 汇总路径 2022-07-28 17:35:24 +08:00
星外之神
b639e5f5be 增加截图 2022-07-28 16:57:51 +08:00
星外之神
b2a7c22be6 修复没有铲子关卡自动检测铲子点击导致闪退的bug 2022-07-28 16:42:48 +08:00
星外之神
8b74d2cc38 删除冗余信息 2022-07-28 16:27:21 +08:00
星外之神
0b6c545de5 采用海象算子(>=python3.8)减少维护工作量 2022-07-28 16:26:49 +08:00
星外之神
2b85451404 支持自动保存音量设置到文件,以便下次直接应用 2022-07-28 15:48:59 +08:00
星外之神
ffc57d12ff 关卡内也实现了音量调节 2022-07-28 15:38:56 +08:00
星外之神
6508bdcdb7 全面更改音乐机制,支持调节音量 2022-07-28 15:16:00 +08:00
星外之神
3a67b414ee 初步加入音量调节按钮(仅按钮) 2022-07-28 13:02:23 +08:00
星外之神
e1d464039a 修改进度条颜色 2022-07-28 12:02:33 +08:00
wszqkzqk
26cc7a083c 更改关卡进程进度条位置 2022-07-28 07:14:23 +08:00
wszqkzqk
283cf636c4 跟进注释 2022-07-28 05:53:32 +08:00
wszqkzqk
f2d1f22e7c 修复海蘑菇阳光错误 2022-07-28 05:50:18 +08:00
wszqkzqk
f447111406 修改字体样式移除大蒜卡片原图中的阳光 2022-07-28 05:48:23 +08:00
wszqkzqk
14d4775360 将卡片阳光显示改为自动 2022-07-28 05:40:56 +08:00
wszqkzqk
96c8069001 更改首关初始阳光值 2022-07-28 00:01:15 +08:00
wszqkzqk
111065c4a7 增加开发计划 2022-07-27 23:34:15 +08:00
wszqkzqk
f49cc4e12d 修复权限问题 2022-07-27 23:22:42 +08:00
wszqkzqk
14326d8194 预加入中文显示支持 2022-07-27 23:17:19 +08:00
wszqkzqk
d227a28452 修复从游戏中返回主菜单时闪退的bug 2022-07-27 19:50:04 +08:00
wszqkzqk
17b91b2ae2 微调金银向日葵位置 2022-07-27 19:42:53 +08:00
wszqkzqk
fbe05066f3 补充 2022-07-27 19:24:40 +08:00
wszqkzqk
be1ebbc661 添加截屏 2022-07-27 19:22:20 +08:00
wszqkzqk
e839af9df4 成就加入说明跟进 2022-07-27 19:19:25 +08:00
wszqkzqk
94701fe413 加入金银向日葵 2022-07-27 19:13:54 +08:00
wszqkzqk
ead7826d80 完善存档容错机制 2022-07-27 17:11:27 +08:00
wszqkzqk
5df1997efe 对存档说明 2022-07-27 17:05:57 +08:00
wszqkzqk
9ed30689c4 更新关于游戏速度倍率调节的说明 2022-07-27 17:00:16 +08:00
wszqkzqk
64f2fa52c0 支持Windows下单文件封装模式调节游戏速度倍率 2022-07-27 16:50:20 +08:00
星外之神
95d72c55cd 移除过时说明 2022-07-27 11:17:29 +08:00
星外之神
64ae521cd6 减少波数 2022-07-27 11:03:39 +08:00
星外之神
bf2e74d808 更改生成僵尸类型 2022-07-27 11:03:22 +08:00
星外之神
a37cd228bd 重命名可执行文件 2022-07-27 10:53:28 +08:00
星外之神
4dc62269dd 删除调试模式不需要的功能 2022-07-27 10:47:32 +08:00
星外之神
a0a5677f6c 恢复关卡导入容错设计 2022-07-27 10:37:06 +08:00
星外之神
7c706ea3a3 修复关卡胜利界面异常的bug 2022-07-27 10:10:23 +08:00
星外之神
327c9c3a20 增加pyinstaller构建参考 2022-07-27 09:50:08 +08:00
星外之神
88d2e734a4 增大睡莲权重 2022-07-27 09:37:22 +08:00
星外之神
793cbea586 修复有存档时导入字典未创建的bug 2022-07-27 09:21:29 +08:00
星外之神
04f4b65d42 修复无存档时没有初始化game_info的bug 2022-07-27 09:18:13 +08:00
星外之神
b4a3fa993d 将初始存档直接保存到常数文件 2022-07-27 09:09:33 +08:00
星外之神
edf1898b8c 更改通关提示 2022-07-27 09:00:50 +08:00
wszqkzqk
7568c91744 移除不再使用的常数 2022-07-26 23:35:24 +08:00
wszqkzqk
410cf2cca1 科学放置音乐播放代码位置 2022-07-26 23:28:48 +08:00
wszqkzqk
82cebe8288 整理注释 2022-07-26 23:20:16 +08:00
wszqkzqk
f3d664b263 加入选项菜单 2022-07-26 23:10:46 +08:00
wszqkzqk
ee8de23bd5 优化音乐播放代码位置 2022-07-26 22:45:52 +08:00
wszqkzqk
7aee0662a5 显示选项按钮 2022-07-26 22:40:41 +08:00
wszqkzqk
d7c9fb07a5 加入部分按钮 2022-07-25 07:21:44 +08:00
wszqkzqk
c16d6dc70f Merge branch 'master' of github.com:wszqkzqk/pypvz 2022-07-24 22:00:15 +08:00
wszqkzqk
a0edb3caef 取消Linux构建 2022-07-24 21:57:51 +08:00
星外之神
cfbd4951d2 阻止pr发布release 2022-07-24 17:55:28 +08:00
344 changed files with 4996 additions and 2450 deletions

View File

@ -14,7 +14,7 @@ jobs:
fail-fast: false
matrix:
python_version:
- '3.10'
- "3.12"
name: Windows Python ${{ matrix.python_version }}
steps:
- uses: actions/checkout@v2
@ -37,7 +37,7 @@ jobs:
# 使用pyinstaller构建
- name: Build pypvz with pyinstaller
run: |
pyinstaller -F main.py `
pyinstaller -F pypvz.py `
-n pypvz-with-python${{ matrix.python_version }}-pyinstaller-x64.exe `
--distpath ./out `
--noconsole `
@ -46,10 +46,11 @@ jobs:
-i ./pypvz.ico
- name: Release the version built by pyinstaller
if: github.event.pull_request.head.repo.full_name == github.repository
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Current.Version.Built.with.Pyinstaller
tag: Dev.Version.Built.with.Pyinstaller
artifacts: ./out/*pyinstaller*.exe
token: ${{ secrets.GITHUB_TOKEN }}
@ -67,38 +68,32 @@ jobs:
--show-memory `
--output-dir=out `
--windows-icon-from-ico=pypvz.ico `
--include-data-dir=resources=resources `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libogg-0.dll=libogg-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopus-0.dll=libopus-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopusfile-0.dll=libopusfile-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libvorbisfile-3.dll=libvorbisfile-3.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libvorbis-0.dll=libvorbis-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libjpeg-9.dll=libjpeg-9.dll `
--include-data-dir=resources=resources `
--windows-disable-console `
-o ./out/pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe `
main.py
# artifact压缩包处上传包含exe和运行环境的文件夹
- name: "Upload binaries"
uses: actions/upload-artifact@v2
with:
name: artifact-windows-python-${{ matrix.python_version }}
path: ./out/*.dist
-o pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe `
pypvz.py
- name: Release the version built by nuitka
if: github.event.pull_request.head.repo.full_name == github.repository
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Latest
tag: Dev
artifacts: ./out/*nuitka*.exe
token: ${{ secrets.GITHUB_TOKEN }}
linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python_version:
- '3.10'
- "3.12"
name: Ubuntu Python ${{ matrix.python_version }}
steps:
- name: 🛎️ Checkout
@ -114,7 +109,7 @@ jobs:
- name: 🧳 Install dependencies
run: |
sudo apt-get update
sudo apt-get install patchelf gdb ccache libfuse2
sudo apt-get install patchelf gdb ccache libfuse2 zstd tar
python -m pip install --no-python-version-warning --disable-pip-version-check zstandard appdirs ordered-set tqdm Jinja2
python -m pip install --no-python-version-warning --disable-pip-version-check nuitka
python -m pip install --no-python-version-warning --disable-pip-version-check pygame
@ -128,22 +123,20 @@ jobs:
- name: Build pypvz with Nuitka
run: |
yes | python -m nuitka \
--show-progress \
--follow-imports \
--show-memory \
--output-dir=out \
--linux-onefile-icon=pypvz.ico \
-o ./out/pypvz \
--remove-output \
main.py
cp -r ./resources ./out/resources
cd out
tar -cvpaf ../pypvz-with-python${{ matrix.python_version }}-nuitka-linux-x64.tar.zst .
--onefile \
--standalone \
--include-data-dir=resources=resources \
--linux-onefile-icon=pypvz.png \
--static-libpython=no \
--remove-output \
-o pypvz-with-python${{ matrix.python_version }}-linux-x86_64.bin \
pypvz.py
- name: Release the version built by nuitka
if: github.event.pull_request.head.repo.full_name == github.repository
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Latest
artifacts: ./*.tar.zst
tag: Dev
artifacts: ./pypvz*-x86_64.*
token: ${{ secrets.GITHUB_TOKEN }}

View File

@ -16,7 +16,7 @@ jobs:
fail-fast: false
matrix:
python_version:
- '3.10'
- "3.12"
name: Windows Python ${{ matrix.python_version }}
steps:
- uses: actions/checkout@v2
@ -39,7 +39,7 @@ jobs:
# 使用pyinstaller构建
- name: Build pypvz with pyinstaller
run: |
pyinstaller -F main.py `
pyinstaller -F pypvz.py `
-n pypvz-with-python${{ matrix.python_version }}-pyinstaller-x64.exe `
--distpath ./out `
--noconsole `
@ -69,22 +69,15 @@ jobs:
--show-memory `
--output-dir=out `
--windows-icon-from-ico=pypvz.ico `
--include-data-dir=resources=resources `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libogg-0.dll=libogg-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopus-0.dll=libopus-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libopusfile-0.dll=libopusfile-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libvorbisfile-3.dll=libvorbisfile-3.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libvorbis-0.dll=libvorbis-0.dll `
--include-data-file=c:\hostedtoolcache\windows\python\${{ matrix.python_version }}*\x64\lib\site-packages\pygame\libjpeg-9.dll=libjpeg-9.dll `
--include-data-dir=resources=resources `
--windows-disable-console `
-o ./out/pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe `
main.py
-o pypvz-with-python${{ matrix.python_version }}-nuitka-windows-x64.exe `
pypvz.py
# artifact压缩包处上传包含exe和运行环境的文件夹
- name: "Upload binaries"
uses: actions/upload-artifact@v2
with:
name: artifact-windows-python-${{ matrix.python_version }}
path: ./out/*.dist
- name: Release the version built by nuitka
uses: ncipollo/release-action@v1
@ -100,7 +93,7 @@ jobs:
fail-fast: false
matrix:
python_version:
- '3.10'
- "3.12"
name: Ubuntu Python ${{ matrix.python_version }}
steps:
- name: 🛎️ Checkout
@ -130,22 +123,19 @@ jobs:
- name: Build pypvz with Nuitka
run: |
yes | python -m nuitka \
--show-progress \
--follow-imports \
--show-memory \
--output-dir=out \
--linux-onefile-icon=pypvz.ico \
-o ./out/pypvz \
--remove-output \
main.py
cp -r ./resources ./out/resources
cd out
tar -cvpaf ../pypvz-with-python${{ matrix.python_version }}-nuitka-linux-x64.tar.zst .
--onefile \
--standalone \
--include-data-dir=resources=resources \
--linux-onefile-icon=pypvz.png \
--static-libpython=no \
--remove-output \
-o pypvz-with-python${{ matrix.python_version }}-linux-x86_64.bin \
pypvz.py
- name: Release the version built by nuitka
uses: ncipollo/release-action@v1
with:
allowUpdates: true
tag: Latest
artifacts: ./*.tar.zst
artifacts: ./pypvz*-x86_64.*
token: ${{ secrets.GITHUB_TOKEN }}

6
.gitignore vendored
View File

@ -4,7 +4,11 @@ test-build/
release/
# 忽略调试内容
.vscode/
# 忽略 Pycharm 项目文件
.idea/
__pycache__/
*/__pycache__/
# 忽略测试文件
test.py
test*.py
# uv 管理的虚拟环境
.venv

1
.python-version Normal file
View File

@ -0,0 +1 @@
3.12

156
README.md
View File

@ -7,26 +7,48 @@
* 已有的植物:向日葵,豌豆射手,坚果墙,寒冰射手,樱桃炸弹,双发射手,三线射手,大嘴花,小喷菇,土豆雷,地刺,胆小菇,倭瓜,火爆辣椒,阳光菇,寒冰菇,魅惑菇,火炬树桩,睡莲,杨桃,咖啡豆,海蘑菇,高坚果,缠绕水草,毁灭菇,墓碑吞噬者,大喷菇,大蒜,南瓜头
* 已有的僵尸:普通僵尸,旗帜僵尸,路障僵尸,铁桶僵尸,读报僵尸,橄榄球僵尸,鸭子救生圈僵尸,铁门僵尸,撑杆跳僵尸,冰车僵尸,潜水僵尸
* 使用JSON文件记录关卡信息数据
* 在0.8.18.0及以后直接用python记录关卡的不可变数据JSON目前仅用于用户存档
* 支持选择植物卡片
* 支持白昼模式,夜晚模式,泳池模式,传送带模式和坚果保龄球模式
* 支持白昼模式,夜晚模式,泳池模式,浓雾模式(暂时没有加入雾),传送带模式和坚果保龄球模式
* 支持背景音乐播放
* 支持调节音量
* 支持音效
* 支持与背景音乐一起调节音量
* 支持全屏模式
* 按`F`键进入全屏模式,按`U`键恢复至窗口模式
* 支持用小铲子移除植物
* 支持分波生成僵尸
* 支持“关卡进程”进度条显示
* 夜晚模式支持墓碑以及从墓碑生成僵尸
* 含有泳池的模式支持在最后一波时从泳池中自动冒出僵尸
* 含有泳池的模式支持在最后一波时从泳池中自动冒出僵尸
* 支持保存进度
* Windows下默认进度文件的保存路径为`~\AppData\Roaming\wszqkzqk.dev\pypvz\userdata.json`
* 其他操作系统为`~/.config/wszqkzqk.dev/pypvz/userdata.json`
* Windows下默认进度文件的保存路径为`~\AppData\Roaming\pypvz\userdata.json`
* 其他操作系统为`~/.config/pypvz/userdata.json`
* 存档为JSON文件如果出现因存档损坏而造成程序无法启动可以手动编辑修复或者删除该文件重试
* 0.8.12.0版本后理论上不可能因为存档损坏而无法启动,如果有,请在[issues](https://github.com/wszqkzqk/pypvz/issues)中报告bug
* 仍然有可能因为升级后变量名不同而丢失存档的进度信息,这种情况手动编辑恢复即可
* 支持错误日志记录
* Windows下默认日志文件的保存路径为`~\AppData\Roaming\wszqkzqk.dev\pypvz\run.log`
* 其他操作系统为`~/.config/wszqkzqk.dev/pypvz/run.log`
* Windows下默认日志文件的保存路径为`~\AppData\Roaming\pypvz\run.log`
* 其他操作系统为`~/.config/pypvz/run.log`
* 支持自定义游戏速度倍率
* 保存在游戏存档文件中,可以通过修改`game rate`值更改速度倍率
* 游戏完成成就显示
* 任意一游戏模式全部完成显示银向日葵奖杯
* 所有模式全部完成显示金向日葵奖杯
* 光标移动到向日葵奖杯上是显示当前各个模式通关次数
* 含有游戏帮助界面 QwQ
## 环境要求
## 环境安装
建议使用 [uv](https://docs.astral.sh/uv/) 安装依赖:
```bash
git clone https://github.com/wszqkzqk/pypvz.git
cd pypvz
uv sync
```
或者参考:
* `Python3` (建议 >= 3.10,最好使用最新版)
* `Python-Pygame` (建议 >= 2.0,最好使用最新版)
@ -35,12 +57,12 @@
### 使用仓库源代码
先克隆仓库内容,再运行`main.py`
先克隆仓库内容,再运行`pypvz.py`
```shell
git clone https://github.com/wszqkzqk/pypvz.git
cd pypvz
python main.py
python pypvz.py
```
### 使用Windows可执行文件
@ -49,40 +71,42 @@ python main.py
- 可以在仓库的[`Releases`](https://github.com/wszqkzqk/pypvz/releases)页面中[下载最新版(点击跳转)](https://github.com/wszqkzqk/pypvz/releases/latest)(推荐):
- 使用GCC编译
- 程序包含名称、版本等信息
- 得到的验证最多(相对)
- 得到的验证最多
- 并非每次提交都会更新,更新可能不及时
- 也可以直接下载GitHub Workflow[自动利用Nuitka构建的版本点击跳转](https://github.com/wszqkzqk/pypvz/releases/tag/Latest)(推荐):
- 使用MSVC编译
- 每次提交均会更新,保证更新及时
- 未进行任何测试存在bug的概率高于前者
- 可看作本软件的测试版
- 每次合并提交到主分支时更新
- 得到的验证较多
- 服务器构建,编译环境更纯粹,冗余更少,体积更小
- 还可以下载GitHub Workflow[自动利用Pyinstaller构建的版本点击跳转](https://github.com/wszqkzqk/pypvz/releases/tag/Current.Version.Built.with.Pyinstaller)
- 在程序闪退时有报错窗口弹出
- 程序性能较差,不推荐
- 其他特性同GitHub Workflow自动利用Nuitka构建的版本
- 均仅支持64位操作系统
- 不依赖python、pygame等外部环境开箱即用
### 使用Linux可执行文件
由于Linux几乎都标配了Python环境因此本程序不太重视Linux下可执行的单文件的维护因此没有手动构建版只能下载自动构建的软件包。可以在仓库的[`Releases`](https://github.com/wszqkzqk/pypvz/releases)页面中[下载最新版(点击跳转)](https://github.com/wszqkzqk/pypvz/releases/latest)。
## 方法
* 使用鼠标收集阳光,种植植物
* 你可以通过更改`source/constants.py`中的`START_LEVEL_NUM`的数值来更改冒险模式的起始关卡,更改`START_LITTLE_GAME_NUM`的数值来更改小游戏的起始关卡:
* 对于已经存在存档的用户,可以在`~\AppData\Roaming\pypvz\userdata.json`Windows`~/.config/pypvz/userdata.json`(其他操作系统)中修改当前关卡:
* 冒险模式:
* 1——引入白昼模式——单行草皮
* 2——引入白昼模式——三行草皮
* 3和4白昼模式
* 5和6夜晚模式
* 7、8和9泳池模式
* 10: 浓雾模式(暂时没有雾)
* 白昼模式——单行草皮1
* 白昼模式——三行草皮2
* 白昼模式3~5
* 夜晚模式6~8
* 泳池模式9~11
* 浓雾模式(暂时没有雾)12
* 小游戏模式:
* 1坚果保龄球模式
* 2传送带模式白天
* 3传送带模式黑夜
* 4传送带模式泳池
* 坚果保龄球1
* 传送带模式白天2
* 传送带模式黑夜3
* 传送带模式泳池4
* 坚果保龄球(II)5
* 目前暂时按照以上设定,未与原版相符
* 对于已经存在存档的用户,可以在`~\AppData\Roaming\wszqkzqk.dev\pypvz\userdata.json`Windows`~/.config/wszqkzqk.dev/pypvz/userdata.json`(其他操作系统)中修改当前关卡
* 可以通过修改`source/constants.py`中的`GAME_RATE`来调节游戏速度倍率
* **注意:目前单文件发布版本不支持自定义速度倍率**
* 可以通过修改存档JSON文件中的`game rate`值来调节游戏速度倍率
## Windows单文件封装
@ -126,7 +150,7 @@ nuitka --mingw64 --standalone `
--windows-company-name=wszqkzqk.dev `
--windows-file-description="pypvz" `
--windows-product-version=0.8.2.0 `
main.py
pypvz.py
```
* 其中`C:\Users\17265\AppData\Local\Programs\Python\Python310\Lib\site-packages\pygame\xxx.dll`应当替换为`xxx.dll`实际所在路径,`--output-dir=`后应当跟实际需要输出的路径,绝对路径或者相对路径均可
@ -134,7 +158,7 @@ nuitka --mingw64 --standalone `
* `--windows-product-version=`表示版本号信息,所跟内容格式必须为`x.x.x.x`
* 建议开启`--lto=yes`选项优化链接,如果编译失败可以关闭此选项
可执行文件生成路径为`./release/main.exe`
可执行文件生成路径为`./release/pypvz.exe`
如果只需要在本地生成编译文件测试,则只需要执行:
@ -149,15 +173,38 @@ nuitka --mingw64 `
--windows-file-description=pypvz `
--windows-disable-console `
--windows-product-version=0.8.2.0 `
main.py
pypvz.py
```
这样生成的程序只能在有python环境的机器上运行
这样生成的程序只能在相同python环境的机器上运行
### 使用pyinstaller进行构建
- 由于pyinstaller构建的程序运行效率显著较nuitka构建的程序低下并且程序体积也往往比nuitka构建的程序大因此本项目并不推荐使用pyinstaller构建
- 但是因为pyinstaller直接封装了所导入的库中的全部内容使用pyinstaller构建时不需要手动添加媒体解码库
- pyinstaller并没有涉及python源代码优化、C源代码生成以及C源代码编译链接过程因此编译速度显著快于nuitka
编译依赖:
- `Python3` (建议 >= 3.10,最好使用最新版)
- `Python-Pygame` (建议 >= 2.0,最好使用最新版)
- `Pyinstaller`
编译参考命令:
``` cmd
pyinstaller -F pypvz.py `
--distpath ./release `
--noconsole `
--add-data="resources;./resources" `
--add-data="pypvz-exec-logo.png;./pypvz-exec-logo.png" `
-i ./pypvz.ico
```
可执行文件生成路径为`./release/pypvz.exe`
### 使用Github Workflow进行自动构建
直接复制本项目下的`.github/workflows`下的文件,进行少许改动即可满足大多数需求
## 已知bug
以下问题囿于个人目前的能力与精力,没有修复:
@ -180,6 +227,7 @@ nuitka --mingw64 `
* `pg.mixer.music.set_volume()`
* 可以用`音量+``音量-`按钮实现
* 注意字体颜色渲染
* 该功能自0.8.14.0已实现
* 关卡开始前增加预览界面
* 增加解锁与选关功能
* 目前的设想与原版不同,在完成两轮冒险模式(初始冒险模式 + 戴夫选关的冒险模式)后可以自主选关~~(当然现在只是画饼)~~
@ -252,29 +300,39 @@ nuitka --mingw64 `
* 增加部分音效
* 如爆炸、打击等
* 自0.6.9已部分实现
* 增加关卡前的本关僵尸预览
* 鼠标移动到植物上时显示部分信息,类似图鉴功能
## 截屏
![截屏1](/demo/demo1.webp)
![截屏2](/demo/demo2.webp)
![截屏3](/demo/demo3.webp)
![截屏4](/demo/demo4.webp)
![截屏5](/demo/demo5.webp)
![截屏6](/demo/demo6.webp)
![截屏7](/demo/demo7.webp)
![截屏8](/demo/demo8.webp)
![截屏9](/demo/demo9.webp)
![截屏10](/demo/demo10.webp)
![截屏11](/demo/demo11.webp)
![截屏12](/demo/demo12.webp)
![截屏13](/demo/demo13.webp)
![截屏14](/demo/demo14.webp)
![截屏15](/demo/demo15.webp)
![截屏1](/screenshots/screenshot-1.webp)
![截屏2](/screenshots/screenshot-2.webp)
![截屏3](/screenshots/screenshot-3.webp)
![截屏4](/screenshots/screenshot-4.webp)
![截屏5](/screenshots/screenshot-5.webp)
![截屏6](/screenshots/screenshot-6.webp)
![截屏7](/screenshots/screenshot-7.webp)
![截屏8](/screenshots/screenshot-8.webp)
![截屏9](/screenshots/screenshot-9.webp)
![截屏10](/screenshots/screenshot-10.webp)
![截屏11](/screenshots/screenshot-11.webp)
![截屏12](/screenshots/screenshot-12.webp)
![截屏13](/screenshots/screenshot-13.webp)
![截屏14](/screenshots/screenshot-14.webp)
![截屏15](/screenshots/screenshot-15.webp)
![截屏16](/screenshots/screenshot-16.webp)
![截屏17](/screenshots/screenshot-17.webp)
![截屏18](/screenshots/screenshot-18.webp)
![截屏19](/screenshots/screenshot-19.webp)
![截屏20](/screenshots/screenshot-20.webp)
![截屏21](/screenshots/screenshot-21.webp)
![截屏22](/screenshots/screenshot-22.webp)
![截屏23](/screenshots/screenshot-23.webp)
## 关于日志与反馈
对于闪退情况Linux用户与Windows下的python源代码运行用户可以直接在终端中复制出崩溃日志进行反馈。
Windows单文件封装版本无法通过终端显示日志需要在日志文件中寻找崩溃原因
* Windows默认日志文件路径为`~\AppData\Roaming\wszqkzqk.dev\pypvz\run.log`
* 其他操作系统为`~/.config/wszqkzqk.dev/pypvz/run.log`,但一般可以在终端中显示时用终端中的输出即可
* Windows默认日志文件路径为`~\AppData\Roaming\pypvz\run.log`
* 其他操作系统为`~/.config/pypvz/run.log`,但一般可以在终端中显示时用终端中的输出即可

View File

@ -1,3 +0,0 @@
#!/bin/bash
cd `dirname $0`; pwd
git pull git@github.com:wszqkzqk/pypvz.git

35
main.py
View File

@ -1,35 +0,0 @@
#!/usr/bin/env python
import logging
import traceback
import os
from logging.handlers import RotatingFileHandler
from source import tool
from source import constants as c
from source.state import mainmenu, screen, level
if __name__=="__main__":
# 日志设置
if not os.path.exists(os.path.dirname(c.USERLOG_PATH)):
os.makedirs(os.path.dirname(c.USERLOG_PATH))
logger = logging.getLogger()
formatter = logging.Formatter("%(asctime)s: %(message)s")
file_handler = RotatingFileHandler(c.USERLOG_PATH, "a", 1024*1024, 0, "utf-8")
file_handler.setFormatter(formatter)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
try:
# 控制状态机运行
game = tool.Control()
state_dict = { c.MAIN_MENU: mainmenu.Menu(),
c.GAME_VICTORY: screen.GameVictoryScreen(),
c.GAME_LOSE: screen.GameLoseScreen(),
c.LEVEL: level.Level()
}
game.setup_states(state_dict, c.MAIN_MENU)
game.run()
except:
print() # 将日志输出与上文内容分隔开,增加可读性
logger.error(f"\n{traceback.format_exc()}")

12
pyproject.toml Normal file
View File

@ -0,0 +1,12 @@
[project]
name = "pypvz"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"blue>=0.9.1",
"pygame>=2.6.1",
"setuptools>=80.9.0",
"wheel>=0.45.1",
]

51
pypvz.py Executable file
View File

@ -0,0 +1,51 @@
#!/usr/bin/env python
import logging
import os
import traceback
from logging.handlers import RotatingFileHandler
import pygame as pg
# 由于在后续本地模块中存在对pygame的调用在此处必须完成pygame的初始化
os.environ[
'SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR'
] = '0' # 设置临时环境变量以避免Linux下禁用x11合成器
pg.init()
from source import constants as c
from source import tool
from source.state import level, mainmenu, screen
if __name__ == '__main__':
# 日志设置
if not os.path.exists(os.path.dirname(c.USERLOG_PATH)):
os.makedirs(os.path.dirname(c.USERLOG_PATH))
logger = logging.getLogger('main')
formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
fileHandler = RotatingFileHandler(
c.USERLOG_PATH, 'a', 1_000_000, 0, 'utf-8'
)
# 设置日志文件权限Unix为644Windows为可读写Python的os.chmod与Unix chmod相同但要显式说明8进制
os.chmod(c.USERLOG_PATH, 0o644)
fileHandler.setFormatter(formatter)
streamHandler = logging.StreamHandler()
streamHandler.setFormatter(formatter)
logger.addHandler(fileHandler)
logger.addHandler(streamHandler)
try:
# 控制状态机运行
game = tool.Control()
state_dict = {
c.MAIN_MENU: mainmenu.Menu(),
c.GAME_VICTORY: screen.GameVictoryScreen(),
c.GAME_LOSE: screen.GameLoseScreen(),
c.LEVEL: level.Level(),
c.AWARD_SCREEN: screen.AwardScreen(),
c.HELP_SCREEN: screen.HelpScreen(),
}
game.setup_states(state_dict, c.MAIN_MENU)
game.run()
except:
print() # 将日志输出与上文内容分隔开,增加可读性
logger.error(f'\n{traceback.format_exc()}')

Binary file not shown.

View File

@ -1,15 +0,0 @@
{
"plant_image_rect":{
"PeaNormal":{"x":28, "y":0, "width":28, "height":34},
"PeaIce":{"x":26, "y":0, "width":30, "height":34},
"Chomper":{"x":0, "y":0, "width":100, "height":114},
"PuffShroom":{"x":0, "y":28, "width":35, "height":38},
"PuffShroomSleep":{"x":1, "y":0, "width":39, "height":65},
"BulletMushRoom":{"x":0, "y":1, "width":55, "height":21},
"BulletSeaShroom":{"x":0, "y":1, "width":55, "height":21},
"PotatoMine":{"x":0, "y":0, "width":75, "height":55},
"Squash":{"x":10, "y":140, "width":80, "height":86},
"SquashAim":{"x":10, "y":140, "width":80, "height":86},
"Spikeweed":{"x":3, "y":0, "width":80, "height":35}
}
}

View File

@ -1,38 +0,0 @@
{
"zombie_image_rect":{
"Zombie":{"x":62, "width":90},
"ZombieAttack":{"x":62, "width":90},
"ZombieLostHead":{"x":62, "width":90},
"ZombieLostHeadAttack":{"x":62, "width":90},
"ZombieDie":{"x":0, "width":164},
"BoomDie":{"x":68, "width":80},
"ConeheadZombie":{"x":80, "width":80},
"ConeheadZombieAttack":{"x":79, "width":87},
"BucketheadZombie":{"x":54, "width":90},
"BucketheadZombieAttack":{"x":46, "width":90},
"FlagZombie":{"x":56, "width":110},
"FlagZombieAttack":{"x":60, "width":100},
"FlagZombieLostHead":{"x":55, "width":110},
"FlagZombieLostHeadAttack":{"x":55, "width":110},
"NewspaperZombie":{"x":48, "width":92},
"NewspaperZombieAttack":{"x":48, "width":92},
"NewspaperZombieNoPaper":{"x":40, "width":98},
"NewspaperZombieNoPaperAttack":{"x":48, "width":92},
"NewspaperZombieLostHead":{"x":44, "width":96},
"NewspaperZombieLostHeadAttack":{"x":48, "width":92},
"NewspaperZombieDie":{"x":0, "width":100},
"DukyTubeZombie":{"x":55, "width":105},
"DukyTubeZombieAttack":{"x":55, "width":105},
"DukyTubeZombieDie":{"x":55, "width":105},
"DukyTubeZombieLostHead":{"x":55, "width":105},
"DukyTubeZombieSwim":{"x":55, "width":105},
"ConeheadDukyTubeZombie":{"x":55, "width":105},
"ConeheadDukyTubeZombieAttack":{"x":55, "width":105},
"ConeheadDukyTubeZombieSwim":{"x":55, "width":105},
"BucketheadDukyTubeZombie":{"x":55, "width":105},
"BucketheadDukyTubeZombieAttack":{"x":55, "width":105},
"BucketheadDukyTubeZombieSwim":{"x":55, "width":105},
"ScreenDoorZombie":{"x":41, "width":100},
"ScreenDoorZombieAttack":{"x":41, "width":100}
}
}

View File

@ -1,23 +0,0 @@
{
"background_type":2,
"init_sun_value":5000,
"shovel":1,
"spawn_zombies":"list",
"zombie_list":[
{"time":0, "map_y":5, "name":"Zomboni"},
{"time":1000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":2000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":3100, "map_y":4, "name":"ScreenDoorZombie"},
{"time":4500, "map_y":4, "name":"ScreenDoorZombie"},
{"time":5000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":6000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":7000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":8000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":0, "map_y":1, "name":"NewspaperZombie"},
{"time":0, "map_y":0, "name":"PoleVaultingZombie"},
{"time":6000, "map_y":0, "name":"FootballZombie"},
{"time":0, "map_y":3, "name":"ConeheadDuckyTubeZombie"},
{"time":0, "map_y":2, "name":"SnorkelZombie"},
{"time":90000, "map_y":2, "name":"ConeheadDuckyTubeZombie"}
]
}

View File

@ -1,8 +0,0 @@
{
"background_type": 7,
"init_sun_value": 50,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":1
}

View File

@ -1,9 +0,0 @@
{
"background_type":3,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "FootballZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"], "30":["FootballZombie"]},
"num_flags":4
}

View File

@ -1,8 +0,0 @@
{
"background_type": 8,
"init_sun_value": 50,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":1
}

View File

@ -1,8 +0,0 @@
{
"background_type": 0,
"init_sun_value": 50,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":2
}

View File

@ -1,8 +0,0 @@
{
"background_type":0,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "PoleVaultingZombie"],
"num_flags":3
}

View File

@ -1,8 +0,0 @@
{
"background_type":1,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "ScreenDoorZombie"],
"num_flags":2
}

View File

@ -1,10 +0,0 @@
{
"background_type":1,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "ScreenDoorZombie", "BucketheadZombie", "FootballZombie"],
"inevitable_zombie_list":{"20":["ScreenDoorZombie"], "30":["FootballZombie"]},
"num_flags":4,
"grade_graves":2
}

View File

@ -1,8 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie"],
"num_flags":2
}

View File

@ -1,9 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "FootballZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"], "30":["FootballZombie"]},
"num_flags":4
}

View File

@ -1,9 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "Zomboni"],
"inevitable_zombie_list":{"30":["Zomboni"]},
"num_flags":3
}

View File

@ -1,12 +0,0 @@
{
"background_type":6,
"choosebar_type":2,
"shovel":0,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "NewspaperZombie", "PoleVaultingZombie"],
"num_flags":3,
"inevitable_zombie_list":{"20":["BucketheadZombie"]},
"card_pool":{ "WallNutBowling":300,
"RedWallNutBowling":100
}
}

View File

@ -1,17 +0,0 @@
{
"background_type":0,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":3,
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "PoleVaultingZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"]},
"card_pool":{ "Peashooter":200,
"SnowPea":200,
"WallNut":100,
"CherryBomb":100,
"RepeaterPea":200,
"Chomper":100,
"PotatoMine":100
}
}

View File

@ -1,20 +0,0 @@
{
"background_type":1,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":3,
"included_zombies":["Zombie", "ConeheadZombie",
"BucketheadZombie", "NewspaperZombie",
"FootballZombie", "ScreenDoorZombie"],
"inevitable_zombie_list":{"30":["FootballZombie"]},
"card_pool":{ "PuffShroom":100,
"ScaredyShroom":100,
"IceShroom":100,
"HypnoShroom":100,
"DoomShroom":100,
"GraveBuster":100,
"FumeShroom":200
},
"grade_graves":3
}

View File

@ -1,20 +0,0 @@
{
"background_type":2,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":4,
"included_zombies":["Zombie", "ConeheadZombie",
"BucketheadZombie", "SnorkelZombie",
"Zomboni"],
"inevitable_zombie_list":{"30":["BucketheadZombie"]},
"card_pool":{ "LilyPad":200,
"TorchWood":100,
"TallNut":100,
"TangleKlep":100,
"Spikeweed":100,
"Squash":100,
"Jalapeno":100,
"Threepeater":400
}
}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Some files were not shown because too many files have changed in this diff Show More