home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fun CD 26
/
OTACD26.ISO
/
archive
/
game
/
spoiler
/
spal34
/
HowToSSG.txt
< prev
next >
Wrap
Text File
|
2000-03-07
|
27KB
|
693 lines
現在グラフィカルにSSGを作成できる SSGEditer
通称 SEdi(セディ)の作成にも着手しております。
こんな面倒な物が書けるかっ!と言う方は、もう少しお待ち下さい。
(と、ver1.0から書いておきながら未だに出来てないッス(^^;)すみませぬ)
---------------------------------
以下はSSGを作ってみたいな~とか思った方必見の
「SSGの書き方 ver3.4版」でございます。ぜひぜひ一度チャレンジしてみて下さい。
---------------- SSGの書き方 ----------------
SSG for SpoilerAL ver 3.4 //1行目にはこういう文が必ず入ってなきゃダメなの
//ver の部分は随時変わるけどね。
[script] //でスクリプトが始まるよ~って教えてあげる
//"]"の後ろには何も書かないでね
[title] //"]"の後ろに表示されるタイトルを書くの
//例:[title]テスト用
[process] //"]"の後ろに改造するプロセスを書くの
//例:[process]TEST.EXE
[maker] //"]"の後ろにメーカーとかソフトハウスとか発売元とかを書くの
//例:[maker]アリスソフト
[creator] //"]"の後ろにそのSSGを書いた人の名前を書くの
//例:[creator]あつ
[special] //"]"の後ろにタイトルを特殊順でソートする場合の見だしを書くの
//普通は書かない方が良いかな。
//例:[special]対応機種限定
[adjustment] //環境によって、アドレスがずれる場合に用いる。
//使い方は後述するでし。
[hold] //基本的に、環境によってアドレスがずれるのだが、
//変化しないアドレスもある場合に用いる。
//使い方は同じく後述するでし。
[note] //補足とかメモに表示したいことを書き始めるよ~っていう合図
//"]"の後ろに"wordwrap"と書くと、
//画面端で自動的に文章を折り返すようになります。
[/note] //メモはココまでで終わりダヨって言う合図
//"]"の後ろには何も書かないでね
[subject] //"]"の後ろに項目データを書くの
//説明長くなるから下記参照
[back] //階層項目で下がった階層を1つ戻す
//階層項目については下記参照
[root] //階層項目で下がった階層をいっきに初期階層まで戻す
//階層項目については下記参照
[/script] //でスクリプトは終わりだよって教えてあげる
//"]"の後ろには何も書かないでね
前後の空白、タブは無視されるので
[subject]モキュ: dir
とか書いてもOKです。
(ただし日本語文字(全角文字)の空白はカットされません)
[note]から[/note]で囲んだ中以外なら、
関係ない文は全てコメントとして無視されます。
[script]
ももももっ ←コメント
ももも? ←コメント
[[/script] ←コメント
[backもも] ←コメント
も[subject] ←コメント
[note]
[back] ←メモとして表示
[root] ←メモとして表示
[/note]
[/script]
もももももっ ←コメント
コメントは見やすくなるように、つけようね。
やりすぎるとよけい見にくくなるゾ。
-------------- [subject]の説明 ----------------
項目名に"/"を含ませることはできません。理由は下記参照
[subject]項目名:コード
という風に書く。
"項目名"には、その項目の表示名を書く。どんな名前でもOKだよ。
"コード"は今のところ12個。
★アドレスや最小値などの値(toggle項目のON/OFF時の値以外)は、
16進数なら頭に"0x"をつけ、10進数ならそのまま書くこと!
★トグル項目以外の書き換え項目(電卓、リスト、文字項目)の最大値や書き換える値は
long型(最大0xFFFFFFFF)までにして下さい。もしそれ以上の値を使いたい場合は
項目を二つに分けるか、私に連絡下さいm(_ _)m
今のところint以上の値を使って書き換えるのを知らないんで(^^;)
★コードにデフォルト値がある場合、その値は省略して記述しても構いません。
例:[subject]体力:calc,0x438CDA,0x00,0x03E7 //2つとも同じ物と解釈される
[subject]体力:calc,0x438CDA,0x00,0x03E7,signed,little_e
◆1つ目は"dir"。階層項目とでも言うのかな。
[subject]項目名:dir
と書けば終わり。
階層を一段下げてくれます。("新しいフォルダを作る"みたいなもんかな)
[subject]項目1:dir
[subject]項目2:dir
[subject]項目3:dir
とかやると、どんどん階層が深くなっていきます。
最大256階層まで掘れます(笑)
項目名に"/"を入れると、"/"の前までが項目名になります。
★"dir"で階層を下げたら、ちゃんと[back]や[root]で
階層を戻すことを忘れずに。
◆2つ目は"calc"。電卓項目とでも言うんでしょう。
数値を電卓で入力できるようになるよ。
[subject]項目名:calc,開始アドレス,入力できる最小値,入力できる最大値
,負値の可否,エンディアンの指定
という風に書く。(実際書くときは改行しちゃダメだよ)
♪「負値の可否」ってのは、値をsigned(-2,147,483,648~2,147,483,647)として
扱うかunsigned(0~4,294,967,295)として扱うかを指定するところです。
"signed"と書けばsignedとして扱いますし、"unsigned"と書けばunsignedとして
扱います。(デフォルト値は signed )
(早い話が0よか少ない値を使うかどうかってコト。
-1以下の値を使っていなくても、大抵のゲームは
2,147,483,647を越すような値も使っていないから、signedにしとけば問題なし。)
Ψ「エンディアンの指定」には "little_e" もしくは "big_e" を記述します。
Windowsでは、通常値を格納するとき、
上位バイトと下位バイトが逆(リトルエンディアン)になります。
が、あえて反転させたくない場合は、ビッグエンディアンを指定します。
なお、ビッグエンディアンを指定するときでも、最大値・最小値の値は
反転させて書かなくて結構です。(デフォルト値は little_e )
(何のこっちゃ?って人は、何も考えずに "little_e" と記述して下さい(^^;))
項目名に"/"を入れて他の文字も変更することができます。
一つ目の"/"の前までが項目名、
項目名の後から二つ目の"/"の前までが現在値名(丁度いい呼び名が思いつかない(^^;)
現在値名の後から三つ目の"/"の前までが値の固定名
値の固定名の後から":"までが[]の後ろに入れる補足文字になります。
例図: 現在値名[現在値]補足文字(Min:0 Max:10)
省略した場合、現在値名は項目名に、値の固定名は「値の固定」になります。
例:[subject]体力:calc,0x438CDA,0x00,0x03E7,signed,little_e
[subject]体力:calc,4426970,0,99999,unsigned,little_e
◆3つ目は"toggle"。トグル項目(ON/OFF項目)とでも言おう。
ONかOFFしかないデータはこれを使うべし。
[subject]項目名:toggle, 開始アドレス, ONの値, OFFの値
という風に書く。
なお、繰り返し命令はこのトグル項目でのみ使用可能。
書式は
[subject]項目名:toggle, 開始アドレス, 終了アドレス-ONの値, OFFの値
と書くだけです。
♪書き込む値(ON/OFF)を、直接文字で記述することもできます。
書き込む値の前に s をつけると、記述した文字を書き込んでくれます。
s01山田 <-同じ-> 30318E529363
‡と、ここまで書くとプログラミングをやってる方の中には「アレはどうするんだ?」
とか思った方もいるでしょう。そうです、「制御コード」
(いわいる改行とかタブとかNULL文字です)ってのがありますね。
しかしご安心下さい、エスケープシーケンスを使えます。
改行なら"\n"、タブなら"\t"、NULL文字なら"\0"、"\"(円ダラー)なら"\\"でごわす。
¶賢明な読者諸君(笑)なら、もう一つ疑問に思ったことだろう。
そう、"-"(ハイフン)を文字として書くと、繰り返し項目と見なされるのではないか?
へっへっへ、そこら辺も抜かりはありやせんゼ、旦那!
こいつもエスケープシーケンスの応用でごわす。"\_"と書けばバッチシです。
∇(とはいっても","(カンマ・コンマ)も使えないんだよね(^^;)
仕方ないんで苦肉の策。
"\."(エンダラー+ピリオド)で","(カンマ・コンマ)と見なします。
@ON/OFFの値は、一部のバイトを"?"でマスクして、読み飛ばすこともできます。
例:現在の値が0x1234であるとき
[subject]中央2バイトをマスク:toggle,0x0,F??F,0000
を、ONの値で書き込むと、0xF23Fと書き込まれます。
なお、必ずしもと言うわけではありませんがONの値とOFFの値の桁数はそろえた方が
ミスが起こりにくいです(^_^)
項目名に"/"を入れて他の文字も変更することができます。
一つ目の"/"の前までが項目名、
項目名の後から二つ目の"/"の前までがトグル値名(丁度いい呼び名が思いつかない(^^;)
現在値名の後から":"までが値の固定名になります。
省略した場合、現在値名は項目名に、値の固定名は「値の固定」になります。
例:[subject]お猿人形1を所持:toggle,0x438CD0,01,00
[subject]お猿人形セットを所持:toggle,0x438CD0,0x438CDF-01,00
[subject]お猿人形の名前:toggle, 0x438CD0, s猿雄\0, sおさる大王\0
◆4つ目は"list"。リスト項目というヤツです。
キャラの装備とか一覧の中から選ばせたい項目はこれで書く。
[subject]項目名:list,開始アドレス, ファイル名, 行頭の指す値, 公差
という風に書く。
♪"ファイル名"には、選択できる一覧を書いたファイル(拡張子は lst にして、
そのSSGと同じフォルダに置くこと)の名前の部分だけ(拡張子は省いて良い)を書く。
リストファイルの名前は他と区別しやすいように、
タイトルや項目名に似た名前がいいかも。
♪"行頭の指す値"は、一覧を書いたファイルの、
1行目の文を選択したときに、メモリに書き込む値を書く。
たいていのゲームは 0 だが、中には例外もあるだろうから一応ね。
♪"公差"には、一覧の行と行の間で増す値の量を書く。
例えば、1行目を選択したら 0 と書き込んで、
2行目を選択したら 1 、3行目なら 2 という風に書き込む値が変わるなら
公差には 1 と書く。
項目名に"/"を入れて他の文字も変更することができます。
一つ目の"/"の前までが項目名、
項目名の後から":"までが値の固定名になります。
省略した場合、値の固定名は「値の固定」になります。
例:[subject]右手:list,0x438CDA,test,0x00,0x01
◆5つ目は"b_toggle"。バンドルトグル(一括トグル)項目と呼ぶべしっ!
これはtoggleの拡張版(?)みたいなものです。
基本的にtoggle項目は、何バイト分でも書き換えることができます。しかし、
虫食い(0x00から0x10まで書き込んで、0x10バイト分無視(飛ば)して
0x20から0x30まで書き込む。)的な書き方ができません。
そこでb_toggle項目の登場と相成るわけです。
使い方はかーんたん?(ォ
[subject]項目名:b_toggle, 開始アドレス, ファイル名, オフセットか
という風に書く。
♪"ファイル名"には、toggle項目を羅列したファイル(拡張子は chn にして、
そのSSGと同じフォルダに置くこと)の名前の部分だけ(拡張子は省いて良い)を書く。
チェインファイルの名前は他と区別しやすいように、
タイトルや項目名に似た名前がいいかも。
〒"オフセットか"には"real"か"offset"を指定します。(デフォルトは"real")
チェインファイルに書かれているアドレスを、ある値からのオフセット
として記述したい場合に"offset"を指定します。"real"を指定した場合、
読み書きするアドレスは、チェインファイルに記述したアドレスになります。
そのため、2つ目のオプションである"開始アドレス"は、"offset"を
指定しない限り、どんな値でも良い、と言うことになります(^^;)
例:[subject]オフセットで記述:b_toggle, 0x40000, test, offset
↓チェインファイル↓
0x00,01,00
0x10,01,00
実行時に
0x40000,01,00
0x40010,01,00
へ変換される。
なお、チェインファイル中のtoggle項目は
[subject]項目名:toggle,
を省いて書きます。つまり、
開始アドレス, ONの値, OFFの値
(例:0x438CD0,01,00)
もしくは
開始アドレス, 終了アドレス-ONの値, OFFの値
(例:0x438CD0,0x438CDF-01,00)
という風に書くわけです。
(勿論、文字記述もOKだよっ!)
バンドルトグル項目を選択した場合、指定されたチェインファイル中の
toggle処理が全て実行されますので、toggle処理を虫食い的に記述すれば
虫食い書き換えも可能なわけですね。ハイ。
(空白は無視されますが、コメントは使えません)
チェインファイルの例:
0x430000,0101,0000
0x430010,0101,0000
0x430020,0101,0000
項目名に"/"を入れて他の文字も変更することができます。
一つ目の"/"の前までが項目名、
項目名の後から二つ目の"/"の前までがトグル値名(丁度いい呼び名が思いつかない(^^;)
現在値名の後から":"までが値の固定名になります。
省略した場合、現在値名は項目名に、値の固定名は「値の固定」になります。
例:[subject]お猿人形1を所持:repeat, OSARU
◆6つ目は"string"。文字項目ってとこかな。
キャラの名前とかを書き換える場合はこれがいいかもね。
[subject]項目名:string,開始アドレス, 最大文字数(バイト単位), 末尾にNULL付加
という風に書く。
♪"最大文字数"には、入力できる文字数の最大値をバイト単位で指定します。
♪"末尾にNULL付加"に"null"を指定すると、文字書き込み時に
文末にNULL文字を付加して書き込みます。
(※最大文字数に注意!
[subject]項目名:string,開始アドレス, 8, 1
と書いた場合、書き込まれる最大バイト数は"9"ということになります。)
"null"以外を指定した場合、NULL文字は付加されません。
項目名に"/"を入れて他の文字も変更することができます。
一つ目の"/"の前までが項目名、
項目名の後から二つ目の"/"の前までが現在値名(丁度いい呼び名が思いつかない(^^;)
現在値名の後から":"までが値の固定名になります。
省略した場合、現在値名は項目名に、値の固定名は「値の固定」になります。
例:[subject]主人公名:string,0x468000, 0x0F, null
◆7つ目は"b_calc"。バンドルカルク(一括電卓)項目と、訳して下さい(^^;)
電卓版バンドルトグル項目とでも申しましょうか…
複数のアドレスへ、任意の値を書き込む場合に使います。
(アイテムがたくさんあって、いちいち入力するのが面倒なときなどは、
コレを使うと楽になりますね)
[subject]項目名:b_calc, 開始アドレス, ファイル名, オフセットか
という風に書くのですが、まんまバンドルトグル項目ですね(^^;)
注意して欲しいのは、現在の値の代わりに、
「全ての現在値の平均」を表示するという点です。
♪"ファイル名"や"オフセットか"の指定法も、バンドルトグル項目と同じです。
なお、チェインファイル中のcalc項目は
[subject]項目名:calc,
を省いて書きます。つまり、
開始アドレス, 最小値, 最大値, 負値の可否, エンディアン
(例:0x438CDA,0x00,0x03E7,signed,little_e)
という風に書くわけです。
ただし、チェインリスト内の最小値や最大値、負値の可否やエンディアンは
全て同じになるようにして下さい。でないとおかしくなります。
例の如く空白行は無視しますが、コメント文は使えません。
項目名に"/"を入れて他の文字も変更することができます。
一つ目の"/"の前までが項目名、
項目名の後から二つ目の"/"の前までが現在値の平均名
(丁度いい呼び名が思いつかない(^^;)
現在値名の後から":"までが値の固定名になります。
省略した場合、現在値の平均名は項目名に、値の固定名は「値の固定」になります。
◆8つ目は"t_toggle"。トレーストグル項目の略ですっ☆
8つ目ともなると、ちょっと特殊な項目になってきますね。
これは、アドレス X の値が M になったとき、アドレス Y の値を N にする。
と言う項目です。
[subject]項目名:t_toggle, 監視元アドレス, 監視元ONの値, OFFは固定か,
書き換え先ONの値, 書き換え先OFFの値, 書き換え先アドレス
という風に書く。
♪監視元アドレス:
ONなのか、監視するアドレス。
♪監視元ONの値:
監視元アドレスの値がこの値になったとき、書き換え先アドレスの値を書き換える
♪OFFは固定か:
これに"off_hold"を指定すると、監視元アドレスの値が監視元ONの値で[ない]とき、
書き換え先の値を、「書き換え先OFFの値」に書き換えます。
デフォルト値である"off_disregard"なら、監視元アドレスの値が監視元ONの値で
ない限り、書き換えは行いません。
♪書き換え先ONの値:
監視元アドレスの値が「監視元ONの値」になったとき、書き換え先アドレスの値を
この値に書き換えます。
♪書き換え先OFFの値:
監視元アドレスの値が「監視元ONの値」でなく、「OFFは固定か」が"off_hold"の場合、
書き換え先アドレスの値を、この値に書き換えます。
♪書き換え先アドレス:
実際に書き換えを行うアドレスです。
項目名に"/"を入れて他の文字も変更することができます。
一つ目の"/"の前までが項目名、
項目名の後から":"までが値の固定名になります。
(トレース系は常に値を固定するかそうでないかになります。)
例:[subject]近寄ると逃げる:t_toggle,0x400000,2A,off_disregard,FF,00,0x500000
◆9つ目は"t_list"。トレースリスト項目の略だよっ☆
これはトレーストグルの拡張版みたいな物ですね。
トレーストグルの場合、ONの値というのは1つしか指定できません。
これでは、XのときはK、YのときはLのように、複数の書き換え値に対応できませんね?
そこでトレースリストです!
[subject]項目名:t_list,監視元アドレス,ファイル名,書き換え先アドレス
何となく察しはついたでしょうか?
そう、ファイル名には書き換え値を記したリスト名(拡張子.lst)を書くんです。
なお、OFF固定はできません。
リストの中には
監視元ONの値,書き換え先ONの値
という書式で必要なだけ羅列してください。
例によって改行・スペースのみは素通りしますが、他はダメです。
例:[subject]何をしても逃げる:t_list,0x400000,ドラ食え,0x500000
リスト内
00,FF
2A,FF
50,FF
項目名に"/"を入れて他の文字も変更することができます。
一つ目の"/"の前までが項目名、
項目名の後から":"までが値の固定名になります。
◆10個目は"b_list"。バンドルリストです。
ここまで読んできた方なら、察しが付くかと思います。
書式は
[subject]項目名:b_list,開始アドレス,lstファイル名,行頭の指す値,公差,chnファイル名,オフセットか
になります。
チェインファイルには、読み書きしたいアドレスだけを連ねます。
(16進なら頭に"0x"を忘れずに!)
例:[subject]属性一括:b_list,0x468000,属性,0,1,属性,real
◆11個目は"d_list"。ダブルリストです。
listやb_listは、基本的に小さい順に値が並ぶことになります。
が、値を不定でとびとびに定義したい場合、この項目を使います。
書式は
[subject]項目名:d_list,開始アドレス,lstファイル名, 最小値, 最大値,lstファイル名
になります。
※最後はlstファイルです。注意してください。
最小値・最大値には、使用する値の最小値・最大値を書きます。
一つ目のリストファイルに表示する名称を。2つ目のリストファイルに値を書きます。
例:[subject]技:d_list,0x486000,技名, 0, 0xFF,技値
技名.lst |技値.lst
------+------
なし |0x00
唐竹割 |0x0A
枯木斬 |0x20
デスシックル|0xFF
◆12個目は"bitlist"。ビットリストです。
ここまでのリスト項目は、どれか一つしか選択できません。
(普通はそれで事足りるので)
が、バイトではなく、ビットが立ったか立たないかで管理しているものは、
複数選択できないと、まずいことがあります。その為に使うのが、この項目です。
書式は
[subject]項目名:bitlist,開始アドレス,lstファイル名, バイトサイズ
となります。
「バイトサイズ」には、使用するバイト数を書いて下さい。
例:[subject]所持武器:bitlist,0x486000,武器名,1
---------- [replace]で省エネしよう! -------------
みなさん…アドレスだけ違う、同じよーな項目をたーくさん書いてませんかぁ?。
もっと楽しましょうよぉ(^-^)
さて、ver2.6から登場いたしました
[replace]君。
これが便利なんですね~。
例えば
[subject]キャラ1:dir
[subject]体力:calc,0x400000,0x0,0xFF,signed,little_e
[subject]知力:calc,0x400010,0x0,0xFF,signed,little_e
[subject]迫力:calc,0x400020,0x0,0xFF,signed,little_e
[back]
[subject]キャラ2:dir
[subject]体力:calc,0x400030,0x0,0xFF,signed,little_e
[subject]知力:calc,0x400040,0x0,0xFF,signed,little_e
[subject]迫力:calc,0x400050,0x0,0xFF,signed,little_e
[back]
という項目があったとしますね?
体力・知力・迫力は、アドレス以外はキャラ1・キャラ2ともに同じ内容です。
こういう場合は、
----------------------
[subject]体力:calc,0x00,0x0,0xFF,signed,little_e
[subject]知力:calc,0x10,0x0,0xFF,signed,little_e
[subject]迫力:calc,0x20,0x0,0xFF,signed,little_e
[back]
----------------------
というファイルを作り、拡張子".ssc"(Spoiler Script Child)で保存します。
※仮に"status.ssc"というファイル名にしたとしましょう。
で、本体のSSGを
[subject]キャラ1:dir
[replace]0x400000,status,offset
[subject]キャラ2:dir
[replace]0x400030,status,offset
に書き換えます。
これでファイルサイズは減少、動作は変更前と同じです(^^)
※[replace]を多段に(sscに[replace]を)使うこともできます。
ただし、永久ループにならないように気を付けて下さいね(^^;)
---------- [adjustment]で追尾する! -------------
adjustment----補正、調整の意
ぱすてるチャイム以降のアリスソフト系ゲームなど、
環境によってアドレスが変わってしまう物もありますよね。
そーいう輩には、この[adjustment]を叩き込むべし!
[adjustment]モード,基点,値・ファイル名,アドレス下限,アドレス上限,増減値
ちょっと難しいのでよーく読んで下さいね。
・「モード」
"search"か"dialog"か"heap"か"verison"を指定します。
"search"を指定した場合、3番目のオプションには直接値を記述します。
"dialog"を指定した場合、3番目のオプションにはADJファイル名を記述します。
"verison"を指定した場合、書式が全く変わってきます(^^;)。
詳細はもう少しあとでね。
・「基点」
基点となるアドレスを書く。
・「値・ファイル名」
サーチする値、もしくはADJファイル名(拡張子を除く)を書く
・「アドレス下限,上限」
サーチする範囲を書く。
・「増減値」
サーチする際のステップ量を書く。
★【不変な値があり、それが書き換えたい値に隣接している】:
自分の環境では 0x500000 にAABBCCDDEEFFという
(環境によってアドレスは変わるが)内容はいつも変わらない値があるなら、
[adjustment]search,0x500000,AABBCCDDEEFF,0x400000,0xFFFFFF,0x1
と書く。すると、ゲーム実行中に何かの項目を選ぶと
0x500000(基点)から0x400000(下限)まで0x1(増減値)ずつ減らしながら、
AABBCCDDEEFFという値を探していく。見つからなかった場合、
0x500000(基点)から0xFFFFFF(上限)まで0x1(増減値)ずつ増やしながら
AABBCCDDEEFFという値を探していく。見つかった場合、
そのアドレスと0x500000(基点)との差を求め、補正値として記憶しておく。
で、書き換えるときは、補正値を加算して書き込むわけです。
サーチする値は、なるべく類似性のない物の方が良いでしょう。
("00000000"とかは厳禁だよっ(^^;))
なお、基点や下限・上限には、heapXも指定できます。
例:[adjustment]search,0x500000,AABBCCDDEEFF,heap2,heap3,0x1
この場合、heap2<0x500000<heap3の範囲でサーチをかけます。
※一度値を見つけることが出来たら、
目的のプロセスが終了しない限り、再度サーチすることはありません。
★【不変な値など無い。値を入力して、それをサーチするぜっ!】:
不変な値がないなど、"search"が使えない場合は別の方法を用います。
[adjustment]dialog,0x500000,テスト,0x400000,0xFFFFFF,0x1
と書く。すると、ゲーム実行中に何かの項目を選ぶと
SpoilerALは テスト.adj というファイルを読み込み、解析します。
ADJファイルの書式は以下参照。
---------付録(笑) HowToAdj-------------------
書式は殆どSSGと同じです。
しかも現段階ではタグも7種類だけ(^^;)
◆[note]から
◆[/note]
までの間に書いた文字は、メモとして表示されます。
◆[toggle]
[toggle]見出し,ONの名称,OFFの名称,未入力の可否,ONの値,OFFの値
の様に用います。
これを使うと、ON/OFF/不明を選ぶラジオグループを表示します。
┌見出し──────────────┐
│●ONの名称 ○OFFの名称 ○不明 │
└─────────────────┘
図で書くとこんな感じでしょうか。
4番目のオプション「未入力の可否」には"ok"か"no"を指定します。
"ok"を指定すると、「不明」を選べるようになります。
ただし、不明を選んだときは「どんな値が入っていてもいい」という
意味になりますので、サーチしてもヒットしない可能性が高くなります。
◆[calc]
[calc]名称,未入力の可否,入力できる最小値,入力できる最大値
,負値の可否,エンディアンの指定
の様に用います。
これを使うと、値を入力するエディットボックスを表示します。
_________
名称[_________]
表示はこんな感じです。
toggle同様、未入力の可否に"ok"を指定できます。
◆[string]
[string]名称,未入力の可否,最大文字数(バイト単位), 末尾にNULL付加
の様に用います。
これを使うと、文字を入力するエディットボックスを表示します。
_________
名称[_________]
表示はこんな感じです。
toggle同様、未入力の可否に"ok"を指定できます。
入力した文字が最大文字数に満たない場合、
不定な値(toggleでいう"??")で補完されます。
◆[radio_calc]
[radio_calc]見出し,行数,最小値,最大値,負値の可否,エンディアンの指定,
アドレス,...
の様に用います。
※アドレスは必要な分だけ連ねてください。
これを使うと、一覧の中から一つの値を選ぶラジオグループを表示します。
┌見出し──────────────────────┐
│●アドレス1の値 ○アドレス2の値 ○アドレス3の値 │
└─────────────────────────┘
図で書くとこんな感じでしょうか。(行数3の場合)
※行数2でアドレスが3つある場合、自動的に2段表示します。
主に予め移動先アドレスが分かっている場合に使います。
「現在の所持金を選んでください」とかかな。
[adjustment]に記述したアドレスと、選んだアドレスの差が補正値になります。
※その性質上、他の項目は必要ありませんが、[val]には[val]*.などと指定してください。
◆[val]
さて、これで値を入力させるために、
エディットボックスやラジオグループを表示させることは出来ますね。
ではその入力した値を組み合わせて、実際にサーチする値に変換しましょう。
先ほど、adjustmentの説明のために書いた例がありましたね。
[adjustment]dialog,0x500000,テスト,0x400000,0xFFFFFF,0x1
これが実行されたと想定して、説明します。
テスト.adj に、
[val]AABBCCDD
と書いたとします。すると、
0x500000(基点)から0x400000(下限)まで0x1(増減値)ずつ減らしながら、
AABBCCDDという値を探していく。見つからなかった場合、
0x500000(基点)から0xFFFFFF(上限)まで0x1(増減値)ずつ増やしながら
………
"search"と一緒やん(^^;)
そーです。これではエディットボックスを出す意味がありません。
エディットボックス等に入力した値を使うには、
[val]*.
などとして使います。
こうすると、サーチする値は「一つ目」の
エディットボックスもしくはラジオグループ(先に書いた方)に
入力した値でサーチします。
"*."は"*0"でも"*u"でも構いません。"*"と何か一文字を書くのです。
仮に
[val]*.*.
[calc]体力,no,0,0xFF,signed,little_e
[calc]気力,no,0,0xFF,signed,little_e
というADJファイルだったとします。
そうすると、サーチする値は、"体力+気力"ということになります。
体力が 32 気力が 10 なら "200A" ですよ! "2A"じゃありません(^^;)
[val]FF*.*.FF
上記の条件でこうなら、サーチする値は"FF200AFF"になります。
なお、"+."ってのもあります。
これが入ると、その次の2文字を16進数と見て、その分だけアドレスを飛び抜かすことが出来ます。
[val]FF+.10FF
だと、FFがあってその11バイト先にFFがある、を意味します。
255バイト以上飛び抜かしたい場合は、+.FF+.40のように連ねて対処してください。
--------------------------------------
"dialog"を指定すると、
この様にしてはじき出した値を、サーチするわけです。
ちょっと分かりにくい説明だったとは思いますが、
「ここが分からん!」と言って下されば、出来る限り対応いたします(^^;)
★【Heapの範囲によって、アドレスが推移する】:
アリスソフトのSYSSTEM3.6あたりで有名なアドレス移動ですね。
記述例としては
[adjustment]heap,heap2=0xA90000>0xB9FFFF,heap3=0xBA0000>0x10AFFFF
のようにするです。
上記2つの補正方とはちょいと構文が違いますんで、ご注意あれ。
分解しますと、
[adjustment]モード,ヒープ番号=開始アドレス>終端アドレス,...
のようになるです。
「モード」はheapですね。
っていうかココを見てどんな補正方か調べているので、
heapを指定しないとHeap補正と見てくれません。
で、「Heap番号」です。
Heap2ならheap2、Heap3ならheap3と書くのです。
ただし、DEFAULTHEAPは、heap1になります。Heap補正なのでモジュールエリアは無視です。
で、「開始アドレス>終端アドレス」に関しては…説明不要かと(^^;)
見たまんまです。
複数のHeapを対象にしたいときは、そのHeap数だけ","で区切って記述すればいいのです。
★【ファイルのVersion情報によって、アドレスが推移する】:
エミュレータやアプリなど、Version情報を含むファイルに用います。
書式は
[adjustment]モード, キー名, 値=補正値(,値=補正値,…)
ですにょ。
記述例としては
[adjustment]version, FileVersion, 3.0=0x0, 3.1=0x500
のようにするにょ。
モード:"version"しかあり得ません。
キー名:チェックするバージョン情報のキー名を指定します。
一般的に、"Comments","CompanyName","FileDescription","FileVersion",
"InternalName","LegalCopyright","LegalTrademarks","OriginalFilename",
"PrivateBuild","ProductName","ProductVersion","SpecialBuild"
などが用いられます。
メニューの「メモリ・プロセス」からファイルのVersion情報を
所得できますので、試しに適当なファイルを開いてみると良いでしょう(^^)
値 :"3.0"や"SpoilerAL"など、キー名に対応した値です。
補正値:その値であったとき、SSGに記述したアドレスに±する数値を指定します。
※もし対応した値が見つからなければ、補正値には0が適用されます。
------- [adjustment]豆知識 ----------
SSGには
[hold]
というタグを書くことが出来ます。
これは、アドレス移動系のゲームではあるが、
一部、アドレスが移動しない項目がある場合に使います。
[hold]5
とすると、そのSSG内で5番目の項目をアドレス補正の対象から除外します。
([dir]や、[replace]で追加される項目数も計算に入れて下さい)
なお、
[hold]next_no
とすれば、その次に書いた項目を補正対象から除外できます。
[calc]・[toggle]は合計で16個までに抑えて下さい。
つまり、[val]に"*"が17個以上でてきてはいけません。