トップ > 日記らしきもの
------------
日記らしきもの(超不定期更新)

ゲーム解析関係や、トップに書くほどでもない近況などを書いていく予定…
飽きたりして年単位で更新しなくなる可能性もあります。

・解析関連に関しては細かく説明することもありますが、
 大抵は「〇〇を解析した」ということやその感想程度の内容になると思います。
 前提となる情報を詳しく書いておらず、意味不明に見える場合もあると思います。
 また解析したものについて、必ずしも結果の公開やツール作成等をする訳ではありません。
・内容の正確性は保証しません。詳しく調査せずに勘違いしている可能性もあります。
・文中の用語・名称などは「私が勝手にそう呼んでいる」だけで正式な呼び方ではない場合があります。
・日付は「記載日」です。ページの更新日や実施日と一致しない場合があります。
 (基本リアルタイムではありません、ある程度溜まるか、他ページの更新と
  同時になることが多いかと思います)


[過去ログ]
 2024年
 2023年
 〜2022年

[解析情報リンク]
 電車でGO! FINAL PS2版 ダイヤ・車両関連情報(判明している分だけ)



------------
2025/09/07
  8月にyoutubeに山陽新幹線編の自動運転の動画を上げたのですが、
  元ネタとなる7/13の記事を今まで更新していませんでした。(すみません…)

  ちなみに自動運転と入門編の関係について補足すると、
  自動運転では1段階ずつなめらかにマスコンレベルが変化するのですが
  入門編では指示が出るのは変化が落ち着いてからになっているようです。
  自動運転では停車直前はブレーキが細かく上下して微調整しているのですが、
  入門編ではほぼ一定レベルで停止する指示になるものの、きちんと誤差10cm以内に停まれています。
  これに加え、指示から1段階ずれた状態でも指示で画面が止まらない場合があるのですが
  停車位置・時刻は毎回同じになります。

  このことと、プレイヤー側のマスコン状態が他のモードと別のアドレスになっている事から、
  おそらくプレイヤー側のマスコン状態は指示通りかどうかのチェックにしか使われておらず、
  運転そのものは自動運転のみで行われている(プレイヤーの操作は一切影響しない)と思われます。


------------
2025/08/10
  PS1エミュレーターのDuckStationってPS2のBIOSファイルも使えたんですね。
  ePSXeと違って実機BIOS必須と聞いていて、私にはPS1での吸出し環境が無く
  後でPS3のシステムアップデートファイルから取り出す方法を知ったものの、
  ソフトのインストールやら面倒だったので今まで使っていなかったのですが
  PS2のBIOSを使えると知っていたらもっと早く使っていたのに…

  ※なお、私はPS2-PAR3(無印版)+この方法を使ってDUMPBIOS_USB.ELFを実行して
   PS2実機よりBIOSを吸い出しています。(後から出たPAR3 Ver3.5は標準でELFファイル実行機能があるらしいです)
   現在は薄型PS2+FreeDVDBoot(+吸い出しツール&USBメモリ)という方法でPAR無しでも出来るようです。


------------
2025/07/13
  掲示板での対応で今更気付きましたが、電GO山陽新幹線のATC9999km/hのコードの1行目って
  無くても動くような気がするのですが、もし何かあったら嫌なのでそのままにしておきます。
  確か最初やってた方法で効果が無い場合があって別な方法に変えた記憶はあるので
  その時の残骸なのかもしれませんが…

  このコードを作る時に見つけたATC関連のアドレスですが、
  PS2初期版の場合、(※以降のアドレス情報も全てPS2初期版のもの)
   28C6E0 $28C6E8と同じ値?(使用箇所不明)
   28C6E4 速度計のATC表示値
   28C6E8 ATC制限速度
   28C6EC ATCの段階(下から何段階目かを示す、こことATCの速度パターン定義から制限速度が決まる)
  になっています。(いずれも値は整数値、ATC制限のないフリーランモードでもここに値自体は入る)
  これらのアドレスは毎フレーム書き換えされるのですが、コードではその部分で28C6E4/28C6E8の値を固定しています。
  また27C4A0〜には2byte*11単位(*18種類?)で車種別?のATC速度パターン定義があります。


  また、本作の入門編はマスコンやブレーキが指定された段階に入っていないと画面が止まるタイプですが、
  ATCの速度を変えるとマスコン指示もそれに従って変わります。(ATC9999km/h改造ではマスコン最大指示になる)
  つまりあらかじめ設定したものを固定で出しているのではなく、ちゃんと現在の速度とATC速度を基に計算されているようです。
  この計算する部分を見つけて、その値を現在のマスコン・ブレーキ段階が入るアドレスにコピーするようにすれば
  他のモードで自動運転ができるんじゃないか?と思って調べてみました。

  まずはマスコン指示が出た時にその値を絞り込み検索してアドレスを探しましたが、
  意外にも入門編では他のモードおいて現在のマスコン・ブレーキ段階が入るアドレスに指示される値が直接入り、
  (28C57C:ブレーキ、28C580:マスコン、シリーズ他作品と順番が逆なのは新幹線の運転台に合わせてと思われます)
  現在の状態は別のアドレス(ブレーキ28CB94/マスコン28CB98)に格納されるようになっていました。

  で、入門編の28C57C/28C580への書き込み箇所をエミュレーターのブレークポイント機能で調べてみた所、
  状況によってばらつきはあるものの、アドレス201430から始まる関数の中で行われていました。
  201430の呼び出し元は2箇所あり、そのうちの片方である2013BCは処理をさらに手前に辿っていくと
  17351C〜で「アドレス28C51Cの値が0以外」ならば(2013B0経由で)処理を行うようになっていました。
  この28C51Cは普段は入門編で1になりるのですが(メニューに戻ってきた時点で0に戻る)
  試しに通常の運転モードで1にしてみると、指示が出ることもなく自動運転になりました。
  ※フリーランだと発車時にマスコンとブレーキが同時に入って出発できないので(出発前の演出が無いせい?)
   手動でメモリを書き換えるなどしてブレーキを切る必要あり
   なおフリーランではATC制限が無いが、内部的には制限速度の取得自体は行われるので
   走行〜停車自体は問題無く動作する

  201430へのもう一つの呼び出し元に関してはどういう処理で使われるのかは不明ですが
  まあ今の状態で動くからいいか、ということで今の所はこれ以上の調査はしないつもりです。
  自動運転機能そのものが入っていて、しかも特定アドレスの値を1にするだけでできるとは思いませんでしたが、
  自前で処理を作ったりする手間が省けて助かりました。

  バージョン・機種ごとの書き換えるアドレスは下記の通りです。
  PS2初期版:28C51C
  PS2ベスト版:28F7AC
  Windows版:71660E
  (本格的シリーズ版+アップデート適用後の場合)
  上記アドレスを1にすると自動運転になります。


------------
2025/06/22
  SIRENの音声抽出は掲示板で書いた通り、一部で2つのファイルにまたがるデータがあるので
  ps2_adpcmconv用のリストではなく、単体の抽出・変換ツールとして作っているのですが
  いざ実際に動かしてみると出力にものすごい時間が掛かる上に、
  ムービーの抽出と合わせて容量が約10GBも必要になる(ADPCM音声をWAVに変換すると容量が3倍位になるため)
  結構大きな問題が(今更)発覚しました。
  とはいっても音声が5000以上あるのでps2_adpcmconvだとスクロールが面倒など操作性が悪いので
  本当はタイトーメモリーズの再生ツールのように、ファイルリストとファイル内データの
  2つの選択リストに分けた形の再生機能が付いたツールを作れば
  データを書き出さずに再生できて一番手軽に使えると思うのですが、
  状況的に作るのは厳しいのでとりあえず現状の形(変換のみ)で公開します。
  ※一応、外部の重複データ削除ツールのログを基にして、
   割と数の多い重複データを出力しないようにもしました。

  あと今回気付いたのですが、adpcm.dllが終了フラグが無いデータを変換しようとすると
  終端に余分なデータを出力してしまうというバグが今更発覚しました。
  ※ps2_adpcmconvでは強制的にファイル終端に終了フラグを入れているので
   この問題は発生しません。(多分…)

  他にも掲示板でまだ対応できていない件があるのでこちらも何とかしないと…


------------
2025/05/31
  掲示板でps2_adpcmconvへの対応依頼があったSIRENですが、
  持ってないソフトは出来ない…と思いつつも結局は気になるので買ってきました。

  ファイル構成ですが、SIREN.000〜SIREN.008にメインのデータが512MB($20000000)単位に分割されて格納されている様です。
  この時点で「次のファイルにデータがまたがっている場合がある」場合の対応が必要になる可能性が出てきました。
  SIREN.TBLが格納情報っぽいですが、これはそのまま情報が格納されているのではなく、
  一旦全データをビット反転する必要があります。(解析対策?)
  何でビット反転だと気づいたのか?というと、この時は「これまでの経験から、何となく」ではあるのですが
  根拠としては32bit値(4byte値)の連続としてみた場合、最上位byte(4byte目)にFFが多く、
  ここに入るであろう、開始位置やサイズがそんな大きな値ばかりになる訳がなく、
  (ビットを反転した)00であるほうが自然なので、難読化の為?にビット反転させているのではないかと思いました。

  ビット反転させると、以下のような構造になっていました。
   $00 4byte 'SDT4' 53 44 54 34
   $04 4byte 0F 02 00 00 (=020F)  データ数
   $08 4byte B0 41 00 00 (=41B0)  TBLファイル自体のサイズ
   $0C 4byte 9E A6 79 E7      不明
   $10 4byte 20 00 00 00      ファイル情報開始位置?
   $14 4byte D4 18 00 00 (=$18D4) ファイル名群開始位置

   $20- 4byte*3*n データ開始位置→データサイズ→ファイル名位置の順
           これがファイル数分連続して格納されている

   データ開始位置は$15F90=SIREN.000の先頭となる
   以降、値が1増えるごとに開始位置が$800ずつ後ろになり、
   SIREN.000の終端のあとはSIREN.001の先頭、以降同様にSIREN.002〜SIREN.008と続く
   おそらくここの値はDVD-ROMのセクタ番号での指定と思われる
   (ISOイメージから読み出す場合、単純にここの値*$800の位置から読み出せば良い)
   ファイル名位置は$14のファイル名群開始位置(=$18D4)が起点(=00)となる

  とりあえずこの情報を基にとりあえずファイル単位で切り出してみました。
  前述の「データがSIREN.000〜008の各ファイルをまたぐ時の処理」を作るのが面倒だったので
  イメージ化したISOファイルから読み込むことにしました。
  ムービーはmovieフォルダ、音声はstrフォルダに入っていたのですが、strフォルダの音声が曲者で、
  恐らくステージ単位で使う音声を1つのファイルにまとめてあるのですが
  ファイル内に格納情報的なものは無く、プログラムデータからも見つけることはできませんでした。
  この為、無音を検出して区切ってリストを出力する形にしました。
  さらに大抵の音声はモノラルですが、各ファイルの先頭の方にあるイベント音声と
  途中にあるbgm(といっていいのものかは分からないですが)はステレオなのと、
  bgmは終端ギリギリまで音が続くので無音で区切る処理がうまくいかず、
  ほぼ確実に次の音声が入ってしまうので、この辺りはリストを手動で修正する必要があります。
  (現在、ここの作業をやっている途中です)

  そして内部でのファイル単位で調査してきたので、この結果をSIREN.000〜008の各ファイルに対応した
  アドレスに戻さないといけない&前述のファイルをまたぐ処理を作らないといけないという作業が残っています。
  なので完成にはもう少し時間が掛かりそうです。6月中には公開できれば良いですが…
トップページに戻る