モンスター戦はターン制なのか?
エボニーではモンスター狩りをして楽しむことができます。某サイトではターン制をエボニーでは導入しているという考えがあるのですがどうでしょう?個人的に考えて見たいと思います。
ターン制はない
結論からいうと、僕の考えではターン制というのは存在しないです。常に攻撃は1回のみというのを考えてます
出撃時間
モンスター戦では出撃時間がでてます。このモンスターに到達するまでの時間と思いますが、実際には違います。この出撃はモンスターを倒すまでの時間となります。
例えばモンスターに到達してから戦闘となれば、ターン制というのもわからなくもないですが、もし本当にターン制を導入していたらこの時間が変わります。単純にですが、こんな例があったとします
- イフリート:兵士レベル11/25万人:負傷0
- イフリート:兵士レベル11/20万人:負傷1000人
- イフリート:兵士レベル11/15万人:負傷6000人
とあったとします。
※数値は適当です。
ターン制の場合、負傷者が多くでるということはその分多く攻撃していることになります。仮にターンが終わるまで「1秒未満」だったとしても、どこかで1秒増えたりします。けどこの時間は将軍がモンスターに到達して倒す時間を表しているので、ターン制の場合ここが変わらないというのは疑問に感じます。
サーバーの負荷を考えるとターン制はあり得ない
技術的な事をいうと、ゲームに限らずプログラムというのはどれだけ負荷をかけないかというのが一つの指標になります。理由は単純にユーザーが重たいと感じればユーザー離れします。
エボニーのようなアプリ内課金をするゲームなら、当然サーバーの負荷が多くなればユーザーのストレスになります。結果として売上げもさがるので、本来なら負荷を軽減するというのをとります。
では負傷兵の違いはどうやってだす?
仮に攻撃が常に一回として、10%の負傷兵がでたとしても条件分岐で出すことができます。
ターン制の場合、わかりやすく言うとif文での処理になると思います。
$gross = 100000; $out = "10000"; if ( $gross < 1000 ){ echo("$gross/1000"); } else if ( sHako < 5000 ){ echo("$gross/5000"); } else if ( $gross < 8000 ){ echo("$gross/5000"); } else if ( $gross < 10000 ){ echo("$gross/10000"); }
こんなイメージになります。
※実際にはこれは動きません。echoで文字列で表示しているのでそもそも数式があっているとも言えないので・・・イメージとしてと思ってください。
if文をだす理由
いきなりなぜif文をだしたかというと、エボニーもゲームで有る限りプログラミングです。そしてプログラミングの多くは様々な言語あれどかならずプログラミング言語を使っています。そのプログラミング言語(PHP、Golang、JS等)でほぼ間違いなくこのif文は使われます。書き方は多少異なっても必ず使われる文になります。なのでソースが公開されていなくても使われている可能性はあると思ってよいです。
if文は多分岐だと処理が重くなる
計算式で使えるので、戦闘など負傷兵を出す計算として活用します。しかし、if文は多分岐処理だと遅くなります。プログラミングとしては上から下へと処理をしていきます。if文の欠点は処理が多くなるとその文後ろで待ちがでます。
ターン制の場合、基本的にはif文になると思いますがサーバー負荷をあげることに繋がるので、やはり違うのではないかなと
switch文で処理
ifと同じように、switch文というのがあります。これも同じ条件処理ですが、if文と違う点があります。switch文はそのケースに当てはまったとこに行くというのがあります
$gross = 100000; $out = $gross/10000; switch($out) case 10000: print("敗北") break; case 5000 print(勝利。負傷兵は合計/5000です) break; default print(勝利。負傷兵なし)
こんな感じになると思います。実際の計算式はもっと複雑だと思います。上のように単純な計算式ではなく、バフとか色々計算されるのでもっと大変だと思います。このswitch文は一回の処理で該当箇所に行き、処理が終わればそのまま次に行きます。
プログラミングとしては負荷は少ないことになります。
ボスモンスターに条件をつけることで実装可能
そもそも負傷兵0ってのはどうやってなるの?となりますが、これはエボニーの運営側のさじ加減によりますが、ボスモンスターにこんな条件をつけることで実装は可能です
- 兵士レベル○○なら○○以上で負傷0
- 攻撃者のパワー○○以上なら負傷0
などといった条件があるのではないかなと思います。
エボニーでは兵レベル1~15までいます。そしてここで気をつけないと行けないのは下位の兵士でもボスは倒せるということになります。例えばプチヒドラは11でも12でも兵士の数やパワーで負傷兵の違いはあれど倒せます。つまり単純に兵士の数だけではかれるものではないのかなというのもあります。
考えられるのは
- パワー○○以上なら無傷(兵士レベル関係なく)
- パワー○○未満なら負傷(負傷兵は計算式で算出)
という条件があり、そこから条件式で計算していくのではないのかなと思いました
※もっとシンプルかもしれません。
そもそも条件式が複雑なのでターン制はない
前提として条件式をつかっているということですが、条件式の事を考えるとターン制ではなく常に一回というのが妥当かなと思いました。
備考
あくまで僕が思っているのは、ターン制ではないという事であり、絶対そうとは言い切れません。エボニーはソースコードの公開がされていないため、実際のプログラムなどはわからないというのがあります。
- モンスター到達時間は倒すまでの時間
- 神器、研究等バフによる条件が複雑に絡む
- サーバーの負荷
を考えればターン制ではないと思っているということになります
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS