2009/10/11
東方のスコアボードに来たAM氏の星蓮船Hard早苗Bのリプレイがちょっとした話題になっているようだ。
クリア時点のスコアは2,402,751,780なんだが(約24億点)、
リプレイを見るとある時点から点数が減少しているように見える。
(以下の画像を参照のこと。画像はAM氏のリプレイのスナップショットより切り抜き)

どうも東方星蓮船のスコアはint型(integerつまり整数型)のようで、
2147483647(符号付二進数32桁の最大値)を超えるとオーバーフローを起こし、表示が-2147483647になるバグようだ。
(画像の×がマイナスの符号)
スコアが減少しているように見えるが、実際は-2147483647にその後入ったスコアが加算されているというわけ。
東方星蓮船といえば、初版(1.00a)では10億点を超えると終了するバグがあり、
これは黄昏酒場のソースをそのままコピペしたことに由来するバグだったようだ。
一方この1.00bはunsigned int型を使わなかったことに起因するバグのようで、
まあ10億超えをテストで想定してなかった神主なら今回のバグも起こるべくして起ったという気もする。
スコアはマイナスにならないから、int型ではなくunsigned int型(4294967295が最大値)を使えばいいだけの話で、
神主はtwitterで早々に修正パッチを出すことを宣言。まもなく1.00cが登場すると思われる。
(↑追記で訂正しました。どうやら修正パッチは出ないようです)
……と、ここまで時事ネタを扱うブログのように書いて来たわけだが、なんというか色々と面白い事件ではある。
バグ発見の発端が、地霊殿のリプレイで「いろいろと」話題になったAM氏だということも面白いが、
(ちなみに私は地霊殿のAM氏のプレイに不正はないと思っています)神主の反応の速さはもっと面白い。
風神録や地霊殿であれほどのバグが出ながら一切修正パッチを出さなかった人とは同一とは思えないほどだ。
追記:(10月13日)
上で「神主はtwitterで早々に修正パッチを出すことを宣言。まもなく1.00cが登場すると思われる。」
と書いてしまったが、発言を正しく引用すると、
>おおっと恥ずかしい。報告有難うございますー。直しておきますね
なので、もしかしたら「東方風神録の修正パッチを近日中に出したいと思います」発言再び
「次回作では直しておきます」という意味なのかもしれません。
あるいは、直接スコアに関係しないバグなのでやっぱり放置したままになる可能性もあります。
ちょっと早とちり気味に記事を書いてしまったかも。
ちょいと誤報気味なので、
「修正パッチを出すことを臭わせる発言。まもなく1.00cが登場するかもしれない。」に訂正いたします。
誤解を招く書き方ですみません。
訂正ついでに、蛇足をば。
風神録や地霊殿のスコアボードを見ればわかるとおり、過去の作品でも2,147,483,647という数字は
スコアボードの上位陣によって破られている。
というか、風神録や地霊殿の最高スコアはint型の最大値をちょうど超えたあたりの絶妙なスコアになっている。
(↑これも追記で訂正しました。最高スコアはもっと上でした)
これを見る限り、上海アリスとしてスコア上限を意識しなかったはずがないのだが……
(妖々夢のトップスコアは30億超えである!)
もし神主がスコアが21億5千万を超えることを予想していたとすれば、
今回のint型バグも黄昏酒場からのソースコピペに由来するものなのかもしれない。
(もしかすると、風神録で一度は消えた「残機潰しでグレイズを稼ぐ」という手法の復活の功罪が、
このバグを生んだ深層にあるような気がするのだが、例によって長文になりそうなので別に機会に語ろうかと思う。)
でもどうして黄昏酒場からコピペしたのだろう? オブジェクト弾の表示に由来するのだろうか?
追記:(10月17日)
前回の追記でさらにアホなことを書いていたことが判明。まさに蛇足とはこのこと。
「風神録や地霊殿の最高スコアはint型の最大値をちょうど超えたあたりの絶妙なスコアになっている。」
というのは地霊殿に関しては明らかな間違い、最高スコアは41億点超えでint型どころか、
unsigned int型の最大値に迫る勢いである。
ということで2009年10月17日20時現在の、東方Projectスコアボードの最高記録を並べてみる。
東方紅魔郷 634,212,920 (OOSAKA氏、Extra恋符)
東方妖々夢 3,015,121,300 (HS参謀氏、Lunatic時符)
東方永夜抄 5,816,208,390 (YASU氏、LunaticB妖夢)
東方風神録 2,172,090,120 (LYX氏、Lunatic魔理沙C)
東方地霊殿 4,156,046,670 (yukarin氏、Lunatic霊夢A)
東方星蓮船 2,402,751,780 (AM氏、Hard早苗B)
int型 2,147,483,647まで
unsigned int型 4,294,967,295まで
多分間違ってないはず……。
それにしても、ものすごい記録の数々である。
で、今回のバグの原因の予想。
永夜抄はunsigned int型の最大値を軽く更新しているのに表示バグはない。しかし星蓮船はバグった。
これはおそらく、今までの東方のスコア表記は下1桁がコンテニュー回数(9回を超えると9で固定表示)で、
2桁目からint型を使ってるからじゃないかと。
妖々夢のスコアの最大表示は9,999,999,990だそうである。(妖々夢オンラインマニュアルより)
だから永夜抄以降のスコア表示の最大も、妖々夢と同じかはあるいは21,474,836,470(214億程度)なんじゃないかな。
しかし黄昏酒場のスコアは円表示のせいか、あるいはコンテニューがないせいか、下1桁まで点数が入るのである。
これをそのまま使ったから星蓮船ではバグったんじゃないかと。
(といいつつC言語について何にもしらないので、あくまで予想です)
クリア時点のスコアは2,402,751,780なんだが(約24億点)、
リプレイを見るとある時点から点数が減少しているように見える。
(以下の画像を参照のこと。画像はAM氏のリプレイのスナップショットより切り抜き)

どうも東方星蓮船のスコアはint型(integerつまり整数型)のようで、
2147483647(符号付二進数32桁の最大値)を超えるとオーバーフローを起こし、表示が-2147483647になるバグようだ。
(画像の×がマイナスの符号)
スコアが減少しているように見えるが、実際は-2147483647にその後入ったスコアが加算されているというわけ。
東方星蓮船といえば、初版(1.00a)では10億点を超えると終了するバグがあり、
これは黄昏酒場のソースをそのままコピペしたことに由来するバグだったようだ。
一方この1.00bはunsigned int型を使わなかったことに起因するバグのようで、
まあ10億超えをテストで想定してなかった神主なら今回のバグも起こるべくして起ったという気もする。
スコアはマイナスにならないから、int型ではなくunsigned int型(4294967295が最大値)を使えばいいだけの話で、
神主はtwitterで早々に修正パッチを出すことを宣言。まもなく1.00cが登場すると思われる。
(↑追記で訂正しました。どうやら修正パッチは出ないようです)
……と、ここまで時事ネタを扱うブログのように書いて来たわけだが、なんというか色々と面白い事件ではある。
バグ発見の発端が、地霊殿のリプレイで「いろいろと」話題になったAM氏だということも面白いが、
(ちなみに私は地霊殿のAM氏のプレイに不正はないと思っています)神主の反応の速さはもっと面白い。
風神録や地霊殿であれほどのバグが出ながら一切修正パッチを出さなかった人とは同一とは思えないほどだ。
追記:(10月13日)
上で「神主はtwitterで早々に修正パッチを出すことを宣言。まもなく1.00cが登場すると思われる。」
と書いてしまったが、発言を正しく引用すると、
>おおっと恥ずかしい。報告有難うございますー。直しておきますね
なので、もしかしたら
「次回作では直しておきます」という意味なのかもしれません。
あるいは、直接スコアに関係しないバグなのでやっぱり放置したままになる可能性もあります。
ちょっと早とちり気味に記事を書いてしまったかも。
ちょいと誤報気味なので、
「修正パッチを出すことを臭わせる発言。まもなく1.00cが登場するかもしれない。」に訂正いたします。
誤解を招く書き方ですみません。
訂正ついでに、蛇足をば。
風神録や地霊殿のスコアボードを見ればわかるとおり、過去の作品でも2,147,483,647という数字は
スコアボードの上位陣によって破られている。
というか、風神録や地霊殿の最高スコアはint型の最大値をちょうど超えたあたりの絶妙なスコアになっている。
(↑これも追記で訂正しました。最高スコアはもっと上でした)
これを見る限り、上海アリスとしてスコア上限を意識しなかったはずがないのだが……
(妖々夢のトップスコアは30億超えである!)
もし神主がスコアが21億5千万を超えることを予想していたとすれば、
今回のint型バグも黄昏酒場からのソースコピペに由来するものなのかもしれない。
(もしかすると、風神録で一度は消えた「残機潰しでグレイズを稼ぐ」という手法の復活の功罪が、
このバグを生んだ深層にあるような気がするのだが、例によって長文になりそうなので別に機会に語ろうかと思う。)
でもどうして黄昏酒場からコピペしたのだろう? オブジェクト弾の表示に由来するのだろうか?
追記:(10月17日)
前回の追記でさらにアホなことを書いていたことが判明。まさに蛇足とはこのこと。
「風神録や地霊殿の最高スコアはint型の最大値をちょうど超えたあたりの絶妙なスコアになっている。」
というのは地霊殿に関しては明らかな間違い、最高スコアは41億点超えでint型どころか、
unsigned int型の最大値に迫る勢いである。
ということで2009年10月17日20時現在の、東方Projectスコアボードの最高記録を並べてみる。
東方紅魔郷 634,212,920 (OOSAKA氏、Extra恋符)
東方妖々夢 3,015,121,300 (HS参謀氏、Lunatic時符)
東方永夜抄 5,816,208,390 (YASU氏、LunaticB妖夢)
東方風神録 2,172,090,120 (LYX氏、Lunatic魔理沙C)
東方地霊殿 4,156,046,670 (yukarin氏、Lunatic霊夢A)
東方星蓮船 2,402,751,780 (AM氏、Hard早苗B)
int型 2,147,483,647まで
unsigned int型 4,294,967,295まで
多分間違ってないはず……。
それにしても、ものすごい記録の数々である。
で、今回のバグの原因の予想。
永夜抄はunsigned int型の最大値を軽く更新しているのに表示バグはない。しかし星蓮船はバグった。
これはおそらく、今までの東方のスコア表記は下1桁がコンテニュー回数(9回を超えると9で固定表示)で、
2桁目からint型を使ってるからじゃないかと。
妖々夢のスコアの最大表示は9,999,999,990だそうである。(妖々夢オンラインマニュアルより)
だから永夜抄以降のスコア表示の最大も、妖々夢と同じかはあるいは21,474,836,470(214億程度)なんじゃないかな。
しかし黄昏酒場のスコアは円表示のせいか、あるいはコンテニューがないせいか、下1桁まで点数が入るのである。
これをそのまま使ったから星蓮船ではバグったんじゃないかと。
(といいつつC言語について何にもしらないので、あくまで予想です)
- 関連記事
-
- クリアラーになるか、スコアラーになるか
- UndefinedだがUnsignedではなかった東方星蓮船のバグ……またパッチ追加か?
- なんとな~く紅魔郷のHard全機体クリア
スポンサーサイト
- | コメント:(0) | トラックバック:(0) |
- スレッド:東方Project | ジャンル:ゲーム
Comments
Leave a Comment