庚午里藻の日記

見た映画とかアニメの備忘録にしたり、パソコンいじったことのメモにしたり

FGOのコマンドカードの配布を記録したりするツールを自作してみた話

どうも。1200万ダウンロードがもし村正だったらとうとう福袋以外で初めて課金をしようか割と本気で悩んでいる庚午里藻です。

夏にNode.jsをちょっとだけ勉強してからほったらかしにしてしまっていたので、改めて勉強し直そうということで最終的にwebページを作ることを目標に少し頑張って見たという話です。

今回は何を作ったかをざっと書いて、そのあとで何を使って作ったかとか、どういう風に作ったとかを簡単に書こうと思います。Node.jsのセットアップ方法などを解説する記事のつもりではないので悪しからず、という感じです。

とりあえず、作ったものについては

https://obscure-harbor-60615.herokuapp.com

においてあるので、よかったら見てみてください。

2018年4月26日修正 herokuのデフォルトのアドレスダサかったんで変更しました。使ってる人もほとんどいないと思って。一応以降は下のアドレス使ってください

https://kanoe310mo-fgotools.herokuapp.com

作ったものの説明

ものとしては、FGOにおけるツールを作っています。 f:id:kanoeuma_310mo:20180226232149p:plain トップページはこんな感じ。一応機能としては2つおいてあって、1つ目はコマンドカード構成の表示、2つ目はAPが回復する時間の表示をするツールです。

具体的に1つずつコメントしていきたいと思います。

コマンドカードの構成の表示

FGOはそれぞれのサーヴァントが5枚ずつ、Buster、Arts、Quickという種類のカードを固有の配分で持っています。そして、基本的にサーヴァントが3人いる状態で毎ターン配られる5枚のカードのうち、3枚を選択して攻撃を行います。つまり、合計15枚のカードを3ターン周期でランダムに配布していく構成になります。そのため、基本的には3の倍数ターン目に配布されるカードは事前に予想できるのですが、それを覚えているのが割とめんどくさい。だったら画面に表示させちゃえばいいじゃん、というのがこのページの想定している使い方です。 実際のケースを示してにどんな風に使うのか説明したいと思います。とりあえず、虚影の塵目当てで周回している空の境界コラボの602号室を例にします。 f:id:kanoeuma_310mo:20180226235435p:plain 最初の画面はこんな感じ。これに従って f:id:kanoeuma_310mo:20180226235553p:plain このようにサーヴァントを指定すると、 f:id:kanoeuma_310mo:20180226235616p:plain このように表示されます。

最初の画面でメカエリチャンのBuster、ジャンタのQuick、Arts、Buster、ナイチンゲールのBusterが配られるので、そこをクリックして使用済みにします。 f:id:kanoeuma_310mo:20180226235958p:plain

次のターンに配布されるカードは f:id:kanoeuma_310mo:20180227000042p:plain こんな感じなので、さっきと同様に f:id:kanoeuma_310mo:20180227000124p:plain 使用済みのカードをクリックします。

これを見れば、次のターンにメカエリチャンのQuick、Arts、Buster、ジャンタのQuick、ナイチンゲールのQuickが配られるはずです。ということで3ターン目の配布カードはこちら! f:id:kanoeuma_310mo:20180227000312p:plain ということで3ターン目のカードを事前に把握することができました。

この例では恩恵がわかりにくいですが、1ターン後に効果が発動するスキルや、宝具発動時にブレイブチェイン等が組めるのかということを把握するのに対しては有用だと思います。 サーヴァントの入れ替えにも対応しています。

APが回復する時間の表示

これは昔適当に作ったものを移植したものなので色々とザコいのですが、せっかくなので組み入れました。APというのはFGOにおける体力で、5分で1回復します。なので計算することは全然難しくないのですが、1時間で12回復なので直感的にいつ回復するかわかりづらいと思います。(様々な異論反論を無視して自分の説明を続ける構え)

例えば今現在(2018/2/27 0:12)APが111だったとします。この時に138までAPが回復する時間を調べたいときは f:id:kanoeuma_310mo:20180227001439p:plain このように入力をします。すると f:id:kanoeuma_310mo:20180227001459p:plain このように回復する時間が表示されました。

何を使って作ったか

何を使って作ったかというと、Node.jsということになるんでしょうか。正直あんまりわかっていないんですが、一応Expressというフレームワークを使用しています。最初のモチベーションとしては「データベースで値を管理しています(ドヤァ」って言ってみたかったみたいなところがあって、コマンドカードの表示を行うところはsqliteから引っ張ってきています。そこらへんの作業はNode.jsにお任せって感じでした。Node.jsすごい。

僕自身完全に理解しているわけではないので今回は参考にした本の紹介をしてお茶を濁そうを思います。

Node.js超入門

https://www.amazon.co.jp/dp/B075R3WRXM/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

初心者にもわかりやすい書き方をしていて読みやすかったです。vscode のどこにファイルを配置するのかいちいち画像を貼り付けてくれていたり、右も左もわからなくても読めるようになっていて好印象でした。データベースからどうやって値を引っ張ってくるのか、とかは全部これを参照しています。

個人的な不満点としては、誤字脱字が多いこととちょくちょく読者を本の中で煽ってくることです。少なくとも僕は読んでいて煽られたと思いました。強い人は煽るつもりなんてないのかもしれないけれどあんまり煽って欲しくはないです。(学科でのトラウマが噴き出しそうになっている顔)あと、そもそもNode.jsの入門書としてこれがいつまで「使える」のかはわかりません。あくまで現時点でよかった、ということでよろしくお願いします。

これからWebをはじめる人のHTML&CSS, JavaScriptのきほんのきほん

https://www.amazon.co.jp/dp/B06XT19H2D/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

これも読みやすかった。そもそも複雑なことしてないみたいなところはありそうだけど。

今どういう風に作業を進めているか、という画像がふんだんに入っていてわかりやすいです。とりあえずやってみる、ということに関してはうってつけだと思います。

JavaScript本格入門

https://www.amazon.co.jp/dp/B01LYO6C1N/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

辞書感覚で使ってます。困ったら生のJavaScriptに関することだったら大体乗ってるので手元にあるとやりやすいかもです。

僕が使った本はこんな感じです。僕でも読めた本たちなのでもしよかったら参考にしてみてはいかがでしょうか。

残念な点、課題

サーヴァントの選択欄にデータベースが使えなかった

これは僕がデータベース作った時のミスなんですが、最初はテキスト入力方式でサーヴァントを指定していたのでデータベースにはクラスやレアリティの情報入れていなくて、そのせいでプルダウンメニューに変えたときに「ここでデータベース使えへんやんけ!」ってなってしまいました。データベースを書き換える(方法を調べる)のが辛かったのでここはベタ書きで押し切ってしまいましたorz

2018/3/3 修正 今回はデータベースの作成において DB Browser for SQLite を使ったのですが、それに関してはこのページとかに

テーブルの作成/修正/削除 - DB Browser for SQLiteの使い方

少しググればカラムの追加くらい書いてありましたorz

なので、データベースにサーヴァントのクラスのカラムを追加しればベタ書きからは脱却できました。

オーダーチェンジに対応していない

これは

https://obscure-harbor-60615.herokuapp.com

の該当箇所にも書いたんですが、オーダーチェンジ時のカード配布に対応できなかったです。メンバー変更におけるオーダーチェンジの比率は結構あるので対応させたかったのですが、断念してしまいました。現状ではカードを使い切った絶妙なタイミングでオダチェンするか、どれまでの使用カードを覚えておいてもらうようになっています。クソサイトですね。

余談ですが、オダチェンした後のカード配布について、意外と書かれていなかったので一応書いときます。オダチェンした後は残った2騎のサーヴァントと交代したサーヴァントのカードが同時に使い切られない自体が発生します。例えば、1ターン目で2騎から4枚、オダチェンさせられるサーヴァントから1枚選択された上で2ターン目にオダチェンをしたとします。すると、残った2騎のカードは後6枚、追加されたサーヴァントのカードは残り5枚となってしまい、一気に使い終わりません。この時カードがどう配布されるのかというと、残り2騎は2ターン目、3ターン目でカードを使いきり、追加サーヴァントは交代したサーヴァントのカードを埋める形で手持ちのカードから出していきます。その上で3ターン目が終わると、追加サーヴァントの切っていないカードは無視してリセットされるみたいです。1回しか試してないので多分そうだ、と言った程度の情報ですが。

少し頑張ったら対応できました。ただ、今度はコマンドコードにまだ対応していない問題があるんですけど。

ちなみにオダチェン後に配られる追加サーヴァントの配布カードにもある程度規則があるみたいで

【FGO】コマンドカード配布法則の例外 - FGO攻略Wiki|Fate/Grand Order

こことかわかりやすかったです。

そもそもいちいちコマンドカードの構成を見なくても大体勝てる

FGOは、サーヴァントさえ育てきってしまえば、大体の戦闘は勝ててしまうので、コマンドカードの配布ってそこまで神経質になる事柄でもないんですよねえ。というか残り何があるのかくらい戦闘画面から見れるようにしてください。(その機能まだないよね?あったらクソ恥ずかしい)

というかFGOやってる時スマホの画面FGOに取られてるじゃん!!!

これですよ、最大の問題は。なので想定ケースとしてはスマートフォンタブレットの2台持ちの人とか、家でPC広げてまったりやるとか、PC使う大学の授業で隠れてやるとか(少なくとも僕の大学ではそういう人いるし、公式のアンケートでもそういう選択肢あったし、ない話ではないと思います)かな。なんにせよあんまり使い勝手が良くありません。これに関してはアイデアを思いついた直後に気づいたんですが、それ以上のアイデアも出なかったので見て見ぬ振りをして押し切りました。

大体こんな感じです。ここまで読んでくれた酔狂な方がいたら、どうもありがとうございました。