Skip to content

SakiEngine 是一个基于 Flutter 的现代化视觉小说游戏引擎,专为跨平台游戏开发而设计。语法类似Ren'Py但是没有缩进。

License

Notifications You must be signed in to change notification settings

MCDFsteve/SakiEngine

Repository files navigation

SakiEngine

基于Flutter开发的视觉小说游戏引擎

项目截图

主界面

主界面

对话系统

对话系统

历史记录

历史记录

对话场景

对话场景

项目简介

SakiEngine 是一个基于 Flutter 的现代化视觉小说游戏引擎,专为跨平台游戏开发而设计。

主要特性

  • 类Renpy语法:使用类似Renpy的脚本语法,降低游戏开发门槛
  • 自适应窗口:游戏窗口可以自由拉伸,画面智能适配
  • 低性能占用:轻量级引擎,确保流畅的游戏体验
  • 强大的UI系统:丰富的界面控件和交互支持
  • 模块化系统:支持项目特定的自定义模块,实现个性化定制
  • 真正的跨平台:支持多个主流平台
    • Windows
    • Linux
    • macOS
    • Android
    • iOS

开发状态

项目目前处于积极开发中。主要功能已经实现,正在持续优化和完善:

  • 基础对话系统
  • 角色立绘支持
  • 场景管理
  • 多平台适配
  • 对话记录系统
  • 回滚系统
  • 选择分支系统
  • 存档和读档系统
  • 项目模块化系统
  • 自动项目创建工具
  • 音乐、音效和语音系统
  • 场景切换效果
  • 转场动画
  • 脚本内持久化变量设置
  • 更多高级脚本特性
  • 性能进一步优化
  • 更多平台细节适配

特色功能

  • 自动角色站位,多角色会自动分配位置
  • 自动对话框震动,检测到感叹号字符会自动震动
  • 自带普通旁白和电影旁白,电影旁白会有上下黑边
  • 有单独的存档格式.sakisav,市面已存在的反编译工具目前无法直接支持
  • 支持切换深色/浅色模式,就像app一样改变UI的色调
  • 随意拉伸窗口,内部画面会自适应
  • 无限个存档位
  • 支持直接播放webp动图

部署指南

前提条件

  • 安装 Flutter SDK(建议使用最新稳定版)
  • 配置相应平台的开发环境(Android Studio、Xcode等)

快速开始

开发环境启动(推荐)
# macOS/Linux
./run.sh

# Windows(使用 Git Bash、WSL 或其他 bash 环境)
./run.sh

首次运行时会自动:

  • 检测您的操作系统(macOS/Linux/Windows)
  • 扫描可用的游戏项目
  • 让您选择默认游戏项目
  • 自动配置并启动项目
传统方式(手动步骤)
  1. 选择游戏项目
./scripts/select_game.sh
  1. 运行对应平台的传统脚本
# macOS(传统方式)
./scripts/run_legacy_macos.sh

# 或使用 Flutter 命令(需要先处理资源)
cd Engine
flutter run -d macos --dart-define=SAKI_GAME_PATH="$PWD/../Game/YourGameName"

构建发布版

构建不同平台(GitHub Action 使用)

直接推送即可。github会自动编译全平台二进制文件。

本地构建

./build.sh macos
./build.sh linux  
./build.sh windows
./build.sh android
./build.sh ios

注意: 构建前请确保已使用 ./run.sh./scripts/select_game.sh 选择了默认游戏项目。

Windows 用户注意事项

Windows 用户需要使用以下方式之一来运行 shell 脚本:

  1. Git Bash(推荐)

    • 安装 Git for Windows 后自带
    • 右键选择 "Git Bash Here" 然后运行 ./run.sh
  2. WSL (Windows Subsystem for Linux)

    • 在 Microsoft Store 安装 Ubuntu 或其他 Linux 发行版
    • 在 WSL 终端中运行脚本
  3. PowerShell + bash

    • 如果安装了 Git Bash,可在 PowerShell 中运行:bash ./run.sh

项目结构

SakiEngine/
├── run.sh              # 统一启动脚本(跨平台)
├── build.sh            # 构建脚本(GitHub Action)
├── default_game.txt    # 默认游戏配置文件
├── scripts/            # 工具脚本目录
│   ├── select_game.sh       # 游戏项目选择器
│   ├── create_new_project.sh # 新项目创建工具
│   ├── run_legacy_macos.sh  # 传统macOS启动脚本
│   └── ...                  # 其他工具脚本
├── Engine/             # Flutter引擎主目录
│   ├── lib/           # 引擎源码
│   │   ├── src/       # 引擎核心代码
│   │   ├── projectname/ # 项目特定模块(自动创建)
│   │   └── main.dart  # 主入口
│   ├── tool/          # 开发工具
│   │   └── generate_modules.dart # 模块自动生成器
│   └── pubspec.yaml   # 依赖配置
└── Game/              # 游戏项目目录
    ├── SakiEngine/    # 默认示例游戏
    ├── SoraNoUta/     # 另一个示例项目
    └── YourGame/      # 您的游戏项目(创建工具生成)

新项目创建

SakiEngine 提供了便捷的项目创建工具,可以快速搭建新的视觉小说项目:

创建新项目

./scripts/create_new_project.sh

创建工具会自动:

  • 创建完整的项目目录结构
  • 生成基础的配置文件(角色、姿势、系统配置)
  • 创建示例剧情脚本
  • 自动生成项目专用的Flutter模块
  • 配置主题颜色和Bundle ID
  • 更新模块注册表

项目模块化系统

每个新项目都会自动创建对应的Flutter模块,支持:

  • 自定义主题:项目特有的颜色、字体、界面风格
  • 自定义界面:主菜单、游戏界面、存档界面等
  • 项目配置:特殊的引擎参数和功能开关
  • 智能回退:未自定义的组件自动使用引擎默认实现

项目模块位置:Engine/lib/项目名小写/项目名_module.dart

快速开始新项目

  1. 创建项目
./scripts/create_new_project.sh
  1. 选择并运行
./run.sh  # 选择新创建的项目
  1. 自定义项目模块
# 编辑项目模块文件
Engine/lib/yourproject/yourproject_module.dart

VSCode 语法高亮插件

项目根目录包含一个专门为 SakiEngine 开发的 VSCode 语法高亮插件 vscode-sakiengine-syntax,支持以下文件类型的语法高亮:

  • .sks - 剧本文件 (Script Files)
  • .sks - 配置文件 (Configuration Files)
  • .sks - 坐标管理文件 (Position Management Files)
  • .sks - 角色定义文件 (Character Definition Files)

安装方法

  1. 在 VSCode 中打开扩展视图
  2. 选择 "从 VSIX 安装"
  3. 导航到项目根目录下的 vscode-sakiengine-syntax 文件夹
  4. 选择最新版本的 .vsix 文件进行安装

通过这个插件,你可以获得更好的代码编辑体验,包括语法高亮、代码着色等功能,让脚本编写更加直观和高效。

脚本语法示例

SakiEngine 使用 .sks 脚本文件,语法简单直观,类似 Renpy,但更加简洁:

// 开始标签
label start
// 设置背景场景
scene bg school 

// 角色对话(角色标识 姿势 表情 对话)
yk pose2 happy "欢迎来到SakiEngine!"

// 选择菜单
menu
"给她巧克力" choice_chocolate
"保持沉默" choice_silence
"表情测试" choice_expressions
endmenu

// 巧克力选项
label choice_chocolate
yk "呀,谢谢!"
"嘿嘿,喜欢吗?"
yk happy "当然喜欢!"
return

// 沉默选项
label choice_silence
yk sad "你怎么不说话?"
yk "不理你了。"
return

// 表情变化
label choice_expressions
yk pose1 "这是不同的姿势和表情"
yk happy "开心的表情"
yk sad "难过的表情"
return

图像绘制语法

SakiEngine 支持四种主要的图像显示方式:

场景背景 (scene)

// 显示背景图片,自动铺满窗口
scene bg school          // 显示学校背景,铺满整个窗口
scene bg sunset_beach    // 显示夕阳海滩背景,自动缩放适配

角色立绘 (show)

// 显示角色立绘,自动调节窗口内站位
show yk pose1 happy      // 显示yk角色,引擎自动分配站位
show alice pose2 sad     // 显示alice角色,自动与其他角色协调位置
show character          // 多角色同时显示时自动分配最佳站位

动画效果 (anime)

// 播放WebP动图,自动铺满窗口,默认播放一次后消失
anime flash_effect       // 播放闪光动画,播放完自动消失
anime explosion          // 播放爆炸效果,默认一次性播放

// 使用参数控制播放行为
anime rain keep          // 播放雨滴动画,播放完后保持显示
anime fire loop          // 播放火焰动画,循环播放不停止
anime magic keep loop    // 播放魔法效果,循环播放且保持显示

CG插图 (cg)

// 显示CG图片,结合scene和show特性:铺满窗口 + 自动识别切换
cg ending_kiss          // 显示CG,自动铺满窗口
cg battle_scene         // CG会自动识别和切换到对应场景
cg romantic_moment      // 支持CG之间的自动过渡和识别

文本标签语法

SakiEngine 支持在对话文本中使用特殊标签来控制显示效果:

等待标签 [w]

// 在指定位置暂停文字显示
yk "你好...[w=1]我是小雪。"        // 在省略号后暂停1秒
alice "等等[w=5]让我想想..."       // 在"等等"后暂停5秒文字显示

文字大小标签 [size]

// 改变文字大小
"这是[size=1.3]大字[/size]和正常字。"     // 显示大字
"[size=0.8]小字提示[/size]正常对话"       // 显示小字
"[size=1.5]重要提醒![/size]"             // 显示更大的字

快进标签 [pass]

// 跳过打字机效果,瞬间显示文字
"[pass]这段文字会瞬间显示出来![/pass]"          // 整句瞬间显示
"正常显示[pass]后面瞬间显示[/pass]"             // 部分瞬间显示

转场效果语法

SakiEngine 支持多种场景转场效果,使用 with 转场类型 语法:

淡入淡出 (fade)

// 黑屏淡入淡出转场,经典过渡效果
scene sky with fade           // 先淡出到黑屏,再淡入新场景

溶解 (diss/dissolve)

// 图片直接渐变过渡,无黑屏阶段
scene home with diss          // 旧场景溶解到新场景
scene school with dissolve    // 支持 dissolve 别名

擦除 (wipe)

// 旋转扇形擦除效果,适合时空转换
scene flashback with wipe     // 扇形旋转覆盖并显示新场景

睁眼 (blink/eyeopen) ⭐ 新增

// 从黑屏睁眼显示场景,不会遮挡UI
scene bedroom with blink      // 适合醒来场景
scene reality with eyeopen    // 从梦境/回忆回到现实
scene world with eye          // 支持简写别名

睁眼转场特点:

  • 🎬 从完全黑屏开始(已经闭眼状态)
  • 👁️ 上下遮罩移开,逐渐显示新场景
  • 不会遮挡UI(对话框、菜单等保持可见)
  • 💡 只有睁眼过程,没有闭眼过程

睁眼转场适用场景:

  • 💤 角色从睡梦中醒来
  • 👁️ 失去意识后恢复
  • 🔄 从回忆/幻觉回到现实
  • ⚡ 从黑屏过渡到新场景

转场效果对比表

转场类型 关键词 视觉效果 是否遮挡UI 适用场景
淡入淡出 fade 黑屏渐变 ✅ 遮挡 通用场景切换
溶解 diss, dissolve 图片直接渐变 ❌ 不遮挡 平滑的场景过渡
擦除 wipe 旋转扇形擦除 ✅ 遮挡 时空转换、特效
睁眼 blink, eyeopen, eye 黑屏入,上下移开 不遮挡 醒来、恢复意识

语法特点

  • 无需缩进:所有命令都在同一级别
  • 使用 // 注释:支持单行注释说明
  • 简单的角色对话语法:角色名 + 可选姿势 + 可选表情 + 对话内容
  • 灵活的图像控制:支持背景、立绘、动画、CG等多种显示方式
  • 富文本标签:支持等待、大小、快进等文字效果
  • 直观的选择菜单系统:menu/endmenu 包围选择项

许可证

本项目使用开源许可证。详细信息请参见 LICENSE 文件。

示例游戏

本项目包含一个既是商业游戏也是开源游戏的游戏项目:《空之歌:每当磁针再次振动,我便在此等待》。

贡献

欢迎提交 Issues 和 Pull Requests!

About

SakiEngine 是一个基于 Flutter 的现代化视觉小说游戏引擎,专为跨平台游戏开发而设计。语法类似Ren'Py但是没有缩进。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •