Share the way how to make a rts mod

Users who are viewing this thread

i intend to share the way how to transform mountblade warband into a rts game, but i am Chinese so translating my whole article in English need some time later.

gif效果图和demo视频:

QbJmqJ.gif
QbJ8xO.gif
QbJZMF.gif



b站demo视频演示:https://b23.tv/av79156162

总体思路其实很简单,首先用presentation任意画长方形这种基础的不用说了吧?关键在于要认识到以下几点。

1.鼠标拉框选框的方法:
先讲个常识,通过已知斜线作为对角线画出一个底边平行于屏幕底边的长方形有且只有一个。
所以你要画出那个长方形框选框,只需要确定对角线的两个点的坐标。这两个点确定方式是:首先要知道rts那个拉出框选框的运行流程,其实那两个点一个是静态点,一个是动态点。一个是你刚开始点击鼠标左键的时候记录一下鼠标左键的屏幕坐标位置作为第一个静态点,之后你按着鼠标左键的时候,移动鼠标你鼠标记录的位置就是第二个动态点。

2.确定及控制鼠标框选框里的人物方法:
把地图上的人物坐标都用get screen pos转化成屏幕坐标,用is between他们的x、y坐标值是否在那个长方形对角线两点的x、y坐标值区间内(因为对角线上两点xy坐标值就是长方形框最小及最大xy坐标值所在),然后用slot,把选中的人和没选中的人区分开,然后根据slot值作为单位循环条件,控制选中单位的行为(移动、攻击等),给他们添加一些图案(如战团自带光圈)来区分等等。

3,鼠标控制镜头方法:
根据分别判断鼠标xy坐标值距离屏幕快到边缘的xy坐标的最大值和最小值的一定距离时,让控制镜头的那个全局变量(自己设定)加减或实体寄存器(我创的概念,下面再解释)位移就行。

4.单位根据鼠标点地移动的方法:
用mouse_get_world_projection,用第一个坐标参数,这个获得的坐标就是鼠标垂直屏幕位置向内的射影坐标(第二个坐标参数基本用不上,当它废了好了),所以在俯视角在这个op获取的第一个坐标参set z to ground就是鼠标点地后的地面坐标,当然由于rts视角不可能都是90度俯角的设定,加上延迟因素,自行根据自己的设定加减坐标修正量。

主要涉及的关键op及作用(偷懒简写了):
get screen pos(三维坐标转屏幕坐标),mouse get world projection(获取鼠标垂直屏幕位置向内的射影坐标),agent get/set slot(特定人群控制),key clicked/is down(按键触发框选时机和单位移动时机)
主要修改文件presention及mission temple。

视频卡顿说明:视频1卡顿是因为bandicam游戏录制模式与分辨率冲突,抓屏能力下降,视频2采用全屏录制模式帧数基本正常,其实上游戏不会卡的,没多少循环量,只不过我的打开网页还要响应2分钟左右的老电脑运行起来没那些高配电脑表现的帧数高而已,工作忙了没多少时间打游戏,电脑也就一直没换代重买。

题外:实体寄存器思想
以前我看r大用全局变量获xyz坐标值做战场镜头控制时就觉得其实不用这么麻烦。可以用一个空的sceneprop的位置关联引导镜头的位置,通过对sceneprop的运动控制op来达到间接移动镜头的坐标,这样写法会更简便且就不必要知道其xyz坐标值了(其实同理agent也能这样用,利用agent set dynamic=1就可以在三维空间任意设定agent的pos,借助不参战隐身agent的位置关联引导镜头坐标)。

这种以运用实体的某一特性值来达到对其他事物的控制的方法我称之为实体寄存器,其他像Cs:source的hammer和魔兽编辑器也有类似思想,war3的我以前说过,这种思路叫作马甲思想,因为war3经常运用对携带特效的隐形物体的运动控制来更方便的制作复杂动态特效比如无敌斩之类的。

最后:工作较忙,如果以后有空的话我会来给大家分享一些新颖的思路和方法,并且我觉得我做这个并不是一定是要用骑砍做一个不同于骑砍模式的新游戏出来,也不必有些人问"这样折腾骑砍有什么用""偏离本质玩法不再是骑砍不如玩其他游戏"的论调,我觉得万事万物总要尝试并发展,当你可以将一个事物的本质去改变,你也就有能力将符合这个事物本质的某方面更好的扩充完善。所以功能不一定只为mod而做,也可以出于挑战和煅炼自我而尝试一些demo,最后也许你会发现有些做demo时的某些思路最终又可以解决有些mod上的其他方面的类似功能,从而殊途同归。
还有就是对于当前是否有必要继续战团代码的研究与战团mod的开发的看法,讲道理,砍2已经60GB,其实玩骑砍的玩家中有相当一部分人是hold不住这样一个"大游戏"的或可能像我一样懒的下载容量太大的游戏,而且砍2目前看来还是需要"润色"一段时间的。所以战团及其mod在一段时间内还是主流骑砍玩家选择,而且既然很多人认同战团美工做了砍2也能用上,其实代码也是如此,尽管语言表达不同,但思路都是大同小异的,大家可以先练练思路(其实也可以拿V社的hammer和魔兽的jass先练练手如果你以前用过的话,其实他们的编码格式更像砍2的编码写法)
总之,我对骑砍的理念就是,宣扬并让更多人认可什么是万能的骑砍,为什么war3敢立自己是万能编辑器的flag并被大多玩家认可,而轮到mod更繁荣的骑砍,却被很多老玩家和云玩家以引擎限制论和换皮论忽悠新玩家,骑砍玩家特别是moder要有自己的引擎自信。

 
Back
Top Bottom