アドレスネーミングとは、直接文字列を記述するのではなく、目的の文字列を「メモリ中の指定範囲から所得する」機能です。
項目名などで使用でき、書式は以下の様になります。
_mem, アドレス, 最大文字数, 末尾に付加するバイト列, エラー時の代替え文字列
_mem, アドレス, サイズ, list, エラー時の代替え文字列, リストファイル名, 初項, 公差
_mem, アドレス, サイズ, free_list, エラー時の代替え文字列, リストファイル名
_mem, アドレス, サイズ, num, エラー時の代替え文字列, 書式指定フィールド
|
書式が複数用意されていますが、基本は1行目の書式(文字列書式)で、このオプションの大半は、文字列項目(string)とほぼ同じになります。
_mem | アドレスネーミング機能を示すキーワード。 |
アドレス | 読み込む対象のアドレスです。詳しいアドレスの書き方は、《A-アドレス》を参照。 |
最大文字数 | 入力できる文字数を、バイト単位で指定します。日本語文字は2バイトですから、その点にも注意。 |
末尾に付加するバイト列 | 多くの文字列処理では、「文字列はここで終わり」という印しに、NULL文字(16進数で00)を使います。これらの終端符号を、バイト列で指定します。バイト列の詳細は、《B-バイト列》を参照。省略した場合は、NULL文字(00)と解釈します。ただし、最大文字数に8を指定してNULL文字を付加すると、読み込む最大文字数は9になります。 |
エラー時の代替え文字列 | 値をメモリから読み込む関係上、プロセスを起動していないなどの原因で、値を所得できない場合があります。その際に利用する文字列を、このオプションで指定します。 |
サイズ | 2行目・3行目の書式は、メモリ中から文字列ではなく数値を所得し、その数値に対応する文字列を、リストファイルから取り出す形式です。また、4行目の書式は、メモリ中から文字列ではなく数値を所得し、指定の書式で表示する形式です。「サイズ」オプションは「最大文字数」オプションと大して意味は変わりませんが、読み出す数値サイズを1〜4バイトの範囲で指定します。 |
list free_list num | 「末尾に付加するバイト列」オプションが「list」か「free_list」の場合、リスト形書式(2・3行目の書式)であると見なします。2行目の書式(リスト書式)は、「list」を指定することで選択されます。3行目の書式(フリーリスト書式)は、「free_list」を指定することで選択されます。 また、「num」を指定すると、数値型書式(4行目の書式)と見なします。 |
リストファイル名 | 対応する文字列の一覧を書いたリストファイルを指定します。ファイル指定の詳細は、《C-ファイル指定》を参照。「リスト書式」の場合、リストファイルには表示する文字列を単純に羅列します。リスト内の「所得した値X公差+初項」の行が、実際に表示される文字列となります。
「フリーリスト書式」の場合、リストは「数値=文字列」という形式で値と文字列をセットにして記述します。所得した値が、特定行の「数値」と一致した場合、"="で結ばれた「文字列」が表示される仕組みです。 |
初項、公差 | リスト項目(list)を参照。 |
書式指定フィールド | C言語のprintf関数に用いるものとほぼ同じです。簡単に説明すると、
%[flags][width]type
という構文をとり、各部位の詳細は以下のようになります。
[flags]:次のうちいずれか。(省略可能)
|
- -:指定されたフィールド幅に結果を左詰めする。
- +:出力値が符号付きの場合は、出力値の前に + または - の符号を付ける。
- 0:[width] の前に 0 を付けると、最小幅まで 0 が付加される。0 と - を指定すると、0 は無視される。整数書式 (i、u、x、X、o、d) と一緒に指定すると、0 は無視される。
- :(半角スペース)出力値が符号付きで整数であると、出力値の前に空白が付く。空白フラグと + フラグの両方を指定すると、空白フラグは無視される。
- #:o、x、X の各書式と一緒に使うと、0 以外のすべての出力値の前にそれぞれ 0、0x、0X が付く。 空白は表示されない。e、E、f の各書式と一緒に使うと、必ず出力値に強制的に小数点が入る。g または G の書式と一緒に使うと、必ず出力値に強制的に小数点が入り、後続する 0 が切り捨てられない。c、d、i、u、s のいずれかと一緒に使うと無視される。
|
[width]:(省略可能)
|
負でない 10 進整数を指定して、表示する最小文字数を制御します。出力値の文字数が指定幅より少ない場合は、- フラグ (左詰め) 指定の有無によって、値の左または右に最小幅まで空白が追加されます。width の前に 0 を付けると、最小幅まで 0 が追加されます (左詰めの数には無効)。
|
type:次のうちいずれか。(必須)
|
- d:符号付き 10 進整数
- i:符号付き 8 進整数
- o:符号なし 8 進整数
- u:符号なし 10 進整数
- x:符号なし 16 進整数、"abcdef" を使用。
- X:符号なし 16 進整数、"ABCDEF" を使用。
- e:[-]d.dddd e [sign]ddd 形式符号付きの値。d は 1 個の 10 進数、dddd は 1 個または複数の 10 進数、ddd は正確に 3 桁の 10 進数、sign は + または -。
- E:指数の前に付くのが e ではなく E である点を除いて、e の書式と同じ。
- f:[-]dddd.dddd 形式の符号付きの値。dddd は、1 個または複数の 10 進数。小数点の前の桁数はその数の絶対値によって決定され、小数点の後の桁数は要求された精度によって決定される。
- g:f または e の書式のうち、指定された値および精度を表現できる短い方の書式。e 書式は、値の指数部が、-4 より小さいか precision で指定された数よりも大きい場合にのみ使う。後に続く 0 は切り捨てられ、小数点は 1 個または複数の数字が続く場合にのみ表示される。
- G:指数の前にあるのが e ではなく E である点を除いて、g の書式と同じ (該当する場合)。
|
となります。下記の具体例を見て、色々と模索してみるのも良いでしょう。
%d | :10進数で表示 |
%X | :16進数で表示 |
%08X | :8桁の16進数で表示(値が4桁分しかなくても、残りの4桁を0で埋める) |
|
まとめとして、いくつかのパターンでアドレスネーミングを用いた項目例を書いておきます。
[subject]_mem, 0x450000, 7, 00, 主人公:dir
[subject]_mem, 0x480000, 7, 00, <Name Read Error>:calc,0x400000,0,100
[subject]_mem, 0x490000, 4, list, 1人目, リスト1, 0,1:dir
[subject]_mem, 0x4C0000, 1, free_list, 1個目, リスト2:dir
[subject]_mem, 0x4C0000, 4, num, 体力値[読み込み不可], %d:dir
リスト1.LST
一郎
次郎
佐武郎
リスト2.LST
1=ひのきの棒
5=革の鞭
20=短剣
|
多数のキャラクタデータが連続していて、しかもその並びがゲーム中でよく変動する場合などに、アドレスネーミングは有効です。ただし、「エラー時の代替え文字列」の説明で述べた様に、メモリから値を所得できない場合の対応も考えて利用して下さいね。
なお、アドレスネーミング中にアドレスコーディングを混在させる場合、項目名との区切りであるコロン(:)と、ポインタ変換演算子([:や:])が重複を起こします。その際は、ポインタ変換演算子のコロンを一旦エスケープシーケンス(\)で回避させて記述します。
[subject]_mem, [:0x450000:], 7, 00, 主人公:dir
// ↑この場合、項目名は“[subject]_mem, [”だと誤認します。
[subject]_mem, [\:0x450000\:], 7, 00, 主人公:dir
// ↑この様にすることで、正しく認識します。
|
|
|