我是作者当中的SSgt_Edward。虽然已经不碰骑砍快两年了,魔球也很早就不再开发,但是回答一下这个问题,也算是对一段时光的总结。毕竟曾经为魔球献出了很多精力和时间。
很多人可能知道,我和作者中的Ser_Charles是双胞胎。初中就曾接触过骑砍原版,但因为接受不了那个画面而放弃......高三那年(2010年),正好是战团发布,在电驴上偶然看到便立刻下载下来玩,之后便一发不可收拾.......骑砍独特的格斗、马战系统,一下就把我们这两个之前基本只喜欢枪枪枪的玩家拖下了水。
高考完的那个暑假,我开始跟我哥(Ser_Charles)一起上贴吧。我到的第一个吧就是骑马与砍杀吧,很快就和贴吧里面当时的活跃人物打成一片。
至于开发魔球的动机,一张图就可以说明:
图1. 魔球的起源(2010-11-21)
时间(2010年10月)、地点(骑马与砍杀吧)、人物(我不是个过客、SSgt_Edward)就全齐了。高中就开始编程的我当时很喜欢做点小程序,图中的FileSnap就是当时做了用于对比Mod之间区别的一个小程序(说到底就是文件快照,类似于GitHub的对比功能)。当时大家对这个东西不是很感兴趣,但是可能是出于可怜我,过客就来推荐我尝试移植原版的编辑器(
【1.11.0.16】 部队&兵种&物品 编辑器 支持骑砍1.011版 多语言支持,俗称美腿修改器)到战团上。
当时原版的编辑器是用Visual Basic 6 (vb6)写的,而vb6也正是我们最早接触的语言,所以很快就上手开始移植。比较难的部分是理解每个机器码的涵义。一上来就是看看美腿源代码,但战团的机器码新添了很多未知项。开始就是连蒙带猜,改一下数值,进骑砍看看变化。后来觉得这样效率太低了,突然想起不如看Module System (MS) Python文件里的注释来了解含义。果然基本MS里每一项数值Python文件里面都有介绍(虽然不是以机器码的形式),再结合MS的编译文件(process_*.py)来对照解析。解析完了,我们再想用方便的形式(控件)来表现给玩家修改。(想了解如何解析的玩家很推荐阅读这篇文章:
Item_kinds1.txt文件解析)
于是,边解析边设计程序大概耗费了我们2个月时间。那时候我们刚上大一,课程比较紧张,南京的高校那时候晚上还实行断电(11点左右吧),我们每天基本就是白天上课,晚自习回来断电后搞一两个小时。那时候动机非常强烈,从来不感觉累,好的点子也是一个接一个的来。很快,12月份的时候,第一版魔球就发布了!
图2. 发布魔球(2010-12-26)
说到魔球这个名字,其实魔球里应该是看不到“魔球”这个字眼的。因为最早我们定的名称就是《战团剧本编辑器》。后来过客觉得应该也要和美腿一样有个通俗的叫法,然后加上我当时随便给编辑器弄了个图标(图3),过客就给起了“魔球”这个名字。
图3. 魔球的图标
魔球在中文站发布的第一天下载量就是3000多,这个和过客是分不开的。当时过客是骑砍中文站(
骑马与砍杀|骑砍中文站)模型区的版主,我们一做出来,他就联系中文站给帖子加高亮,还挂了七天的置顶。现在(也就是今天:D),光中文站魔球下载量就是85w啦(图4)。
图4. 魔球目前下载量(2015-09-01)
第一版魔球对触发器是没有支持的(这里指广义触发器,不仅仅是simple_triggers.py或者triggers.py里的内容,包括物品的触发器),尽管我们也读取相关数据(甚至也解析),但没有提供用户接口来修改他们。我们当然不会放过这个骑砍修改最核心的部分,于是后面的更新主力就是在开发对触发器修改的支持。由于触发器类似于一个小语言(用数字表示的语言),所以如何把内容转换成人可读的(实际上就是反编译MS),并设计用户可以修改的界面(类似于IDE,图5)就是主要问题。也就是在这时候,我们其实已经后悔用vb6来写魔球了。原因有二:
1. 触发器里有大量的长整型(long,64位),而vb6所谓的长整型只有32位。这意味着我们需要自定义数据类型,而自定义数据类型意味着很多基层的操作(包括加减乘除)都要重写。vb6属于高级语言,对基层重写的支持非常差,使得我们自己的64位long运算效率很低。
2. 用于修改触发器的IDE无法直接使用现有控件,需要对现有控件重写。那时候vb6并没有直接对重写控件有支持,而是用Active X来实现。这个技术在当时算是很新颖的,但是兼容性做的并不好,这也是为什么后来的魔球还要装个额外的“运行环境”,其实就是往系统里装一些组件来确保魔球的运行。
图5. 魔球触发器编辑器界面(类似IDE)
一直到大二,魔球基本算是成型了,vb6在那时候也早已落伍,我们在做其他开发的时候也已完全转成C#或者Java,魔球的更新就这样慢了下来。在2013年6月份解决了最后一个问题之后,就完全停止了更新。值得一提的是,我们曾想采用.net构架,重新编写魔球,甚至基本已经完成,就差对触发器支持了,但因为需要准备GRE出国,所以最后并没有发布(试用版:
MOJO.rar_免费高速下载),很是遗憾!
虽然魔球代码部分主要是我和Ser_Charles完成,但不少人也都为魔球做出过贡献。我不是个过客、鹿过(中文站ID:心中飞翔)、Last_Promise、威尔士游侠,等等。现在离开骑砍社区已经快两年了吧,回想起来却仍然有些心潮澎湃。另外想吹嘘一下,当年我和Ser_Charles联机也算是令人闻风丧胆的标枪步呢!:D
图6. Z队(当时)的Totti前来投降(大雾,其实当晚我们被他大锤子虐了)。原帖地址:
党队的标枪好准啊最后,我还是想说一下骑砍的MS。虽然python是一个脚本语言,然而骑砍的MS却并没有把python当做脚本语言在用。之所以这么说,是因为骑砍在运行的时候,实际上读取的是txt里的代码而不是py脚本。而骑砍2准备使用C#,有两种可能:一是跟战团一样,C#只是一个编译工具,而实际读取的还是txt码;二是真正在使用C# script (
CS-Script)。后者(动态语言)是目前的趋势,省时省力,而且扩展性比txt码更强,唯一缺点就是需要编程基础。