Wizardry (NES) ROM Map ====================== PRG #0 ------ $BB00- - キャラステータス画面に表示する文字列 $BDE5-$BFD8 - Spell name ~~~~~~~~~~~~~~~~~~~~~~~~ 呪文1つ当たり10Byte。余白は 0x20 で埋められている $BFD9-$BFDF - Unknown $BFE0-$BFFF - Signature PRG #1 ------ $8000-$808F - メッセージ格納アドレスの上位Byte ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $8090-$811F - メッセージ格納アドレスの下位Byte ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $8120-$81AF - メッセージ関係? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $81B0-$823F - メッセージ関係? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $8240-$82CF - メッセージ関係? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $82D0-$835F - メッセージ関係? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $A43F - POISON値を見てHPを減らす処理 PRG #2 ------ $A500 - 呪文ルーチン($A505 がエントリポイントとなることもある) $A534-$A597 - 各呪文ルーチンへのジャンプテーブル(呪文ID順) $A598 - ダメージ呪文用補助ルーチン $A5F7 - ACを上げるルーチン $A607 - ACを下げるルーチン $A616 - 各グループの先頭の番号 $A61B - 全体掛け呪文初期設定ルーチン $A62D - 単体掛け呪文初期設定ルーチン $A653 - グループ掛け呪文初期設定ルーチン $A68C - 確率の絡む呪文用補助ルーチン(呪文に抵抗できるかどうかの判定) $A6C4 - 対象を眠らせるルーチン $A6D2 - 対象が死んだ際に必要な処理を行うルーチン $A70A - HALITO ルーチン $A720 - MOGREF ルーチン $A725 - KATINO ルーチン $A788 - DUMAPIC ルーチン $A7C0 - DILTO ルーチン $A7D2 - SOPIC ルーチン $A7D7 - MAHALITO ルーチン $A7FE - MOLITO ルーチン $A825 - MORLIS ルーチン $A837 - DALTO ルーチン $A85E - LAHALITO ルーチン $A885 - MAMORLIS ルーチン $A897 - MAKANITO ルーチン $A8F0 - MADALTO ルーチン $A917 - LAKANITO ルーチン $A96E - ZILWAN ルーチン $A995 - MASOPIC ルーチン $A9F2 - HAMAN ルーチン $A9A0 - MALOR ルーチン $A9F6 - MAHAMAN ルーチン $AB79 - TILTOWAIT ルーチン $ABA0 - KALKI ルーチン $ABAB - DIOS ルーチン $ABC3 - BADIOS ルーチン $ACB1 - MILWA ルーチン $ABD9 - PORFIC ルーチン $ABDE - MATU ルーチン # CALFO は宝箱処理の中に組み込まれているので専用ルーチンなし # (ダミーアドレスとしてMANIFOのものが書き込まれている) $ABE9 - MANIFO ルーチン $AC2A - MONTINO ルーチン $ACAC - LOMILWA ルーチン $ACD3 - DIALKO ルーチン $ACC8 - LATUMAPIC ルーチン $AC73 - BAMATU ルーチン $AC7E - DIAL ルーチン $AC96 - BADIAL ルーチン $ACF8 - LATUMOFIS ルーチン $AD0C - MAPORFIC ルーチン $AD17 - DIALMA ルーチン $AD2F - BADIALMA ルーチン $AD45 - LITOKAN ルーチン $AFB2 - KANDI ルーチン $AF35 - DI ルーチン $AD6C - BADI ルーチン $ADB5 - LORTO ルーチン $ADDC - MADI ルーチン $ADF2 - 回復呪文用補助ルーチン $AE55 - MABADI ルーチン $AE97 - LOKTOFEIT ルーチン $AEEA - MALIKTO ルーチン $AF11 - KADORTO ルーチン PRG #3 ------ $AD00-$AD2F - アイテムテーブルのアドレス(アイテムテーブルID順) $AD30-$AEF6 - アイテムテーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PRG #4 ------ $8000 - フロアデータの初期化に関連するルーチンと思われるが未解析 $8100-$9A3F - Item data ~~~~~~~~~~~~~~~~~~~~~~~ struct ItemData[101] $9A40-$A9DF - マップデータ(壁および扉) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ B1FからB10Fまで400Byteずつ。 各階は (0,0) から1行ずつ。 $9A40-$9BCF B1F $9BD0-$9D5F B2F ... $A9E0-$BBFF - マップデータ(マス目) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 階段とかダークゾーンとかの情報と思われる。調査中 1階層400Byteと思われるが、階層の間に何か別のデータ(64Byte)が入ってるようだ。 とりあえず $BA30 が B10F のデータの開始位置と思われる 値の意味: 調査中だが、どうも階によって意味が変わるものがあるっぽい 共通なのは以下のものくらいか? 0x80: 玄室とみなされる領域 0x40: ダークゾーン 0x00: 普通のマス目 $BFB3- - ジャンプテーブル PRG #5 ------ $8000-$B27F - Monster data ~~~~~~~~~~~~~~~~~~~~~~~~~~ struct{ struct MonsterData U8 // HIGHWAYMAN の直後のみ 3, 他は全て 0 char[16] // 全て 0xFF で埋められている }[101] $B300-$B5FF - Default character data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct CharaData[6] PRG #6 ------ $873E - ボルタック在庫初期化処理と思われる $99B0 - キャラデータを読んで $7A00 以降のデータを更新するルーチンと思われる $9A7C-$9AA3 - 職業別運勢値補正 $9AA4-$9ABC - 種族別運勢値補正 $9CE9 でボーナスポイントを決定している $9D86- - ジャンプテーブル($9D79 参照) $9E44 - 特性値/アラインメントに応じて就ける職業を決定するルーチン $9F0F- - ジャンプテーブル $A09F- - ジャンプテーブル $A178 - キャラメイク後のキャラデータ書き込みルーチンと思われる $A259-$A25E - キャラメイクの際の職業別HP乱数幅 $A25F-$A264 - キャラメイクの際の職業別HP基本値 $A265-$A26A - キャラメイクで初期呪文を決定する際に参照する能力値アドレス(0x0E:IQ, 0x0F:PIETY) $A610- - ジャンプテーブル($A528 参照) $A807 - 画面下のPTステータス画面初期化ルーチン $A81D- - 画面下のPTステータス画面に表示する文字列 $AA41 - キャラデータ更新処理と思われる $AACC - 戦闘関連データ初期化ルーチン $AB8C - 装備アイテムの効果を付加するルーチン $AE27 - IDENTIFY ルーチン $B173- - ジャンプテーブル($B0AF 参照) $B29E - スペシャルパワー発動処理 $B2BC- - スペシャルパワーIDに対応するジャンプテーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 0x01 $B2EF MURAMASA BLADE 0x11 $B2FE DAGGER of THIEVES 0x16 $B307 SHURIKEN 0x17 $B31C ARMOR of LORDS $B2EF - スペシャルパワー 0x01 ルーチン(MURAMASA BLADE) $B2FE - スペシャルパワー 0x11 ルーチン(DAGGER of THIEVES) $B307 - スペシャルパワー 0x16 ルーチン(SHURIKEN) $B31C - スペシャルパワー 0x17 ルーチン(ARMOR of LORDS) $B8D7 - 打撃攻撃ルーチンの下請け $B8FE - 打撃攻撃ルーチン $BB07 - PTキャラの行動順位決定ルーチン $BB8D-$BB9F - PTキャラの行動順決定用データ(AGIに対応する値) PRG #7 ------ $C003 - RESET割り込みルーチン $C069 - NMI割り込みルーチン $C141-$C144 - 各方向キーに対応するビットフラグ $C145 - 乱数値をインクリメントしつつNMIを待つルーチン(その他の処理も行うが) $C193 - MMC1制御レジスタに値を書き込むルーチン $C19D - low CHR-ROM 切り替えルーチン $C1A7 - high CHR-ROM 切り替えルーチン $C1B1 - PRG-ROM 切り替えルーチン($C1B3, $C1B5 がエントリポイントの場合も) $C1C9 - IRQ/BRK割り込みルーチン(単にRTIするだけ) $C2A9 - 乱数ルーチンの下請け(乱数値に依存した値を返す) $C58B - メッセージ表示ルーチン $C7A6 - メッセージ表示ルーチン(フォーマット機能付き?) $CD1A - ダイスを振るルーチン $CD3C - [0, n) の範囲の乱数を発生するルーチン $CF2A - モンスターデータを $7E03 以下にロードするルーチン($CF1F がエントリポイントとなることもある) $CFA9 - アイテムデータを $0500 以下にロードするルーチン $D29A - 移動時に座標を更新するルーチンと思われる $D2B9-$D2CA - ジャンプテーブル($D19B 参照) $D70E- - ジャンプテーブル($D149 参照) $D98B - 呪文封じエリアに踏み込んだ際に呪文封じフラグを立てる処理 $DAA9 - モンスターの行動/行動順位決定ルーチン $DB03 - モンスター行動決定ルーチン下請け(呪文) $DB5A - モンスター使用呪文決定ルーチン $DB8F-$DB9E - 敵の使用するMAGE呪文(1LV当たり2種類) $DB9F-$DBAE - 敵の使用するPRIEST呪文(1LV当たり2種類) $DBAF-$DBD8 - 戦闘時のキャラ番号に対応するグループID $DBDE - モンスター行動決定ルーチン下請け(ブレス) $DBF5 - モンスター行動決定ルーチン下請け(仲間を呼ぶ) $DC18 - モンスター行動決定ルーチン下請け(逃走) $DC41 - モンスター行動決定ルーチン下請け(敵の打撃攻撃) $DC97-$DCB6 - タイプ別倍打判定用フラグデータ(配置にバグがあり、1Byte目と2Byte目が入れ替わって処理されてしまう) $DCB7 - フロアデータ初期化処理? $DEE2 - 指定した範囲での乱数を発生するルーチン(引数は RandomRange 構造体) $DF29 - エンカウント処理と思われる $E02D - 敵グループのデータを更新し、出現数を決定するルーチン $E0AA - 敵グループの出現数決定用補助ルーチン $E0D0 - 敵HP決定ルーチン(LVの書き込みも行う) $E0EC-$E181 - モンスター出現テーブル $E1CC-$E1D9 - モンスタータイプ別友好率 $E209-$E20E - PT人数別逃走成功率補正値 $E505 - SPELL ルーチン $E53F - 行動IDに対応するルーチンへジャンプする処理 $E559-$E564 - FIGHT以上の行動に対応するジャンプテーブル ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ FIGHT PRG #6 $B8FE DISPELL $E57F 敵のFIGHT $F88E RUN $E565 仲間を呼ぶ $E6DE ブレス $E632 $E565 - RUN ルーチン $E57F - DISPELL ルーチン $E632 - ブレスルーチン $E6DE - 仲間を呼ぶルーチン $E876 - 宝箱処理と思われる $E8BB-$E8C2 - ジャンプテーブル $E9D5 - 宝箱 DISARM ルーチン $EA6F - 宝箱 OPEN ルーチン $EAB1 - 宝箱 INSPECT ルーチン $EB34 - 宝箱 CALFO ルーチン $EBB7 - 宝箱の罠処理ルーチン $EBF2-$EC01 - 宝箱の罠に対応したジャンプテーブル $EC46 - CROSSBOW BOLTルーチン $EC50 - EXPLODING BOXルーチン $EC77 - STUNNERルーチン $EC89 - POISON NEEDLEルーチン $EC92 - GAS BOMBルーチン $ECAB - TELEPORTERルーチン $ECBC - MAGE BLASTERルーチン $ECDA - PRIEST BLASTERルーチン $ECF8 - ALARMルーチン $ED2F - キャラの職業を返すルーチン $EDA8-$EDAA - 各アラインメントの職業制限 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 善、中立、悪の順に就ける職業のビットセットが1Byteずつ。 $EDAB-$EDDA - 各職業の必要特性値 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ STR, IQ, PIE, VIT, AGI, LUC の順に8Byte(FIG, MAG, PRI, THI, BIS, SAM, LOR, NIN)ずつ $EDDB-$EE02 - 各種族固有の特性値 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HUM, ELF, DWA, GNO, HOB の順に8Byteずつ。 先頭6Byteが STR, IQ, PIE, VIT, AGI, LUC。残り2Byteは 0xFF で埋められている。 $F32A - 除算器($F32C がエントリポイントとなることもある) $F34C - 戦闘コマンド入力処理と思われる $F46E - FIGHT コマンド処理 $F481 - DISPELL コマンド処理 $F494 - RUN コマンド処理 $F4A6 - PARRY コマンド処理 $F4D6 - TAKE BACK コマンド処理 $F567- - 行動コマンド別ジャンプテーブル($F461 参照) $F575 - USE ITEM コマンド処理 $F6B4 - SPELL コマンド処理 $F765- - ジャンプテーブル $F88E - 敵の FIGHT ルーチン $FBE2 - ASLEEP を回復させるかどうか決めるコード $FCB4 - 敵のステータス異常の回復を試みるルーチンと思われる $FFE0-$FFEF - Signature