文明时代2吧 关注:54,475贴子:1,323,959
  • 14回复贴,共1

【新系统】+【探索】论新系统的战场宽度

只看楼主收藏回复

今天我来说一说新系统的“战场宽度”吧


IP属地:浙江1楼2021-01-31 16:35回复
    根据作者自述:

    好的,现在我们知道了有所谓的“战场宽度”一说,也的确在游戏中感受到了它的存在:例如说我1万大军被3000军队击退,4000军队硬抗我3方共7万大军的攻击...
    咳,回归正题。但是作者并没有明说出这战场宽度的计算方法,因此,我曾经用2个小时疯狂探究攻击军队与防御军队之间的数量对战斗的影响,结果我每当发现一个规律正想要公布时,就会被我接下来的实验打脸。
    例如说,我发现2000军队(1方,攻防加成大致一样,忽视骰子加成)正好可以干掉对方1000军队,但是小于2000就不行的时候,我以为我发现了真理!然后去实验,发现5000军队干不掉2000军队。然后我认为战场宽度应该在2000——3000的时候(因为正常人都会凑个整),我后来的实验又纷纷打我脸。
    (原来我才是最傻的)


    IP属地:浙江2楼2021-01-31 16:36
    回复
      所以我直接来翻代码了


      IP属地:浙江3楼2021-01-31 16:37
      回复
        搜索Game_Action,无视大小写

        打开第1个


        IP属地:浙江4楼2021-01-31 16:38
        回复
          这里有一个turnMoves_MoveCurrentArmy,意思大致是“移动回合_移动当前的军队”

          往下可以翻到一个turnMoves_MoveCurrentArmy_AttackResult,意思大致是“移动回合_移动选定的单位_攻击结果”,我可以告诉你它的返回值是1或0,也就是“攻击成功”与“攻击失败”
          它需要传4个参数,第1个我懒得找什么意思了,大致是攻击从什么地方开始的省份
          第2个是攻击的省份,也就是防守方的省份,
          第3个是防守方的有效军队(也就是防守方的军队与战场宽度中选一个最小的)
          第4个是战场宽度
          这个函数我不会继续讲,现在我们说的是战场宽度
          你可以看见它被塞进了v4这个寄存器(或是理解为放数据的格子)里
          而v4的数据又是从v45这个格子塞进来的,因此我们顺着v45往上找


          IP属地:浙江5楼2021-01-31 16:38
          收起回复
            这里有一个getWarFieldWidth,意思大致是“获取战场宽度”
            你可以看见它的值被塞进v0里,
            又从v0里复制进了v45里,
            那么我们看看这个函数
            它的参数是v2,
            v2获取的数据从MoveUnits_TurnData里来,意思大致是“移动单位_回合数据”


            IP属地:浙江6楼2021-01-31 16:39
            回复
              进去这个函数
              有一个getMoveUnitsFromProvinceSize函数
              我先告诉你这个函数返回的应该是攻击方的攻击的“方位”,就是攻击方的军队从几个省份对一个省份发起攻击
              然后这个返回值塞进了v2里面去 266~268行
              v0与v1分别获取了1与0 270~272行
              274是一个条件跳转语句,如果v2中的值(攻击方方位数量)比v0(1)小或等于,也就是如果攻击方只往一方进行攻击,那么跳转到cond_e,也就是282行
              看看跳过了哪些内容276~280行
              将v2中的数据减1276行
              将v0中的数据变为十六进制下的190,就是十进制的400 278行
              将v0与v2的数据相乘:(攻击方方位数量-1)*400 280行


              IP属地:浙江7楼2021-01-31 16:40
              回复
                在283~287行中,
                v0的值被变为了十六进制下的7d0283行
                v0+v1的数据塞进了v0285行
                V0的数据塞进了v1287行
                总结以上步骤,就是v1获得了2000+(攻击方方位数量-1)*400
                然后289~315行一大串的东西就是为了获得省份的地形移动加成,然后将这个值塞进v2
                v1获得了 1+地形移动加成217~319行
                v0获得了 v0/v1,并变成整数321~325行
                那么,这时的v0的值就是战场宽度了



                IP属地:浙江8楼2021-01-31 16:41
                回复
                  后言:
                  移动加成就是这东西(沙漠直接+100%)

                  我发现攻击方与防御方是共享一个战场宽度的,也就是说,可能出现这样的事情:
                  在极端理想情况下:骰子加成双方0%,地形加成0%,攻击方加成10%,防御方加成0%
                  攻击方从一方进攻2000人,防御方3000人,此时攻击方受加成,攻击人数相当于2200人,防御方受战场宽度,实际参战2000人,加成后2000人,会被击败
                  但是如何攻击方再来一方10人,战场宽度变成2400,攻击方加成后人数相当于2201人,
                  但是防御方变成了2400人。那么,防御方就不会被击败了!
                  另:我真的看不懂游戏中的攻防加成:-200%是什么意思啊!!!


                  IP属地:浙江9楼2021-01-31 16:41
                  回复
                    谢谢大佬!


                    IP属地:广东来自Android客户端12楼2022-10-18 17:19
                    回复
                      大佬牛逼!


                      IP属地:四川来自Android客户端14楼2022-11-26 22:32
                      回复
                        兄弟会改战场伤亡率吗?


                        IP属地:广东来自Android客户端15楼2023-05-18 20:30
                        收起回复
                          好复杂啊!要看战场宽度自己玩V2得了


                          IP属地:重庆来自Android客户端16楼2023-11-25 20:59
                          回复