BNE2 Tips

BNE2 Tips(改造ヒント集)


FAQのノリで、使いこなしのコツなど書き加えていってください。
間違いを見つけたら遠慮なく訂正するんだッ!

  • セル幅の調節を保存するには、ファイル→設定の保存

  • データの表示形式を変えたい場合、表示→選択セクションの表示
表示形式を変えた後、ファイル→設定の保存 を行うと、
INIファイルが上書きされる。

  • 複数のセルをまとめてコピーしたいとき
リスト形式のセクションの表示形式を
数値表示(16進,10進数)に変えておくとスムーズ。
キーボード編集派の人にもオススメ。
セルを選択後にメニューの「表示」→「選択セクションの表示」

  • BNE2は同時に複数起動できます。
ROMから別のROMへデータをコピー&ペーストするもよし、
ROMとRAMを両方参照しながら解析するもよし。

  • Rom/Ram設定せずにうっかりファイルを開いた後でも、
その他→設定でRom/Ramの切り替えが出来る
(ファイルは再読み込みされる)

  • 「クラス」で値が-1 または FFになっている項目
その顔キャラが就いているクラス(職業)の値が適用されるという意味。
(クラス依存)

  • BNE2を開いたままでもINIファイルを編集できる。
INIファイルをエディタで編集して上書き保存した後、
ROMなどを再読み込み or BNE2を起動しなおすと、設定が反映される。


  • テストプレイ用にエミュ設定
ステートセーブ、加速機能などのショートカットキーを
使いやすいようにカスタマイズしておくと効率が良いです
多ボタンのパッドがあるなら、パッドのボタンに設定する手も

  • SNESGTの「メモリビューア」が地味に便利
「オプション」→「ツール」→「メモリビューア」
見たいアドレスまでスクロールするのが大変ではありますが、
メモリの変化がリアルタイムに見られるので、
その処理に使われているメモリがどこなのか一瞬で分かります。
コードサーチ機能は無いですが、実はメモリへの書き込みも
出来るので、アドレスが分かっている場合のコード検証には便利です。
(ステータス画面などの場合、一度画面を切り替えないと
値の表示には反映されないので注意)

  • ステートセーブの活用
SNESGT/ZSNESのステートセーブをBNE2で直接開いて、
知りたい項目の数値を調べると便利
(例えば、戦闘中キャラの行動ポイントの変化が分かる)
Ram Dataのiniに書かれているアドレスはメモリアドレス、
つまり改造コードと同じ

  • SNESGTのステートセーブをStirlingなどバイナリエディタで
直接開いた場合、ファイル先頭44hバイトを削除すれば
メモリアドレスと一致する
あるいは、メモリアドレス+44hの場所を見る
(BNE2は、初めから先頭44hを飛ばして読む設定になっています)

  • 通常セーブ(.srm)およびSnes9x系のステートセーブの形式については、良く分かりません。情報求む。


  • クラスの初期パラ、成長率を変えたときに強さを確認する方法

A.実際に通してプレイ(時間がかかって大変)

B.3章終盤や4章のデータを用意して、ランダム戦闘
  ランダム戦闘発生率を変えておくと効率が良いかも

C.試したいクラスの初期レベルを変更する。
  (例えば、全クラスの初期レベルを28に設定)
  ショップの3番目の枠で雇えるように設定を変えておく。
  ショップの3番目の枠で雇用すると、設定した初期レベルで出てくる。
  →適当なMAPでトレーニングorランダム戦闘

  「雇用」で設定したクラスをゲーム内で巡回して集めるなら、
  ランダム戦闘なしにしておくとラクチン。

D.ショップで雇用できるクラスを変える改造コードを使うと、
  移動せずに全クラスをそろえることもできる。
  BNE2の「Ram Data」モード時の「雇用」を活用してください。
  (改造コード対応EMUか、cepなどのSNESメモリエディタでもOK)
  この場合、ソルジャーの初期レベルだけ変えればOK。
  ショップの雇用クラス選択画面で一番上のところから雇用すると
  Ram編集(改造コード)で入力したクラスが、ソルジャーの初期レベルで
  出てきます。例えばLv23の各クラスをたくさん用意する時に便利。


味方ユニットとして育てた場合の強さを確かめるには、
やはり生のキャラデータをコツコツ変えるか、通しプレイ作業が必須・・・

気長にやりましょう。


  • イベントのデバッグ
1章序盤データを改造して、デニムのINT,MENを999、竜言語魔法orスターティアラを持たせたデータを用意しておくと、通しプレイでイベント確認する作業がスムーズです。


  • 進数表記と略号
h:16進数 (hexadecimal)
b:2進数 (binary)
d:10進数 (decimal)
(進数指定が省略されている場合は10進数のことが多い)

   0xFF=FFh=FF(h)= 1111 1111(b) =255(d)
  0x100=256
 0xFFFF=65535
0x10000=65536

0x63= 99
0x64=100
0x03E7= 999  ROM/RAM内では E7 03 (例外あり)
0x03E8=1000  ROM/RAM内では E8 03 (例外あり)

    +1h= 0000 0001(b) =0bit(.0) =  1 = 2^0
    +2h= 0000 0010(b) =1bit(.1) =  2 = 2^1
    +4h= 0000 0100(b) =2bit(.2) =  4 = 2^2
    +8h= 0000 1000(b) =3bit(.3) =  8 = 2^3
   +10h= 0001 0000(b) =4bit(.4) = 16 = 2^4
   +20h= 0010 0000(b) =5bit(.5) = 32 = 2^5
   +40h= 0100 0000(b) =6bit(.6) = 64 = 2^6
   +80h= 1000 0000(b) =7bit(.7) =128 = 2^7
+100h=0001 0000 0000(b) =8bit     =256 = 2^8

XXh:1Bite= 8bit (0~255) or (-128~0~+127)
XX YYh:2Bite=16bit (0~65535) or (-32768~0~+32767)

  • 16進数、10進数、2進数の変換や計算には
WindowsXP付属の電卓機能が便利。
スタート→プログラム→アクセサリ→電卓
「表示」→「関数電卓」にしてみよう。


  • ビット指定、ビットフィルタの意味
16進数 XY(h)= pqrs tuvw(b) 2進数
   例 7A(h)= 0111 1010(b)
p:7bit q:6bit r:5bit s:4bit t:3bit u:2bit v:1bit w:0bit

【例1】
Tactics OgreのRAM上でキャラのエレメントの記述形式は
p=0:一般 1:リーダー
q=0:味方 1:CPU(敵/ゲスト)
r:使わない(通常0)
s=0:Sサイズ 1:Lサイズ
t=0:男 1:女
uvw=000:なし 001:風 010:火 011:地 100:水

という法則になっています。たとえば、

デニム(リーダー)風→ 1000 0001(b) = 81h
味方♀水→ 0000 1100(b) = 0Ch
味方Lサイズ火→ 0001 0010(b) = 12h
ゲストSサイズ女風→ 0100 1001(b) = 49h
敵リーダーSサイズ地→ 1100 0011(b) = C3h


さて、BNE2-INIファイルでの記述方式ですが
Tactics Ogre Ram Dataの編成データ.ini

7EB2F3,♀,.3,2,,,,990,,
♀フラグは3bit(+8h)の部分なので、ビット指定.3で取得しています。

7EB2F3,リーダー,.7,2,,,,990,,
リーダーフラグは7bit(+80h)なので、ビット指定.7

7EB2F3,エレメント,,2,,0,.07,990,,0 |エレメント.idn
エレメント指定は3,2,1bitを2進数として数値化したものなので
欲しい桁のビットを立てて 0000 0111 = 07h
これをビットフィルタ部分にすると、1になっている桁のビットだけが
数値換算されます。

例えば
 デニム風 81h= 1000 0001(b)
  →ビットフィルタ07hをかけると、 xxxx x001(b) = 01h = 1(風)
   (xxxx x001 のxの部分が目隠しされると思ってください)
 味方♀水 0Ch = 0000 1100(b)
  →ビットフィルタ07hをかけると、 xxxx x100(b) = 04h = 4(水)
このように、必要な情報だけが抽出されるわけです。
(ちなみに行の最後「,0 |エレメント.idn」の意味は、
 「,エレメント.idn」だけだとキャラ不在のときエレメント値が0で
 「物理」と表示されてしまうので、IDNファイルの前に「0 」
 を読み込ませて、値が0の場合に空白を表示するように
 ちょっと強引な設定がされています。
※IDリスト&IDNの番号が重複したら先に読んだほうが優先)


【例2】
上位2ビットで「方向」を指定
p=0:右 1:左
q=0:上 1:下

下位6ビットで「移動距離」を指定
rstuvw(b)=r*32+s*16+t*8+u*4+v*2+w*1=移動距離

という形式のデータがあるとき

方向の左右だけ知りたい→ビット指定 .7 (pだけ取得、値=0 or 1)
移動距離が奇数か偶数か知りたい
  →ビット指定 .0 (wだけ取得、値=0 or 1)
移動距離が32以上/未満の判定を知りたい
  →ビット指定 .5 (rだけ取得、値=0 or 1)


移動距離だけ知りたい→ビットフィルタ .3F
   (下位6ビットを取得して数値として出力、値=0~63)
取得したいビットの桁を1にした2進数は 00111111(2)=3F(h)なので
ビットフィルタは.3Fになる。

上下左右の方向を一度に取得したい→ビットフィルタ .C0
   (上位2ビットを取得して数値として出力、値=[0,64,128,192])
取得したいビットの桁を1にした2進数は 11000000(2)=C0(h)なので
ビットフィルタは .C0になる。
得られた値を÷64(ビットシフト)すれば、[0,1,2,3]の形式になる。
添付ファイル