铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 3013|回复: 18

《金庸水浒传》制作启示录

[复制链接]
发表于 2014-1-2 15:28 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
本帖最后由 weyl 于 2014-1-2 15:35 编辑

《金庸水浒传》制作启示录

2014年1月1日,新版场景编辑器由ka制作完成。同时在两天之前,《金庸水浒传》的游戏版本已经发布至3.2.5。
作为3.2版的总指挥,本人宣布,《金庸水浒传》的研发部分至此全部完成。

本人加入水浒传制作组,是在策划开始的半年(也可能是一年)左右,因此我只能就我的印象,回顾一下制作中出现的一些事情。中间或有遗漏,望知情者加以补充。


一、        DOS下的试玩版

《金庸水浒传》由何时开始制作?目前已经不太容易考证这个问题。部分资料可以显示,游戏最早的一份文档,即最初的108星位表在2007年6月由小小猪编写完成。这就是说,《金庸水浒传》的策划至少早于这个时间。按照论坛修订的发展史的记录,这时《菠萝三国》发布不久,《笑梦游记》还有半年时间。那么在《金庸水浒传》最初的构思中,它会是个什么样子呢?
《金庸水浒传》的剧情框架几乎从未变过,没错,就是如今你看到的这个样子。

但是整个系统却有了天翻地覆的变化。实际上,即使是后来发布的DOS试玩版,也与最初的构思有很大的不同。

在游戏的制作过程中,我和游客设计了部分指令来扩展DOS版的战斗,而在最初的计划中,《金庸水浒传》并没有考虑加入战斗指令。但是随着制作时间越来越长,复刻的平台已经发布,MOD的制作技术几乎日新月异地发展,同时,书剑飘零和天书奇侠均无限期停更。大概是为了承载更多内容,《金庸水浒传》开始了特技的设计。这时的特技是在DOS下面设计的,有相当多的限制,例如状态类特技每人只能同时保持一个,所有人的特技都放在第一位,这也是设计时的简化手段,而这个限制直到3.2版才最终被撤销。

即使是DOS的试玩版,制作依然是十分艰辛的。剧本的制作手段与之前并没有什么区别,仍然是繁琐且扩展性不太好的制作方式。实际上直到2010年KGEDIT发布之后,才有较好的手段。
2009年初lua版首先采用了脚本制作事件,同时pascal版本也支持脚本制作。因为lua版对扩展指令集放弃了支持,后来ka和jy027等人采用了一个折中方法来处理。而作为DOS时代就开始设计的MOD的代表,《金庸水浒传》真正的事件完全脚本化是在3.2.2才完成的。

在DOS版的制作过程中,一部分制作用的工具被开发了出来,这其中包括我制作的合并贴图、设置偏移,以及KG制作的z.dat深入功能的修改等。当时fishedit的限制和一些bug,例如增加贴图的功能不正常,修改器本身相当不稳定等,成为了制作的瓶颈,而这些工具都是为解决这些问题制作的。

《金庸水浒传》的人物头像和物品图尺寸是比原DOS版稍大的,所以为了适应这些图片,物品栏是调整过的。

即使几乎集中了论坛上的技术人员,在2009年5月的时候仍旧出现了无法解决的问题,为此我提议将开发迁移至新平台。因此数日之后,DOS试玩版被发布出来,这就是《金庸水浒传》的第一个版本。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-1-2 17:24 | 显示全部楼层
bt大大辛苦了。。。。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-1-2 19:20 | 显示全部楼层
W大幸苦了,向所有制作者致敬,并希望后面是否可以发出修改器。

点评

压缩是为了减少体积和交流存档方便,否则经常有人传bug存档传不全。把0.bt解开到save,ini里面zip_save改0就是不压缩存档模式。  发表于 2014-1-14 13:39
建议W大取消游戏保存在SAVE里的R文件是压缩的。  发表于 2014-1-3 22:28
解压出来,还是改不起来,武功,还有商品那几个都是乱码。 还有就是必须要把演示版SAVE里的6个文件复制到水浒的SAVE里,修改器才能正常打开。  发表于 2014-1-3 22:27
就是那个。区别是水浒的存档是压缩的,解压出来就可以改了。  发表于 2014-1-2 22:01
没有找到啊,基本我每天都会上论坛的,没有发现有发布过。之前在你发布的演示版里有,可是演示版里的是改原版的啊。  发表于 2014-1-2 21:27
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-1-2 20:45 | 显示全部楼层
我加入金庸水浒传似乎比weyl稍微早一点。
07年8月我加入论坛,大约1年后小猪问我是否愿意加入猪3制作组。当时我的任务是制作场景图。偶尔写一两个事件。
在发布了DOS试玩版后我因为个人原因没做什么实质性工作。
09年10月,发布了国庆精华版。与此同时我也在前传制作组里做场景图、设置战斗。
10年前传发布,我因为要高考所以没什么关注论坛了。
直到12年我才回到论坛,但这时金庸水浒传还在制作。
13年10月我再次回到猪3制作组,这时猪3已基本完善,我则负责制作些支线剧情以及修零碎的BUG。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-1-2 21:00 | 显示全部楼层
金水初期似乎就贡献了一个烧鸡火炉和石破天刀法攻,貌似没啥了。
正式加入工作组比较迟一点,不过似乎自我加入,金水开始就走了另一方向了。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-1-3 14:48 | 显示全部楼层
二、        新平台上的发布

2009年10月,游戏的第一个完整版本发布,即国庆精华版。不久之后,我有很长一段时间没有深入到此游戏的制作中。

游戏最初发布时是加密的,但是加密的方法并不复杂,仅仅是交换了两段数据的位置,使修改器不能正常读取,但是在内存中仍然是明码的。不久之后就有了对应的修改器,同时游戏也一度改了几种加密方法。游戏加密的移除是在2.0版本,在更换编译器之后,3.0版本最终删除了最后一段加密代码。也就是说,如今的游戏是没有任何加密的,修改出现问题只是数据的格式并未公开,或者说没有被完全破解。

游戏的特技部分是用内嵌的lua来实现的,但是在一些特技的处理上出现了问题。2.0版本将这些脚本删除了,特技的实现改为硬编码,实际上2.0版本直到3.2.2版,尽管游戏始终保留了内嵌脚本的部分,并且内嵌脚本也并未停止过更新,从lua 5.1升级到了lua 5.2,但是一直没有使用。

2.x版本的发布过程中,之前关于SDL_Mixer库的不稳定问题在少数玩家的电脑上彻底爆发了。为此,游戏更换了音频库,改为闭源的Bass。相比SDL_Mixer,这是一个商业化需付费的音频核心,而在现阶段暂时不会考虑这个问题,即使有必要考虑也不会再使用SDL_Mixer。因为游戏的稳定性应该置于第一位。
同时,游戏开始增加对画面拉伸的支持,包含了使用SDL_gfx的软件方式以及OpenGL的硬件方式,这可以算是2.0版本在核心部分的最大更新。从3.2.2开始,在Windows下面增加了DirectX方式。

从2.0开始,游戏在剧情上就没有了较大的更新。这与目前剧本人员匮乏,以及当时剧本编写较为繁琐有关。

在游戏的早期复刻时,有几个问题是一直没有妥善解决的。例如在场景内事件的动态效果,在同时含有多个效果的时候,当时使用的画法会拖慢游戏的速度,另外游戏在恒山派一类的场景中,绘图的速度也会大大降低,在前传中这个现象比较明显。这些在2.1中,采用遮挡值和多线程结合得到了解决。

特别地,从这时我开始对原版进行一些修正,增加了飘云和水面闪烁的效果,为了完美实现这个效果,在绘制头像时必须使用原始调色板,这样游戏内部就同时需要3个调色板。

2.12是2.x系列的最后一个版本,之后游戏转入了3.0。这个版本在游戏的内部有了非常大的改变。

在3.x系列中,开始改用开源的编译器,同时将全部的贴图改用真彩图片。在经过一些优化之后,游戏绘图的速度大大提升。3.0提出了贴图的开发模式,在这个模式下读取的是文件夹中的单独文件,简化了替换贴图的制作。这个要素可以在已经公开的演示版中看到。
之后,在游戏的文件夹,和制作部分加入了游戏使用的库文件的版权信息和名称。因为游戏本身的版权仍然存在问题,只能是有多少就做多少。

3.x同时对资源的扩展性进行了整理。例如将人物的战斗帧数移到存档之外,将效果贴图和物品贴图分离等(3.2完成),将战场上人物的静止贴图从战场贴图中移除等。

3.2是对3.0的一次清理,主要是内部的标准化,为特技制作AI,让NPC与玩家真正对等。并清理一些不合理的和重复的代码,使扩展变得容易。3.2.2开始改用SDL2,将绘图的效率再次提高了。3.2.2画内场景与之前是不同的,之前一直是使用一个映像,在使用纹理加速之后,绘图的效率可以达到实时绘图而无明显延迟了,因此也不再需要遮挡值了。
3.2.2还将所有剧情改为了使用lua脚本。从这两个更新的意义上来说,3.2.1到3.2.2的更新程度与3.0到3.2是差不多的。

3.2将游戏编码改为了unicode和UTF8,规定在二进制文件中使用前者而在文本文件以及源代码中使用后者,并且规定游戏的标准语言为繁体中文。使用这两种编码可以避免在不同语种的系统中出现问题。

3.2开始放弃了战斗场景的贴图。并将战斗贴图合并入场景贴图,这导致了在少数战场中的贴图出现了错误。

3.2再次注重了脚本的设计,增加了数条指令,并为战场控制进行了一番设计。

最后,对其他外设加入了支持。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-1-4 14:56 | 显示全部楼层
三、一些未加入或者放弃的设想

游戏在开始设计的阶段战斗是利用场景地图的,这个设计最终被放弃。

2.1开始,游戏包含了半即时的方式,但是没有对打退进度条作任何设计,所以只是玩个新鲜而已。

前传的绘图可以包含雪景,扭曲等特殊效果,水浒并不包含这些效果。


四、编译器和语言

我的观点是语言无高下,编译器有高低。
C编译器的发展是很强的,无论是微软还是gcc,编译出的代码效率都要好于水浒目前使用的fpc。

因此,如果游戏使用c编写的话,速度上必定比目前使用的pascal要快。并且因为这个语言并非是最老的那种pascal,而是包含对象功能的,甚至会更慢些。速度上的优化主要会体现在大量计算的地方,比如排序、AI等。

从游戏本身来看,实际上是调用dll为主。因为游戏本身很简单,30fps就可以达到很流畅的效果。这样游戏运行的时间主要是耗费在延时上,所以编译器能够做到的优化比较有限,更多的优化应该注重在算法上。金庸水浒传的SDL1.2版本在大地图上的帧数可以达到场景中的数倍,而SDL2.0版本则相反。在目前电脑的配置下超过60fps应该是不成问题的。

做一个c语言的版本应该还是有些意义的。我自己最近在空闲时做了一点,只写了画图和画字体的基本部分,因为精力和水平都有限(没有考虑用C++,而是纯c),所以估计没有做完的可能。如果哪位有兴趣可以接手。


时至今日,《金庸水浒传》的热度早就过去了。希望这个游戏的开发历程可以让后来的人少走一些弯路。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-1-4 20:35 | 显示全部楼层
太可惜了...
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-1-6 00:11 | 显示全部楼层
製作筆記可高亮
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-1-7 02:21 | 显示全部楼层
本帖最后由 weyl 于 2014-1-7 02:38 编辑

内场景画法沿革

原版:
原版应该是先解开贴图为调色板的索引,之后再依据调色板写显存。
速度一般,只能用256色。

早期pascal复刻:
画映像到一个数组,需要时载入这个数组的映像,同时还要依据动画效果更新这个数组。
画主角时,需要同时考虑主角附近的东西对主角的影响,即主角附近的一片区域也要考虑。

前传:
映像和动画的方法与原版类似。但是画图顺序是完全相反的,先画建筑,再画地面,利用了一个蒙版标记画过的点,这样已经画过的点可以不再重复。
前传的画图速度比早期复刻是强一些的。并且某引擎也使用了类似方法。
缺点是因为是倒序所以透明的情况不好处理,但应该也有办法。与前面方法本质的区别是将写像素信息改成了读取蒙版信息,实际上提速是较有限的。

lua版:
预先画好表面,再按顺序贴表面上去。这应该是最正确的画法,但是水面闪烁比较难弄。
速度并不算特别高,如果使用脏矩形提速可以达到很高的水平。

新复刻,金水2.1:
用一个大的表面保存场景,利用遮挡值画主角。在另一线程中刷新表面。
速度会非常快而且很稳定,因为将耗时的部分放在了线程中,缺点是占用空间较大。因为线程的关系,表面和遮挡均需要两份。遮挡值的计算和处理较繁琐。
遮挡值是和蒙版类似的东西,只是信息多了一些。pascal版本对grp贴图的处理一直是实时解码,这样同时也可以知道遮挡信息。

金庸水浒传3.0:
全部载入为表面,对闪烁采用多帧图处理,仍然利用线程和遮挡值画主角。
应该是软件画图上理论最快了。缺点跟上面的差不多,还需要预先将贴图的格式全转换出来,遮挡值需要遍历贴图。新复刻有类似的功能但是默认是关闭的。

金庸水浒传3.2.2:
全部载入为纹理,预先生成地面大纹理,只重画建筑和有地面有变化的部分。
因为使用纹理,所以速度远远快于表面,用算法和线程的意义不大了。预先拼合好地面可以大大降低需处理的纹理数。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-8-23 01:57 | 显示全部楼层
本帖最后由 weyl 于 2014-8-23 02:19 编辑

3.3与之前的区别在于增加了列传,更换了部分界面图片。
其中3.3.1.0开始尝试对移动平台进行支持。移植过程比较顺利,这得益于编译器和底层的两个重大变动,可以说这些变动尽管耗了一番力气,却是非常成功的。此外,游戏的主创者的技术也相对成熟了很多。
采用了事件映射的办法,将部分点击改为对应键盘响应。
由于游戏本身并未有节约资源的优化,所以能够很流畅地运行其实是比较意外的。但是在一些机型上仍有资源耗尽的现象,由于游戏的设计缺陷,很多问题是难以解决的。
实际上金庸水浒传的技术沿革几乎代表了mod的技术沿革,所以还是值得一提的。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-4-30 17:54

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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