大石浩二先生と三原すばる先生による漫画、「矢倉の囲い」がジャンプ+に掲載され、大きな話題を呼んでいます。
その中でキーアイテムとして登場した「最強羽生将棋」というゲームソフトですが、こちらは実在のゲームで、作中で言及された「桂馬の禁じ手バグ」も実在のものです。
しかし、バグはこれだけではありません。
そこで、今回はこちらの作品に登場するバグについて片っ端から説明していきます。
はじめに:バグはあるが、別にクオリティの低いソフトではない
はじめに誤解を避けるために弁明しておきます。
バグがたくさんあるというとクォリティの低いゲームと思われてしまいそうですが、そんなことはありません。
タイトルにもなっている羽生善治七冠(当時)、コンピュータ将棋選手権4連覇の巨匠金沢伸一郎氏、音楽にはピアニストとして有名な新澤健一郎氏とそうそうたるメンバーが結集し、UIについても将棋ゲーム開発のノウハウが豊富なSETAとNSNのタッグとあって、全体に非常にクォリティの高い将棋ゲームとなっています。
一方、納期の都合か細かい部分で粗があり、
・説明書に誤植がたくさん(訂正の紙はあり)
・横に流れていくメッセージのスクロールが十分でなく、行末の「。」が画面を切り替えるまでずっと消えない
などプレイにはあまり影響しない部分は粗が目立ちます。
「矢倉の囲い」作中の「桂馬の禁じ手バグ」もプレイヤーが禁じ手を指せるだけで、プレイヤーが意識して指さなければゲーム進行に影響はありません。(この禁じ手を指して有利になる局面もまずないので指す意味もありません。)
そういうわけで、普通にプレイしていて問題になるバグというのはあまりありませんので安心してプレイいただけます。
バグの紹介
ここからは実際にバグを紹介していきます。
桂馬の禁じ手バグ
話題のバグですね。
本来行き場のない駒を作ることは禁じ手なのですが、このゲームでは持ち駒の桂馬を敵陣二段目に打ち込むことができます。
打ち込んだあとの桂馬は動くことができず、完全な死に駒となります。
これができるのはプレイヤーだけであり、コンピュータがこういった手を指してくることはありません。
ちなみに、すでに盤上にある桂馬を敵陣二段目に移動させた場合は、成るかどうかの確認は出ずに強制的に成ります。
連続王手の千日手バグ
先程「プレイにはあまり影響しない部分は粗が目立ちます」と書きましたが、このバグは珍しくプレイに影響する可能性の高いバグです。
プレイヤー側が仕掛けた連続王手の千日手はちゃんと反則と判定されるのに対し、コンピュータが仕掛けてくる連続王手の千日手はただの千日手(引き分け)とみなされます。
こればっかりは本当に理不尽なのでやめてほしいです。
デモによる設定変更
OPデモではランダムに棋譜が再生されるのですが、ここで棋譜再生に用いられる盤や駒の種類はランダムです。
このデモを見てしまうと、対局時の設定の盤や駒がOPデモで表示されたものに変更されてしまいます。
秒読みフリーズバグ
最強羽生将棋には秒読み機能がついています。
また、対局終了時のダイアログが出たあとにAボタンを押すと、「ありがとうございました」という挨拶の音声が入ります。
秒読みをオンにした状態で、秒読み音声の再生が終わる前にAボタンを押すと、ゲームがフリーズすることがあります。
基本的に対局終了後そんなすぐにAを押すことはないと思いますし、フリーズを引き起こすタイミングも極めてシビアなので、通常プレイで発生することはまずありません。
二面指しクラッシュバグ
最強羽生将棋の二面指し処理には特許技術が使われており、「一方の盤面についてプレイヤーが考えている間に、コンピュータがもう一方の盤面について先行して思考することで待ち時間を短縮する」という仕様になっています。
つまり、二面指しの最中に限り、コンピュータの思考時間中にプレイヤーが自由に操作を行うことができます。
これを利用し、プレイヤーが一方の盤面について着手した後、その盤面に対するコンピュータの思考が終わる前に対局メニューから「投了」ではなく「中断」を選択します。
これにより、コンピュータの思考が終わる前にメニュー画面へ移動し、対局外で思考が継続してしまうことでクラッシュします。
定跡クラッシュバグ
最強羽生将棋では、指し手を「移動元の座標」と「移動先の座標」で表現しています。
座標の表現ですが、0〜80はそれぞれ盤面の1一から9九、81以降は駒台を指し示します。
駒台については、座標が駒の種類の情報を含んでいます。(81は先手の歩、82は先手の香車というような感じです。)
これで基本的にうまく動くのですが、定跡データの読み込み処理にだけちょっとした不具合がありました。
本来なら移動元の座標が「80より大きい」値を持ち駒とみなす必要があるのですが、うっかり「80以上」の値を持ち駒とみなしてしまいました。
つまり、以下の両方の条件に合致するとき、問題が起こります。
・定跡データに格納されている指し手である
・移動元が▲9九である
80に相当する駒は存在せず、存在しない駒を盤面に打ち込もうとしても駒のグラフィックが用意されていないので、結果としてゲームがクラッシュしてしまいます。
なお、現時点で移動元が▲9九の定跡に格納されている手はこの手しか見つかっていないため、そうそう引き当てることはありません。
三枚目の玉バグ
さて、先程の定跡クラッシュバグですが、実はクラッシュを回避することが可能です。
先程の定跡フリーズバグは座標80に対応する持ち駒のグラフィックが存在しないことが原因でした。
ならば、座標80に対応する駒のグラフィックを参照した際に、そこに駒のグラフィックが存在すればクラッシュしないはずです。
座標81が歩なので、その一つ手前ですね。
先程は最強羽生将棋の標準設定である一字駒でこのバグを起こした結果、クラッシュしてしまいました。
では、表示設定から駒を二字駒ならどうでしょうか。
最強羽生将棋では駒の価値の順番にグラフィックのデータが並んでおり、座標80に対応する駒を取得する場合、歩より価値の低い駒のグラフィックを取得しようとします。
設定が一字駒の場合はそこにグラフィックがないのでクラッシュしますが、二字駒の場合はどうでしょうか。
実は、最強羽生将棋では一字駒のグラフィックのあとに連続して二字駒のグラフィックを格納しています。
つまり、二字駒の歩より価値が1段階低い駒の位置にいるのは、一字駒で最も価値が高い玉なのです。
こういった事情から、設定で二字駒に設定して先ほどと同じ手順をなぞると、盤外からどこからともなく三枚目の玉が飛んでくるのです。
当然本来は存在しない駒なので挙動がいろいろ不安定ですが、とりあえずは対局を継続することができます。
まとめ
どうでしょうか。
バグがたくさんありましたね。
ただ、このゲームのバグが他の将棋ソフトと比べて多いのかといえば、そうとは限りません。
私はこちらのゲームでRTA(要はゲームの早解き)という遊び方をしておりまして、もう9年間このゲームをやりこんでいます。
私以外にもプレイヤーはいまして、そうした面々によってこの9年間の間に発見されたバグが大半なのです。
そういうわけで、皆様も将棋ゲームをひたすらやりこんでみたら、新しいバグに出会えるかもしれません。
店頭で将棋ゲームを買ってきて、または押し入れに眠っている将棋ゲームを引っ張り出してプレイしてみるのも面白いかもしれませんよ!