【オンゲキ】セガ税を脱税した話【スプレッドシート】
皆さん始めまして、とんえぼのpiyoと申します。
こちらは2022アドカレ企画22日目の記事となっています。Chrocatzくんの代打なのか、どっちも出るのか、どっちも出ないのかはよく分かりません。
まだ他の記事を読んでいない方は以下からどうぞ!
tonevoadventcalendar.hatenablog.com
目次
0.はじめに
これは昨年の話です。オンゲキで虹レートになろうと躍起になっていた当時の私は、どの曲でレートを稼いでいるのか知りたいと思いました。でも、オンゲキ-Netさんはプレミアムコースに入らないとレーティング対象曲を見せてくれないのです!他の2機種をやっているわけではないし、550円はちょっとなあと思い諦めかけていました。
チュウニとマイマイはスタンダードコースでいいんだ、ふーん……
しかし、私は気付きました。各曲の自分のスコアは無料のコースでも全て見られるじゃないか、と。つまり、
全ての曲のスコアを自力で記録すれば、自分のベスト枠がわかるのではないか?
そう閃いた私は、ゲキチュウマイ-Netプレミアムコース代月額550円・通称セガ税をケチるために、スプレッドシートを開いたのでした……
☆今回の記事は、そんなこんなでベスト枠を自力で計算したときの方法を書き留める備忘録兼、スプレッドシートをどう書いたかを紹介するものです。私が初学者なのでおかしい点などあるやもしれませんが、できるだけ分かりやすいように書いていきたいと思います。
1.オンゲキのレート計算について
まずは敵を知るところから。知っている人は読み飛ばしましょう
1.1. 曲別定数
オンゲキの曲は譜面毎に譜面定数があり、これに応じて曲別にレートが定められる。
レートの計算は以下の様になっている。一定の段階毎に線形に上昇しており、最大で譜面定数+2.0までのレート値を獲得できることが分かる。
スコア | レート | レート上昇率 |
---|---|---|
1007500~ |
譜面定数+2.0
|
上昇しない
|
1000000~ |
譜面定数+1.5
|
1500点毎0.1
|
970000~ |
譜面定数±0.0
|
2000点毎0.1
|
~970000 |
|
1750点毎0.1?
|
1.2.レート対象楽曲について
曲(譜面)が収録されたバージョンによって分けられ、ベスト枠(30)、新曲枠(15)、リセント枠(10)の計55譜面の曲別レートの平均が実際の表示レートとなる。
参考文献:レーティングシステム - オンゲキ【音撃‐O.N.G.E.K.I-】攻略 Wiki*
レポートか?
細かいことは参考文献で。でも最低限これだけ分かれば大丈夫。
2.スコア表の作成
2.1.表を作る
上記のことから、これから作るべきスコア表に最低限必要な要素は
- 譜面名(曲名と難易度)
- 譜面定数
- 収録バージョン
- 自分がとったスコア
の組み合わせであると分かりました。では早速取り組んでいきましょう。
スプレッドシートを開いて、一番上の行に、名前、定数、バージョン、スコアを書いて……あとはこれに曲をどんどん書いていきましょう。
名前、定数、バージョン、スコア……
なまえ、ていすう、ばーじょん、すこあ……
終わらん!!(記事を書くのも)
全部手打ちでやるのは大変ですね。なんてったってオンゲキには800曲以上も曲があります*1。楽できるところはしましょう。
2.2.データを入れる①
世の中には全ての曲と定数諸々をデータベース化してくれている方々がいます。ここから(勝手に)取得してみましょう。*2
表を上から下までずざーとコピーしてもいいのですが、せっかくなので
-
スプレッドシートの便利な関数紹介①「IMPORTHTML」
webからスクレイピング*3をするとき、IMPORTなんちゃらは総じて優秀です。「IMPORTXML」とかがよく言われるようですが、私がよく分かっていないしここにこれを書くのは大変なので……
使い方ですが、
=IMPORTHTML("[URL]","table")
のように、URLを張ってぺちぺちすると色々出て来ます。これだけです。
Tips* こんな感じで得たデータをコピペするとき、普通にCtrl+Vでやると書式が変になったり、REF!とか怒られたりすることがあると思います。そういうとき、値の貼り付けをする時はCtrl+Shift+Vを使いましょう。
2.3.データを入れる②
……さて、大量のデータを取り込めたとは思いますが、欲しいものはまだ足りていないですね。次は、曲の実装日からバージョンを求めてみましょう。
- スプレッドシートの便利な関数紹介②「XLOOKUP」
これが書きたくてアドカレを申し込んだのではないかと思うほどXLOOKUP信者です。
検索データを検索先のセルから探すことで、データの結合が出来ます。
まず、各バージョンの起動日とバージョン名の表を作ります。そしたら、曲の日付の横に=XLOOKUP([日付のセル],[軌道日の列],[バージョン名の列],"",-1)としましょう。
これをオートフィル*4すれば完成です。
どうしてこんなに推すのか?VLOOKUPくんには苦い思い出があるから。検索範囲と結果の範囲を別に拾えるから検索キーが一番左にある必要もないし、途中で列を追加したときに急に違う部分が参照されたりしないし、検索結果を配列で出せるから変更が簡単だし、いやースプレッドシートにXLOOKUOPが来てくれて本当に嬉しい
2.4.データを入れる③
さて、あとは自分のスコアですね。これについてですが……
オンゲキ-Netから一つ一つコピペ
です。もう一度言いますが
オンゲキ-Netから一つ一つコピペ
です。これが月給550円のバイトです。どうしても楽できなさそうなところです。*5
全部やると日が沈むので自分のレートに乗ってそうなものからぼちぼちポチポチやっていきました。
2.5.データから算出する
これまでで、必要な情報は集まりました(?)。それではレートを計算してみましょう。
1.曲別レート
1.1.から、譜面定数とスコアがあればレートの計算が出来ますね。どうやってたっけ……
=max(IF(H2>=1007500,G2+2,IF(H2>1000000,G2+1.5+(H2-1000000)/15000,G2+(H2-970000)/20000)),0)
きったな!今いい案も思いつきません。まあ動けばヨシ!
2.ベスト枠、リセント枠
対象レート曲を計算するのは別のシートがよいでしょう*6。前準備として、新しいシート左上の方のどっかのセルに現在のバージョン(新曲枠対象)を記入しておきます。
- スプレッドシートの便利な関数紹介③「FILTER」
このために(略)
配列のうち、条件に合うものだけを抜き出します。この関数によってさっきのデータ列から新曲の対象のみ/新曲以外のみに分けることが出来ます。
=FILTER([さっきのシートの全選択],[バージョンが書いてある列]=[現在のバージョン])
とすれば新曲のみが出てくることでしょう。スピル*7を使用しているため、範囲に記入済のセルがあると展開されません。周りには気をつけて使いましょう。
Q.これをするだけならさっきのデータにフィルタを掛ければいいのでは?
A.そうです。
これを使ってやりたいことは、ベスト枠の計算です。以下の式で計算出来ます。
ベスト枠=ARRAYFORMULA(AVERAGE(LARGE(FILTER('[レートを計算した列だけ],'[バージョンを書いた列]<>[さっきバージョンを書いたセル]),ROW($1:$30))))
新曲枠=ARRAYFORMULA(AVERAGE(LARGE(FILTER('[レートを計算した列だけ],'[バージョンを書いた列]=[さっきバージョンを書いたセル]),ROW($1:$15))))
- スプレッドシートの便利な関数紹介④「ARRAYFORMULA」
便利というかないと困る奴ですね。配列で指定した数式がちゃんと配列で出力されるようになります。FILTERさんはもとから配列を返すつもりがあるからいらないのですが、元々は一つの数字を返すような関数に対しては必要です。
今回はLARGE関数がそれに当たります。配列にさせてる悪さをしてるのがROW関数ですね。下の新曲枠の式をざっくり解説すると、新曲のレート値の中から1番高いもの~15番目に高いものを返して、それをAVERAGE関数に渡して全体の平均をとっています。
こうしてついに、闇の中にあった新曲枠とベスト枠を、自力で計算することが出来ました!
……リセント枠?何それ美味しいの
ちなみに1.2.から、現在のレートとこの新曲枠、ベスト枠からリセント枠を逆算することは出来ます。これで今は上振れてるとか終わってらっしゃるとかが分かります。
2.6.拡張する
結構手間の掛かる作業がありましたが、それを乗り越えてしまえば感動もひとしおです。折角のあなただけのデータベースです。好きなように欲しいものを足していきましょう!一度全て埋めた後は、あとは日々のスコアの更新と新曲の追加だけで済みますからね! ん、新曲……?
私は、日付とレートも記録するようにしました。これで自分の成長が目で見えるように……
あ、あれ?半年伸びてない??
3.さいごに
オンゲキの新バージョンを心の底から待ち望んでおります