设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 21829|回复: 255
打印 上一主题 下一主题

[原创发布] 【RGM】RGModern 1.0.4 - RMXP新runtime

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

跳转到指定楼层
1
发表于 2023-4-4 20:48:12 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 guoxiaomi 于 2023-6-8 00:42 编辑

RGModern 1.0.4 已发布

RGM 目前有2位贡献者,我和本贴6楼的 kirh_036。

项目已开源,github仓库地址:https://github.com/gxm11/RGModern

在线文档:RGModern使用指南,文档编辑中……

以下照搬 Github 仓库的 Readme。

简介

RGModern 是极具现代化特色的 RMXP 新 runtime,主要使用 C++20 和 Ruby 3 编写。

RGModern 特点:
1. 对 RGSS 功能的几乎 100% 覆盖,并提供了一些额外的实用功能;
2. 使用各种优化技巧提升执行效率,画面流畅,性能强劲;
3. 使用 SDL2 作为底层,支持 Direct3D9,Direct3D11 和 OpenGL 绘制;
4. 驱动多个 worker 完成脚本逻辑、画面渲染等任务。worker 以多线程或者协程的方式合作;
5. 借助 C++ 元编程,RGModern 能自由配置每个 worker 的功能模块,利于二次开发。

编译

游戏制作者请下载:RGM小助手,并按照以下步骤操作:
1. 更新编译环境 1 次;
2. 更新 RGModern 1 次;
3. 选择合适的编译、链接选项,开始编译;
4. 打开产物所在目录。

注意:
1. 第一次使用请更新 2 次编译环境并更新 2 次 RGModern;
2. 小助手自带的 RGModern 仓库安装在 ./msys64/opt/RGModern 下;
3. 选择 Data 文件夹将制作加密包,选择后将强制使用普通模式。

二次开发者请查阅使用指南和 Makefile,或参考 Github Actions 的设置。

使用

在 Windows 上使用必须安装 DirectX 最终用户运行时

直接使用 Game.exe 代替原版的 Game.exe 即可。大多数脚本都会兼容,如果出现不兼容的情况或者其他运行时报错,请查看 error.log 尝试排查错误。

如果出现 RGModern Internal Error 或其他复杂问题,请提出 Issue。如果不方便使用 Issue,可以在此文档反馈需求和缺陷:RGModern用户反馈,当然直接回帖也是OK的~

如果要修改 RGModern 的功能或进行二次开发,可以用开发者模式编译的 main.exe,此 exe 需要读取当前路径下的 src/script 文件夹中的 ruby 脚本运行,可以修改这些脚本文件自定义对 RGSS 的实现。

config.ini

RGModern 在运行时会读取 config.ini 中的配置信息。如果 config.ini 不存在,RGModern 会产生一份新的配置文件,但是可能部分配置项未能正确读取。建议分发游戏时始终携带 config.ini。

config.ini 中有以下几个 section:
1. Game,配置游戏标题和 RTP 路径;
2. System,配置游戏的显示(分辨率、全屏等)和音乐选项;
3. Keymap,配置键盘(或控制器)按键与游戏内的虚拟按键的映射关系;
4. Font,配置游戏中使用的字体名和字体文件路径的映射关系;
5. Kernel,配置渲染器、协作模式等高级选项。

加密

RGModern 支持加密图片素材。

首先需要制作加密包。使用 7-zip 软件打包 Graphics 文件夹并设置密码即可。注意,打包后的 zip 文件中需要包含 Graphics 目录。

在游戏开始加载图片素材前调用:
  1. Finder.regist("Graphics.zip", "password")
复制代码

其中第一个参数是加密包的文件名,第二个参数是加密包的密码。此后就会优先从加密包中读取资源,如果加密包中没有资源,则会从游戏目录和 RTP 中寻找。

RGModern 不支持加密音乐素材。

RGModern 支持加密 Data 文件夹。如果使用 RGM 小助手编译,选择对应的 Data 文件夹即可。不使用小助手请参照 Makefile 中 Gamew.exe 的编译。

RGModern 不支持原版的加密方案。众所周知,原版加密方案等同于没有加密。RGModern 未来也不会支持原版的加密方案。

设计

src/main.hpp 所示,引擎本身是一个由多个 worker 组合而成的 scheduler,每个 worker 管理各自的数据并执行不同的任务,scheduler 负责 worker 之间的任务转发和运行调度。

具体运作原理请查看 src 内的 c++ 源码。RGModern 的代码使用 gcc13 在 -Wall -Wextra -Werror 的选项下编译通过,代码质量有保障,附带详细的 Doxygen 风格的注释,可放心查看。

范例

点击下载 完整测试工程,或https下载

范例里的各个exe都支持win10 64位及以上版本,其中后缀带 _win7 的原则上可以在 win7 上运行,并且你需要安装DirectX 最终用户运行时

工程内部的Game.exe可以代替原版Game.exe使用,Gamew.exe则内嵌了加密的Data文件夹,用来测试数据加密的效果。

执行main.exe会读取src/里的脚本并执行 load.rb,可以从这里查看RGM是如何实现RGSS的各个内部模块和类的,相应的cpp代码也可以作为参考,注释详细,相对好懂。

src里的scripts文件夹已经内嵌于Game.exe和Gamew.exe里了,所以这两个exe的执行不依赖外面的src文件夹。

Graphics.zip的密码是123,可以在范例的箱子事件测试读取加密图片的效果。测试工程中还提供了输入法、分辨率扩展等额外功能,以及单元测试等。

希望大家能帮忙测试一下 RGModern 的效果,提提建议。大部分脚本应该能兼容(涉及到调用外部32位的dll,魔改原版dll和操作Bitmap内容的旧脚本肯定不兼容)。

感谢各位坛友的支持!

评分

参与人数 20星屑 +200 梦石 +1 +20 收起 理由
718633146 + 1 我很赞同
泼墨漓江 + 1 精品文章
pillow鸽鸽 + 1 我很赞同
Im剑侠客 + 1 good,正式版1.0终于到来了
aoaoxlxlqq + 1 塞糖
plain666 + 1 塞糖
wawayaya234 + 1 塞糖
#42a5f5 + 1 塞糖
taeckle + 1 大神威武,来去如风!
SailCat + 1 不是50星屑可以有的价值

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

2
 楼主| 发表于 2023-4-5 10:43:31 | 显示全部楼层
大家有哪些常见、重要但是不兼容的功能也可以提出来,我这边看看能不能出替代方案,尽可能帮助老旧工程的移植。

比如画面截图有Bitmap#captue_screen,在范例中就已经展示了
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

3
 楼主| 发表于 2023-4-5 16:54:14 | 显示全部楼层
kirh_036 发表于 2023-4-5 16:15
也许该抓个热血年轻人来写个炫酷demo(?

得想个点子展示一下RGM的优势,酒香也怕巷子深>_<

我觉得RGM最大的优势就是高性能,ruby3+d3d11+异步模式应该是所有runtime中性能最高的了。要不咱做个弹幕游戏演示一下,正好xbox手柄已经适配了,可以做个边移动边开火的>_<

另一个优势就是扩展性了,我尽可能把内核代码写到了ruby层,并且ruby层跟c++部分尽可能脱耦,很适合魔改内核>_<

但感觉用XP的开发者更关心编辑器上的限制,对runtime的性能和扩展性不是那么关注>_<

评分

参与人数 1+1 收起 理由
小怪兽奇奇侠 + 1 太厉害了!

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

4
 楼主| 发表于 2023-4-5 18:26:20 | 显示全部楼层
本帖最后由 guoxiaomi 于 2023-4-5 18:44 编辑

@soulsaga 如果RGM支持某种特定格式的加密包,就意味着RGM内置了这种加密包的解密算法。RGM还是个开源软件,那么稍作修改就可以当解包器用了。

最好的方案是加密算法的作者提供一个包含了解密算法的DLL,RGM在运行时读取这个DLL里的函数对rgssad文件进行解密。不过这还直接方便了攻击者,只需要写个程序加载DLL中的相应函数就可以直接解密了。主要是因为一些旧的加密算法不是靠密钥加密,而是靠算法保密。当然密钥也好不到哪去,毕竟总会加载到内存的某个位置。

或者,让加密算法的作者fork一个不公开的分支,把解密算法写入RGM,自行发布支持特定格式的RGM。

经过了综合的考虑,RGM决定不管解密其他格式的加密包这件事,只支持自己的加密格式。此格式本质上就是压缩成zip时添加一个长密码,攻击者必须在Game.exe里找到密码,否则无法破解。

如果能找到游戏的原作者,可以让他发布一个RGM格式的加密版。正式发布时,我会提供一个图形化界面的程序供开发者制作加密包,点几下就可以了。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

5
 楼主| 发表于 2023-4-7 06:22:44 | 显示全部楼层
本帖最后由 guoxiaomi 于 2023-4-7 06:44 编辑
契约师Vi 发表于 2023-4-6 22:45
这个分辨率的黑边,希望能解决



暂时把302行改成:
  1. w = (width * [actor.cp,65535].min / 65535).to_i
复制代码

因为下面的fill_rect里我忘了把输入数据转换为整数类型,会在下一次发布时添加。
其实error.log里已经对报错有完整描述了,下次可以直接贴出前几行。比如这次的报错就是:

2023-04-07 06:03:16 +0800
Error occurs when load Data/Scripts.rxdata.
wrong argument type Float (expected Integer)
- eval:133:in `bitmap_fill_rect'
- eval:133:in `fill_rect'
- CP脚本测试:303:in `draw_actor_cp_meter'

================
黑框是因为viewport大小限制了tilemap的大小。RGSS设计时就没考虑过修改分辨率,很多宽和高都被硬编码成了640或者480。所以单纯的把viewport扩大到窗口大小,还是会有通行度、显示上的问题,需要逐个找出,把硬编码的部分改成适配动态分辨率的模式。简单说就是把640改成Graphics.width,480改成Graphics.height,320改成Graphics.width/2,240改成Graphics.height/2这种。

回头我参考一下那些分辨率扩展的脚本,看看它们改了哪些地方,先给默认系统加上分辨率扩张。这个看看大家的需求优先级。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

6
 楼主| 发表于 2023-4-12 23:01:04 | 显示全部楼层
本帖最后由 guoxiaomi 于 2023-4-12 23:35 编辑

1.0.0-rc2发布了,因为正式版发布后就不能随便改ABI了,所以在发布前还需要一些命名等地方的小调整,这些调整不会影响现有的功能。
顺便这次范例里添加了输入法的范例事件和读取加密文件(setu):

输入法按回车输入,按ESC清除。事件的写法也很简单:
这里是启动事件,第二页还要设置一个并行处理的事件,太长就不发了,请下载范例查看~

具体实现参见textbox.rb,整个输入法功能几乎都是用ruby写的,RGM只提供了Ext模块下的4个函数封装了SDL的对应函数,和一个赋值@@need_refresh的机制。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

7
 楼主| 发表于 2023-4-13 19:45:57 | 显示全部楼层
本帖最后由 guoxiaomi 于 2023-4-13 19:55 编辑
SailCat 发表于 2023-4-13 11:40
理论上有这个东西的话,我的SEP Core就不需要搞成近4000行的大脚本了……

另外,有没有计划把编辑器"名称" ...


猫姐好像回错贴了0v0,编辑器的需求在魔改计划那个贴~

不过正好我也想整理一个带SEP Core的各种强化/修补功能,也支持扩展分辨率的RGSS出来作为范例工程使用,但我没有仔细研究过SEP Core,不知猫姐有没有什么建议,比如哪些适合加进去?(要是能做好白送我更好啦)
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

8
 楼主| 发表于 2023-4-29 00:13:53 | 显示全部楼层
本帖最后由 guoxiaomi 于 2023-4-29 05:43 编辑

1.0.0-rc3发布了,修复了一些bug,添加了对win7的支持,不过我没win7也测不了,按说是没问题的0v0

win7版本的exe是动态链接sdl2,使用时需要把附带的几个sdl2*.dll放到exe所在的目录下,lib*.dll看上去不太需要,但是以防万一还是都带上。
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 1 反对 0

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

9
 楼主| 发表于 2023-4-29 18:08:14 | 显示全部楼层
本帖最后由 guoxiaomi 于 2023-4-29 18:22 编辑
灯笼菜刀王 发表于 2023-4-29 16:09
经测试(win7旗舰版), 从第一层文件夹的 main_win7.exe 可以打开并进入游戏, 但是第二层和Project1里的就直 ...


我重新上传了一份文件,这个版本会把内部错误弹窗。

我买了台阿里云的win7服务器,把config.ini中的RenderDriver设置为software就可以在win7上运行,说明程序是兼容的,甚至静态链接的Game.exe也能运行,不清楚原因。

设置成opengl、direct3d9或者direct3d11会显示找不到合适的Driver,这个是阿里云win7的一贯问题。

你可以试一下改这个RenderDriver的值为software看看是不是兼容的。改成其他的如果没有弹窗报错,那么看看error.log,有可能是字体不匹配,或者别的bug……

点评

好, 不过要等上班才能测试了, 只有办公室电脑是win7 =.=  发表于 2023-4-30 11:23
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

10
 楼主| 发表于 2023-5-4 23:20:57 | 显示全部楼层
RGModern 1.0.0 正式版发布了,同时发布的还有 RGM 小助手(1楼有下载链接)

由于 RGM 的加密方案是把 Data 文件夹打包后内嵌到 exe 内,所以必须编译源码才可以完成加密。RGM 小助手可以协助开发者配置环境并完成编译。

首次更新编译环境和更新RGModern会非常慢,请耐心等待~

下面是 RGM 小助手的界面,RGM 小助手使用了 nana gui 库编写,源码也附在压缩包里了。

点评

正式版发布了 围观一下  发表于 2023-5-5 10:13

评分

参与人数 1+1 收起 理由
纯属小虫 + 1 见证历史

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-21 15:23

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表