【超速GP】強化バグ 通信解析で判明したパーツ強化値の水増し表示
概要
超速グランプリ Ver.1.1.2のパーツ改造・強化処理にはバグがあり、ゲーム画面に表示されるステータスは実際の値より最大1割程度過大になっている。同じような改造を重ねることで上乗せされるはずの強化値が反映されていないようだ。
前書き
バンダイナムコエンターテインメントが提供するスマートフォン向けゲーム『ミニ四駆 超速グランプリ』(以下、超速GP)が、かつてない程に炎上している。
563名無しですよ、名無し!(三重県) (ワッチョイW 4d48-1JX6)2020/04/07(火) 08:33:57.54ID:5isvv+t90
経緯まとめ
過去ずっと効果が実感ない改造(制振、ギヤ不可を筆頭に)多くあったが検証する余裕もないので謎のまま過ぎる
↓
3月末 疑問に思ったスレ民一人がパワロス、ギヤ負荷について検証し、改造の効果がないこと確認、報告で話題になる それを見てTwitter民が軽量についても検証して確認 プレ氏がリツイート
↓
バレたので慌てて運営がお知らせ
「重さが強化分"診断に"反映されていない不具合がある」
とあたかも診断だけの不具合のように報告
が、サイクロンガチャが出て話題がそっちへ
↓
新コースて空転走行が発見され、タイムに乱数がでなくなり検証がわかりやすくなる
↓
プレ氏、運営に問い合わせをするが自分で検証してくださいと言われ、検証 パワロス、ギヤ負荷の強化無意味検証結果をyoutube投稿
↓
【ここからが問題】
同じくスレでパワロスギヤ負荷で問い合わせたところ返答で、「3/25アプデ後も継続して発生していてすみません」と"不具合として認知していながらも周知していないこと"が発覚
↓
同じく制振、ローラー摩擦減、エアロダウンフォース等マイナス値にしていくものが強化効果不具合確認報告(ロクロウがその旨動画投稿)
また制振等について問い合わせをしても「3/25アプデ後も~」のテンプレ回答しか返ってこず プレ氏が問い合わせても同様
コイン、ショップ更新、マシン診断等、挙げ句赤石販売まで始め、課金にかなり影響するところであるにも関わらず効果のない不具合を把握していながら、それを"周知せずに"放置して課金させつづけていたこと(詐欺)、またその対応が不誠実すぎてユーザー激怒
慣らしレブで作り直した人をはじめとし、それに伴い強化した人含めほとんどの人が騙されて課金した人残念でした状態 周知より課金優先
ユーザー馬鹿にされまくり
この減算系強化無効バグの検証がてらパケットを眺めていたところ、ゲーム画面に表示されているステータスとゲームサーバから送られてくるステータスとが異なる場合があることに気付いた。
マシン診断にてマシン詳細の「重さ」と診断結果の「重さ」の値が異なっており、強化時のデータ反映の不具合が発生している。
というのは運営のお知らせ(3/24付)でも既出の通りだが、加算系強化の多く含まれる「スピード」「パワー」「コーナー安定」「耐久」が一致しないのは減算系強化無効バグだけでは説明できない。
未改造・未強化は差異なし
まずは正常系のデータから見ていこう。パーツを付け外しして検証した結果、未改造・未強化の場合にはステータスが一致することが分かったため、全てのパーツが未改造のマグナムセイバーを用意した。
マシンセッティング画面を開いたり、パーツを付け替えたり、マシン診断の結果を表示する度に、サーバからは次のようなJSONデータが送信されてくる。
"calcBasicParams": [
{
"paramUnitsId": 1,
"value": 17700
},
{
"paramUnitsId": 2,
"value": 8210
},
{
"paramUnitsId": 3,
"value": 19220
},
{
"paramUnitsId": 4,
"value": 1980
},
{
"paramUnitsId": 5,
"value": 1102
}
],
この"paramUnitsId"はマシン詳細の各ステータスに対応しており、上から順に
1. スピード…1/10
2. パワー…1/10
3. コーナー安定…1/1000
4. スタミナ耐久…1/100
5. 重さ…1/10
の係数を掛けた値がゲーム画面に表示されるステータスとなる。
改造・強化済みは差異あり
続いて、このマグナムセイバーにスピード全振り改造・Lv.49強化済みのレブチューンモーターを装備する。
このとき、サーバからは次のようなJSONデータが送信されてくる。
"calcBasicParams": [
{
"paramUnitsId": 1,
"value": 30784.800000000014
},
{
"paramUnitsId": 2,
"value": 8210
},
{
"paramUnitsId": 3,
"value": 19220
},
{
"paramUnitsId": 4,
"value": 1980
},
{
"paramUnitsId": 5,
"value": 1102
}
],
"paramUnitsId": 1(スピード)の"value"は「34279.48…」となるはずが、それよりも1割程少ない「30784.80…」に留まっている。
数字の辻褄を考えると、マシン診断で表示される最高速度は、サーバから送られてくる方のスピードに基づいているようだ。これが巷で「スピードを上げていくと最高速度がリニアに伸びなくなる」と言われていた現象の正体である。
この例ではスピードのみを比較したが、パワーやローラー安定など他のステータス項目でも同様の現象は発生し得る。なお、節電などのスキル値はサーバー側から送られて来ないため確認が難しいが、エアロDFを上昇させた際の最高速度の変化でそれらしき現象を確認できた。
マシン診断の詳細パラメータでは小数点第2位までしか表示されないのでDF値の微量な影響を観測することは通常難しいが、マシン診断の際にサーバから送信されてくる生の値は10桁以上あるため、通信解析により僅差の検証が可能となる。
差異が発生する原因
差異が発生する原因を確かめるため、未改造のレブチューンモーターの第1スロットに冷却ブレークイン(回転数重視)の職人技改造を実施したところ、ゲーム画面ではスピードが「+87.167」と表示されているが、サーバ側では「+87.000」しか加算されていなかった。
続いて第2スロットに同様の改造を実施したところ、ゲーム画面ではスピードが「+87.341」と表示されているが、サーバ側では「+87.000」しか加算されていなかった。
続いて第1スロットの強化(Lv.1→Lv.2)を実施したところ、ゲーム画面ではスピードが「+3.654」と表示されているが、サーバ側では「+3.480」しか加算されていなかった。
これらのことから、差異は改造・強化の際に発生していることが分かった。
改造・強化の計算式
ここで、改造・強化の計算式をおさらいしておこう。
モーター スピード
改造Lv0 (強化Lv1の分は除く)
スピード〇〇〇〇 イイ感じ4% 職人4.8% 至高5.6%
スピード〇〇〇 イイ感じ3% 職人3.6% 至高4.2%
強化
スピード〇〇〇〇
1スロットは(元の速度-1スロ改造(強化除く))x0.2%xLv
2スロットは(元の速度-1スロ改造(強化含む)-2スロ改造(強化除く))x0.2%xLv
3スロット 以下同様
スピード〇〇〇 x0.15%xLv
引用文では「元の速度-1スロ改造...」となっているが、これは書き間違い(軽量化における重さ〇などの減算系改造の計算式)で、冷却ブレークインにおけるスピード〇のような加算系改造の場合は「元の速度+1スロ改造...」となる。
この「元の速度+1スロ改造...」という部分がキモで、上方スロットの強化量に応じて、下方のスロットに強化値が「上乗せ」される。ただし、上乗せされるのは同じステータスに対する強化量に限られる。例えば、上方スロットでスピード強化改造を実施し、下方スロットでパワー強化改造を実施しても、互いに強化値が上乗せされることはない。
このため「どのスロットを先に改造・強化するか」ではなく「どのスロット位置にどんな改造を実施するか」で最終ステータスが変わってくる。最終的に同じ改造内容・改造結果・強化Lv.であっても、上方スロットで強化量の大きい改造を実施した方が僅かに上乗せが大きく、上方スロットの再改造を優先すべきと考えられてきた。このことは有志の開発した改造シミュレータでも確認できる。
しかし、通信解析の結果によれば、この上乗せはクライアント側でのみ行われており、サーバ側ではスロット位置を問わず同じ強化量になっていると推測される。
改造・強化の計算例
例えば、レブチューンモーターの第1スロットに冷却ブレークイン(回転数重視)の職人技改造を実施した場合、クライアント側では
1740 * 4.8%=83.520 ……改造分
(1740 + (1740 * 4.8%) ) * 0.2% * 1 = 3.64704 ……Lv.0→Lv.1への強化分
83.520 + 3.64704 = 87.16704 ……改造分と強化分の合計
となり、小数点第4位を四捨五入して「+87.167」と表示されるのだが、サーバ側では
1740 * 4.8%=83.520 ……改造分
1740 * 0.2% * 1 = 3.480 ……Lv.0→Lv.1への強化分
83.52 + 3.48 = 87.000 ……改造分と強化分の合計
となり、「+87.000」の加算になっていると推測される。
最初の差分は微量だが、同じステータスに対する改造・強化を重ねることで強化値が何重にも上乗せされていく仕組みのため、モーターのような強化量の大きい改造においては最終的な差分がステータスの1割程に達する。
どちらの値が正しいのか
ゲームサーバとの通信を見ていると、チート防止のためゲームクライアントからはステータス送信を行っておらず、全てのレース処理はサーバ側で行われていることや、マシン診断の詳細パラメータがサーバ側のステータスに比例していること、コースレコードと辻褄が合うのはサーバ側のステータスであることから、現状はサーバ側の値で処理していると考えられる。
ただし、どちらが本来意図した仕様なのかは不明である。強化値の上乗せ分は改造スロットの位置と強化Lv.からサーバ側でも決定的に導出できるので、シード値を使わず疑似的なランダム性を演出するために意図して実装された機能のようにも見える。一方で、改造スロットの位置という何の意味もないところでステータスに差が付くのは、レースゲームの仕様としておかしい。
サーバ負荷軽減のために上乗せ処理をあえて停止している可能性もあるが、後になってサーバ側で上乗せ処理を有効化すると、ゲームバランスが崩れることになるのは容易に想像できる。
上乗せの仕様を捨ててクライアント側の水増し表示を止める方が楽ではあるが、そもそも減算系強化無効バグの修正でゲームバランスの見直しが必要であることを考えると、同じタイミングで一緒に修正するのかもしれない。
「私が何で怒ってるかわかる?」
マシン診断の際にサーバーから送られてくるステータスを表示せず、あえてクライアント側で算出したステータスを表示していることから、開発者はとうにこの問題に気付いている可能性が高い。急にマシンの速度が変わったという話も聞かないので、リリース時からずっと抱えている問題なのだろう。
全体のゲームバランスに影響する致命的なバグ自体は他のゲームでも稀によくある話だが、その時にプレイヤーに見離されないか否かは運営の情報公開の姿勢に懸かっている。
私は見離すことにしたので通信解析の結果を公言しているが、こうした行為は利用規約のリバースエンジニアリング禁止条項に抵触するおそれがある。BANされても文句は言えないので、実行する際は自己責任で。
YouTuberは検証動画の広告収入で稼げるので炎上する程に得をするのかもしれないが、無報酬で動く人間は検証に時間とスキルとゲーム内アイテムを費やす程に損をする。
ホビーゲームの開発・運営において小学生マインドは大切かもしれないが、バレたら怒られるので決定的な証拠を突き付けられるまでシラを切るという小学生マインドは止めていただきたい。