ragal-v0.5.0
Last Update:
🎉🎉🎉RAGAL大更新啦!🥳🥳🥳
快速了解
- 版本号: v0.4.0
- 新增功能
- 平台支持: win7/10/11
- 标签:
markdown式文件所写及所得,可嵌入js脚本 - 二次开发所需技术:
javascript-css-html,markdown语法,美术
v0.5.0的新增内容指南
0.4版本真的改了很多,我还记得v0.1版时单纯的解析md,到v0.2版本的初具工程化,再到v0.3启动器与ui引导界面的分离,到这一版的可以打包工程。经历很多的重构(主要是技术与经验不够,走了很多歪路,至今都不知埋了多少雷了🎃)。这里先申明几个概念:
- 启动器是播放gal的程序,我后面称其为galplayer
- ui引导界面是集成了打开gal工程,创建工程,打包工程的程序,后称其为ragal
ragal配置对象
工程化结构的核心就是基于一个配置文件中的基本信息,包括了启动游戏时的屏幕大小,标题,关键的资源文件目录的路径等设置;这些关键信息都可记录在y(a)ml文件中,ragal打开工程是通过打开yml并读取其中的关键内容来加载并启动galplayer的。工程的根目录就是此yml配置文件所在目录路径。当然,yml配置文件需要一定的结构。
配置结构
符合ragal配置格式的yml文件称为ragal配置对象,您可以通过修改它来自定义gal工程。下面我们默认配置文件名为ragal.cfg.yml。ragal配置对象大致有以下对象构成:
|
BaseConfig
| Name | Type | Default | Description |
|---|---|---|---|
| title | String | 必填 | gal标题 |
| title_page | String? | null | 自定义标题页html路径 |
| theme | String? | null | 主题相关的css路径 |
| icon | String? | null | 图标路径 |
| mainresolution | [Number;2] | 必填 | 窗口尺寸[宽x高] |
目前theme,icon属性无关紧要
PathConfig
| Name | Type | Default | Description |
|---|---|---|---|
| entry | String | 必填 | 剧本入口文件路径 |
| img | String | 必填 | 图片目录路径 |
| standing | String | 必填 | 立绘目录路径 |
| music | String | 必填 | 音乐目录路径 |
| video | String | 必填 | 声音目录路径 |
| custom_css | Vec | [] | 自定义css文件路径集合 |
目前music,video,custom_css属性无关紧要
GameConfig
| Name | Type | Default | Description |
|---|---|---|---|
| typing | Object | {speed: 4, size: 2.9} | 对话的打字速度和字体大小默认值 |
| standing | Object | null | 默认立绘屏幕站位,只支持1~2人的人物镜头 |
| volume | Object | {bgm: 100, se: 100} | 音频默认值 |
目前typing属性数值是锁死的(我感觉当前挺不错的,后续会改的)
目前volume属性无关紧要(毕竟还没实现音频模块)
新建初始化的工程
这个简单😆直接点击ragal中的build project,选中目标目录,会在其下创建ragal的配置文件及其相关内容
工程打包
打包工程是v0.4.0中的ragal新增的功能,点击bundle project,需要选择两个路径:
- 需要打包工程的ragal配置对象所在路径
- 需要打包到的目标目录路径
注意事项:角色立绘只应该放置在standing文件夹内,并其alias.json只应该为相对路径
打开开发工具
在ragal打开工程时,ctrl+shift+i组合键可打开galplayer的开发工具,供二次开发的调试
变量的定义
用户可以在galplayer运行时定义自己的变量,分为全局的变量和剧本文本的本地变量。
全局变量
运行时的全局变量需定义在custom_state.json文件中,并且要在ragal.cfg.yml同级目录下。对于目前版本,没有特别的变量api,以后可能考虑。
注意,全局变量是游戏运行时才会被加载进游戏中,标题页是没有全局变量的。
在嵌入式js中,有global.state变量挂载了所定义的全局变量
局部变量
在剧本头部可定义局部变量,如下所示:
|
通过this来访问这些本地变量
嵌入javascript
galplayer是支持剧本中插入js脚本并即时运行,并每个脚本块间都是相互隔离的,但都能访问本剧本的局部变量this;剧本间也是相互隔离的,但global对象是全局的,所有剧本共享,以下是样例:
|
自定义标题页
title_page中定义了标题页的所在路径,如果你有能力可以自己写个漂亮的页面。另外,重要的是,目前版本有三个api可供调用:
- onStart() 开始游戏
- onExit() 退出游戏(退出程序)
你可以在你的html里使用它们
条件式分支
可以根据条件是否满足来实现选项的出现,从而实现复杂的分支剧情,这不是很有趣吗!
条件分支根据选项语法的扩展,目前只支持一层,条件间是取或的,取第一个为真的条件,下面是个例子
|
advance
这里有更加进阶的写法,能方便你写出更加灵活复杂的剧本。
- 当条件满足时的立即执行函数
- 点击选项时的回调函数
条件满足时的立即执行函数
|
这里我们详细讲解badend.js的样例,而这里最为重要的是需要暴露默认函数,this指针指向本剧本的state,这个函数可以返回一个object{url, txt, opt},这个返回值修改本选项,以下是个example:
|
你发现了,上面有个很有趣的opt成员变量,opt取决了怎么切换剧本的方式,其值有以下枚举:
- switch 直接切换
- callback 回调剧本(像是插入)
- custom 点击时调用自定义的
js脚本
这里有很快捷的在markdown中的写法:
|
立绘状态
角色的状态有立绘差分了,写起来更符合直觉😋
alias.json中的立绘资源映射写法
|
剧本markdown中的写法
|
杂项
|
其他的设置背景,设置镜头等语法可参考上一版ragal指南,不过对于镜头的默认位置设置是支持的,可看ragal配置对象.game.standing,可以这样方便的设置镜头了> +{我,小熊}
Future
下一版想要什么功能,可以向我提提issue🙂