ザナドゥのちょっと内部的なお話 by ふー氏
はじめに
XANADU(ザナドゥ、以下特に記述のない場合は PC-8801mkIISR 版とする)は 1985年10 月(株)日本ファルコムより発売された、アクティブ・リアルタイム・ロールプレイングゲームです。斬新なゲームデザインが大いに評価されてパソコンゲーム史上最大の売上を記録し、この年の各パソコン雑誌のゲーム賞を殆ど独占するほど「大流行」しました。
当時小学生だった私は、PC-8801mkII 版を手に入れてきて随分とやり込みました。このゲームの最も優れている点は、「遊ぶ人が自分だけの遊び方を身につけられる」ことだと思います。ゲーム終盤になればある程度パターンは統一されてはくるものの、ゲーム序盤の弱いキャラクターを強く育て上げていく過程は人によって千差万別です。かくいう私も自分なりに考えられる最強パターンを考案し、全く裏技を使わずに3時間半でクリアできるようになってしまいました。
時は過ぎ、ただのパソコン少年だった私はいつしかプログラムを読み書きできる能力を身につけていました。そこで、今は亡きシャープ製の X68000 という機械にこのゲームを移植してみようと思い立ち、PC-8801mkIISR 版のプログラムの解析作業に着手しました。解析・移植を同時に進めていきましたが、作業は恐ろしくハイペースで進み、1ヶ月経たないうちに XANADU と XANADU scenarioII が完動するようになりました。
ここでは、ゲームプレイ中には気がつかなかった事で解析してみて新たに判った事を中心に述べてみようと思います。
はじめに
ディスク構造
XANADU/scenario II は5インチディスク2枚で構成されます。それぞれをディスクA、Bと呼んでいますが、実際はゲームプログラム本体を収めたシステムディスクと、ユーザデータを保存するためのデータディスクになっています。
以下に、主なファイルの一覧を示します。
PRNO? メインプログラム
scenario II にのみ存在するファイル
m.???? サウンドデータファイル
ユーザディスクは基本的にディスクBを丸ごとコピーしたものです。これに、キャラクターのパラメータそのものを保持しているファイル PLAYER と、各レベルごとのファイル d_???? をセーブするたびに更新していきます。
パラメータは何バイト?
このゲームにおける最も重要なパラメータ、それは Hit Point, Gold, Food の3つです。どれかが0になると確実に冒険は破綻をきたしてしまいます(そこで KRM が高くてもダメじゃんと言ってる方、それも正しいご意見です)。この値、調べてみるとなかなか面白い管理の仕方をしていましたのでここに記してみます。
音痴?
Temple あれこれ
店での売買価格変動
この計算式に基づいて算出された値が割引率になります。これと実際のアイテム価格を掛けた値が販売価格になります。CRS が50だとちょうど率が100%になるため、定価そのものと考えることができます。
Mushroom での Max Hit Point 上昇
アイテムの経験値について
ボス戦で有効なアイテム
プロテクトにかかってしまったら?
PLAYER キャラクター情報ファイル
d_???? 各レベルマップ・敵情報ファイル
c_??? 装備品別キャラクタデータ
B.TRAN, B.MAIN マップパーツファイル
C.TRAN 道場の敵キャラクタパターンファイル
C.ITEM アイテムキャラクタファイル
DR.DT? ボスキャラクタ情報ファイル
(? には数値が入ります)
s.???? ショップ情報ファイル
(? には数値または英文字が入ります)
まず、下2桁は10進数でいうと当然0~99の値をとりますが、これに1バイトを割り当てて管理しています。また、100の位から上を2バイトで管理しています。これにより最大 6553500($FF $FF $00)までの値をとることができます。もっとも、どんなにがんばってもここまで数値が上がることはないのですが....。
また、Max Hit Point は2バイトで表されます。下2桁はただの桁数合わせです。
Food が無くなる(0になる)と、ゲーム中の音が突然ズレはじめてしまいます。これは、曲データの音程に乱数で取得した値を足し引きすることで実現しています。乱数とはいっても擬似乱数ですので、周期が1周してしまえば元に戻ってしまうのですが、同じずれ方の音程で曲が鳴ることはまず間違い無く発生しないでしょう。
Temple ではちょっとした裏技が使えます。Hit Point の下2桁が 77 の時に Templeへ入ると Max Hit Point が上昇します。具体的な上昇値は、現在の MHP+10 です(下2桁は常に0ですので、実際変化する単位とは異なります)。
また、Temple でレベルを上げた時の Max Hit Point の上昇率は次のような式に基づいています。
((優先ランクのレベル - Temple に入ったレベル)+ 1)×25
最初の引き算で負数になった場合は符号反転するので、当然ながらマイナスの増加をすることはありません。この式からも分かるように、キャラクタのレベルアップをしたい時には面倒でもレベル1まで戻ってから Temple に行くとより Max hit Point の高いキャラクタが作れます。
ちなみにファイターレベルで上昇する能力値は STR, AGL, DEX の3つ、ウィザードレベルは INT, WIS, MGR の3つがそれぞれ5ポイントずつ増加します。
XANADU の世界でもやはり金持ちと善人はいろいろ優遇されます(笑)。特にカリスマ(CRS)の高いキャラクタは随分と楽に冒険することが出来るのは皆さんご承知と思いますが(よーするに世渡りが上手とも言いますね)、実際どのようにしてモノの値段が決められているのかを解説します。
ただし、Food と Inn の値段は CRS に関係ありません。
現在の CRS が
・49以下
-((CRS * 2) - 200)%
・50以上100未満
-((CRS / 2) - 125)%
・100以上
-((CRS / 4) - 64)%
鍵の値段は、まず基本価格が現在のキャラクターのレベルによって変化します。
基礎価格は次の式で求めています。
現在のファイターレベル+ウィザードレベル+1
これに、先ほどの CRS による割引率を加味して販売価格を決定しています。
病院での治療費ですが、これは Max Hit Point が基本価格となります。
下2桁は前に述べたようにただの「飾り」ですので、ここでは無視します。
これに対して割引率を適応した価格が実際の治療費となります。
どーでもいいですけど治療費って高いですね。XANADU では保険きかないんでしょうか?
タワー内またはレベル10の Copper Dragon 等が所持している Mushroom ですが、これを取って増加する Max Hit Point は、現在の Max Hit Point の10%です。
XANADU を面白くしている要素の1つとして、「使いこなしたアイテムの経験値が上昇していく」というのが挙げられます。この「経験値」、運が良ければどんどん上がっていきますが、そうでないとなかなか成長しません。すなわち乱数によって値の上昇が管理されています。ただ、そうは言っても最初から全く育たないのでは話にならないので、ある程度の優遇措置もなされています。
・最初に装備した時点で既に30ポイント経験値を持てる
・現在の経験値から上昇率を判定し、加算する
前者は、店で武器・防具・魔法を購入後に装備してみて [I] を押して確認するとすぐに気がつくと思いますが、後者はやはり乱数で管理しています。具体的には、
現在の経験値が
・0以上99以下の場合
乱数を用いて25%の確立で1ポイント上昇
・100以上の場合
乱数を用いて5%の確立で1ポイント上昇
となっています。
アイテムの経験値は、1回使うごとに10ポイント増えていきます。
ちなみに装備品の最大経験値は、武器・魔法255ポイント、防具類200ポイントアイテム100ポイントとなっています。
巨大キャラクタとの一騎打ちを挑むボス戦では、その強弱に関わらず殆どのアイテムが使えなくされています。唯一使えるアイテムは Red Potion と Lamp のみです。
また、ボスのいる部屋に入る直前に制限時間付のアイテムはその効力をすべて失ってしまいます。Ruby を使ってても効き目が無くなってしまうため、Silver Dragon を楽に倒すためには知恵を絞らなければならないのです。
プロテクトに引っかかってしまう(コピーしたディスクで遊ぶ)と、ゲーム自体は一応遊べますが後々ボコボコにされるように出来ています。どんなものかを具体的に挙げますと、
・ボスの Hit Point がすべて 6553500 になってしまう
・装備している鎧、盾を剥ぎ取られてしまう
・Hit Point が0になっても死んでくれない
といったものがあります。特に、King Dragon で引っかかった場合に2番目の項目が発生しますので、はっきりいって倒すのはほぼ不可能と考えていいでしょう。
scenario II 特有の内部事情
XANADU scenario II は 1986 年 10 月、XANADU のマップ・敵・音楽を新たにして発売されたグレードアップ版ともいえる内容を持っています。最初のキャラクター生成時に XANADU のディスクを使いますが、ゲーム本体は XANADU と殆ど同等です。
アイテムの時間について
逆さツララ
Temple での裏技?バグ?
文章:ふー氏
ザナドゥに関連するすべての画面写真、パッケージ写真の著作権は株式会社日本ファルコムに帰属します。
scenario II になって追加された要素がいくつかありますが、ここではそれらについて解説します。
scenario II のアイテム時間単位 time は、我々が日常使う「秒」とそのものです。つまり、「130 times」と表示されればそのアイテムは130秒間有効なのです。
これは、XANADU の時には用いていなかった V-SYNC 割り込みを使用して、正確に秒数のカウントを行うようになったために実現できたものです。
また、同割り込みルーチンの中ではプロテクトチェックも行っているようです。
ゲーム開始直後にいきなり目の前にある「逆さツララ」ですが、下手にこの上に乗ってしまうととんでもなくダメージを受けることになります。これは、今所持してるアイテム個数×100ポイントをダメージとして計算しています。
scenario II では、経験値 6553500 ポイント貯めるとレベルが無限に上げられてしまうという技がありますが、私はこれはバグであると考えます。恐らく、ゲーム作成時にはそこまで経験値は貯まる事は無かろうと想定していたが、いざ剣(または魔法)だけでゲームを進めてみるとそうでなかったというのが実際だろうと思います。
これは、元々のプログラムでは Temple の処理上回避できない問題になっています。
どうやっても今の経験値と 6553500 を大小比較せざるを得ないプログラム記述方法になっているからです。
ちなみに、私が移植した X680x0 版ではこうならないようにしてあったりします。