ハコビヤのパラメータを探ってみた

ハコビヤ

SplatNet表記だとThe Mothershipなのに内部データではEventRallyとなっていたりして意味がわからないイベントですが、さてさて内部データを見ていきましょう。

まあその前に、いろいろ疑問があるのでそれをメモしておきます。

ハコビヤの疑問

シャケコプターってシャケ扱い?

もしもシャケコプターがシャケ扱いであるなら、タマヒロイを量産することでハコビヤからシャケコプターがでてこなくなります。

タマヒロイでシャケは減らせる?

タマヒロイを量産すればラッシュでシャケの数が減って結果としてクリアしやすくなることは知られていますが、ハコビヤでも有意にシャケの数が減ってクーラーボックスが壊れたけどシャケがでてこない、というような状況が整えられるかどうかという問題。

減らせたけど、キケン度MAXだとほとんど効果はないと言っていい。

シャケコプターの位置ってランダム?

もしも何らかの法則性があるなら、覚えておくことで効率的にシャケコプターを倒せますよね。

これは検証の結果、イカッチャのリトライでもシャケコプターの落下位置は毎回変わることがわかった。

落ちる場所は決まっている?

これについては次の章で詳しく解説しています。

通常WAVEだと流石に落ちてくる場所が多すぎて全部把握するのは難しかったけれど、満潮だと少ないので数え上げできました。

キケン度が上がると何が変わる?

シャケコプターの落ちる速さが速くなることは知られていますが、それ以外に何が変わるのでしょうか?

次の章で検証しているのでどうぞ。

内部パラメータからわかること

では、実際に検討してみることにしましょう。

ハコビヤのデータはCoop_Levels.xmlに記述されており、mEventRallyというパラメータ名になっています。

200%160%120%80%40%
ZakoActiveMax33221
Life3500025000220001800015000
Unknown51100
Speed21.51.20.90.7
ShotActiveMax1515151515
ShotInterval5050505050

で、パラメータの値はこんな感じです。キケン度はこんな感じだった気がするけど、間違ってても責任は取れません。

ZkoActiveMax

クーラーボックスから出てくるシャケの数かなっていう気がするが詳細は不明。

Unknown

キケン度が160% – 200%のときだけ5になる不思議な値。なんですかね、これ?

またわかったらここに追記しようと思います。

Life

まあこれは当然ハコビヤの母艦の体力のことですね。実際の値はこれを10で割ったものなので、MAXでのハコビヤの体力は3500ということになります。

Speed

シャケコプターの降下速度で、ここをいじるとめちゃくちゃ早く落ちてきます。

ShotInterval

ハコビヤからシャケコプターが射出される間隔、のはずなんですがどのキケン度でも同じ値になっています。

うーん、でもなんとなくキケン度が上がると早い気がしていたのですが完全に気のせいだったのかな…

12Fで1湧きするようにしたシャケコプター

値を変更して1秒で5体出現するようにするとこんな感じになります。ただし、シャケコプター(クーラーボックス)は同時に15体しか存在できないので、すぐにカンストして出てこなくなります。

同時存在数を120にしたシャケコプター

じゃあ同時に出現できる数を120にしちゃえってやってみた動画が上のものになります。

見ると、最初は順調に出現しているにも関わらず途中から全然でてこなくなってしまっています。これはシャケコプターが降りることができる場所が決まっているためで、ポラリス満潮ハコビヤの場合には27箇所であることがわかっています。

シャケコプターの習性

満潮ポラリスのシャケコプターマップ

クーラーボックスが優先される

最も大事なことはクーラーボックスが既に落ちている場所にはシャケコプターは降りてこないということです。

つまり、シャケが湧いても邪魔になりそうにない遠い位置のクーラーボックスを無意味に壊すのはその遠い位置に再びシャケコプターが降りる可能性を与えてしまうだけです。

これはトキシラズいぶし工房における対岸や、難破船ドン・ブラコにおける右下や左下、朽ちた箱舟 ポラリスにおける最下層があたります。

そこのクーラーボックスは壊せば壊すだけクリアの可能性が減ります。特にトキシラズの対岸は拾って帰ってくるわけでもないのに無意味にクーラーボックス壊すのはやめてください。

前々からトキシラズの対岸意味ないよなって思ってたけど、まさかコンテナ側にシャケコプターがくる確率が減るとは思わなかったわね。

どうも当確率ではないらしい

で、どこも当確率でシャケコプターが降りてくるのかなと思ったのですが、どうもそうではないみたいです。

落ちてくる事ができる場所なのに全然落ちてこない場所があります。なぜこのような事が起こるのでしょうか?

一つは、落ちてくるのにかかる時間の差が影響しているのではないかということです。低い位置と高い位置だと、当然高い位置のほうが早くシャケコプターが到達してクーラーボックスを落としていきます。

また、当然シャケコプターの駐車場がハコビヤの母艦から近いほど早く落ちてきます。

クーラーボックスは落ちてから8秒で壊れるので(MAXだと複数回シャケがでるんだっけ?)当然壊れる時間にも違いがある。これが当確率にならない原因ではないかと考えている。

回収期待値を求めてみる

では実際にどのくらいハコビヤは回収が見込め、トキシラズ対岸マンはどのくらい損をしているのか考えてみましょう。

ここでは話を簡単にするためにハイパープレッサーによるシャケコプターリスキルは行わず、また一つも金イクラを回収されないとします。

おさらい

シャケコプターは50Fに一度射出される。WAVE自体は100秒の猶予があるが、実際には残り15秒の段階でハコビヤの母艦がコンテナにくっつき、撃退してからはシャケコプターが落ちてこないので85秒しかないと考えるべきである。

85秒は5100Fなので仮に全てのシャケコプターを倒していれば102個の金イクラが落ちているはずである。つまり、落ちる可能性のある金イクラは102個と考えて良い。

当確率の場合

満潮トキシラズのシャケコプターマップ

さて、ここでトキシラズのシャケコプターマップをみると、全部でシャケコプターが着陸可能な場所が30箇所あることがわかる。

このうち、コンテナ側には13箇所あるので、仮にコンテナ側のシャケコプターを全て倒して全部運べば102*13/30=44.2個の金イクラが回収できる見込みだということである。

もちろん実際には最初の6秒ほどはどうやってもシャケコプターを落とせないし、ハコビヤを殴っている最中にシャケコプターを見逃してしまうこともあるだろう。

だが、それを加味してもなお十分すぎるくらいの金イクラがコンテナ側に落ちてくるのである。やられるかもしれないリスクを犯して対岸に行く意味は皆無である。

なんと実際にやってみたところ偶然にも計算値である45個のシャケコプターがコンテナ側に来ることが確認できた。

コンテナ側のみ全破壊

たまたまいろんな値が相殺し合っただけなので、本当に偶然です。

一つ倒しそこねてるのはここだけの秘密だ。

考慮しなければいけない効果

対岸は全部で17個の着陸可能ポイントがあるが、一度そこにシャケコプターが行くことが決まると射出から着陸までの秒数+クーラーボックスが壊れる8秒の間そこには落ちなくなるわけです。つまり、対岸に落ちる確率が減るんですね。

ここは少々ややこしくて、落ちるまでの時間とクーラーボックスが壊れるまでの時間の二つを考えなければいけません。

手計算では限界が来るので、ここは数値解析かシミュレートをするのが手っ取り早いですね。

シミュレートしてみた

ここでは以下のことを正しいと仮定して話を進めます。

  • シャケコプターの出現間隔は50Fである
  • シャケコプターが降りるのにかかる時間はハコビヤ母艦からの距離に線形に比例する
  • シャケコプターがどこに降りるかは完全にランダムである
  • クーラーボックスが壊れるまでにかかる時間は480Fである
  • クーラーボックスがおいてある間、そこにはシャケコプターは降りてこない
  • 対岸側のシャケコプターは飛来次第、すぐに倒すものとする

それをまとめると以下のような感じになりま

カッコ内はコンテナ側3秒5秒7秒
個数137(3)10(10)

Pythonコード

実験してみたい方は以下のコードをコピペして実行すれば動作します。

import random

class Rally:
    def __init__(self, time, add=48):
        self.num = 0
        self.time = time + add
        self.orig = self.time
        self.box = False
        if add == 0:
            self.countable = True
        else:
            self.countable = False
    def flip(self):
        self.box = not self.box

def RallyEmu():
    aTime = 18
    bTime = 30
    cTime = 42
    mRally = [Rally(aTime), Rally(aTime), Rally(aTime), Rally(aTime), Rally(aTime), 
    Rally(aTime), Rally(aTime), Rally(aTime), Rally(aTime), Rally(aTime), Rally(aTime), Rally(aTime), Rally(aTime),
    Rally(bTime), Rally(bTime), Rally(bTime), Rally(bTime), Rally(bTime, 0), Rally(bTime, 0), Rally(bTime, 0), Rally(42, 0),
    Rally(cTime, 0), Rally(cTime, 0), Rally(cTime, 0), Rally(cTime, 0), Rally(cTime, 0), Rally(cTime, 0), Rally(cTime, 0), Rally(cTime, 0),
    Rally(cTime, 0)]

    latest = 0
    for frame in range(0, 510):
        mDisables = [i for i, x in enumerate(mRally) if x.box == False]
        mEnables = [i for i, x in enumerate(mRally) if x.box == True]
        if latest <= 0:
            if len(mEnables) <= 15:
                id = random.choice(mDisables)
                mRally[id].flip()
                mRally[id].num += 1
                latest = 4
            # else:
            #     print("Full!")
        else:
            latest -= 1
        # Destroy Box
        for point in mRally:
            if point.box == True:
                point.time -= 1
            if point.time == 0:
                point.time = point.orig
                point.flip()
    # for point in mRally:
    #     print(point.box, point.num)
    mTotal = sum([i.num for i in mRally])
    mSubTotal = sum([i.num for i in mRally if i.countable == True])
    # print("Appear:", mTotal, "Golden:", mSubTotal)
    return mSubTotal

if __name__ == "__main__":
    num = 0
    for i in range(0, 999):
        num += RallyEmu()
    print(num/1000)

何回か実行してみたのですが、クーラーボックスの数が上限の15に達する瞬間はほとんどありませんでした。

このコードを10000回まわして平均をとったところコンテナ側への落下数が48.932になり、ちょっと出すぎているかな?という気がします(感覚的には35~45程度の気がする)

まあ落下にかかる時間をざっくばらんに適当に決めているので、もうちょっと厳密に設定すればより良い値がでるかもしれません。

対岸クーラーボックスを破壊してみよう

さて、先程のシミュレートは対岸クーラーボックスを全く破壊せず、480F後の自壊を待つというものでした。ここでは誰かが対岸マンをしてクーラーボックスを破壊し、クーラーボックスの平均生存時間を480Fから半分の240Fに減らしたとしましょう。

すると対岸に落下するシャケコプターの割合が増え、コンテナ側に落ちる金イクラの10000回の平均が45.151になってしまいました。

何もしなければ49個程度落ちてきたのに、運ぶのを放棄して対岸に行ってコンテナを破壊して納品数が減るんじゃ意味ないですよね。

まとめ

クリアしたいだけならトキシラズ対岸も、ドンブラコの右下や左下の破壊は不要。運ぶ人が減るのでやるだけ無駄、クーラーボックスからシャケがでても困らないならほっておくべき。

満潮におけるシェケナダムの高台や満潮ドンブラコの最奥もどうせ運べないのでわざわざ倒さなくてもいいかもしれない。