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

Project1

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

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

[复制链接]

Lv5.捕梦者 (版主)

梦石
1
星屑
24004
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

跳转到指定楼层
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 网络脚本 *

Lv4.逐梦者

梦石
0
星屑
14736
在线时间
2217 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

2
发表于 2023-4-4 21:00:27 | 只看该作者
本帖最后由 miantouchi 于 2023-4-4 21:11 编辑

这款runtime大致方向是实现哪些功能?  双击报错!!!

QQ截图20230404211053.png (9.36 KB, 下载次数: 56)

QQ截图20230404211053.png

点评

只是改了DLL吧..  发表于 2023-4-5 18:13
纸老虎要么是改了exe,要么是改了dll,记不清了。。。  发表于 2023-4-5 18:08
你是说读取默认的加密包直接执行吗?因为解包器太多了,默认加密相当于没有加密。纸老虎也有自己的exe的。  发表于 2023-4-5 18:06
可惜无法100%还原  发表于 2023-4-5 18:03
可是原版的EXE就可以运行?  发表于 2023-4-5 17:40
回复 支持 0 反对 1

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4455
在线时间
1917 小时
注册时间
2010-8-16
帖子
848

短篇八RM组季军

3
发表于 2023-4-4 21:01:59 | 只看该作者
第一!非常强悍!世界最强的神中神——加菲猫!!!

点评

这也意味着我开始回归论坛,正在恶补错过的帖子……  发表于 2023-4-4 21:07
Steam页面:
http://store.steampowered.com/app/486850
https://store.steampowered.com/app/865180/
志同道合QQ&E-mail:[email protected]
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
24004
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

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

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

使用道具 举报

Lv4.逐梦者

梦石
5
星屑
3477
在线时间
600 小时
注册时间
2021-6-10
帖子
46
5
发表于 2023-4-5 11:20:39 | 只看该作者
前来祝贺发布

评分

参与人数 1+1 收起 理由
guoxiaomi + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2309
在线时间
123 小时
注册时间
2017-2-26
帖子
36
6
发表于 2023-4-5 16:15:26 | 只看该作者
也许该抓个热血年轻人来写个炫酷demo(?
RM水友群号   917854767  欢迎加入
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2309
在线时间
123 小时
注册时间
2017-2-26
帖子
36
7
发表于 2023-4-5 16:17:11 | 只看该作者
kirh_036 发表于 2023-4-5 16:15
也许该抓个热血年轻人来写个炫酷demo(?

比如RGD的演示里,还原the world特效就很酷,给我印象很深
RM水友群号   917854767  欢迎加入
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
24004
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

8
 楼主| 发表于 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
星屑
24004
在线时间
3339 小时
注册时间
2011-7-8
帖子
3926

开拓者

9
 楼主| 发表于 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.捕梦者

梦石
24
星屑
7532
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

10
发表于 2023-4-6 11:53:37 | 只看该作者
本帖最后由 纯属小虫 于 2023-4-6 12:28 编辑

好丝滑的60FPS

还没有移植老工程,但老工程几乎都是40FPS基础上制作的,


不过想来想去,好像也没有什么办法能让老工程也享受到高性能直接带来的不一样(除非在原作地图尺寸大的地方或者会掉帧的场景里),当然,也许是我的老工程里的一些内容在性能上过于保守了的原因吧!

另外,没接触过runtime的我,再默默问一个比较呆的问题:
老工程的具体移植方式是什么 O.o

点评

我也觉得60FPS丝滑,之前我就玩过,大佬的测试版。不掉帧就是好,但我用了扩展分辨率DLL。直接复制粘贴就不起作用了。  发表于 2023-4-6 22:43
吼滴!  发表于 2023-4-6 13:47
这种不兼容的脚本并不多见,如果遇到了可以发这里让我看看怎么重写QAQ。  发表于 2023-4-6 12:57
移除/重写不兼容的脚本就行,一般都是dll相关或者操作了bitmap。  发表于 2023-4-6 12:52
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 11:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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