ほげほげー

C#メインにプログラミング周りから日常のあれこれとかを不定期に書いていきます。

Stone Story RPG Stonescript 実用編 その3

基礎はこちら

tyheeeee.hateblo.jp

実用編その1はこちら

tyheeeee.hateblo.jp

実用編その2はこちら

tyheeeee.hateblo.jp

それでは実用編その3です。

実践編

ボスの状態に合わせて装備を変える

foe.statusfoe.time を使うお話です。

foe.status は敵の現在の状態を表します。

各項目1種類のボスについてのみ触れますが、調整の仕方は大まかに説明するので、他のボスも同様に試しながら調整できるようになっているかと思います。*1

攻撃を避ける

ここでは地獄の鉱山のボス、銅の守護者をサンプルに説明します。

ここのボスは攻撃と攻撃の間がかなり空くため、マインドストーン装備時に発動する後方ダッシュが非常に有効です。

それではまずいつ攻撃してくるかを foe.statusfoe.time を見ながら確認します。

var x = 6
x = 6
>`0,@x++@,@foe.status@
>`0,@x++@,@foe.time@

これを使ってボスと戦いながら確認してみると、foe.status2 から 32 になってしばらくしてから攻撃を仕掛けてくるようです。

それでは単純に以下のようにしてみます。

?foe.state=2
  equip aether crossbow D

:?foe.state=32
  equipL mind

早く避け過ぎてハンマーが振り下ろされる頃に丁度当たる場所まで戻ってきてしまいました。

避けるタイミングをずらす必要があります。10フレームほどずらしてみましょう。

?foe.state=2
  equip aether crossbow D

:?foe.state=32&foe.time=10
  equipL mind

いい感じに避けられました。

mind stone が発動した後ボスに近寄る時間を短縮したいので triskelion stone を使いたいと思います。

?foe.state=2
  equip aether crossbow D

:?foe.state=32
  ?foe.time=10
    equipL mind
  :
    equipL tri

移動速度が速くなったのでまた食らってしまいました。さらに10フレームほどずらしてみます。

?foe.state=2
  equip aether crossbow D

:?foe.state=32
  ?foe.time=20
    equipL mind
  :
    equipL tri

上手くいきました。これで避けつつ時間短縮ができるようになりました。

このスクリプトだと避ける前の20フレーム間攻撃ができなくてもったいないので属性付きヘビークロスボウを装備しておきます。

?foe.state=2
  equip aether crossbow D

:?foe.state=32
  ?foe.time<20
    equip aether crossbow D

  :?foe.time=20
    equipL mind

  :
    equipL tri

これで無駄なく攻撃ができます。

最適な武器を装備する

先ほどと同様、地獄の鉱山のボスをサンプルに使います。

このままだとボスに近接できる状態になってもアーマーへのダメージ効率の高いハンマーを使わずに攻撃することになるので効率が悪そうです。

というわけで近接できる状態(foe.state=33)でアーマーがある間は属性ハンマーを使うようにしましょう。ついでに効率よくするためにダッシュの盾も使いましょう。

アーマーが無くなったら属性剣にしましょう。

?foe.state=2
  equip aether crossbow D

:
  ?foe.state=32
    ?foe.time<20
      equip aether crossbow D

    :?foe.time=20
      equipL mind

  ?(foe.state=32&foe.time>20)
  ^|foe.state=33
    ?foe.distance > 17
      equipL tri

    :?foe.distance > 5
      equipR dashing_shield

    :?foe.armor>0
      equipR @mainHammer@
      equipL @subHammer@

    :
      // 属性短剣両手持ちが一番DPS高いはず
      equipR @mainSword@
      equipL @subSword@
防御する

これは呪われた会館のハイハイフェーズ2で使います。

このボスは攻撃時におまけで雑魚敵を5匹排出します。

この時正面から殴り合うとフェーズ1でアーマーが大分削られる関係上、アーマーが削りきられてしまうことがままあります。

HPが減った状態でクリアするとオフラインループ時にお金を消費するようになってしまうのであまり好ましくありません。

そこで、雑魚的出現に合わせて属性盾(A)を装備することでアーマーを回復することを考えます。

まず前項で触れたやり方で攻撃時の foe.state を確認すると、32 で攻撃、33 で召喚、となっているようです。

それに合わせてスクリプトを記述します。

?isBoss&isPhase2
  ?foe.state=32|foe.state=33
    // 召喚中はアーマーを減らしたくないので敵から距離を取って攻撃したい
    // 複数現れるのでスプラッシュ持ちでまとめて倒したい
    equipL @mainWand@
    equipR vigor shield A
  :
    equipL @mainSword@
    equipR @subSword@

前回触れたように、完全に同一の装備は左右両方に装備することができないため、何らかの差をつけるようにしてください。

さてこれでそれっぽく動くようになりました。

が、実際に動かしてみるとなんか剣を持とうとすることがあると思います。foe はターゲットにしてる敵を表すので、雑魚敵が前に出てくるとそちらを取得するようになってしまうためです。

なので、ちょっとスクリプトを改変しましょう。

?isBoss&isPhase2
  ?foe.state=32|foe.state=33|foe.count>1
    equipL @mainWand@
    equipR vigor shield A
  :
    equipL @mainSword@
    equipR @subSword@
細かく最適化する

サンプルとしてこれまで書いてきたもので細かい最適化をしてみます。

地獄の鉱山ボスで、敵の攻撃後の近接攻撃ができる期間が終わったら武器の振り上げで距離を離されます。

その間攻撃しないのは大変もったいないので、振り上げるタイミングを見ながら微調整を進めます。

微調整を進めた結果、foe.state が 33 で foe.time が 190 を超えたタイミングでクロスボウに切り替えるのがベストなのでは?という事になりました。

その実装がこちら。

?foe.state=2|(foe.state=33&foe.time>190)
  equip aether crossbow D

:
  ?foe.state=32
    ?foe.time<20
      equip aether crossbow D

    :?foe.time=20
      equipL mind

  ?(foe.state=32&foe.time>20)
  ^|foe.state=33
    ?foe.distance > 17
      equipL tri

    :?foe.distance > 5
      equipR dashing_shield

    :?foe.armor>0
      equipR @mainHammer@
      equipL @subHammer@

    :
      // 属性短剣両手持ちが一番DPS高いはず
      equipR @mainSword@
      equipL @subSword@

呪われた会館の方は例えば以下のように細かく最適化します。

元のままだとアーマーがある程度回復したら無駄になってしまうので、ある程度アーマーが回復したら両手持ちに変えたいと思います。ついでにダッシュの盾も使うようにしましょう。

?isBoss&isPhase2
  ?foe.state=32|foe.state=33|foe.count>1
    equipL @mainWand@
    ?armor<50
      equipR vigor shield A
    :
      equipR @subWand@
  :
    ?foe.distance > 5
      equipL @mainSword@
      equipR dash
    :
      equipL @mainSword@
      equipR @subSword@

とりあえず実践編はここまでで終わりです。

また何か思いついたら記事にしますね。

あとは気が向いたときにハック集の記事を書いておきます。

*1:そもそも避けられないボスとかも多々ありますけど