kenshi吧 关注:95,806贴子:1,331,251
  • 61回复贴,共1

【机制分析】关于世界状态判定那些事

只看楼主收藏回复


1楼匹夫之怒,原以为能大战一场,结果你家比石魔家差远了


1楼2019-10-20 18:31回复
    首先咱们先来回忆一个经常出现的场景:
    某玩家某周目选择舔沙克王国,中期带着小分队浩浩汤汤灭了两位高级审判官与圣主,看着沙克的领土扩张至奥兰克之盾,心里美滋滋。到了后期天下太平,联合翻车,卡特龙授首之际,又忽然心血来潮想要视察王国边境,但是此时却惊奇的发现:
    奥 兰 克 之 盾 变 成 了 废 墟。
    说好的开疆拓土呢?那么到底为什么会出现这种情况。
    这帖子主要讨论的就是这个,这一切的动机是来源于LZ昨天帮联合消灭了所有对手后发现有几条wiki上的领土扩张没有实现。


    2楼2019-10-20 18:35
    回复
      在这个例子中,我们首先要弄清楚,奥兰克之盾各个状态达成需要的条件是什么。于是我们需要打开FCS一探究竟

      如图红色部分为奥盾废墟化达成的条件,两个必须同时达成:1.高阶审判官瓦尔特纳死亡 (alive=0表示not alive,二进制常识) 2.天狗死亡。

      第二张图中的红色部分,则是沙克占领奥兰克之盾所需要达成的条件:1.石魔存活 2.玩家与沙克王国结盟 3.瓦尔纳特死亡。
      仔细观察两个世界状态达成的条件,你是否发现了什么?
      没错,两个事件的达成条件并不是互斥的,也就是说,两个事件的条件可以同时达成:作为玩家,当然可以先舔沙克结盟,然后杀了瓦尔纳特,接着挥师东进拿下天狗的狗头。
      所以这就存在了一个问题:在同时满足两个事件的情况下,游戏是怎么判定执行哪个事件的?


      3楼2019-10-20 18:46
      收起回复
        这就取决于游戏后台的代码是怎么写的,LZ并没有对游戏代码进行逆向分析,但是大致猜测可能有两种:
        1. 当一个可能影响世界状态的事件(例如瓦尔特纳死亡)达成时,游戏对被影响地区(例如奥兰克之盾)的各个状态进行条件匹配,最后选取优先度(一个可能存在的后台数值)最高的状态载入当前事件。
        这个是最直接想到的,但是LZ现在基本脑洞排除了,主要有以下两个原因:
        首先,通过FCS,LZ没有找到类似状态优先度的数值。
        其次,如果这个想法成立,那么也就是说,当【天狗死亡】被触发时,游戏检测了奥克兰之盾的各个状态,然后选择了【废墟化】载入。那么就说明【废墟化】的优先度就高于【沙克占领奥盾】,这显然时有违常理的。
        那么第二种猜测时什么呢?
        2.当一个可能影响世界状态的事件(例如瓦尔特纳死亡)达成时,游戏对被影响地区(例如奥兰克之盾)的各个状态进行条件匹配,如果发现有新的状态达成(例如废墟化),那么立即载入。
        第二个设计的逻辑可以说时蠢的漫无边际,但是鉴于游戏本身就已经存在了很多BUG,而作者也是有心杀贼,无力回天,所以LZ认为第二种的可能反而时最大的。因为像这种独立游戏还是一个人开发,时间长了制作人就容易产生倦怠,那么在写代码的时候一念之差想要偷个懒写个最简单的实现,完全是有可能的。毕竟同一地点的不同状态达成事件本身不互斥就已经时偷懒了不是么。
        如若确实如此,那么这解释了为什么奥克兰之盾后期会废墟化:
        玩家们一般都会先杀瓦尔特纳,这时游戏判定【沙克占领奥盾】达成,于是奥盾变为沙克领土。后期玩家们雄心勃勃拿下天狗,触发【天狗死亡】,这时游戏查看未达成的状态,发现【奥盾废墟化】新达成,于是将奥盾夷为废墟。
        所以说存在的可能性就是:虽然可能不是作者的本意,但是玩家行动的顺序(先杀谁后杀谁),是完全可能导致世界在达成相同的条件下进入不同的状态。


        4楼2019-10-20 18:59
        回复
          总结:
          那么如何规避这个问题呢?最直接的方法,当然是打开FCS,令不同的状态互斥。
          例如,在【奥盾废墟化】的达成条件里加上【玩家未与联合,圣国,沙克结盟】。
          这样其与【沙克占领奥盾】便不可能同时实现,同时这个条件本身也没有违反什么常理或者降低难度,反而算是消除了BUG,LZ觉得是完全合理的。不知有没有人有兴趣做这么一个MOD。
          本文其实也是为LZ日后的帖子做个铺垫:LZ于昨天终于完成了自己的联合舔狗之旅,打算回头写个无暗杀舔联合的攻略帖。毕竟联合照理说是领土可以得到最大扩张的势力。但是正是由于本帖中所说到的原因,LZ并没有达到100%的实现。这帖也是放在这里,日后如果开坑了可以作为参考引用之需。也是希望那些有心探索kenshi不同流程玩法的玩家们引以为戒。
          (全文完)


          5楼2019-10-20 19:04
          收起回复
            @梅鲁·伊萨卡
            有个反例可以否则优先度说:比如【水泡山废墟化】和【浪忍团占领水泡山】,这两个事件不互斥
            (废墟化达成条件只需要【圣主死亡】)。
            【水泡山废墟化】写作Blister Hill (Override) Destoried, 编号1532974
            【浪忍团占领水泡山】写作Blister Hill (Override) Prosperous, 编号1532975
            无论是字母排名还是编号,都是废墟化优先,如果优先度说成立的话,那么浪忍团化则不可能实现。所以LZ觉得优先度说应该是不太可能的。


            6楼2019-10-20 19:14
            收起回复
              世界状态并不是完全由wroldstate决定的,可以看看override那一栏,那是当前状态可以进一步演化的状态。所以你不仅要关注条件,还要关注路线


              IP属地:北京来自Android客户端7楼2019-10-20 19:43
              收起回复
                顶一下。关注这个话题,想让圣国被南北瓜分


                IP属地:北京来自Android客户端8楼2019-10-20 19:51
                收起回复
                  像你的第一张图,没有override这一项,所以是最终状态,不会再变化了。第二张图红框上第二栏就是,说明还可以进一步改变成那个状态。你可以看看初始城市状态,这一栏的项目一般比较多


                  IP属地:北京来自Android客户端9楼2019-10-20 19:51
                  收起回复
                    可不可以新建几个override 把奥盾废墟化的情况进一步分类 分别是联合城 沙克和掠夺者的奥盾废墟化 然后其中的world state分别是天狗 石魔和瓦拉姆死亡


                    IP属地:福建来自Android客户端10楼2019-10-20 21:13
                    收起回复