いつでもティータイム

ここはハートが目覚めて花咲いてリスペクトしあう場所

スカサハシステム (ハロウィン2018特別版)

概要

準備

  1. パラケルススのS3 -> エドモン
  2. オーダーチェンジ(パラケルスス -> スカサハ=スカディ)
  3. スカサハ=スカディのQuickバフとNP50付与 -> エドモン
  4. エドモンのS2

結果

  • 1 wave 終了時点 f:id:warabbit_mochi:20181029142044p:plain

  • 2 wave 終了時点 f:id:warabbit_mochi:20181029142128p:plain

  • 3 wave 終了時点 f:id:warabbit_mochi:20181029142208p:plain


解説

10/24より、2018年のハロウィンイベント「神秘の国のONILAND 鬼の王とカムイの黄金」が開始された。 このイベントには専用ドロップアイテムに加えて「おともだちポイント」なる専用ポイントが存在しており、その両方を集めることで報酬を得ることができる。 専用ドロップアイテムはガチャで入手可能な礼装によって獲得数を増やすことができ、「おともだちポイント」はイベント特攻サーヴァントをパーティに含める、あるいはイベントで入手可能な礼装を装備することによって獲得数を増やすことができる。 また、イベントで入手可能な礼装にはイベント時限定で攻撃力増加補正があり、「おともだちポイント」の累計獲得報酬によってその補正を増やすことができる。

このようなポイント収集イベントにおいては、パーティに含める特攻対象サーヴァントが減ってしまうシステムを利用するのは基本的に非効率である。 しかしながら、今回のハロウィンイベントでは

  • 「おともだちポイント」の獲得数を礼装によっても増やすことができる
  • 素材ドロップ効率の良いイベントフリークエストの存在
    • メリーゴーランド: 牙 & 羽根
    • 観覧車: 心臓

などの理由からシステムを利用する需要もある。

以上のことから、今回のイベントで利用可能なシステムとして パラケルススを併用したスカサハ=スカディシステム を紹介する。 今回のイベントでは特攻攻撃力補正を前提として敵のHPが設定されているため、限界突破カレイドスコープを利用した従来のスカサハ=スカディシステムでは火力が不足してしまう。 そのため、カレイドスコープではなくイベント礼装を装備した状態で宝具を連続使用することができれば、本イベントでもシステムを利用することができる。

イベント礼装でシステムを構築するために必要とされる要件は以下の通りである。

  • クエスト開始時のアタッカーのNPチャージ
  • 各waveで宝具使用可能なNP獲得量

イベント礼装は開始時NPチャージを持っていないため、クエスト開始時にスカサハ=スカディによるNP付与を使用することになる。 すなわち、各waveでのNP付与を使用することはできず、宝具によるNP獲得によってNP100%を目指さなければならない。

これをサポートするのが パラケルスス である。 強化イベントにより、パラケルススはスキル「賢者の石」により任意の味方に対してNP獲得量アップ50%を付与することが可能となった。

また、今回のイベントにおける攻撃力補正は最大で500%と非常に高い数値となっている。 この高倍率によるOverKillとパラケルススのNP獲得量アップを組み合わせることで、普段は難しい多段ヒットQuick宝具によるNP100%リチャージを実現することが可能である。

NP獲得量 with パラケルスス

イベント礼装「スリー・アングラー」を装備したエドモンのNP獲得量を表に示す。

OverKill
発生回数
狂 殺 騎 術・月 それ以外
8 25.59 28.79 35.19 38.39 31.99
7 24.53 27.59 33.72 36.79 30.66
6 23.46 26.39 32.26 35.19 29.33
5 22.39 25.19 30.79 33.59 27.99
4 21.33 23.99 29.33 31.99 26.66
3 20.26 22.79 27.86 30.39 25.33
2 19.20 21.59 26.39 28.79 23.99
1 18.13 20.39 24.93 27.19 22.66
0 17.06 19.20 23.46 25.59 21.33

この表は敵1体に対するNP獲得量である。 敵が3体の場合、これを3倍した数値が96を超えていればシステムを構築することができる。

表より、騎と術の敵に対してはOverKill発生回数によってはシステムを構築可能であることがわかる。 イベント礼装の攻撃力補正のおかげで普段よりOverKill発生回数を増やすことができるので、これらのクラスに対してはシステムが機能する。

剣や弓などのNP効率1.0のクラスは一見システムが機能しないように見える。 しかし、弓敵しか出現しない「ミラーハウス」でもこのシステムは機能する。 ハロウィンイベントに頻繁に登場するスケルトンなどの死霊系の敵は攻撃時のNP獲得量が多く設定されており、術相手相当のNPを獲得することが可能だからである[参考]。 「ミラーハウス」に出現する敵は大型とサーヴァント以外はスケルトンタイプであるためシステムに必要なNP獲得量を確保可能である。

このように、今回のハロウィンイベントでは限定的な条件が重なったことにより、従来のシステムとは異なったタイプのスカサハシステムを運用することが可能である。 今回はエドモンに焦点を当てたが、パールヴァティーやアタランテでも敵構成やクラス相性次第で運用可能である。

ドロップ素材目的で周回する方に役立てば幸いである。

pipenv を conda のように使う

pipenvはディレクトリごとにPipfileおよびPipfile.lockを作成し、ディレクトリ単位で仮想環境を管理する。 この管理方法はプロジェクトなどにおいては非常に理にかなっている。 まっさらな状態から、プロジェクトに必要なパッケージだけを入れるだけで良いからだ。

しかし、普段からちょっとしたことでもPythonにやらせる場合にはこの管理方法は少し使いにくい。 そこで任意の場所で共通の環境を使えるように、Pipfileを管理するためのディレクトリを作成し、その場所にpipenv shellする関数を作成する。 こうすることで、conda activate hogeと同様のことが実現できる。

準備

まずはパスの設定やディレクトリの作成を行う。 また、ここではzshを対象とする。

Pipfileを保管するディレクトリを作成する。 ここでは、ホーム直下の.pipenvenvに保管することにする。

$ mkdir ~/.pipenvenv

作成したディレクトリへのパスを作成しておく。 パスの設定は.zshenvに記述しておく。

echo 'export $PIPENV_ENV_ROOT=$HONE/.pipenvenv' >> ~/.zshenv

次に自作関数のオプションなどを補完するための補完関数を置くディレクトリを用意する。 ここでは、~/.zsh-functionというディレクトリを作成し、そこに補完関数を置く。

mkdir ~/.zsh-function

zshの補完関数を場所を示す環境変数は$fpathであるので、作成したディレクトリへのパスを追加する。

echo 'fpath=($HOME/.zsh-function $fpath)' >> ~/.zshenv

関数の作成

自作コマンドはシェルスクリプトとして作成した方がいい気もするが、ここでは.zshrcに直接記述することにする。

function gpipenv() {
    ERROR_STATUS=1
    if [ $# -lt 2 ]; then
    echo "Usage: gpipenv command env_name [package]"
    return $ERROR_STATUS
    fi

    ENV_PATH="$PIPENV_ENV_ROOT/$2"
    if [ $1 = "create" ]; then
    if [ -d $ENV_PATH ]; then
        echo "same environment name already exists!"
        return $ERROR_STATUS
    else
        (mkdir $ENV_PATH && cd $ENV_PATH && pipenv install)
    fi
    elif [ $1 = "install" ]; then
    if [ $# -eq 3 ]; then
        if [ -d $ENV_PATH ]; then
        (cd $ENV_PATH && pipenv install $3)
        else
        echo "env '$2' does not exists!"
        return $ERROR_STATUS
        fi
    else
        echo "Usage: gpipenv install env_name package_name"
        return $ERROR_STATUS
    fi
    elif [ $1 = "activate" ]; then
    if [ -d $ENV_PATH ]; then
        (cd $ENV_PATH && pipenv shell)
    else
        echo "the environment does not exists!"
        return $ERROR_STATUS
    fi
    else
    echo "illegal command!"
    return $ERROR_STATUS
    fi
}

condaでいうところのconda create, conda installおよびconda activateに相当する処理を行う関数gpipenvを作成した。 conda deactivateに相当する処理も書きたかったが、面倒なので煩雑になりそうだったのでCtrl-Dで行うことに。

余談
gpipenv shellを行うとディレクトリ移動してしまうのが難点。 なんとかならないものか。

補完関数の作成

これで終わりでもいいのだが、コマンドの種類、構築した仮想環境の名前を忘れると、いちいち.zshrcや仮想環境ディレクトリを確認しなければならない。 それは少し不便なのでzshの補完関数を作成する。

zshの補完関数は_関数名という名前で作成する。 補完関数は先程準備した~/.zsh-functionに配置する。

今回は自作関数gpipenvの補完関数ファイルを_gpipenvとして作成する。

#compdef gpipenv

_gpipenv() {
    _arguments '1: :->command' '2: :->env'

    case "$state" in
    command)
        _values '' \
            'create[Create new virtual environment.]' \
            'install[Install new package to specified virtual environment.]' \
            'activate[Spawns a shell within the virtualenv.]'
        ;;
    env)
        _path_files -/ -W $PIPENV_ENV_ROOT
        ;;
    esac
}

1行目の#compdef gpipenvはgpipenvに関する補完関数であることを明示するものなので必須である(多分)。

これで補完を行えば以下のように補完される。

$ gpipenv [ここでTAB]

activate  -- Spawns a shell within the virtualenv.
create    -- Create new virtual environment.
install   -- Install new package to specified virtual environment.
$ gpipenv activate [ここでTAB]

base/ hoge/ fuga/

Quick宝具サーヴァントの宝具によるNP獲得量まとめ

前回、Quick宝具によるシステムの汎用アタッカー枠として巌窟王エドモン・ダンテスを紹介し、宝具によるNP獲得量および宝具火力についてまとめた。 しかしながら、エドモンはFGO内最高レアリティである星5サーヴァントであり、実践的な火力を得るまで宝具を重ねるのが難しいという問題点があった。

そこで本記事では、システムに利用できると考えられるQuick宝具サーヴァントのNP獲得量についてまとめる。 各々の所有するサーヴァントでシステムを実現可能かどうか判断する材料になれば幸いである。

想定するシステム

ここでは、Quick主体システムの基本的な構成である アタッカー + スカサハ=スカディ + スカサハ=スカディ を想定 する。 また、アタッカーの礼装はカレイドスコープとする(すなわち、礼装によるNP獲得量バフは考慮しない)。

宝具によるNP獲得量

宝具によって獲得できる敵1体あたりのNPを表により示す。 敵が2体であれば2倍、3体であれば3倍することで実際の獲得NP量になる。 また、敵のクラスが混合であれば該当する数字を加算すればよい。

自前でNP獲得量バフを持つサーヴァントに関しては、バフを考慮した数値を示している。 ただし、バフの継続ターンが1Tである場合には()内にバフを考慮した数値を示す。

巌窟王エドモン・ダンテス

OverKill
発生回数
狂 殺 騎 術・月 それ以外
8 17.86 20.09 24.55 26.78 22.32
7 17.11 19.25 23.53 25.67 21.39
6 16.37 18.41 22.51 24.55 20.46
5 15.62 17.58 21.48 23.44 19.53
4 14.88 16.74 20.46 22.32 18.60
3 14.14 15.90 19.44 21.20 17.67
2 13.39 15.07 18.41 20.09 16.74
1 12.65 14.23 17.39 18.97 15.81
0 11.90 13.39 16.37 17.86 14.88

※ クラススキルにより毎ターンNP3%獲得。

アキレウス

OverKill
発生回数
狂 殺 騎 術・月 それ以外
5 8.93 (11.60) 10.04 (13.05) 12.27 (15.96) 13.39 (17.41) 11.16 (14.51)
4 8.33 (10.83) 9.37 (12.18) 11.46 (14.89) 12.50 (16.25) 10.41(13.54)
3 7.74 (10.06) 8.70 (11.31) 10.64 (13.83) 11.60 (15.09) 9.67 (12.57)
2 7.14 (9.28) 8.03 (10.44) 9.82 (12.76) 10.71 (13.92) 8.93 (11.64)
1 6.55 (8.51) 7.36 (9.57) 9.00 (11.70) 9.82 (12.76) 8.18 (10.64)
0 5.95 (7.74) 6.69 (8.70) 8.18 (10.64) 8.93 (11.60) 7.44 (9.67)

※ 第3スキルによりNP30%チャージ可能。
※ 宝具によるQuickバフ込み(OC1)。

ランスロット(バーサーカー)

OverKill
発生回数
狂 殺 騎 術・月 それ以外
10 12.00 (24.00) 13.50 (27.00) 16.50 (33.00) 18.00 (36.00) 15.00 (30.00)
9 11.60 (23.20) 13.05 (26.10) 15.95 (31.90) 17.40 (34.80) 14.50 (29.00)
8 11.20 (22.40) 12.60 (25.20) 15.40 (30.80) 16.80 (33.60) 14.00 (28.00)
7 10.80 (21.60) 12.15 (24.30) 14.85 (29.70) 16.20 (32.40) 13.50 (27.00)
6 10.40 (20.80) 11.70 (23.40) 14.30 (28.60) 15.60 (31.20) 13.00 (26.00)
5 10.00 (20.00) 11.25 (22.50) 13.75 (27.50) 15.00 (30.00) 12.50 (25.00)
4 9.60 (19.20) 10.80 (21.60) 13.20 (26.40) 14.40 (28.80) 12.00 (24.00)
3 9.20 (18.40) 10.35 (20.70) 12.65 (25.30) 13.80 (27.60) 11.50 (23.00)
2 8.80 (17.60) 9.90 (19.80) 12.10 (24.20) 13.20 (26.40) 11.00 (22.00)
1 8.40 (16.80) 9.45 (18.90) 11.55 (23.10) 12.60 (25.20) 10.50 (21.00)
0 8.00 (16.00) 9.00 (18.00) 11.00 (22.00) 12.00 (24.00) 10.00 (20.00)

※ 「2004年の断片」の「コード:H」 のみ 使用時(NP獲得アップ50%の場合)の獲得量はこちら

OverKill
発生回数
狂 殺 騎 術・月 それ以外
10 18.00 20.25 24.75 27.00 22.50
9 17.40 19.57 23.93 26.10 21.75
8 16.80 18.90 23.10 25.20 21.00
7 16.20 18.23 22.28 24.30 20.25
6 15.60 17.55 21.45 23.40 19.50
5 15.00 16.88 20.62 22.50 18.75
4 14.40 16.20 19.80 21.60 18.00
3 13.80 15.53 18.98 20.70 17.25
2 13.20 14.85 18.15 19.80 16.50
1 12.60 14.18 17.33 18.90 15.75
0 12.00 13.50 16.50 18.00 15.00

パールヴァティー

OverKill
発生回数
狂 殺 騎 術・月 それ以外
4 15.50 17.44 21.31 23.25 19.38
3 14.21 15.98 19.54 21.31 17.76
2 12.92 14.53 17.76 19.38 16.15
1 11.63 13.08 15.98 17.44 14.53
0 10.33 11.63 14.21 15.50 12.92

※ 第3スキルにより(自身であれば)NP10%チャージ可能。
※ 宝具によりNP10%チャージ可能。

アタランテ

OverKill
発生回数
狂 殺 騎 術・月 それ以外
10 18.00 (22.50) 20.25 (25.31) 24.75 (30.94) 27.00 (33.75) 22.50 (28.12)
9 17.40 (21.75) 19.57 (24.47) 23.93 (29.91) 26.10 (32.62) 21.75 (27.19)
8 16.80 (21.00) 18.90 (23.62) 23.10 (28.88) 25.20 (31.50) 21.00 (26.25)
7 16.20 (20.25) 18.23 (22.78) 22.28 (27.84) 24.30 (30.38) 20.25 (25.31)
6 15.60 (19.50) 17.55 (21.94) 21.45 (26.81) 23.40 (29.25) 19.50 (24.38)
5 15.00 (18.75) 16.88 (21.09) 20.62 (25.78) 22.50 (28.12) 18.75 (23.44)
4 14.40 (18.00) 16.20 (20.25) 19.80 (24.75) 21.60 (27.00) 18.00 (22.50)
3 13.80 (17.25) 15.53 (19.41) 18.98 (23.72) 20.70 (25.88) 17.25 (21.56)
2 13.20 (16.50) 14.85 (18.56) 18.15 (22.69) 19.80 (24.75) 16.50 (20.62)
1 12.60 (15.75) 14.18 (17.72) 17.33 (21.66) 18.90 (23.62) 15.75 (19.69)
0 12.00 (15.00) 13.50 (16.88) 16.50 (20.62) 18.00 (22.50) 15.00 (18.75)

※ ()内は「アルカディア超え A」使用時の獲得量。

ワルキューレ

OverKill
発生回数
狂 殺 騎 術・月 それ以外
7 16.62 18.69 22.85 24.92 20.77
6 15.82 17.80 21.76 23.74 19.78
5 15.03 16.91 20.67 22.55 18.79
4 14.24 16.02 19.58 21.36 17.80
3 13.45 15.13 18.49 20.18 16.81
2 12.66 14.24 17.41 18.99 15.82
1 11.87 13.35 16.32 17.80 14.83
0 11.08 12.46 15.23 16.62 13.85

※ 第3スキルにより毎ターンNP10%チャージ可能。

フランケンシュタイン

OverKill
発生回数
狂 殺 騎 術・月 それ以外
6 17.33 19.50 23.83 26.00 21.66
5 16.37 18.41 22.51 24.55 20.46
4 15.40 17.33 21.18 23.11 19.26
3 14.44 16.25 19.86 21.66 18.05
2 13.48 15.16 18.53 20.22 16.85
1 12.52 14.08 17.21 18.77 15.65
0 11.55 13.00 15.89 17.33 14.44

巌窟王を復讐鬼から周回鬼にするために

スカサハ=スカディによるQuickバフおよびNPチャージを利用した周回用のシステム(システムについての説明は前記事を参照)のアタッカー枠として、現在では多段ヒットQuick全体宝具を持つサーヴァントが注目されている。 比較的よく話題になるQuick全体宝具サーヴァントを以下に示す。

隠しステータスを含むため、ご注意ください。

サーヴァント クラス 宝具ヒット数 N/A (NP rate)
アタランテ 弓 10 0.50
パールヴァティー 槍 4 1.08
ワルキューレ 槍 7 0.86
ランスロット 狂 10 0.50
巌窟王 讐 8 0.62

ここでは、システムのアタッカー枠として汎用性が高い 巌窟王エドモン・ダンテス に注目する。 システムにおけるエドモンの特徴は以下の通りである。

  • 相性不利を考慮する必要がないアヴェンジャークラス
    • 相性不利は敵としてほとんど出現しないムーンキャスター
      • ただし、これは相性有利な相手が少ないということでもある
    • クラススキルにより 毎ターンNP3%獲得
  • NP獲得量アップ(3T)を持つ
  • 全サーヴァントで4番目の高攻撃力
  • 宝具強化済
  • 礼装およびマスター礼装の自由度が高い

特に最後の礼装・マスター礼装の自由度の高さが魅力であり、これはシステムの構築難度を低くするだけでなく、敵構成やイレギュラーへ高い対応力を持つことを意味する。 (ただし、エドモン自体を用意する難度は高いかもしれない。)


NP獲得量の計算

各waveにおいてNP50%(実際はNP49%でも)獲得することができればシステムを構築することができる。 また、宝具のみで必要分を確保することができればシステムの実現から運要素を除くことができる。 そこで、宝具のみのNP獲得量を計算することにする。

NP獲得量は以下の式によって計算される。

\begin{align} \text{NP獲得量} = \text{NP rate} &\times \{ \text{カード補正} \times \text{順序補正} \times ( 1 + \text{カード性能アップ} + \text{1stカード補正} \} \\ &\times ( 1 + \text{NP獲得量アップ} ) \\ &\times \text{OverKill補正} \\ &\times \text{クリティカル補正} \\ &\times \text{敵クラス補正} \\ &\times \text{ヒット数} \end{align}

ここで、各補正は以下の通りである。

名称 補正値
カード補正 Buster:0.0, Arts:3.0, Quick:1.0
順序補正 1st:1.0, 2nd:1.5, 3rd:2.0
1stカード補正 Buster:0.0, Arts:1.0, Quick:0.0
敵クラス補正 狂:0.8, 殺:0.9, 騎:1.1, 術・月:1.2, それ以外:1.0
OverKill補正 1.5
クリティカル補正 2.0

また、宝具によるNP獲得量を計算する場合には順序補正および1stカード補正は考慮されない。

では実際のNP獲得量を示す。

OverKill
発生回数
狂 殺 騎 術・月 それ以外
8 17.86 20.09 24.55 26.78 22.32
7 17.11 19.25 23.53 25.67 21.39
6 16.37 18.41 22.51 24.55 20.46
5 15.62 17.58 21.48 23.44 19.53
4 14.88 16.74 20.46 22.32 18.60
3 14.14 15.90 19.44 21.20 17.67
2 13.39 15.07 18.41 20.09 16.74
1 12.65 14.23 17.39 18.97 15.81
0 11.90 13.39 16.37 17.86 14.88

この表は 敵1体あたりのNP獲得量 である。

ここで、OverKill発生回数はOverKill補正を受けた攻撃が何回発生したかを表している。 すなわち、OverKill発生回数0はOverKill補正を受けていないことを表し、OverKill発生回数7は2ヒット目以降でOverKill補正を受けていることを表す。

敵が3体の場合

表より、騎・術・月に対してはOverKill補正なしで必要なNP獲得量を達成できる。 また、騎・術・月以外に対してはマスター礼装「魔術協会制服」を用いることで確実に必要分を確保できる。 OverKill補正を加味する場合、狂:3ヒット目以降、殺:5ヒット目以降にOverKillが発生するのであればマスター礼装を自由に設定できる。

敵が2体の場合

これは主に2wave目を想定している。

システムで利用することを考えると、各waveでエドモンが達成すべきNP獲得量は46.01である。 クラススキルにより毎ターンNP3%を獲得することができることと、NP99%時の特殊な挙動によるためである(なぜかNP99.01%以上では小数点以下が切り上げられる)。 したがって、要求される敵1体あたりのNP獲得量は 46.01 / 2 = 23.01 (23.005)である(あくまで平均的には)。

表より、何の補助なしにNP獲得量23.01を達成することは実用上難しいことがわかる。 したがって、「カルデア戦闘服」のオーダーチェンジを利用した控えサーヴァントによるNP付与、「魔術協会制服」の霊子譲渡によるNP付与、「2004年の断片」のコード:HによるNP獲得量アップ、etc...が要求される。

システム利用時は操作数の観点から、極力オーダーチェンジの使用を避けたい。 オーダーチェンジを除くと最も条件が緩くなるのは「魔術協会制服」の霊子譲渡を利用する方法である。 霊子譲渡によりNP20%を獲得できるため、エドモンが達成すべきNP獲得量は 26.01 / 2 = 13.01 (13.005) である。 したがって、狂以外の相手に対しては確実に必要なNP獲得量を確保することができ、狂相手であっても6ヒット目以降にOverKillが発生すれば必要分を確保できる。

また、2wave目が敵2体である場合、一方のみ高HPであることが多く、一方からのOverKill補正を得ることができない可能性もある。 その場合には、中〜低HPの方の敵から 46.01 - 20 - 11.90 = 14.20 のNPを獲得する必要がある。 これを達成するのは、6ヒット目以降でOverKillが発生する時であり、先ほどの条件と同じである。 つまり、「魔術協会制服」であれば一方が高HPであっても難なく対応可能であることが示されている。

「魔術協会制服」を使用する際の注意点として、火力方面の補助を行えないことに留意すべきである。 NP獲得量については多くの場合で達成できるが、対処可能な敵HPは他のマスター礼装と比較して低くなる。 敵HPによっては最速ターンで突破できるかどうかはカード運に左右される場合もあるため、後述する宝具火力を把握しておく必要がある。 ケースバイケースであるが、基本的に2wave目は確実に突破できるようにスカサハ=スカディの防御デバフを駆使することを推奨する(2wave目を1Tで突破できない場合、3wave目でQuickバフが消失してしまうため)。

時点で有効なのは「2004年の断片」によるNP獲得量アップを使用することである。 基本的にNP獲得が必要かつ敵が2体であるのは2wave目だけであることが多いので、NP獲得量アップは1Tだけでも問題は少ない。 また、後述するが「2004年の断片」は宝具威力アップも付与することができ、エドモンの宝具火力を大きく上昇させることもできる。

「2004年の断片」のNP獲得量アップバフを加味したNP獲得量

OverKill
発生回数
狂 殺 騎 術・月 それ以外
8 23.81 26.78 32.74 35.71 29.76
7 22.82 25.67 31.37 34.22 28.52
6 21.82 24.55 30.01 32.74 27.28
5 20.83 23.44 28.64 31.25 26.04
4 19.84 22.32 27.28 29.76 24.80
3 18.85 21.20 25.92 28.27 23.56
2 17.86 20.09 24.55 26.78 22.32
1 16.86 18.97 23.19 25.30 21.08
0 15.87 17.86 21.82 23.81 19.84

狂相手の場合は、1 hit 目で OverKill が発生するなら必要分を確保できる。 しかしながら、そのような場面はそう多くないと思われるので相手が狂である場合には素直に別のマスター礼装にするのが無難である(幸い、バサカならエドモンでも弱点倍率で攻撃できるので)。 狂以外の相手の場合には敵HPと宝具火力との兼ね合いによって実現可能かを判断すべきである。


宝具火力

次に、対応可能な敵のHPを見積もるために宝具火力を示す。 ダメージ計算の解説を始めると本記事が膨大な量になってしまうため、ここでは取り扱わない。 どうしても気になる場合には攻略wiki、ダメージ計算に関するTogetterなどを参照されたい。

システムの基本形である限界突破済みカレイドスコープ(Lv.100)、フォウくんによる攻撃力補正+1000での宝具火力を以下の表にまとめる。 ここで、天地人相性補正は1.0で計算している。 また、ダメージ計算には0.9〜1.1の乱数が発生するため、下限と上限の両方を示す。

宝具Lv 防デバフ使用数 ダメージ下限 ダメージ上限 ダメージ下限
自バフ使用
ダメージ上限
自バフ使用
0 45587 55666 68380 83499
1 1 59263 72366 82056 100199
2 72939 89066 95732 116899
0 56983 69583 85475 104374
2 1 74078 90458 102570 125249
2 91173 111332 119665 146124
0 62682 76541 94022 114812
3 1 81486 99504 112827 137774
2 100291 122466 131631 160737

このダメージはシステムの最小構成要素におけるバフ・デバフのみを考慮して計算されたものである。 そのため、マスター礼装およびオーダーチェンジを利用した他サーヴァントによる補助を視野に入れることで、ダメージは更に増加する。 ちなみに、最もダメージが増加するマスター礼装は「2004年の断片」であり(高倍率の宝具威力バフをかけることができるため)、表中の数値の1.5倍ほどダメージが増加する。

必要に応じてスカサハ=スカディの防御デバフを付与することで、幅広い敵構成に対応することができる。 敵HPがこれよりも高い場合には、残った分を通常攻撃ダメージで賄う必要がある。 残った分がスカサハ=スカディのQuickカード2回分で間に合う量であれば、カード運に依らず3Tで周回可能である。 そうでない場合には多少なりともカード運に左右されることになる(だからこそ、運要素を何とか排除できないかということで水着BBを検討した)。


まとめ

さて、以上のことからエドモンをアタッカーに据えたシステムが実用上有効であることが示された。 また、システムの基本構成を変更せずとも、マスター礼装を付け替えるだけで大半の場面に対応できることを確認することができた。

要点を以下にまとめる。

  • (敵が3体なら)基本的にシステムは成立
    • 火力面ではマスター礼装「2004年の断片」が最も有利
  • (敵が2体なら)マスター礼装「魔術協会制服」でほぼ対応可能
    • ただし、カード運に左右されるケースが増加
      • 極力2wave目は1T突破できるようにバフ・デバフを駆使する

本記事が周回勢に役立てば幸いである。

スカサハ=スカディシステムと水着 BB

○○システムとは

先に実装されたスカサハ=スカディによって FGO の周回環境は大きく変わった。

ご存知の通り、FGO ではプレイ時間の多くを育成素材入手やイベント進行などのためのクエスト周回に費やすことになる(もちろん、プレイスタイルによってはこの限りではない)。 この周回をより快適に、より効率的に行うために、ユーザーは様々な工夫を凝らしてきた。

その1つが システム と呼ばれる宝具の連続使用手法である。 これは Buster 以外の全体多段ヒット宝具による NP 獲得を利用して、アタッカー1人の宝具を連続で使用するものである。 代表的なシステムとして、水着モードレッド(通称サモさん)をアタッカーに据えたサモさんシステムがある。 サポーターに玉藻やネロ(ブライド)を採用して Arts 性能や NP 獲得量を強化し、更にオーバーキル補正を利用することによって宝具後に NP を 100% にまで到達させる。 要求されるのはアタッカーとそのサポーター、そしてアタッカーのための礼装(開始時 NP チャージ系)である。

システムを利用することの最大の利点はアタッカー以外の礼装枠が自由になることである。 単に宝具を連発して最速ターンでクリアするだけならばカレイドスコープを利用すれば良いが、その場合礼装枠の複数をカレイドスコープに占められることになる。 ネロ祭のような BOX 素材イベントではイベント礼装によるボーナスが効率に大きく影響を与えるため、イベント礼装を限界まで積むことができるシステムが重宝される。

これまで、システムのアタッカーとして利用されてきたのは Arts 宝具を持つサーヴァントであった (というより、システムと言った場合にはほとんどの場合サモさんシステムのことを指す。 稀にジーク)。 しかしながら、強力な Quick サポート能力を持つスカサハ=スカディの登場により、Quick 宝具を持つアタッカーもシステムとして採用できるようになった(これは一部で周回革命とも呼ばれている)。 Quick カードはクリティカル攻撃のためのスターを発生させるだけではなく、(Arts カードと比較すれば少ないが)NP を獲得することができる。 また、スカサハ=スカディは任意の味方に対して NP 50% を付与することができ、これを組み合わせることによってアタッカーの宝具連射を実現する。

話は脱線するが、これまでのシステムはアタッカーの名前を冠していたのに対し、Quick 主体のシステムはサポート役であるスカサハ=スカディの名前を冠している(場合が多いように見える)のは面白い。 まぁ、システムの核を成している存在の違いというだけなのだが。

従来システムと Quick 主体のシステムの違い

最大の違いはアタッカー宝具による NP 獲得量である。 Arts 主体の(というよりサモさん)システムは宝具による NP 獲得だけで NP 100% を目指す。 場合によっては NP 獲得量が 90% 程度となってしまうこともあるため、補助的に孔明などで不足分を補うことはあるものの、基本的には NP については宝具による獲得量だけで完結するように構築される。

一方で、Quick を主体としたシステムでは宝具による獲得量だけで NP100% を獲得するのは少し難しい。 そのため、システムの実現は宝具による NP 獲得だけではなく、スカサハ=スカディの NP 付与に大きく依存している。 これが従来システムと大いに異なる点である。

もっと端的に表現しよう。 従来の Arts 主体のシステムは(基本的に)2 wave 目以降サポート役を必要としないのに対し、Quick 主体のシステムは 2 wave 目以降もサポート役のスカサハ=スカディを必要とするわけである。

この違いは一見些末なように見える。 しかし、夏のサバ☆フェスイベントで実装された水着 BB の登場により、宝具だけでは敵を全滅させらない場合 において決定的な差を作る。

システムにおける BB の役割

クエストの最終 wave には高 HP の敵が出現することがあり、宝具だけでは敵を全滅させられない場合が存在する。 そして、そのような場合では宝具だけではなく通常攻撃を利用して敵の HP を削ることになる。 このとき、サポート役によって強化されたアタッカーのカードが存在すればよいが、サポート役のカードしか存在しなかった場合、通常攻撃を含めたとしても敵の HP を削りきれないことがある。

水着 BB はそのような場合をなくすのに一役買ってくれる。 水着 BB の第3スキル「無貌の月」はコマンドカードを最大で3ターンまでスキル使用時のものに固定するというトンデモスキルである。 このスキルがあれば、最終 wave でアタッカーのコマンドカードが存在しないという状況を確実に回避することができる(固定すれば最終 wave まで保持できる・固定するに値しない場合=アタッカーのカードが配られていない場合 なので欲しいアタッカーのカードは最終 wave で配られる)。 システムの安定性を向上するのに役立ちそうではないだろうか。

システムに BB を導入する際の問題

Arts 主体のシステムである場合、水着 BB の導入はそこまで問題にならない。 前述したように、サポート役が要求されるのは最初だけで、あとは任意のタイミングで控えから水着 BB を呼ぶだけでシステムに導入できるからである。

一方で Quick 主体のシステムでは 2 wave 目以降でもサポート役のスカサハ=スカディを必要とする。 これはすなわち、1 wave 目に必要なカードが全部来てしまった場合に対応できなくなってしまうことを意味する。 控えの水着 BB を呼んでしまっては、2 wave 目の NP 付与を使用できないためである。 このことから、Quick 主体のシステムにおいては水着 BB を組み込んでも恩恵は薄い。 3ターン周回の安定性をほんの少し高めることができる程度だと考えるべきである。

それでも水着 BB を使う

それでも、どうしても水着 BB を使って3ターン周回をしたい場合にはどうするか。 その場合にはシステムに拘らず、単に水着 BB とスカサハ=スカディを利用した3ターン周回に舵を切るべきである。 つまり

  • 1 wave 目を水着 BB の宝具で突破
  • 2, 3 wave 目をアタッカーの宝具(と通常攻撃)で突破

という方針である。 幸い、水着 BB は自前で NP50% チャージを行うことができる。 これと、スカサハ=スカディの NP50% 付与を組み合わせれば(アタッカーに限界突破したカレイドスコープを必要とするものの)礼装枠を5つ確保したまま3ターン周回は実現できる。 ただし、その場合は

  • 手順が面倒であり、かえって周回が大変になる
  • 2 wave 目に高 HP の敵が存在して突破にクリティカル攻撃が必要である場合、スターが無貌の月+ 水着 BB のクラススキル 分 + α 程度で突破する必要がある
  • オーダーチェンジ必須のため、2 wave 目の敵が2体しか存在しない場合に霊子譲渡などで対応できない

という点に留意しなければならない。

おそらく、このような手順を踏むよりは水着 BB なしで3〜4ターン周回にした方がお手軽ではある。

Emacs の環境構築

Emacs の環境構築

「Emacs はいいぞ」と言われたので環境構築しました。

基本的な設定と必要になりそうなところだけ。

GNU Emacs のインストール

brew で入れます。

$ brew install emacs --with-cocoa

私は軟派なので --with-cocoa で GUI 版も入れてます。

追記(2020 1/3) --with-cocoaオプションは#36070でなくなりました。 2020年1月現在、brewでGUI版を入れる場合には以下のようにします。

$ brew cask install emacs

多分 GUI 版の方をメインで使うと思うので /Applications/ にシンボリックリンクを張って、Dock に追加しておきます。

ln -s /usr/local/Caskroom/emacs/26.3/Emacs.app /Applications/Emacs.app

コマンドラインから Emacs を使うときに GUI を起動されても困るので次のようにエイリアスしておく。

# in .zshrc
alias emacs="emacs -nw"

あと、このままだと Mac にデフォルトで入っている Emacs が優先されてしまう (/usr/bin/emacs) ため、 brew で入れた Emacs のパス(/usr/local/bin/emacs)が優先されるように変更しておく。

# in .zshenv
PATH=/usr/local/bin:$PATH
export PATH

これで導入はだいたい完了。

Emacs の設定

Emacs の設定は ~/.emacs.d/init.el に記述する。 .el は Emacs Lisp の略のようで、Emacs の設定や拡張は Lisp の Emacs 方言で記述するようだ。

PATH の設定

Emacs は .el によって拡張可能なエディタである。 この .el を入れておくためのディレクトリを作成しておく。

mkdir ~/.emacs.d/elisp

以後、拡張するための Emacs Lisp は ~/.emacs.d/elisp に配置する。 ここに配置した Emacs Lisp を読み込むように、~/.emacs.d/init.el に設定を加える。

;; Load path
(defun add-to-load-path (&rest paths)
  (let (path)
    (dolist (path paths paths)
      (let ((default-directory (expand-file-name
                (concat user-emacs-directory path))))
        (add-to-list 'load-path default-directory)
        (if (fboundp 'normal-top-level-add-subdirs-to-load-path)
            (normal-top-level-add-subdirs-to-load-path))))))
(add-to-load-path "elisp")

ココを参考にしました。

パッケージ管理

Emacs はバージョン24以降、パッケージ管理機能が用意されている。 この機能を利用するための設定を記述する。

(この設定はできるだけ早く(設定ファイルの上の方で)記述したほうが良いらしい。)

(require 'package)
(add-to-list 'package-archives
         '("melpa" . "https://melpa.org/packages/"))
(add-to-list 'package-archives
         '("melpa-stable" . "https://stable.melpa.org/packages/"))
(setq package-user-dir "~/.emacs.d/elisp/package")
(package-initialize)

package-user-dir でパッケージのインストール先を指定している。 一応自作(するかわからないけど)の Emacs Lisp と区別するために ~/.emacs.d/elisp 以下にパッケージ管理用のディレクトリを指定。

PATH の共有

GUI 版の Emacs ではシェルの PATH 設定を引き継いでくれません(CUI の方は引き継いでくれてる)。

なのでシェルの PATH 設定を Emacs に共有させるための設定をします。

まず、M-x package-install から exec-path-from-shell をインストール。 インストールしたら設定ファイルに以下を記述。

;; PATH initialization
(when window-system
  (require 'exec-path-from-shell)
  (exec-path-from-shell-initialize))

M-x getenv から PATH と入力して Emacs の環境変数を出力すればシェルの PATH が引き継がれていることを確認できる。

Command キーの設定

Emacs は独特のキー操作を要求される(Ctrl を押しながらや Meta を押しながらといったような)。 GUI 版の Emacs では Meta キーは Option キーに対応している。 しかし、これだと使いにくいので、Command キーに対応するように入れ替える。

;; Meta -> Command
(setq ns-command-modifier (quote meta))
(setq ns-alternate-modifier (quote super))

また、CUI の Emacs でも Meta キーを利用するためにはターミナルの環境設定を弄る。 ターミナルの環境設定からプロファイルを選択。 使用しているプロファイルを選択して、キーボードを選び、メタキーとして Option キーを使用にチェックを入れればOK。

シンプル表示

GUI 版の Emacs ではツールバーやスクロールバーなど、結構ゴテゴテしているのでそこらへんをまとめて非表示に。

;; Display
(when (fboundp 'menu-bar-mode) (menu-bar-mode -1))
(when (fboundp 'tool-bar-mode) (tool-bar-mode -1))
(when (fboundp 'scroll-bar-mode) (scroll-bar-mode -1))
(line-number-mode 0)
(custom-set-variables '(blink-cursor-mode nil))

ついでに行番号とカーソル点滅も無効に。

バックアップファイルの無効

Emacs ではファイルを編集するとバックアップ用のファイル( ~ )が自動で作成される(例えば hoge.txt なら hoge.txt~)。 これは便利かもしれないけどディレクトリを汚すのが若干気になるので一応無効にしておく、けどもしかしたら戻すかもしれない。

;; Backup file
(setq backup-inhibited t)

Key-Bindings

よく使いそうな機能のショートカットを設定しておく。

;; Global-Key
(global-set-key "\C-z" nil)
(global-set-key "\C-ca" 'align)
(global-set-key "\C-cg" 'goto-line)
(global-set-key "\C-cl" 'what-line)
(global-set-key "\C-c;" 'comment-region)
(global-set-key "\C-c:" 'uncomment-region)
(global-set-key "\C-co" '(lambda () "" (interactive) (other-frame -1)))
(global-set-key "\C-ci" '(lambda () "" (interactive) (other-frame 1)))
(global-set-key "\C-c " 'text-adjust-space-region)

;; Minibuffer
(define-key minibuffer-local-completion-map "\C-w" 'backward-kill-word)

Emacs は様々なモードを切り替えてファイルの編集を行う。 ここではどのモードでも使いそうな操作についてグローバルなショートカットを設定。 また、minibuffer 中(主に\C-x\C-f)で単語消去するための設定も。

外観の設定

GUI 版の外観を設定する。 不要なものを非表示にとかやってたのに外観は弄るのかとかいうツッコミはなしで。

まずカラーテーマを設定。 暗めのテーマが好きなので良さげなのを入れる。 M-x package-install を実行して color-theme-sanityinc-tomorrow と入力。 インストールが終わったら設定ファイルに以下を追加。

;; Theme
(when window-system
  (load-theme 'sanityinc-tomorrow-night))

C-hv window-system で調べると自分の GUI 環境だと ns とでるので、このときだけカラーテーマをロードするようにする。 初回はテーマを読み込んでいいか質問されるので y と答える(設定ファイルに自動的に色々追加される)。

次にフォントを設定する。

;; Font
(when window-system
  (set-face-attribute 'default nil
                      :family "Monaco"
                      :height 130)
  (set-fontset-font "fontset-default"
                    'japanese-jisx0208
                    '("Hiragino Maru Gothic ProN"))
  (set-fontset-font "fontset-default"
                    'katakana-jisx0201
                    '("Hiragino Maru Gothic ProN")))

英字は Monaco, 日本語はヒラギノに設定。

これで大まかな設定は終了。 以降は Minor mode を設定していく。

Markdown-mode

;; Markdonw-mode
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode))
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode))

M-x package-install から markdown-mode をインストール。 .md および .markdown であったら自動的に markdown-mode で開くように設定。

C-mode

;; c-mode
(add-hook 'c-mode-hook
      #'(lambda ()
         (progn
           (setq c-default-style "k&r")
           (define-key c-mode-base-map "\C-m" 'newline-and-indent)
           (setq c-basic-offset 4 indent-tab-mode nil))))

もう C のコードを弄る機会は減ってきたけど、まだまだ触ることもあるので一応設定。

Python-mode

;; Python-mode
(require 'py-autopep8)
(add-hook 'python-mode-hook
      #'(lambda ()
         (define-key python-mode-map "\C-cF" 'py-autopep8)
         (define-key python-mode-map "\C-cf" 'py-autopep8-region)  
         (setq indent-tabs-mode nil)
         (setq indent-level 4)
         (setq python-indent 4)
         (setq tab-width 4)))

Python はコードのレイアウトが非常に重要な意味を持つ言語で、PEP8 という標準的なコーディング規約が存在する。 このコーディング規約に自動的に整形してくれる autopep8 を Emacs 上で実行するのが py-autopep8 であり、package-install でインストールした。 また、簡単に利用するためにキーバインディングを設定した。

autopep8 自体は pip でインストールした。 autopep8 はグローバルで使いたい機能であるので、pyenv で作成した Python 環境にベースとして入れている。

Java-mode

;; Java-mode
(add-hook 'java-mode-hook
      #'(lambda ()
        (setq c-basic-offset 4)
        (setq indent-tabs-mode t)
            (setq tab-width 4)))

おわりに

と、最低限の設定だけしてみた。

あとは構文チェック用のパッケージだとかその辺を必要に応じて入れてみる。

Python における環境構築

Python における環境構築

Pyenv + Pipenv で Python の仮想環境を構築した際の備忘録。

Python の環境構築については既に様々な人が解説してくれています。 それを参考に、ド素人な自分用にちょいちょいメモを追加。

Pyenv

Python 自体のバージョン管理に使用する。

インストール

$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv

設定

shell の設定ファイルに以下を追加。 自分は ~/.zshenv に記述した。

# for pyenv
export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"

Python のインストール

Pyenv を利用して指定のバージョンの Python をインストールする。

$ pyenv install 3.6.5
$ pyenv rehash

新しいバージョンの Python をインストールした場合、pyenv rehash を実行して shims コマンドを更新する。

ちなみに shims コマンドは、使用するバージョンにおける python や pip などのコマンドで ~/.pyenv/shims 以下に配置されている。

使用する Python の指定

以下のコマンドで基本的に使用される Python のバージョンを指定できる。

$ pyenv global 3.6.5

なお、そのディレクトリのみといったように局所的に使用したい場合は次のように指定する。

$ pyenv local 3.6.5

pyenv local でローカルに Python のバージョンを指定した場合、実行したディレクトリに .python-version が作成される。

Python の削除

もし特定のバージョンの Python をアンインストールしたい場合には以下のようにする。

$ pyenv uninstall 3.6.5

Pipenv

仮想環境の管理およびパッケージ管理の両方を行うために使用する。

pipenv のインストール

pip でインストールする。

$ pip install pipenv

pip で入れるものを管理するための Pipenv を pip で入れるという何とも不思議な感覚。

仮想環境の構築とパッケージのインストール

Python で開発を行う場合には、プロジェクトごとに仮想環境を作成するのが一般的らしい。 プロジェクトのディレクトリで以下を実行。

$ pipenv install
$ ls
>> Pipfile Pipfile.lock

できたてホヤホヤのまっさらなディレクトリであった場合、Pipfile と Pipfile.lock が作成されているはずである。

Pipenv は Pipfile と Pipfile.lock というファイルによって仮想環境およびパッケージを管理している。 既に Pipfile, Pipfile.lock が存在している状態で pipenv install を実行した場合、Pipfile 内の dev-dependencies に記述されている部分を除いたパッケージのインストールされた仮想環境を構築する。 したがって、プロジェクトを公開する場合には Pipfile, Pipfile.lock を含めておけば利用者は必要な環境を容易に再構築することができる。

新しいパッケージを追加する場合には以下のように追加する。

$ pipenv install numpy
$ pipenv install --dev autopep8

1行目には Numpy というパッケージを追加する例を示した。 パッケージをインストールすると Pipfile, Pipfile.lock が自動的に更新される。

2行目には開発用パッケージとして autopep8 を追加する例を示した。 開発用パッケージとして追加した場合、Pipfile, Pipfile.lock からの pipenv install でインストールされるパッケージに含まれなくなる。 コード整形やデバッグのためだけに使うパッケージであれば開発用で追加するのが良い。 もし、開発用パッケージも含めて再構築したい場合には pipenv install --dev とする。

仮想環境のアクティベート

pipenv run により、仮想環境をアクティベートした Python を実行可能である。

# hoge.py
import numpy as np

a = np.arange(9).reshape(3, 3)
print(a)
$ pipenv run python hoge.py
>> [[0 1 2]
>>  [3 4 5]
>>  [6 7 8]]

インストールした Numpy が利用可能であることがわかる。

ちなみに、構築した環境を使用しない場合は Numpy がインストールされていないため動作しない。

$ python hoge.py
>> Traceback (most recent call last):
>>   File "hoge.py", line 1, in <module>
>>     import numpy as np
>> ModuleNotFoundError: No module named 'numpy'

また、pipenv shell を使用すれば、仮想環境をアクティベートした shell が起動される。

$ pipenv shell
>> Spawning environment shell (/bin/zsh). Use 'exit' to leave.
>> . ~/.local/share/virtualenvs/projects-idXXXX/bin/activate

また、この shell 内での pip install hoge は、pipenv install hoge と同じである(多分)。 pip install hoge の結果も Pipfile, Pipfile.lock に反映される。

余談

上述したように、Python で開発を行う場合にはプロジェクトごとに仮想環境を作成するのが一般的らしい。 しかし、Python を普段使いしてると conda みたいにグローバルに利用できる仮想環境が使いたい場合もまあまあある。

そういう時はどうすればいいんだろう? Pipfile と Pipfile.lock だけを管理するディレクトリを作って、必要に応じて pipenv shell でアクティベートとか?