星球基地吧 关注:7,529贴子:45,950
  • 7回复贴,共1

【数据向】游戏内核被破!源代码解析游戏引擎算法(持续更新)

取消只看楼主收藏回复


破解dll的作者在官方论坛上发表了帖子,地址:http://planetbase.madrugaworks.com/board/viewtopic.php?f=4&t=577&sid=9fbc5b2b4308085ccbb5192b98767494
然而最坑爹的是官网对此视而不见。。。
以后此游戏发展MOD将成为可能,比如添加新的建筑新的玩法等等。
我闲着无聊来解析一下游戏对于一些数据的处理(持续更新)。


1楼2015-10-30 16:02回复
    1、有关于贸易飞船(trading ship)
    其实。。。有关于佣金的算法是这样的。。。

    对!你没看错,跟什么声望半点关系都没有。它就是个随机函数。。最低百分之35,最高高达百分之70.。。这就是个看脸的数字。。


    2楼2015-10-30 16:05
    收起回复
      2026-02-19 02:38:35
      广告
      不感兴趣
      开通SVIP免广告
      有关于每次飞来的贸易飞船的类型,一共有六种,分别是:
      RawMaterial,稀有材料
      Medical,医疗用品
      Food,食物
      Industrial,工业
      Electronics,电子
      Count杂货
      前五种都是有特定商品限制的,然而第六种没有,这在后面会详细说明。
      游戏的算法会首先计算来的飞船的种类:

      当你处于系统认定的特殊状态时(缺少食物,零件数为0,医疗包数目为0),你会得到系统的“特别关照”,贸易飞船会有三分之二的几率来的是你需要的类型。还有三分之一会是杂货船,啥都有。
      (缺少食物的 具体标准是你的食物少于【殖民者的数量+5】/10)
      然而如果你处于 “非特殊状态”,就是这三样并不缺,那么你会有5/12的可能性能迎接到杂货船,其余的7/12来的是随机的特定种类商船。(数据是我自己算的,如有认为不准确的欢迎留言)


      7楼2015-10-30 16:20
      收起回复
        接下来就是重头戏:每次来的飞船有多少资源是怎么计算的了,在此之前,我想把所有资源会出现在哪种飞船上整理一个列表方便大家对照(机器人和科技许可有单独的计算方法,以后会提到)
        Starch:RawMaterial
        Ore:RawMaterial
        Metal:Industrial
        Bioplastic:Industrial
        Spares:Industrial
        Gun:Industrial
        Meal:Food
        Vegetables:Food
        Vitromeat:Food
        AlcoholicDrink:Food
        MedicalSupplies:Medical
        MedicinalPlants:Medical
        Semiconductors:Electronics
        Coin:Any


        11楼2015-10-30 16:36
        回复
          讲算法太无聊。。还是说一点有聊的数据吧

          ·你已经买到的科技肯定永远不会出现在商船里
          ·一次你只能最多买到一种科技
          ·特定种类的商船只会出现该种类的科技,并且小船比大船几率要小
          小船是百分之20,大船是百分之33
          ·杂货船出现科技的概率小于特定船,但是种类是全的
          小杂货船几率为百分之11,大船为百分之20


          20楼2015-10-30 18:14
          收起回复
            好了接下来是分配数量环节,比较复杂。。。
            杂货船(跟其他特定船是分开算的)

            所有刚刚那张表里列出来的物资你都有三分之一的可能性能抽到!每种物资都会被分配到一个0.8到1.2之间的一个随机数(x),然后除以该物品的价值。比如如果游戏引擎抽到了芯片,这个数字就会被除以40得到(a)。
            等到所有种类的物资都被系统抽过了以后,系统会将所有得到的a相加得到总值,然后拿每个物品的a除以这个总值得到b,这个b其实就是来的这艘飞船内该种物品的占比。
            这种算法其实是在保证物品的数值和价格基本平衡的基础上多一点随机性,因为如果x取1,那么其实飞船上带的每种的价值是相同的。

            下一步,游戏会根据来的船是大船还是小船算一个此次携带物资的总量
            如果来的是Freelance小船,这个数值(y)会取25.5到34.5,如果来的是Corporate大船,这个数值(y)会取51到69
            (计算方法是船的容量除以2上下随机浮动百分之15)
            y会被系统乘以b,然后向最靠近的一个整数取整,得到的就是这种物资的具体数值!这应该不难理解。


            22楼2015-10-30 18:42
            回复
              游戏中风的算法是包含在时间算法中的。。也就是与时间同步更新,如图:

              很遗憾,我沿着这条线路一路找了下去,发现每个星球的mDaytime和mNighttime属性,也就是昼夜长短时间的属性都储存在游戏目录的prefab文件夹下,然而目前没有办法打开assets文件取出这一类的东东。。。当然也有发现,那就是。。。。。每个星球的昼夜长短其实是不同的,要不然也没必要写这段。。。


              以上这两段合起来的意思代表游戏中的时间跟现实中时间比例为120:1,我也是想了很久才想明白这段代码表达的意思。。


              31楼2015-10-30 22:52
              收起回复
                接下来就是风力更新的算法了。。

                出乎我的意料。。并不如我跟好几层楼之前小伙伴说的一样。。风力的计算只有一种算法两种情况:没大气层的星球和有大气层星球,当然我看了一下现在的三颗星球。。两颗是大气层密度高,一颗是没有,现在只写一种算法也没有错。。。
                然后这一种算法内有特殊状态,玩过的小伙伴们都知道,沙尘暴的时候 风力肯定是满的,这就是第一种状态。
                第二种就是正常状态了,由于游戏的timestep,就是刷新频率并不能在源代码中看到,我就只能通过在实际游戏中测量得到,估计就是准确值:0.5s
                (注:这并不是fixedtimestep游戏计算刷新值,这只是个适用于环境算法的数值而已。。。)
                假定timestep=0.5,我们得到这样的结果:风力会随机在10秒到20秒内进行一个最多每秒+-百分之2.5的变化趋势刷新。
                这么说可能不太清楚,换句话来说就是在这10秒到20秒随机的时间内,风力是匀速变化的,然而这个匀速变化的状态持续的时间和风力变化的速度全都是随机的,也就是说风力可能维持不变20秒都是有可能的,当然可能性微乎其微。


                32楼2015-10-30 23:23
                回复