注意: 本项目目前正在施工中!
大家好,这里是 凌冬。众所周知,使用原版 ERB 开发 Era 游戏时,我们经常会遇到各种问题(看代码像天书、变量裸奔等)。为了让想开发 Era 游戏但在 ERB 面前却步的朋友们有更多选择,我开发了 Pera 框架。
Pera 是一个基于 Python 和 Pygame 构建的前端框架,旨在让 Era 系游戏的开发变得更加方便。
- CSV 搬运友好:虽然不能直接转码 ERB,但可以直接搬迁 CSV 文件。
- 自动导入:框架初始化时会自动导入
./csv下的所有 .csv 文件,并自动分类为 角色数据 和 全局变量。 - Python 语法简单,入门轻松。
- 强大的开发工具:内置可视化的口上制作工坊,无需写代码即可创作剧情。
为了方便查阅,我们将文档分为了几个部分:
- 🚀 核心指南: 本页下方包含了快速开始、基础概念和 API 速查。
- 🛠️ 口上制作器指南: 强烈推荐! 即使不会编程也能用它写出口上,像搭积木一样简单。
- 📚 变量调用指南: 详细介绍了
allstate状态字典的结构和使用方法。 - 🗺️ 变量映射手册 (ERB ⟺ Python): 专为 ERB 转 Python 开发者准备,详细列出了如何使用
EraKojoHandler来模拟 ERB 的变量操作。 - 🔄 转换器文档: 如果您有将 ERB 口上转换为 Pera 框架的需求,请参考此文档。
- 使用 pip 安装 requirements 中的库:
pip install -r ./requirements.txt
- 使用 Python 3.13.x。
python main.py-
什么是 self / this / thethings?
- 它们都代表 "游戏主程序自己"。你可以把它想象成一个百宝箱,里面装了所有的功能(打印文字、播放音乐、管理事件)。
- 在事件函数里,你必须通过这个参数来指挥游戏做事。例如
this.console.PRINT("你好")就是告诉游戏主程序:“请在你的控制台上打印这行字”。
-
什么是 console?
console是主程序里的一个 "控制台盒子"。所有跟显示、输入有关的功能都在这里面。- 你想说话?找
console.PRINT。你想听玩家说什么?找console.INPUT。
-
API 是什么?
- API 就是框架给你准备好的 "按钮"。你不需要知道按钮后面是怎么接线的,你只要知道按下
PRINT按钮屏幕上就会出字就行了。
- API 就是框架给你准备好的 "按钮"。你不需要知道按钮后面是怎么接线的,你只要知道按下
-
INPUT 的注意事项 (重要!)
- INPUT 接口很 "专一"。在你的事件里调用
input = this.console.INPUT(),这个input变量只属于你的事件。 - 千万不要 试图去读取主循环里的 input 变量,那是上一层的事,跟你没关系。
- 赋值调用:
a = INPUT()-> 程序暂停,等待玩家输入,然后把输入的内容给a。 - 直接调用:
INPUT()-> 程序暂停,等待玩家按回车,不保存输入内容(常用于“按任意键继续”)。
- INPUT 接口很 "专一"。在你的事件里调用
- 普通输出:
self.console.PRINT("Hello World!") self.console.PRINT("蓝色文字", colors=(0,0,255))
- 点击交互 (用户点击后相当于输入了 "next"):
self.console.PRINT("点击继续", click="next")
- 高级输出 (使用
cs快捷函数,同一行显示不同颜色/点击):# 需要在事件中引入 cs 或者使用 self.cs self.console.PRINT( cs("红色").set_color((255,0,0)).click("red"), " | ", cs("蓝色").set_color((0,0,255)).click("blue") )
- 获取输入:
user_input = self.console.INPUT() if user_input == "1": ...
- 暂停等待:
self.console.PRINT("按任意键继续...") self.console.INPUT()
- 全名调用:
# 格式:角色ID_立绘类型_图片名_角色ID PRINTIMG("0_玩家立绘_顔絵_服_通常_0")
- 列表叠加模式 (推荐):
这是 Pera 最强大的功能,用于实现 表情差分(身体+衣服+表情)。
img_list = [ {"img": "0_身体", "offset": (0,0)}, {"img": "0_衣服", "offset": (0,0)}, {"img": "0_表情", "offset": (0,0)} ] # 第一个参数传 None self.console.PRINTIMG(None, img_list=img_list)
- 触发事件:
self.event_manager.trigger_event('事件ID', self)
- 说明:存储所有角色的原始 CSV 数据。
- 结构:
{ '角色ID': { '属性分类': { '属性名': '值' } } } - 获取:
# 获取 0 号角色的名字 name = self.console.init.charaters_key['0'].get('名前')
- 说明:存储
csv/global/下的全局配置(如物品、配置)。 - 结构:
{ '文件名': { 'ID': '值' } } - 获取:
# 获取 Item.csv 中 ID 为 1 的物品名 item = self.console.init.global_key['Item']['1'].get('name')
- image_data:存储所有已注册图片的详细信息(路径、坐标、大小)。可以通过图片全名索引。
- chara_images:按角色分类的图片索引,结构为
{角色ID: {立绘类型: [图片列表]}}。
- 将音频文件放入
Musicbox文件夹。 - 在全局变量
musicbox.csv中添加键值对:显示名称, 路径。 - 使用
events/music_control.py进行控制。
在 Pera 中,建议建立清晰的“主事件”结构:
- 主事件 (如
start.py):包含while循环和INPUT等待。它是游戏的一个“场景”。 - 子事件:由主事件触发,执行完功能后返回。
- 存档机制:存档系统会自动记录当前的“主事件”栈,读档时会回到最近的一个主事件(例如回到商店界面,而不是购买结算的中间状态)。
如果你觉得写代码太麻烦,请在游戏里输入 kojo_maker!
- 可视化编辑:像拼积木一样写剧情。
- 自动生成代码:导出为标准的
.py文件。 - 无需记忆变量:所有属性、立绘、事件都会自动列在下拉菜单里。
- 详细教程请见 口上制作器指南。
本项目采用 Mozilla Public License 2.0 (MPL-2.0) 开源协议。