ファイル指定
 SpoilerALは、ファイルの拡張子に比較的厳密です。そのため、スクリプト中から何らかのファイルを指定するときは、拡張子を記述しない書式にしてあります。まず、以下にファイルの種類とその拡張子の一覧を示します。
種類※ 説明 ※
リストファイル拡張子は .LST 。リスト系項目からよく利用されます。一覧として使用するファイルが多いです。
チェインファイル拡張子は .CHN 。一括系の項目からよく利用されます。連続した処理を記述するファイルが多いです。
SSCファイル拡張子は .SSC 。"Spoiler Scripts Child"の頭文字を取ってSSCファイルと呼ばれます。置き換え命令の一つ、[replace]で使用されます。(アドレス部分は変わるが、)何度も使用されるであろうスクリプトを記述したファイルです。
SSRファイル拡張子は .SSR 。置き換え命令の一つ、[repeart]で使用されます。数値や文字列が一部変化するが、連続して何度も連ねたいスクリプトを記述したファイルです。
ADJファイル拡張子は .ADJ 。アドレス補正(ADJustment)ファイル。別名「アドレス追撃ファイル」と呼ばれ、[attribute][/atteribute]属性の[adjustment]命令の一つ、ダイアログ補正で使われます。ADJ書式に従って記述されたファイルです。
ファンネルファイル拡張子は .SSF 。[attribute][/atteribute]属性のファンネルライト([funnel])で使用されます。条件式と、真のとき処理するバイト列を羅列したファイルです。
ライブラリファイル拡張子は .SSL 。後述します。
 このような種類がありますが、これらのファイル数が多くなってくると、管理の煩雑化やファイル検索の低速化を招いてしまいます。そのため、これらのファイル指定をグループ指定にすることで、ファイルを一つで済ませる方法が用意されています。

 使用するファイルは、ライブラリファイル(拡張子は .SSL )一つです。ライブラリファイルには、
[group]グループ名
ファイルの中身
[/group]
という形で、グループを記述していきます。グループは幾つあっても構いません。そして、スクリプトからファイルを指定するときは、
ライブラリファイル名->グループ名
という書き方をします。グループに拡張子はありませんし、ライブラリファイルの拡張子は.SSL固定なので、スクリプトに拡張子を記述しないという点は変わりません。ただし、ライブラリファイル以外の拡張子を意識する必要は無くなるわけです。

最後に、ライブラリファイルを用いたファイル指定の一例を示します。
[subject]使用武器:list,0x400000,汎用->武器一覧,0,1
[replace]0x500000, 汎用->ステータス
汎用.SSL
[group]武器一覧
ひのきの棒
革の鞭
短剣
[/group]

[group]ステータス
[script]体力:calc,0x00,0,99
[script]魔力:calc,0x04,0,99
[/group]
 同一スクリプトで使われるファイルは全てグループ化して、スクリプトタイトル.SSLなどのライブラリファイルにまとめてしまえば、管理も大分楽になりますよねっ。


難解度「AAA+」
リスト抽出
 「リスト抽出」とは、名前の通りメモリから文字列リストを抽出する」機能のことです。前述した一般的なファイル指定は、事前にファイルとしてデータ(文字列)を記述しておく必要があり、また実行時にその内容が変わることはありません。しかし、メモリから文字列を抽出し、リスト化する機能があったとすれば、どうでしょう? そうです、実行中に内容が変わる文字列であっても、このリスト抽出機能を用いれば、その時その時の状態を反映したリストを作成・利用できるのです。平たく言えば、アドレスネーミング機能の複数行版です。
 ファイル指定オプションすべてに使用でき、頭にアンダーバー(_)を入れることで、抽出リスト機能と判断します。
 書式は以下の様になります。
_mem/ アドレス/ 1行の最大文字数/ 行数/ ステップサイズ/ 終端バイト列/ エラー時の代替え文字列
_mem/ アドレス/ サイズ/ 行数/ ステップサイズ/ num/ エラー時の代替え文字列
_mem/ アドレス/ サイズ/ 行数/ ステップサイズ/ num_big_e/ エラー時の代替え文字列
です。","区切りではなく、"/"区切りであることにも注意して下さい。
アドレス読み込む開始アドレスです。詳しいアドレスの書き方は、《A-アドレス》を参照。
1行の最大文字数リスト化する関係上、1行が最大何文字で構成されるかを指定する必要があります。その最大文字数を、バイト単位で指定します。
行数リスト化した際の行数が幾つになるかを指定します。これにより、読み込まれる合計サイズは「1行の最大文字数×行数」となります。
ステップサイズ各行データの間隔をバイト単位で指定します。データは必ずしも隣り合わせで連続しているとは限りませんので、一定サイズの読み飛ばしも可能にしてあります。当然、「1行の最大文字数」と同じか、それより大きな値を指定します。仮にステップサイズが0x10のとき、1行目のデータを0x400000から所得したとすれば、2行目のデータは0x400010から所得します。
終端バイト列多くの文字列処理では、「文字列はここで終わり」という印しに、NULL文字(16進数で00)を使います。これらの終端符号を、バイト列で指定します。バイト列の詳細は、《B-バイト列》を参照。省略した場合は、NULL文字(00)と解釈します。
エラー時の代替え文字列値をメモリから読み込む関係上、プロセスを起動していないなどの原因で、値を所得できない場合があります。その際に利用する文字列を、このオプションで指定します。(結果的に、返されるリストは、この「エラー時の代替え文字列」1行だけのリストとなります。)
num
num_big_e
メモリから読みとれる値は、何も文字列ばかりではありません。メモリ中のデータを数値として抽出し、文字列化してリストに再構成することもできます。その機能を使う場合に、「num」あるいは「num_big_e」キーワードを「終端バイト列」オプションに指定します。なお、「num」を指定した場合は、メモリから読み込んだデータをそのまま文字列化しますが、「num_big_e」を指定した場合は、いったんエンディアンを反転(ビッグエンディアン化)してから文字列化します。
サイズ「サイズ」オプションは「1行の最大文字数」オプションと大して意味は変わりませんが、読み出す数値サイズを1〜4バイトの範囲で指定します。

 まとめとして、いくつかのパターンでリスト抽出を用いた項目例を書いておきます。
[subject]武器:list, 0x400000,_mem/ 0x410000/ 15/ 20/ 15/ 00/Read Error!, 0, 1
[subject]ステータス:bitlist, 0x420000,_mem/ 0x450000/ 31/ 8/ 31/ 00/Read Error!, 1
[subject]武器一覧:b_list, 0x500000,_mem/ 0x510000/ 31/ 20/ 31/ 00/Read Error!,0, 1,
                 _mem/ 0x520000/ 4/ 20/ 4/ num/Read Error!, offset
//////////////////// ↑実際は一行で書きます
 それなりに負荷がかかりますので、「手打ちが面倒だから」という理由では使用しない方がよいかと思います(^^;。ただし、「エラー時の代替え文字列」の説明で述べた様に、メモリから値を所得できない場合の対応も考えて利用して下さいね。




ねくすと せくしょん⇒

≪せくしょん ばっく