铁血丹心

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

[心得分享] 海洋2010单机版战斗显示混乱问题

[复制链接]
发表于 2012-11-8 10:27 | 显示全部楼层 |阅读模式

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

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

x
首先要感谢hxsd无私的发布海洋2010的无错单机版,由于是开站备份,所以错误很少。
我也是一连好多天都乐在其中。
只是发现,游戏的战斗显示似乎有点问题,比较混乱。
以乾坤大挪移为例,经常出现自己使用大挪移之后,敌人的进攻才发出。或者敌人都已经把我打吐血了,自己的大挪移特效才出来,并且显示已经挡住了一半的力道伤害。
这似乎是战斗系统的问题,于是我打开了combatd.c文件,看了一下里面的战斗精灵。发现,combatd是以以下顺序进行招式判断及结果输出的。
首先 先是进攻方的进攻描述 文字以result的形式保存,这个时候result获得第一个值
然后 if (躲闪判断)
         成功则把文字保存到result中,并且结束下面得所有判断。
         失败则
          if (招架判断)
         成功同躲闪一样,把文字保存到 result中,结束下面所有判断。
         失败则
             认为进攻有效,开始伤害判断。
             伤害判断以逐个得方式由进攻方的特殊伤害效果hit_ob()函数开始
             然后是防守方的内功ob_hit()躲闪ob_hit()招架ob_hit()
             最后是装备的ob_hit()判断。每次判断都把文字放入result中并且以result+=的形式对 result进行更形。而伤害数值的修正则是存在damage_bonus中。
             当判断全部结束后,把修正过的damage结果输出。并把所有的相关文字输出。
这样一次进攻判断就结束了。
看似没有任何问题,但是当我检查各个武功文件的时候,发现很多的武功的ob_hit函数是mix函数,也就是返回值可以为数字或者文字。
但是绝大部分武功都是只返回数字,而文字则是已经直接被输出了。
这样就导致,在上述判定顺序中,foo只获得了damage的结果修正。而由于所有的判断是在一个if()语句中完成,按照编译器的执行顺序来讲,就是要把所有的if执行完之后,才能显示ob_hit的文字描述。
这就是为什么武功有时候会显示的乱七八糟的原因了。
对于这种现象,可以做以下修正。
对与combatd中的判断,由进攻方的attack开始,就直接把结果以message_vision()的形式输出,只保留damage的数值,用于最后的计算。
例如: attack()
            message_vision(attack)
         if (dodge)
            message_vision(dodge)
         else     
             if (parry)
               message_vision(parry)
             else
                  if (force_hit_ob)
                       message_vision(force_hit_ob)
                      if (dodge_ob_hit)
                           //这里注意,由于ob_hit可能返回数值 要以要用if判断
                           if (string(foo))
                            message_vision(dodge_ob_hit)
                           else if (into(foo))
                           damage_bonus+=foo
                           ....
                           ....
                           ....
                          最后,在parry的else结束之前,进行伤害判断,并把damage以message_combat的形式输出。
                     parry else 结束
              dodge else 结束
这样,武功的一招一式都可以直接在判断之后就清算,只保留damage用于最后的伤害计算。这种方式就可以修正战斗时显示混乱的问题了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2012-11-8 10:49 | 显示全部楼层
另外,像是辟邪剑法之类的刺目效果并没有正常生效,这应该是message_vision()里面的问题。我不想开站,只是自娱自乐,所以不需要严谨的控制刺目效果,只需要在每招每式的message_vision()的时候进行一次刺目判断就好,如果是刺目状态,就不执行message_vision()语句,但是伤害计算照常执行。同时对于进攻的ap取值,躲闪的dp取值,以及招架的pp取值进行判断修正。这样就能体现一个瞎子的无助了~
最后还有就是yield打不还手命令似乎无效。这是由于在attack执行的时候,没有进行yield变量的判定。只需要加入一个if 判断是否是yield状态,然后在开始attack的话,就能实现yield判断。
还有就是斗转星移似乎也是有点问题,主要在于斗转星移的那个以彼之道还施彼身的特效。这里要对foo 和 me进行一下处理。hxsd的原文件有处理,但是好像效果也是有点问题。以后看看如何处理吧
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-5-4 02:21

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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