2022年11月8日火曜日

大往生の蜂アイテムオーバーフローバグについて

 

先日、trap15氏により怒首領蜂大往生の蜂取得点数シミュレーターが公開されました。

このシミュレーターにより、未解明であったバグ「蜂アイテムオーバーフローバグ」が解明されるに至りました。

そもそもどういうバグなのか

蜂アイテムオーバーフローバグとは簡単に言うと「最後の蜂アイテムを取得した際、本来点数が2倍されるはずなのに2倍されないことがある」という現象です。
具体的には以下の条件で道中最後の蜂アイテムを取得すると発生します。
・蜂アイテムの素点が6000点~9000点
・蜂パーフェクト(道中ノーミスで蜂アイテムを全取得)を達成する

発生例を見ていきましょう。

状況は2-2道中最後、蜂アイテム素点が7000点の時に最後の蜂アイテムを取得した時です。
画像左側が最後の蜂アイテム取得前、画像右側が取得後です。

机上計算では2635×7000×2 = 36,890,000点の点数が得られるはずですが…
画像右側の点数と画像の左側の点数の差を見てみると、
1,364,014,610 - 1,343,890,610 = 20,124,000点しか入っていないことが分かります。

このように、特定条件下での蜂取得はバグにより大幅に点数が落ちてしまいます。



こちらはシミュレータでの計算結果です。実測値と比較しても正確な結果を算出していることが分かると思います。

なお、当該バグはAC版に加えPS2版、XBOX360版でも同様に発生します。

バグの仕組み

興味が無かったら飛ばしてもOKです。
trap15氏曰く、「蜂アイテムの素点はBCD(ニ進化十進表記)で表現されているが、BCDの値を10進想定で計算してしまっていることにより結果がおかしくなっている」とのことです。



MS電卓で見てましょう。
仮に蜂アイテムの素点が8000点だったとします。
本来はこのように10進数(Decimal)で8000点として蜂パフェボーナスの2倍を掛けて16000点とするべきですが… 


実際はBCD表記での16進数(Hexa)の8000を2倍しているため0x8000×2で10000点となってしまいます。
つまり、最後の蜂アイテムの素点は16000点としなければならないところを10000点として見ており、この関係で点数に誤差が発生しているということになります。

2-3(蜂8000点)でのシミュ結果。
期待値16000点のはずが実際は10000点になっていることがわかる

なお、蜂アイテムが1000~5000点、10000点のときはBCDでも10進で計算した時と同じ結果になるので、(結果的には)誤差を免れることになります。
先ほど「このバグは蜂素点が6000~9000点の時に発生する」と書きましたが、これは言い換えると「BCD値から2倍した結果と10進値から2倍した時の結果で誤差が発生するのが6000~9000点の時になる」と言えます。

※厳密には蜂アイテム5000点は2倍すると0xA000点になるのでバグが発生しそうに見えるのですが、結果には問題無いようです。

実際の損害

「で、このバグは実際どれだけ損害があるの?」という所を説明していきます。

◆2-1(蜂素点が6000点の時)

白黒ともにほぼ実害はありません。2700HITあたりから計算に誤差が出始めるようですが、そもそもどれだけ頑張って稼いでも1300HIT台が関の山ですので、事実上オーバーフローすることはありません。良かった良かった。一安心。

◆2-2(蜂素点が7000点の時)

大問題です。
というのも、蜂アイテムが7000点の時は内部的に本来あり得ない値(0xE000)をBCD変換ルーチンに与えているため点数の計算結果が非常に不安定になり、大半のケースでオーバーフローが発生します。中でも酷いのが2615HIT~2799HITの領域です。

2614HIT
2614HITの際は60万6000点落ちで済みますが…

2615HIT

2799HIT

2615HIT~2799HITの時はオーバーフローによって約44%もの点数が差し引かれることになります。余りにも落差が酷すぎる。


2800HIT
2800HITからは120万~136万ぐらいの範囲でのオーバーフローとなり、比較的軽微な損害になります。

このことから、対策として以下の2パターンを導き出すことが出来ます。
①なんとしてでも2614HIT以内に抑える
後半5ハイパーのケツ炙りなどHIT数が上がりすぎる稼ぎを切り捨ててオーバーフローを少しでも抑制する方針です。このやり方は黒往生のDVDでも実践されている伝統的な手法です。
なお、白往生では最高効率のパターンでも2600HIT台程度となるため、原則としてこの方針を採ることになります。

②思いっきりHITを稼いで2800HIT以上を叩き出す
私が最近編み出した方法です。2-2開幕に5ハイパーを持ち込み、以後でもオーラ撃ちや細かい炙りなどのテクニックを駆使し、2800HIT以上を叩き出してオーバーフローを抑制する方法です。現在の最高値は2957HITで、問題なく回避出来ています。
パターン的な難易度は高いものの、①のやり方と比較すると800万点ほど道中点もアップします。
そのうち参考動画をYoutubeに上げようと思います。

長くなりましたが2-2は以上です。

◆2-3(蜂素点が8000点の時)

白黒ともに確実にオーバーフローします。
2-2のような回避手段はありません。諦めましょう(>´ω`< )

◆2-4(蜂素点が9000点の時)

白黒ともに確実にオーバーフローします。
2-2のような回避手段はありません。諦めましょう(>´ω`< )(>´ω`< )(>´ω`< )

おわりに

実はこのシミュレータが出来るずっとずっと前から「なんか知らんけど2周目の蜂パフェの計算式おかしくね?」という疑問は大往生勢の間でよく話されていました。

特に2-2のオーバーフローについては具体的にいつ見つかったかはわかりませんが、少なくとも2007年の黒往生DVDのブックレットで「2-2でHIT数を稼ぎすぎると何故か点数が安くなるのでHIT数を抑えている」とプレイヤーのHFDさんが証言されており、少なくとも稼働数年以内には現象の確認と対策方法が確立されていたようです。
仕組みはよく分かっていなかったとはいえ、先人の大往生スコアラー達は実測値から点数検証を重ねていってこの謎の現象に立ち向かっていったんだな…と思うと、こうしたバグにも深い想いを感じます。

また、実は9年ほど前にフォロワーの某大往生プレイヤーにより「BCDに起因するバグである」という仮説自体は立てられてまして、今回のシミュレータ公開でその仮説が正しさが裏付けられた形になります。

色んな方が色んな方法で解決に向かっていったバグですが、今回一つの決着を迎える形となりました。そう考えると少し感慨深いですね。

2022年8月26日金曜日

第二回首領蜂リレーに参加しました

公式サイト
昨年に引き続き首領蜂リレーに参加してみました。
参加タイトルは今回も怒首領蜂大往生ブラックレーベル。
オンラインのSTGイベント自体は定期的に有志によって開かれていますが、今回は久しぶりのプレイヤー参加というわけで気合入れて挑んできました。
というわけで今回は参加後記です。

参加するまでの経緯

実は今回の首領蜂リレーもかなり迷った末の決断でした。というのも、
1. 前回同じタイトルで出場したのになにも無しに参加するのは流石に芸がないのでは
2. 応募開始当時、黒往生は半引退気味で8月までにプレイスキルを戻せるかどうかの自信があまりなかった
という理由によるものでした。
第二回首領蜂リレーの応募が開始された時点では、新作である「赤い刀EXAレーベル」のスコアタにどっぷり浸かっており黒往生は週に1回もやっていないという始末。
「出るなら黒往生だけど、プレイ内容は特に代わり映えしない今回はリレー参加は見送るのが無難かな…」とその時は考えていました。

ところが、その後すぐ赤い刀EXAの最終目標である1.25兆が出てしまいます。まだ伸ばせる余地はあったものの、流石にやれることが少なくなってきたので潮時かなと思いここで引退。

いざ黒往生に復帰してみると、今まで何回やっても思いつかなかった画期的なネタが瞬時にどんどん思いつく…結果的には難しすぎて止めたパターンもいくつかありましたが、なんやかんやで復帰してから現時点で4000万ぐらい理想値が伸びました。繋がれば余裕で38億狙えるじゃん…!!

というわけで、「最近作ったパターンを披露する」という目的で首領蜂リレーに参加することに決めました。この頃はまだパターンができたばっかりで安定のあの字もなかったのですが、「まあ8月には流石にパターンも安定してるやろ…」と思ってました。この時は。

イベントへ向けての練習

今回パターン変更したのは具体的に以下のポイントとなります。(ぶっちゃけ読まなくてもいいです)

・1-2前半パワーアップ早取りパターン導入
→パワーアップ取得時のコンボ切れのリスクが改善
・1-3中ボス前のゲージ管理の最適化
→ゲージ管理が簡易化し、なおかつ中ボスにより多く(1~2%程度)ゲージを持っていけるように
・1-4と2-4開幕炙りで安地導入
→特に2-4はオーラ撃ちが長期化したことにより平均5HIT程度伸びた
・1-4ボスと2-4ボスの炙り最適化
→各ボス1000HIT程度伸びた。4ボスは1HIT3000点なので各ボス300万ずつ、計600万伸び
・1-5のリスクちょい高な動きの修正
→30回に1回ぐらい死ぬ箇所をやめた。点数にはほぼ影響なし
・2-1中ボスの炙り最適化
→10HITぐらい伸びた。点数的には100万伸び程度
・2-5道中とボス全箇所変更
→2-5道中は1000万~1500万伸び、2-5ボス(緋蜂)は1500万伸び。ついでに2-5道中での最大800万ぐらいブレる運ゲーが無くなって平均値も激伸び

このうち2-5のパターン変更カロリーが激烈に高くてかなり苦労させられました…。
そもそも2-5に行くのに35分近く掛かるのにそこからまた試行錯誤ですからね…。

このゲームにおいて2-5は全面で一番点数が出るステージになるので、全繋ぎ率が極端に落ちると当然平均スコアもだだ下がりします。復帰直後は割りと30億はそこそこ出てたんですが、2-5の新パターンを練習した途端25億すら出ない日々が2ヶ月以上続きましたw 
それどころか全体的なパターン変更が響いてクリアすら出来ない日も割りとあったり、そこからスランプに陥ったり…あれは今思えばだいぶ辛かった。

そんなこんなで本番に向けて新パターンを練習していってたのですが、2-5だけは細かい所の最適化やゲージ確保の方針がまとまらず、結局練習精度が全く足りないまま本番を迎えることになるのでした。

イベント本番

不安なまま迎えた本番、待ち受けていた結末は…

見せたかったパターンほぼ全部決まりました 。マジか…

もう2-5の新パターンを紹介するのは無理かなと思っていたのでとりあえず2-5までの紹介だけでも…と軽い気持ちで喋り重視でやったのが逆に功を奏したようです。
プレイヤーのくせに大分喋りながら遊びましたが、それで集中力が落ちるどころか余計なことを考えずにゲームとパターン内容の紹介だけ考えてプレイ出来たと思います。
ちなみに相変わらず台本なしのぶっつけ本番トークですw

まあそんなこんなで自分の出番は無事終了し、次の走者さんにバトンを渡しました。

当日のプレイ内容

[Twitchダイジェスト]

[Youtubeアーカイブ]

当日のプレイをアーカイブ化しましたのでよろしければどうぞ。

首領蜂リレーを終えてみて

本番で良いプレイが出来たのは勿論ですが、今回はむしろ本番に向けての取り組みをしっかり集中して出来たのでそこが良かったかなと思います。
「良いパターン出来たしこれは絶対紹介しよう!」とそのままモチベ向上に繋がったこともあれば、「本番でこのミスだけは絶対やっちゃいけないな…」と一発勝負に向けて少しでも安定度を改善するきっかけになったこともあります。

本番を終えてみて改めて自分のパターンを見直してみましたが、総じていいパターンに仕上がったのではないかと思います。
次はこのパターンで38億を出してみたいですね。

改めて、参加して本当に良かったなと思います。
運営のあげいもさん、配信環境を用意下さったa-choさん、トーク担当を快諾くださったHISさん、暖かく見守ってくださったa-cho勢常連の皆さん、そして視聴頂いた皆様に感謝の意を申し上げます。