纯终端|全彩立绘|语音+BGM|变量分支|亚克力沉浸
ngal 是一个纯终端环境下的跨平台 Galgame / 视觉小说引擎。使用 Rust 编写,提供精美的双边框 UI、角色立绘/背景分层、变量系统、分支选项、十槽位存档/读档、背景音乐及角色语音。开发者只需编写简单的文本脚本,即可在终端里享受属于自己的故事。
依赖:Rust + Cargo + mpv (用于音频)
# 从 crates.io 安装
cargo install ngal
# 或从 GitHub 编译
git clone https://github.com/nasyt233/ngal.git
cd ngal
cargo build --release
# 运行游戏 (会在当前目录生成 assets/ 及默认配置)
ngal
ngal ./mygame # 指定游戏目录
ngal --version # 显示版本
首次运行自动创建 `assets/` 相关资源文件夹,放入对应的立绘、音乐、语音即可开始创作。
your_game/
├── assets/
│ ├── game.json # 标题、底部提示、入口文件配置
│ ├── dialog/
│ │ └── dialogue.txt # ⭐主演剧情脚本 (核心)
│ ├── portraits/ # 立绘 & 背景图片 .png/.jpg
│ ├── music/ # 背景音乐 .mp3/.ogg
│ └── voices/ # 角色语音 .mp3
├── save/ # 存档 slot1~10.json (自动生成)
└── ngal (可执行文件)
📌 `game.json` 示例:{"title": "终端奇缘", "footer": "按回车继续 | H历史", "index": "dialog/dialogue.txt"}
按上述结构放好脚本和资源,执行 `ngal` 即可。自带默认剧情演示(变量、分支、立绘切换)。
剧情文件位于 assets/dialog/dialogue.txt,游戏从 [welcome] 场景启动。下方是一个包含音乐、立绘/背景、变量、选项、跳转等全部指令的示例:
[welcome]
music:title.mp3
img:NAS油条.png:3:50%
NAS油条:本项目由Rust语言开发\n按回车键继续:nas_intro.mp3
img:
input:请输入你的名字:name
NAS油条:好的,{name},哪个游戏牛逼?:gamenb.mp3
choose:原神牛逼:ysnb|鸣朝牛逼:mcnb|终末地牛逼:zmd
[ysnb]
bg:91.png
img:鸣朝.png:3:35%
鸣朝:鸣朝才牛逼😡:mcnb.mp3
鸣朝:原神不牛逼🤓:ys_no_nb.mp3
原神:原神才牛逼🤓👍:ysnb.mp3
原神:鸣朝不牛逼😡:mc_no_nb.mp3
load:ytnb
[mcnb]
img:原神.png
原神:原神才牛逼🤓👍:ysnb.mp3
原神:鸣朝不牛逼😡:mc_no_nb.mp3
鸣朝:鸣朝才牛逼😡:mcnb.mp3
鸣朝:原神不牛逼🤓:ys_no_nb.mp3
load:ytnb
[zmd]
img:终末地.png
终末地:我最牛逼
end
[ytnb]
img:我.png
{name}:😋他们产的片才牛逼😋:ysmcnb.mp3
bg:
NAS油条:游戏结束
end
钟离:随便聊聊 / 派蒙:好吃:voice_paimon.mp3input:输入名字:player{player}你好 / 好感=3img:角色.png (居中100%)img:角色.png:1:70% (左, 70%)img: 清除bg:校园.jpg (拉伸填充)bg: 清除背景music:bgm.mp3 播放 / music: 停止choose:去森林:forest|去城镇:townload:场景ID / end 结束游戏// 或 #\n 强制换行。⚠️ 注意:场景名只使用字母/数字/下划线,文本编码UTF-8无BOM。所有图片/音乐/语音文件放在 assets 下的正确子目录。
支持透明背景PNG,可叠加在背景图片上。位置参数: 1(左) / 2(中) / 3(右),缩放百分比后显示效果实时适应终端尺寸。例如 img:heroine.png:3:80% 在右侧显示,大小为原图80%。
背景图通过 bg:场景.jpg 拉伸填满整个立绘区域,营造沉浸环境。清除背景用 bg:。
ngal # 当前目录运行
ngal ./mygame # 跳转到游戏根目录
ngal --version / -V # 显示版本信息
ngal -h / --help # 帮助信息