スキップしてメイン コンテンツに移動

投稿

2月, 2023の投稿を表示しています

最新の投稿

キャプテン翼4 ドリブルバグ修正計画

 久々にキャプテン翼4をプレイしていて気が付いたのですが、フィールドで選手がボールを保持してドリブルをしているお馴染みの画面で、よく見ると上の写真のように画面の右端に妙な黒い線が走っているのを確認しました。最初は私が各データの位置を色々と移設した際に何か作業を誤まったのかと思っていたのですが、何も改変していない元のままのデータのROMでプレイしても同じ現象が発生したのでこれは何らかの不具合=バグではないかと思われます。一応これを消す方法は見つけたのですが、それを実行すると以下の写真のようになってしまいます。  確かに画面右端の黒い線は消えましたが、今度は画面の下半分に表示されるレーダーのコート図面が消えてしまいます。どうやらこの画面を表示するにあたってカットインやクローズアップ演出を表示する定義と同じスクリプトやコマンドコードでの設定がされているようなのですが、この定義のうちコート図を表示する定義(=ID15)に設定ミスがあるようなのです。この写真はコート表示に使用するスクリプトIDを無効化した状態でコート図もラインも消えるのですが、これをプログラム側から修正しようとすると何故かコート図だけが消滅して黒いラインはしっかりと残るので、このスクリプトやコマンドコードの場所を特定しない事には完全な修正は不可能です。まだ調査を始めたばかりでスクリプトそのものの記述場所が特定できていませんが、正式に修正が完了した際には修正パッチを公開する予定です。

第4次スーパーロボット大戦 スーパー系主人公の機体をジガンスクードに変更

 ようやくというか、かねてよりの計画通りスーパー系でゲームをスタートすると、主人公がゲシュペンストではなくジガンスクードに搭乗するように変更してみました。いわゆる「ドット絵」を書くのがそれほど得意ではないので、できればGBA版の初代OGのグラフィックをそのまま流用したかったのですが、サイズが大きすぎるうえに棒立ちポーズなので断念しました。そのため配色もGBAのグラフィックとは若干異なりますがご容赦下さい。  なお、これに伴いシナリオ中で「ゲシュペンスト」に係る台詞を片っ端から変更する必要があるのですが、全部で20ヶ所近く改変しなければならないのでデバッグが大変な事になりそうですね。間違えてリアル系主人公の台詞を変更しないように気を付けるつもりです。機体性能としてはマジンガー系以上の防御力偏重ユニットで、攻撃力はさほど高くない反面、低いHPと高い装甲値で敵の集中攻撃を引き受けつつ反撃で相手のHPを削る役目を与える予定です。  既に主人公や副主人公の特殊乗り換え処理は解析済みなのですが、後々になってユニット枠が足りなくなるのも嫌なので今回はスーパー系ゲシュペンストをそのままジガンスクードに書き換えています(スーパー系ゲシュペンストはリアル系のそれと違って図鑑登録もされませんので…)。同じような要領でリアル系主人公の機体もゲシュペンストから別の機体に変更する予定ですが、こちらは図鑑登録の事を考えてリアル系ゲシュペンストの上書きをしないで適当に開いている未使用枠を使って作ります。シナリオ部分の台詞改変の作業量を考慮すると、7文字ぴったりで収まるOG系の弱めな機体がいいと思いますので、そうなるとやはりシュッツバルトかビルトラプターあたりが無難でしょうか。

第4次スーパーロボット大戦 BGM設定パイロット基準化パッチ用BGM継続パッチの公開予定について

 BGM設定パイロット基準化パッチとBGM継続パッチの両立による不具合ですが、BGM継続パッチの内容を検証した結果、BGM継続パッチの内容を一部変更して新規サブルーチンを追加する事で対応可能になりました。しかしこの「BGM設定パイロット基準化パッチ用に内容を変更したBGM継続パッチ」は通常の「BGM判定が機体依存の状態」では使用できなくなるので、後ほど公開できるかどうか交渉してみます。また、この過程で本来のBGM継続パッチ側に改善できる点(=ボス機体用BGMをもっと簡単に判定できる方法)を発見しましたので、こちらも修正可能かもしれません。

第4次スーパーロボット大戦 BGM設定パイロット基準化パッチとBGM継続パッチを両方とも使用した場合の不具合について

 以前「BGM設定パイロット基準化パッチとBGM継続パッチを一緒に使用しても不具合は発生しない」とご報告したのですが、不具合を発見しました。申し訳ございません。内容としては、稀に直前のBGMと同じBGMが選択された際に本来スルーしてそのままBGMが流れ続けるべきところを再度BGMデータを読み込んでしまい、また頭から再生され直してしまう事があるというものです。  不具合が発生してもBGMが再度読み込まれて頭出しされる以上の実害は特にないのですが、やはり気分がよろしくないので原因や発生条件を調査中です。

第4次スーパーロボット大戦 8M拡張ROMの処理速度についての感想

 以前、少しだけ触れた「8MBに拡張したROMの拡張領域(400000h以降)に置いたデータはBGMを中心に読み込みや処理速度が遅くなる気がする」という件ですが、やはり体感的に処理がもたつく場合が出ているように感じます。特に、再生速度が速めに設定されているBGMは時間経過と共に音が次第にずれていってしまうようです。気のせいであればいいのですが。  こういう場合、SA-1などの特殊チップを搭載している作品のROMマッピングを参考に処理を改善するという方法もあるのだと思いますが、作業量を考えると現実的ではないので取り敢えずROMの埋め込み情報を見てみたところ、ROMの仕様が31(高速リニア)から35(低高速リニア)に変更されていました。どうやらLunar Expandというツールを使用してROM容量を8MBに拡張する際に自動的に書き換えられた様子なのですが、これを元の31に戻してみたところ多少はBGMのもたつきが改善されたように感じます。しかし問題がないわけではなく、元々のROM情報埋め込み領域の数値を31に戻す分には正常に起動しますが、拡張領域(408000~40FFFF)に存在するROM情報は35にしておかないとゲームが起動しなくなってしまうようです。  それぞれのROM情報が異なる状態で長時間正常にプレイし続ける事ができるのかどうかまだ未知数なのですが、今のところ特に問題なく処理ができている様子なので、しばらくはこのままテストプレイを続けていこうと思っています。

レナス〜古代機械の記憶〜(Paladin's Quest) 文字コード表を公開しました

 表題の通り、レナスで使用されている文字コードを解析した内容のファイルをアップロードしました。未使用のメカニードス枠を使って別キャラ化させたレクタスかヨーテの再加入イベント でも作ろうかと思ってだいぶ前から調べていたのですが、ようやく解析が終了しました。 どういう理由でこうしたのかよく分かりませんが、レナスではキャラクターやエネミー、アイテムや呪文などに関する文字コードと会話やシステムなどで使用されるメッセージの文字コードが全然異なるものに分けられています。おかげで調べるのに非常に苦労しました。それはともかく、ファイル類は 以下のURLからダウンロード可能です。 https://ux.getuploader.com/retrogamelaboratory/download/47  公開した.idnファイルは「HiChrConv」という文字コード変換アプリに対応しており、それを用いれば様々なメッセージや固有句を解析、変更が可能になります。HiChrConvに関しては以下のサイト( Gamecenter GX )からダウンロード可能です。 https://cheatcodes.web.fc2.com/binary/  余談になりますが、日本版レナスのフォントは8x8サイズであるのに対し、海外サイトのスクリーンショットを見る限り海外版の「Paladin's Quest」はアルファベット表示での視認性を重視して12x8サイズに拡張されているようですね。日本版でも同じようにフォントサイズを変更できれば見栄えがよくなると思いますので、いずれセカイモンなどで海外版を入手してどんな仕組みになっているのか調べてみたいものです。

レナス〜古代機械の記憶〜(Paladin's Quest) メカニードスを成長可能にするパッチの作成計画

 必要とされるかどうか分かりませんが、とりあえず次の目標として「メカニードスを他の仲間と同様に普通にレベルアップできるようにするパッチ」を作成してみようと思います。既にご紹介の通り、メカニードスは経験値入手不能処理を無効化してレベルアップさせたとしてもステータスの上昇ができないように処理…というか成長テーブルに相当するものが設定されていないらしく、ただレベルだけが上昇します。そこでレベルアップ時の処理に関するルーチンを探して解析を開始してみたのですが、今のところ各キャラクターの成長テーブルらしきものを参照している部分が見当たりません。しかし処理の途中でキャラクターIDを参照している部分があります。そうなると、キャラクターIDを読み込んでそれをもとに成長テーブルを参照しているのは間違いない(レベルアップ時にキャラクターIDを強制的に切り替えると、そのIDのキャラクターがレベルアップした時とほぼ同じ成長値パターンになる=例えばチェズニのIDをレベルアップ処理の際にメカニードスのIDにすると本来上がるはずのパラメーターが一切上がらなくなる事までは確認しています)ので、根気よく調査を進めていきたいところです。  改変方法として一番簡単なのは「メカニードスがレベルアップした際に強制的にキャラクターIDを書き換え、レベルアップ処理終了直後に再びキャラクターIDをメカニードスに戻す」という方法で、これならばすぐに実現可能なのですが根本的な解決になっていません(レベルアップのメッセージでそのIDのキャラクターの名前が表示されるという不具合もありますし…)。できれば各キャラクターの成長テーブルを発見し、メカニードス以外にも例えばゴーフやダッシュのように今ひとつ成長値の伸びが悪いキャラクター(ちなみにレベルを99まで上げるとゴーフ、ダッシュ、メリーヌの3人がほぼ確実にワースト争いをします)のテコ入れもできればと考えています。特にダッシュは自慢のはずの素早さが後半は全然伸びなくなり、レベル50くらいになるとむしろ他のキャラに素早さが劣るようにすらなってしまうので、最後まで使っていこうとすると本当に辛いんですよね。

レナス〜古代機械の記憶〜(Paladin's Quest) ボトルで気絶回復パッチを公開しました

 表題の通り、レナスの「ボトルで気絶状態から回復可能になるパッチ」を公開しました。以下のURLからダウンロード可能です。 https://ux.getuploader.com/retrogamelaboratory/download/46  内容としてはミニボトル・ハイボトル・メガボトル・ギガボトルを気絶したパーティーメンバーに使用するとHPが回復して気絶状態から戦列に復帰できるというものですが、「メカニードスについて」の回で触れたとおり、最初にHPが1回復してから残りのHPがボトルの回復量-1の分だけ回復するというやや強引な処理になっています。あまり美しくないので、気が向いたらそのうち修正するかもしれません。また、副作用ではありませんが戦闘中に限りメカニードスにもボトルが使用できるようになっており、通常の仲間と同じようにHPを回復したり気絶状態から復帰できるようになっています。ただし気絶状態のまま戦闘を終了すると永久離脱しますのでご注意を。

レナス〜古代機械の記憶〜(Paladin's Quest) メカニードスについて

 ちょっと強引な方法(フラグを立ててから回復処理にジャンプするとジャンプの時点で即時気絶してしまい、逆にHPを回復させてからフラグを立てようとするとかなり面倒なサブルーチンを組まなければならないので、フラグを立てつつ対象者のHPをまず1だけ回復させ、その後ボトルの回復量から1を引いてHPを回復させる)ですが気絶回復処理は完成したので、パッチ公開前に念のためメカニードスの回復処理に関しても調査しています(処理方法が判明しているので仮に気絶しても戦闘中であればボトルで戦線復帰が可能です)。  メカニードスはロボットという事もあり、最初から結構な戦闘能力を持つ代わりにエナジードレイン以外でのHPの回復ができず(ステータス異常に関してはこの限りではなくクリアボトルやダデス、ダデケスは効果が適用されます)、経験値が入手できないのでレベルアップもせず、しかも戦闘中に気絶すると自爆して永久離脱してしまうという特殊な仲間ですが、これを通常の仲間のようにレベルアップや回復ができないものかと以前(戦闘後のHP回復パッチ作成の時期に)調査してみたのですが、それ自体は意外と簡単に実現できました。後日他のパッチの改修版や気絶回復パッチと一緒にメカニードスをレベルアップできるようにするパッチも作りたいと思っているのですが、現状ではレベルアップ時の成長テーブル(のようなもの?)の位置が不明なため、経験値入手制限を解除してレベルアップさせても上の写真のように何も能力が上がりません。何とか成長テーブルの位置を探し出し、普通にレベルアップさせてあげたいところですね。ちなみにパラメーターマスク処理の解除を行うと、メカニードスは以下の写真のようにレベル48に設定されている事が判明します。  また、あまり知られていませんがメカニードスは一応パラメーターアップ系のアイテムで能力を伸ばす事自体は可能で、自爆で永久離脱しない限りは仲間から外して再度仲間にするとHPが最大値まで回復しており、しかもアイテムで上げた能力値もきちんと保持されています。注意すべき点はメカニードスは複数存在し、それぞれが固有のキャラクターIDとパラメーターを持っているという事です。つまり、メカニードスAの能力値を上げてもメカニードスBの能力値は上昇せず、当然の事ながら自爆してしまったメカニードスのパラメーターは他のメカニードスには引き継がれ

レナス〜古代機械の記憶〜(Paladin's Quest) 続々・戦闘中の気絶状態からの復帰処理追加の計画

 前回の記事の仮説に従ってHP回復と同時にパーティーの状態フラグとステータス異常フラグを同時に書き換えるという処理(厳密にはHPが0の状態に専用の回復処理ルーチンに遷移する処理)を組み込んでみたところ、確かにボトルによる回復行動で気絶状態からの復帰ができるようになりましたが、その過程で問題が発生しています。  回復行動の判定には「パーティーの状態フラグ(7E19ED)をチェックして気絶状態、または存在しないキャラクターを判定対象から外す」という前提を経て「回復対象者の現在HPが0だったら回復ルーチンをパスする」という処理に進むのですが、前段階の「パーティーの状態フラグをチェックして気絶状態、または存在しないキャラクターを判定対象から外す」という部分を変更してしまう(変更しないと回復対象にできない)と、エネミーが既に気絶状態にあるメンバーを攻撃してしまうという不具合が発生するようになる(詳しく調べていませんが、どうやら「残りHPが0かどうか」ではなく「パーティーの状態フラグに攻撃対象が存在しているかどうか」で攻撃対象を判定している模様)のです。これにより「攻撃された気絶メンバーの現在HPが負のオーバーフローを起こす」というような致命的な問題はないのですが、既に気絶して行動できないメンバーを狙って攻撃してくるという事はそれだけ戦闘中の残りメンバーの危機が少なくなってしまう=戦いの緊張感がなくなるという事になってしまいますので、この部分を何とか改善したいところです。  改善案としては「行動IDが回復系行動だったらパーティーの状態フラグを無視して判定対象にする」というのが簡単そうなのですが、生憎と行動内容の定義処理は行動判定処理の後に始まるようになっていますのでそうもいきません。とりあえず考えられる事を色々と試してみて、上手く行けば改善できたものを、改善できなければ不本意ですがエネミーが気絶したメンバーを攻撃するバージョンのまま公開する予定ですが、いずれにせよさほど時間はかからないと思います。問題はメカニードスが破壊された際の処理でしょうか。ご存じの通りメカニードスにはボトルが使用できず、戦闘中にHPが0になると永久離脱してしまうので、戦闘中に限りボトルで復活が可能にするか、またはHPが0の状態で戦闘を終了しても離脱しないように処理するかのどちらにするかですね。もちろんその

レナス〜古代機械の記憶〜(Paladin's Quest) 続・戦闘中の気絶状態からの復帰処理追加の計画

 レナスにおけるステータス異常の管理方法ですが、少々複雑な手法を採用していたので調べるのに手こずってしまいました。まず、移動中はRAMの7E160E(キャラごとに+26h)で状態変化を管理しており、戦闘中になるとここを使用せず今度は7E1A8D(キャラごとに+0Eh)で状態変化を管理(戦闘に遷移する際に7E160Eの内容をコピー)します。特に状態異常がない場合は00になっており、キャラクターの現在HPが0になると気絶状態化処理を行いここに01を書き込むのですが、ではこの箇所に00を書き込めば気絶状態から復帰できるのかというと実際にはそうはなりません。混乱や麻痺などの状態異常はこの方法で回復できる(=ダデケスやクリアボトルによる状態回復処理)のですが、仮に気絶状態のキャラの7E1A8Dに00を書き込んだ場合、確かに一瞬だけ気絶から復帰しますがそのまま再び気絶(HPを回復したり現在HPのRAMを書き換えたとしても駄目です)してしまいます。  これはどういう事かというと、「7E1A8Dと一緒にキャラクターが気絶状態になった事を管理するRAM領域がある」という事を示しており、そこを7E1A8Dと同時に書き換えない限り気絶から復帰できないという事です。具体的にはRAMの7E19EDという箇所で気絶したキャラクターの有無を管理しており、ここをキャラクターが戦線復帰する際に任意の数値に変更する必要があるのです。この部分には戦闘開始時には0Fが入力されており、万が一キャラクターがエネミーに倒されて気絶=戦線離脱した場合は隊列の1人目…01、2人目…02、3人目…04、4人目…08をマイナスして計算しています。そして全員が気絶すると00になり、全滅処理が行われゲームオーバーになるという仕組みになっています。つまり気絶状態になったキャラを復帰させるには、「7E1A8Dに00を書き込む」と同時に「7E19EDに復帰キャラの隊列位置のコードをプラスする」という処理が必要というわけです。意外と面倒な処理を行っていますね。ちなみにHPが0の状態で双方のフラグ処理だけを行う(というかHP回復よりも先にフラグ処理を行う)と、その時点で即座に気絶判定が行われてその場でまた気絶してしまいますので、先にHPの回復処理を行ってからフラグ処理を実行するという変な一手間が必要です。なお、戦闘が終了すると7E1

レナス〜古代機械の記憶〜(Paladin's Quest) 戦闘中の気絶状態からの復帰処理追加の計画

 ご存知の通り、初代レナスではHPがゼロになって気絶状態になってしまうと、戦闘終了まで復帰するための手段が一切なく非常に厳しい戦いを強いられる事になります。ゲームバランス的には比較的エネミーが弱いので、よほど雑なHP管理をしていない限りそこまで苦戦する事自体が稀な気もしますが、この仕様が不評だったのか続編「レナスⅡ~封印の使途~」では、新たに「ダデグレト」という気絶回復用の魔法が登場し、簡単に戦力の立て直しが図れるようになっています。  そこで、というわけでもないのですが、ダデスやダデケスやクリアボトル、その他HP回復系の行動で気絶状態を回復し状況を立て直せる仕様にするパッチを作成しようと思っています。具体的にはダデスやダデケスやクリアボトルで回復できる場合は一定値のHP(最大HPの何割かが妥当な気がします)を担保して復帰させるという処理に、ミニボトル等で回復の場合は本来のHP回復量の半分で気絶状態から復帰させるという予定ですが、どちらでも大丈夫となると有難味が減る気がしますので、どちらの回復行動で気絶から復帰させるか考え中です。