baalkyo 发表于 2020-3-2 06:29:43

VCMI开发MOD技术探讨

关于VCMI介绍就不多说了,探讨一下技术实现封神封魔 国内比较好玩的mod可能性,和难度系数。
按开发小组的说法,最初设计是打算使用python作为mod的开发语言的,因为工作量巨大而被搁置。封神mod对原版来说改动巨大,英雄的奖励系统,游戏运行机制都有所变动。开发小组最初的建议是使用boost python库封装来实现Python对游戏数据的调用,比如 游戏状态 魔法系统 宝物系统 英雄奖励系统 兵种能力改变,然后再用客户端读取python语言脚本,实现对游戏mod更新。我实验了python 对c++的调用,是没有问题的,最初设想的一半功能实现是可以的,至于客户端调用python脚本,boost官方则是使用python的脚本解释器来实现的,目前还没来的及去测试。
按照官方小组的讨论,python作为VCMI 脚本语言,需要更改几个部分:
1. 客户端,凡是涉及到动画 图片 ,必须有个client 的python库来让客户端调用实现新动画 新图片 新文本文字
2服务端,凡是设计到变更游戏 奖励制度资源类型 装备宝物 城池资源(比如你想设计12级别生物也是可以的),需要让服务端明白 如何保存数据 恢复数据 。
3AI设计 ,    AI设计是针对原版的,如果有新的魔法,奖励系统(比如多职业,转职等),AI是不明白的,也会出现无法执行的bug,AI 也需要增强,需要有单独的AI调用库。
4 库文件,VCMI大部分游戏资源来自库文件,比如 魔法系统,奖励制度 ,装备宝物,地图资源,这些东西修改也需要对应的python库文件。

其实VCMI已经实现的wog 99%的功能,除了几个bug和密银没有实现,对与wog来说,已经可以玩了。
wog增强的几个特性,指挥官 据说有个宝物bug还没有修复,生物经验系统运行是没有问题的。
相对于 现有的era和erm来说,VCMi功能还是弱,不过erm和era的bug是无比蛋疼的,不知道什么时候什么情况会跳出来,再说对于linux 和安卓 苹果 玩家来说,erm和era是玩不了的。
下面讨论一下 小例子 炼金术士的实现
客户端方面1动画 尸体消失 化成金币
                  2傀儡龙攻击动画 死亡动画 重生动画 出现动画
                  3英雄职业的显示和特殊奖励显示
                  4英雄转职动画 ,转职选择对话框。
服务端   1 游戏英雄读取保存 要知道有炼金术这个职业 或许奖励系统需要增加一个新的节点 职业变更。

库文件1 炼金术士 这个职业 如果不增加职业节点 ,就要在英雄特殊奖励节点实现,经过实验json可以重复添加多重奖励。
             2 炼金术这个奖励实现 尸体价值×20% 变换金钱 ,尸体消失,不可复活 召魂。

AI    如果是用策略树实现的,必须有策略树规则接口让python调用更新策略树规则,让Ai明白炼金术士价值。

这个算是抛砖,粗略的想法。
技术实现和测试随后吧。
如果脚本能实现的话,游戏可扩展性就大大提高,想做的三国群英转的MOD不是不可以的,文明系列也可以是添加元素。
本站网友基本都属于资深玩家,对游戏有很深刻的理解,所以能制作好玩的mod;但是 我认为erm和era限制了MOD发展,从系统角度讲
未来几年 windows 将会出现滑坡,大量的平板 笔记本都会使用Linux 安卓 苹果,win10 是windows最后一个版本的系统。

kdmcser 发表于 2020-4-22 12:52:00

关于商业化我想说的是,商业化并不是只要你不拿去卖就不会侵权。而是只要你把产品面向公众发布出来,不管你是否收费。只要用了商业化软件或开发库,没支付相应费用,就构成侵权。严格说来vcmi用了h3素材,育碧可以告它。但育碧不会这么做,因为英雄无敌这个IP已经半死不活了,告了vcmi对育碧没任何好处,只会把这个IP彻底搞死。这个和育碧利益相关,所以育碧对vcmi目前持默许态度。也许哪天英雄无敌这个IP火了,育碧就开始收拾vcmi了,但目前不会。qt公司不一样,和英雄无敌没有任何利益相关,没被发现还好,一被发现就死翘翘了。所以不建议楼主使用商业库,即使完成开发,vcmi社区也大概率不会合。

baalkyo 发表于 2020-3-9 17:08:05

研究转向c++ 类 转变python库文件。
按官方小组说法,想套用boost::python的方式来实现c++ 与python的互操作。
经过实验 c函数exportpython 问题不大,c++类 继承 虚函数 export 出现很多复杂问题。
python官方对c 转Python 有个封装约定 :所有的c函数 pyOjbect化,就是对象化。boost::python 官方例子大多是针对struct 的类转换,比较成功。
因为struct 是实例化的类,转换没有问题。标准c++ 基类 或者带有封装的qtObject 类,就很复杂,报许多错误。
于是, boost::python 看来很不好用,至少现在。
把目光转向了 pyqt ,pyqt是封装了qt库的python包,它能封装就说明Qt的类是可以封装的,我自己封装不好,就是工具没有用对。
经过不断的看qt官方文档,大概弄清楚了qt是怎么封装的,qt是采用pysid 或者shiboken 把c++类 直接封装成cpython文件,然后由
cpython编译成python库,这个python库是调用qt动态库文件的。据qt官方介绍 shiboken可以让开发者封装自己的类成cpython文件,并封装成python库。

好了,到目前,从C++类封装到 python 技术问题 似乎有了眉目。接下来研究如何封装vcmi客户端 成python库文件。

baalkyo 发表于 2020-4-20 22:49:32

我想你搞错方向了,我这篇文章主要讨论 python 作为vcmi语言的可能性,你用的boost封装c++类,我做个测试,简单类 比如自己写的 或者像你说公司开发的类,封装是没有问题的,复杂的继承类,比如继承自qt的基类,由于qt是封装了许多操作系统底层调用的类,boost工具就不够用了。qt官方给出的工具是shiboken,也支持用户开发封装自己的类,问题是商业用途的化需要掏钱,对公司有点不太合适;c++调用python 适合调用游戏机制,不适合直接运行,实际上是c++ 把python描述的游戏机制 导入c++ 中,需要做些接口约定。我目前还只是觉得 先python调用c++ 做些前期工作,至于c++ 调用python 不是直接游戏运行时调用,是游戏引擎初始化时调用,python脚本可能改变了游戏元素和游戏规则,c++ 应该明白这些规则和元素,最终游戏运行撇开python,可以避免你说的锁问题。解释性语言不适合做游戏,但是适合游戏编程探路,前期可以节省时间,vcmi小组并没有完成关于python的讨论,这个是我自己的看法。至于lua 解释器 ,我没有用过,不好做判断。

chaoticorder 发表于 2020-3-2 08:13:29

给高手大神手动点赞,希望有新功能

小纸条 发表于 2020-3-2 08:46:52

本帖最后由 小纸条 于 2020-3-2 08:48 编辑

不明觉厉            
楼主刚刚注册没多久就成为了论坛管理员,难道是云斯的小号

贤知有您 发表于 2020-3-2 09:08:16

觉厉不明,支持楼主继续开发VCMI
{:1_584:}

总上所述 发表于 2020-3-2 10:38:56

是的,现在VCMI就是很缺程序员,导致制作组开发热情都下降了

yunings 发表于 2020-3-2 11:45:30

小纸条 发表于 2020-3-2 08:46
不明觉厉            
楼主刚刚注册没多久就成为了论坛管理员,难道是云斯的小号

并不是我的小号。我们的论坛能在去年遭遇两次地震而挺过来,Baalkyo管理员功不可没,他是技术型人才,不可多得哈。

路人过客 发表于 2020-3-2 12:43:14

不明觉厉,给高手点赞,期望VCMI能够越来越稳定

我是个好人 发表于 2020-3-2 13:15:56

工程量巨大啊。。。。加油~

821348193 发表于 2020-3-2 16:28:53

专业大佬说得简单易懂,可是对我这种小白而言还是难实现。。大佬加油

zsqzsqzsq 发表于 2020-3-2 19:30:09

不明觉厉,顶楼主!!!!!!

hoen2 发表于 2020-3-3 10:55:50

点赞+1 ! 论坛太不容易了

总上所述 发表于 2020-3-9 17:37:49

不错,解决了稳定性问题和AI,会比其他所有MOD都有前景。

kdmcser 发表于 2020-4-20 13:09:25

很多游戏的mod都是用lua实现的,为啥当初开发组选择了Python?

baalkyo 发表于 2020-4-20 17:27:07

同样都是解释语言,python 有更好的扩展性,lua属于小型化的脚本语言,2种都要有游戏对编译器的支持,开发难度一样,python 与c++ 交互开发有现成例子。python 到目前为止,在vcmi还处于讨论阶段,原h3 脚本已经准备放弃,从他们用python 写出了 地图转换器可以看出,可以用python把原来的地图都转换成rmg 文本,erm是个弃用选项。

kdmcser 发表于 2020-4-20 18:59:28

本帖最后由 kdmcser 于 2020-4-20 19:05 编辑

erm也感觉到不太好用。我所在团队目前工作涉及python c++相互这块,Python调c++基本都是写个boost类封装一下原有的c++类,不直接调。c++调Python需要搞个基类,Python类继承这个基类调Python解释器实现。原有的c++代码也继承自这个基类。个人感觉还是蛮复杂的。特别是GIL锁是个大坑,好几次线上性能问题都是因为它。听说搞游戏开发的同学说lua就是为这种嵌入类脚本设计的,而且感觉Python不太安全。想想mod制作者来个os. system... 所以我在想是不是lua比Python更适合一些。

kdmcser 发表于 2020-4-20 19:10:49

这篇文章解释了lua的好处:https://www.zhihu.com/question/21717567

kdmcser 发表于 2020-4-20 23:42:59

如果只是做一些初始化规则,python确实可以胜任。但比如说如果有人想重写AI算法之类的,python肯定搞不定。我见过boost python和c++ 互相调用这块见过不少坑,始终对这种方案心存敬畏。而且python做游戏开发脚本的历史也不长,用的游戏不够多,方案还不成熟。如果你在探索的时候发现实在走不下去,可以试试业内成熟的lua方案。最后祝楼主探索成功。另外提醒一下楼主不要使用商业化的方案开发vmci,会有法律风险。

baalkyo 发表于 2020-4-20 23:55:12

其实 我倒是希望有更多人参与vcmi,至于商业化,没有那个概念,vcmi本来就是游戏引擎,除非用这个引擎去掉h3 的素材,重新创造一个素材,太复杂,也不是几个人能搞定的事情,关于重写AI,这是复活VCMI的办法,没有AI,VCMI就是死东西,没有任何吸引玩家的地方,官方也在不断改进AI。python 可以做些实验性的工作,原理性探路,最后成型的还是C++,毕竟游戏c++是最快的。一个老游戏了,能有玩家玩就是个福分,不能指望太多。官方开发了这么多年才0.99版,玩家都等凉了。
页: [1] 2 3
查看完整版本: VCMI开发MOD技术探讨

捐赠