とりあえずその詳細は置いといて、現時点で判明したのは「X1,H1,Y1,X2,H2,Y2」である。
320バイトのデータ構造の中で6*4=24バイトが判った状態です。つまり320-24=296バイトがまだ不明な状態です。 それをひとつひとつ謎解いていく必要があるが、現時点謎があるのでそれを先に理解しないといけないような気がするのである。 一つは、X1,H1,Y1とX2,H2,Y1は、絶対値の座標なのか、それともなにかを基準にした距離(相対値)なのかと、もう一つは、カメラの焦点についてである。 そのカメラの焦点も座標なのか距離なのかも理解しないといけない。 はじめは漠然とX,Y,Hは、カメラの焦点からの距離だろうと判断していたのだが、色々と試すとどうも違うようであった。 例えばカメラの焦点(プレイヤーの近く)に、カメラ近づけようとして、おおまかにXやYの値を減らすと、逆に遠くなったり、とんでもない場所からそこを写すのである。 つまり、微調整が難しいのである。 それが距離でなく座標と考えると、しっくりくるのだが、そうするとその値が極端に大きいように思えるのである。 座標と考えた場合、その起点となる「0,0」の場所はいったいどこなのかがよくわからなかったのです。 予想では、下記のマップの4隅のどこか「0,0」であると思うのだが、距離感がまったくつかめない。 YとX値が大きすぎて、このMAPをはるかに飛びだしてしまうように思えるのである。 まぁ、あれやこれやと考えずに、座標と考え素直に各INDEX0のX1,Y1とX2,Y2の値を求め、それをこのMAPに「点」としてマークを配置したらどうなるのかを確認してみることにした。
そして、その座標をMAPに配置すると、次のようになった。 赤●は、X1,Y1であり、カメラが移動する場合のX2,Y2は青●で示している。 そして矢印先の黄色のダイヤは、そのカメラのおおよその焦点を示している。 プレイヤーが移動して、INDEXの領域に入った時に、赤●から黄色ダイヤ方向を撮り、プレイヤーが移動すると青●の範囲でカメラが動く。(常に黄色ダイヤを焦点としている) この略図はおおよその適当な図面であるので縮尺図としては、まったく正しくはないが、それにしても、各値があきらかに大きいのである。 つまり、起点の0,0は、はるか遠い場所にあるのがわかった。 こんな感じである。 どうしてこなに遠くに0,0があるのかは不明であるが、恐らく、発生の全エリアを配置した時の全体のMAPからすると、J's BARの店内は、Xが7000〜10000位、Yが12000くらいから14000位の間に配置されているのだと思われる。 また、開発者は、数字によって値を設定しているわけではなく、ツールによって自動的に値が計算させて設定されると思われるので、この数字そのものを恐らく意識はしていないと考えられる。 これは、StuntmanSnake氏が保存していたオフィシャルのカメラ設定の動画で推測できる。 恐らくカメラワークの担当者は、上記のようなツールでひょいひょいと設定をして、隣の人に 「ねぇねぇ。この場所てこんな感じでいいと思う?」 「うーん…いいんじゃない?」 て感じで設定していったに違いないのでしょう。 カメラの焦点について 次は、カメラの焦点について調べないといけない。 カメラは、常に画面の中央を映している。 これは当たり前といえば当たり前だが、重要なポイントでもある。 そしてそれは常にプレイヤーの近くでもある。 上記の動画では「青い旗」が画面の中央にあり、カメラは常にそこを見ていることがわかる。 つまり、その場所が「カメラの焦点」である。 つい我々は、プレイヤーを中心に見ているので、プレイヤーが画面の中心にいると思いがちであるが、実はそうではない。 そして前から気にはしていたことだが、「上から下を見下ろす」アングルがほとんどであると思われる。 逆に「下から上を見上げる」アングルを思い出そうとしてもなかなか頭に浮かばない。 パッと思い出すのは、「階段や梯子を昇り降りする」ところや、「記憶の病院へ続く吊り橋」と「記憶の病院の屋上へ行くための外廊」と「突破の最後のところのトラックの荷台」部分である。 他もよく見るとどこかあるとは思うが、強い印象に残っていない。 どちらにしても圧倒的に「上から下を見下ろす」アングルが多いのである。 そしてその角度は緩やかな場合もあるし、急角度もある。 普通にプレイをしていて、「見下ろす」感じがしなくても、よく見ると緩やかな角度で下の方角を見下ろしているところが多いと思われる。 これには理由がある。 つまり、ほとんど地面を映すようにしているのである。 地面が画面に映らないと、地面に落ちているアイテムや地面に倒れたゾンビなどが視界に入らない可能性がある。 つまり、ローアングルで下から上を見上げるようにしてしまうと、地面が画面に入らず、落ちているアイテムや倒れているゾンビや倒れている仲間に気づかない可能性があるわけである。 これを防ぐため、ほとんど「上から下を見下ろす」アングルが多く、なるべく地面が映るようにしていると思われる。 しかし、それは「迫力を感じる」アングルとはいえない。 巨大な敵と相対する時に、上から下を見下ろすアングルよりも、下から上を見上げるほうが迫力が増すのである。 また巨大な敵と戦う時に遠い場所からそれを撮るよりも、近い場所から撮ったほうが、敵が大きく見えてさらに迫力が増す。 また、迫ってくるゾンビに対してローアングルで撮るとその迫力も増し、恐怖感を味わうことができると思われる。 この調整ができれば、かなりアグレッシブな戦いを演出できるはずだ。 話が長くなったが、カメラの焦点のデータの場所を特定する必要がある。 そして、それを見つけて値を変更することによって、今まで見れなかった場所や、逆のアングルを見ることがてぎるようになるはずである。 そして、その場所は、ある程度推測することによって格納場所を特定できると思われる。 まずは理解しやすいカメラ焦点の「高さ」を指定しているところを探すと良いと思われる。 カメラはほとんど上から下を見下ろすので、見下ろすアングルでは、少なくともH1より低い位置で地面(0)よりも高い位置がに焦点が合うようにしているはずだ。 下記、INDEX0の場所でH1とH2の値をそれぞれ変更した時の動きである。
例Aだけでは、わかりにくいのでもう一つ例Bでも確認してみる。
上記の結果により、INDEX0のカメラの焦点は、次ように推測できる。
上位と下位を入れ替えた16進のHEXデータの予測範囲の値をすでに特定したX1,H1,Y1,X2,H2,Y2以外の不明な領域をバイナリエディタで当てはまりそうな場所を探せばよい。 この不明領域から 上記に当てはまる条件の値をバイナリエディターで探す。 (黄色は、すでに特定したX1,H1,Y1でピンクはX2,H2,Y2である) そして「これかな?」「いやこっちかも?」「あれ?違う?」て感じで、その値をバイナリエディターで変更してみてカメラの焦点が変わることを確認していくしかないのである。 しかも違った場所を書き換えると何が起きるかよくわからなくなる。 そして値をまたもとに戻し、「これではなかったから、やっぱりこれかな?」という感じで堂々巡りをしてしまう。 毎度毎度だが苦しい調査であるが、このように一つ一つ特定していくしかないのである。 その結果、特定できた。だいたい予想通りの値であった。
つまり、下記のところまで特定できた。 これによって、カメラの焦点とカメラの位置とその移動範囲をそれぞれ変えることができるようになった。 もちろん、はじめは、〇〇さんが作ったツールによってそられが可能になったが、そこから先の調査と特性の研究は自分の力である。 そして、その値を変更する場合は、10進数で数値を考え、それを16進数に変更し、それ特定したアドレスをINDEX単位でオフセットアドレスを計算し、そこを書き換えて、AFSExplorerでRDTファイルをインポートし、実動作を確認し、うまくいかない場合は、またやり直すというカット&トライで試しながらやっていく必要がある。 とても大変な作業です。これを全てのシナリオの全てのエリアの全てのアングルを変更していく場合、とてもではないが、手作業によりバイナリエディタで書き換えていく方法は無理がある。 少なくともある程度はツールを作る必要がある。 いや必須である。 またこの解析だけでは不足である。 320バイトのデータ構造の中で9*4=36バイトが判った状態です。つまり320-36=284バイトがまだ不明な状態であり、そのデータがどのようなものかも想像が足りていないのである。 足りないと思われる情報は、次と考えている。 ・カメラの固定モード(カメラが動かないモード) ・INDEX領域の範囲 少なくともそれらは特定して変更できるようにしたいと思っています。 それにしても、残りの不明のデータ領域には、まだまだ様々な情報があると思われる。 これから先どうすかるかが課題である。 次章に続く |