カウンターストップ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

カウンターストップCounter Stop)またはカウントストップCount Stop)とは、数字のカウントが上限に達し、それ以上のカウントがストップされること。主にコンピュータ分野、特にテレビゲームアーケードゲームにおいて用いられる。略称はカンスト

例えば得点が「999,999,999」のように、システム上それより上昇しない状況を指す。カンストが達成されれば、自動的にそのスコアが最終スコアとなり、集計は終了する。ゲームによってはカウンターがストップせず、再び0からカウントし直される場合もある(算術オーバーフロー)。その場合では例えば、「999,999,999」の次の値は「1,000,000,000」ではなく「0(000,000,000、十億の桁がない)」となる。

スコアのあるアクション・シューティング系のゲームに限らず、ロールプレイングゲームシミュレーションゲームなどのパラメータなどについても用いられる。また1990年代末期に話題になった2000年問題も、年数のカウントが機械的な上限を超えることによって発生するとされた諸問題を警戒したものであった。

概要[編集]

ある変数の値がその変数が扱える限界を超えている場合、一定値以上のカウントをストップするようプログラムを組んでいないと機械的なオーバーフローが発生し、予期しない動作やフリーズを起こし、そのままプレイを強行すれば最悪の場合セーブデータの破損や機械的な故障を起こすなどの結果が起こりうる。また、変数の型によっては、一定以上の値は負の数として扱われるため(原理は2の補数を参照)、それを考慮していないプログラムではさまざまな不具合が発生することが予想される。

そういったことを防ぐため、プログラム側で特定の値を超えている場合に当該変数の値を上限値に設定してしまう処理、もしくはその処理によってカウントが進まなくなった状態をカウンターストップ (counter stop)、略してカンストと呼ぶ。以下カウンターストップを「カンスト」と表記する。 カンストする値は数桁の10進数整数の上限、もしくは数桁の2進数整数の上限となることが多い。前者の例は9999999、後者の例は255(=28-1=111111112)〈『ファイナルファンタジー』〉や65535(=216-1=11111111111111112)〈『ぷよぷよ』〉である。

若干複雑なケースとして、理論上の上限をエラー値などに使っているためにカンストの値をそれより小さい値にしているケースもある(たとえば65535ではなく65534)。 表示される値が内部表現の整数倍になっている場合もあるが、こちらは表示時点での処理である場合もある(例えば全てのスコアが10の倍数である場合に、内部処理的にはその1/10の値を得点として設定し表示において後ろに"0"を付加することにより、内部処理での限界を65535としつつ最高得点を655350とすることができる)。

の値を防ぐため、数値が減少すべき場合に0または1を最小として止めることもある。単に符号あり整数を使っていないか、負値を回避したい場合に行われる。

人為的なカンスト[編集]

機械的な都合とは別に、ゲーム上の理由でプログラム上の制約とは別に人為的な上限値を設定する場合もある。例えばロールプレイングゲームのキャラクターの能力値が際限なく上がり続けると、ゲームの難易度を著しく下げてしまい、ゲームバランスを崩してしまう。『アイドルマスター』では各種能力値のカンストが育成の重要な要素となっており、各種要素のカンストを意識しながら育成して行くことが効率的なプレイにつながるようになっている。もしこのカンスト値を超えているのを見かけた場合、それはバグもしくはチートを利用していることになる。

また、単にプログラミング上の設定だけではなく、ゲームのプレイ中にある条件により、本来もらえるはずの経験値などが条件を満たすまでもらえない作為的な状態を指す場合もある(『クイズマジックアカデミー3』及び『5』における階級昇格条件や、MMORPGなどにおける「レベルキャップ」と呼ばれる物など)。

なお、通常のカンスト(上限値を設定)とは逆に、0未満の数値を0でカンストさせるケースも多い。これも人為的なカンストの一種である。機械的な理由のないTCGTRPGなどのアナログゲームにおいても、0未満の数値を全て0とみなす措置を行っていることが多いが、これも一種のカンストである。

表示上のみのカンスト[編集]

単に表示上の都合で一定桁数でカウントを止めるように見せかけるケースもある。この場合、画面上では確認できないが内部的には本来の値で計算が行われていることがある。逆に「ある値」より高い数値が表示されていても、計算上は「ある値」で扱われることもある。

今の風を感じて
ダメージ表記が2桁までの為、ダメージが100以上になると「XX」でダメージ表記される。
ワンダープロジェクトJ2 コルロの森のジョゼット
所持金が一定数以上になると、表示的にはカンストしていても内部では本来の額で扱われている。その為、この状態でアイテムを購入しても表示上の数字が減らない事がある。
ガリレオファクトリー』シリーズ各作品
ジャックポットボールの上限は100であり、画面上は101以上の数値が表示されることはないが、内部ではボールが追加される条件を満たしていればカウントが行われている。このため、内部で200以上の数値になっている場合、100球でジャックポットが完成された直後の減算(ジャックポットが完成した時点のJPボール数の半分、ただし最低10)が100以上となるため、画面上ではJPボールの数は変化しないことになる。
スターホース3
ゴールドプログレッシブは99999.9枚、シルバープログレッシブは9999.9枚でカウント表示を停止するが、内部的にはカウントを続行している。このため、プログレッシブ完成者に当該JPクレジットが支払われた後の減算値(原則として達成時の半分だが、複数名が同時に完成した場合には例外あり)が本則の計算と異なる場合がある。
リッジレーサー』、『セガラリーチャンピオンシップ』等
残り時間が100秒を超えるとカウントが停止するが、制限時間のカウント自体は続行しており99秒以下になるときちんとカウントが行われている。
リッジレーサーでは残り時間が100を超えた場合、残り時間の表示の色を変えることにより100秒以上残っていることがわかりやすくなっている。
大乱闘スマッシュブラザーズX
コイン制乱闘における所持コイン表記が5桁までだが内部ではカウントされており、見かけ上99999枚でもサドンデスに入ることなく決着がつくことがある。
ファイナルファンタジーIII(ニンテンドーDS版)
ファイナルファンタジーシリーズでは珍しくダメージ量の限界処理が行われていないが、表示上のダメージ量は9999が限界となっている。
隠しボス「鉄巨人」以外の全てのボスモンスターが一撃で倒せることが確認されており、攻略本では闇の世界の中ボス「アーリマン」と最終ボス「暗闇の雲」について掲載されている[1]が、前者のHPは99999、後者に至っては12万である。

カンストと上限値[編集]

ゲーム機の処理能力が向上し、より大きい数値を扱えるようになるに従って、通常のプレイの範囲内ではユーザが(ゲームの難易度と直結しない得点などでは)カンストに出会うことはないように設計される傾向にある。カンストに出会うこと自体は、どちらかというとやり込みに近い概念でもある。よって、プレイを続行が不可能となったりセーブデータが壊れたりしない限りは、ビジネス用ソフトウェアと違ってバグ扱いされることは少なく、製作側からは仕様の一つであると説明されることが多い。

カンストは「理論値」(ゲームをチートなしでプレイしたときに獲得できる得点などの限界を理論的に推測した値)とは異なる概念である。例えば、『pop'n music』や『トップランディング』では得点に上限値があるがこれはカンストではなく、明確に「満点」が決められていて、それを音符数で分割したり、ミスごとに減点したりする方法で評価されており、「満点」=「理論値」となっているため、満点を超える点数は絶対に出ないが、この満点をカンストと呼ぶことはない。 BEMANIシリーズなど満点を「理論値」として設定しているケースも多く、その場合は完璧なプレーにおいてスコアがその値になるように得点計算が行われる(得点計算において各ノートの得点を算出する際に発生した端数を最後のノートにおける得点に加算する、等)。

ただしGITADORAでは各種ボーナスのない素のスコアにおける満点が100万点に設定されており、理論値(完璧にプレイした際の各種ボーナスも含めた上限値)=100万点ではない。その上GuitarFreaksの場合は遅延ワイリングによって理論値を突破するケースもある。

本来は(ループゲームで理論値が無限大でないかぎりは)理論値ではカンストすることがないように設計されるはずだが、見込み違いによりカンストしてしまうケースもある。

ハイスコア集計上におけるカンスト[編集]

現在アルカディアのハイスコア集計では、ループゲームに限り、1000万点以上のスコアが出るものは一律「1000万点+α」という区切りで集計を終了する。これも一種のカウンターストップと言える。1000万で区切りになる理由としてはゼビウスの1000万点カウンターストップに敬意を払っているというのが一般的な意見。

そのほかにも、カウンターストップするまでの時間を競うやり込みもある(タイムアタックの一種)。

カンストに関連する不具合の例[編集]

オーバーフローによる不具合の例[編集]

先述した「特定の値を超えた場合にその特定の値に再設定する」という処理を行わないことによって不具合が発生する例。

スーパーマリオブラザーズ』の無限増殖
残数が10人以上に増えた場合、ゲーム開始時の表示が数字から王冠や文字へと変わったり、127(=27-1=11111112)人を超えた状態でミスをすると即座にゲームオーバーになってしまう(詳しくは上記リンク内該当項目参照)。
リメイク版の『スーパーマリオコレクション』では残機上限が128人となり、1ミスで即ゲームオーバーということがなくなった。
グラディウスII -GOFERの野望-
残機がカンストし、内部的に「-1」になると(ミスしていなくても)即座にゲームオーバーになる。
このような不具合の防止のため、忍者くんシリーズや『レインボーアイランド』などのように、表示可能な残機数以上には増えないように制限している場合もある。
ドラゴンクエストIV 導かれし者たち
ファミコン版には以下の2つの不具合が知られている。
「838861」
カジノのコインの購入金額を計算する領域が24ビットで確保されており、購入金額が24ビットの上限である16,777,216ゴールドを超える値の場合にオーバーフローを起こして値が切り捨てられる。このため第3章(1枚200ゴールド)ではコイン83887枚を184ゴールド(83,887×200-16,777,216=184)、第5章(1枚20ゴールド)ではコイン838861枚を4ゴールド(838,861×20-16,777,216=4)で購入できる。
なお、リメイク版ではこのバグは修正されているが移民の街のカジノに登場する移民のセリフで言及されている。
「8逃げ」
一つの戦闘で逃げることに3回失敗した場合、4回目で必ず逃げられるようになっている。このために「にげる」コマンドを使用した回数を記録したフラグが内部でカウントされているのだが、ボスキャラクターなど逃げられない敵に対して4回以上「にげる」コマンドを使用した場合にオーバーフローを起こし、戦闘中の各種の状態に影響を及ぼす。
一例として「8回逃げた時点で呪文『パルプンテ』の『力がみなぎってきた』のフラグとなる23のビットがONとなってしまい、バイキルトがかかっていないキャラクターの攻撃がすべて会心の一撃となる」という物があり、そのためこのオーバーフローによるバトル中の状態の変化現象の総称として「8逃げ」が使われることもある。
この他にも、「アイテム『時の砂』を使用済みの状態でボス戦を開始して4回逃げれば使用可能な状態に戻るとともに会心の一撃が乱発される状態に移行する(2進数で0111→1000となり、22のビットがOFF、23のビットがONになるため)」「128回逃げると『ふしぎなきり』が発生し呪文が全てかき消されるようになる(27のビットで『ふしぎなきり』の発生状態を管理しているため)」といった物もある。
シムシティ
人口が居住しないユニット(警察、消防、港、空港)は、【一つ以上置いてある】ことがCAPITAL以上の人口において需要がプラスになる必要条件の一つである。
例えば警察が256ユニット存在していると、(存在数が8ビット符号なし整数値で管理されており0となるため)存在していないものと判断されて街が一気に衰退してしまう。更にもう1ユニット建てたとき、元に戻る。

カンストによる不具合[編集]

「特定の値を超えた場合にその特定の値に再設定する」処理により、別方面で不具合と見られる現象が起きるケースもあり得る。

ドラゴンクエストIII そして伝説へ…
モンスターを倒すごとにそのモンスターごとに設定された値を加算していき、戦闘終了時にその合計値を人数で割って各キャラクターが獲得する経験値を算出しているが、この合計値は2バイトで管理されており上限が65535となっている。
そのため、はぐれメタル(経験値40200)を1回の戦闘で複数体倒しても合計値が65535でカウンターストップを起こしてしまい、結果各キャラクターが得られる経験値が不自然な値になってしまう(例えば4人パーティーの場合、倒したはぐれメタルの数が1体だと10050だが2体以上になると約1.6体分となる16383になる)。
ポケットモンスター ルビー・サファイア
きのみ問題は内蔵時計が1年でカウンターストップを起こすことに起因するものである。

関連項目[編集]

注釈[編集]

  1. ^ 石井宏之、羽生真樹 『ファイナルファンタジーIII 公式コンプリートガイド』 スクウェア・エニックス2006年、371頁。ISBN 4-7575-1791-2