« 【戦極姫3】 画像追加方法 【改造】 | トップページ | 東方蟒酒宴~Age of Ethanols~ 【メモ】 »

2011年7月16日 (土)

【戦極姫3】 女に会うイベント追加(main関連) 【改造】

unicorn-aの「戦極姫3~天下を切り裂く光と影~」において、新規に「女に会う」イベントを追加する方法を以下に記述していきます。

また、「女に会う」イベントだけでなく、main.sdなどmainフォルダにあるファイルを改造する際に役立つ情報も載せていきます。

※この記事は、自分のメモ帳として乱雑に情報を書き足していきます。読みにくさについてはご勘弁を。あと、間違っている可能性があるため、鵜呑みにしない方がいいかと。

また、私はver1.03+江姫追加の状態ですので、その状態を前提として話を進めていきます。

※「女に会う」=「武将に会う」



兄に今問題となっている熱中症への注意を促すフランちゃんは吸血鬼の鑑。


新武将に対して「女に会う」イベントを追加するには、基本的に次の手順で。

まずmainフォルダごとバックアップをとっておきましょう。それからバイナリエディタで各ファイルをいじりますので、Stirlingなどを用意。

 ①女に会うリストを作成(main.sd を編集)

 ②女に会うイベントリンクを作成(main.sd、main.lb、main.sw を編集)

 ③立ち絵ファイル、立ち絵リストファイルを作成(tigファイル、chファイルを作成) ……新規に立ち絵を追加しない場合は不要。

 ④立ち絵表示の記述(main.sd を編集)  ……新規に立ち絵を追加しない場合は不要。

 ⑤イベントの中身を作成(main.sd を編集)


【main.sdを編集するための知識】

あらかじめ知っておくべきことが多すぎるため、最低限以下のことは頭に入れておく。

[12] [XX XX XX XX] [YY YY YY YY] =同ファイル内のアドレス(0xYYYYYYYY)にジャンプ
    カウンタ     ジャンプ先

[02] [XX XX XX XX] [YY YY YY YY] =main.lb経由でジャンプ(4*0xYYYYYYYYのmain.lbアドレスを参照し、そこに書かれている値がジャンプ先)
    カウンタ    *4でmain.lb参照(lbに書かれている値がsdへのジャンプ先)

カウンタは4byte(戦極姫1では3byteなので改造スレを参考にする際は注意)。
  前半2byteはシーン(プログラムグループ?)内で同じ。後半2byteは処理が進むごとに増えていく。
  カウンタは気にする必要なし。00 00 00 00でも問題なし。

だいたい[??] [カウンタ] [~]の構成。そういう目でmain.sdの中身を見ていくとわかりやすい。

■main.lb、main.lbn、main.sw、main.swnについて■
main.sd内でmain.lbやmain.swを参照する時がある。

sdでの値*4 = lbアドレス、(sdでの値*0x80 = lbアドレス*0x20 = lbnアドレス)
sdでの値*4 = swアドレス、(sdでの値*0x40 = swアドレス*0x10 = swnアドレス)

sdでの値は上の[YY YY YY YY]のこと。lbはイベントリンク(lbnはそのインデックス)、swはフラグ(swnはそのインデックス)。


【①女に会うリスト作成】

main.sd の 0x1A34F ~ 0x1AF8A に本来の女に会うリストが記述されている。

新規に追加するのに必要な空き領域がないため、main.sdの後ろに領域を確保する。

  ★0x940D2B ~ 0x941072(女に会うリスト追加領域:約30人分)

ただ後ろに追加しただけでは読み込んでくれないため、本来のリスト領域からジャンプさせて追加領域を読み込ませる。
 (本来のリストの途中からジャンプ → 追加領域 → 追加領域の最後から元の場所へジャンプして戻る)

  (1)0x1AF79 ~ 0x1AF8A をコピー(江姫の部分)

  (2)0x940D2B にペースト

  (3)0x1AF79 に [12] [カウンタ] [2B 0D 94 00] を書く(カウンタは適当でok、意味:追加領域先頭へジャンプ)

  (4)0x940D3D (ペースト直後)から新武将の分を記述(下の※を参考)

  (5)追加分を全て記述したら、その末尾に [12] [カウンタ] [8B AF 01 00] を加える(意味:ジャンプ元の処理の後ろへ戻る)

※リストの内容

 [6B] [07 00 22 01] [04 06] [04] [8D 5D 95 50] [00] [01] [D7 0D 00 00]
     カウンタ    字数(byte)  江姫         *4でswアドレス参照?(new_江姫)

上の(1)でコピーした江姫の内容を新武将に流用する。
変える必要のある箇所は、字数と武将名。例えば、レミリア(4文字、8byte)なら・・・

 [6B] [07 00 22 01] [04 06] [08] [83 8C 83 7E 83 8A 83 41] [00] [01] [D7 0D 00 00]

厳密にいくなら、最後のswアドレスを参照しているであろう4byteの部分も変える必要があるが・・・
面倒なので、江姫のものをそのまま用いることとする。


■実際にゲーム内で確認■

一通り完了したら、ゲーム内で女に会う画面を開いて成功しているか確認。
(武将エディタなどで対象となる武将の「女に会う」を「可(1)」にしておく)

そこに追加した武将の顔グラが表示されていれば成功。

追加した武将を選択すると、暗転後、女に会う画面に戻るが現段階ではこれでOK(バグではない)。


【②女に会うイベントリンク作成】

本来のイベントリンク領域:0x44EE26 ~ 0x468A39 (正確にはカウンタがBD 01 xx xxの箇所全部)

①と同様、追加に必要な空き領域がないため、後ろに領域を確保。

  ★0x941073 ~ 0x943FFF(女に会うイベントリンク追加領域:約30人分)

本来の領域の途中からジャンプ → 追加領域 → 追加領域の最後から元の場所へジャンプし戻る。ただし、今回は戻り方が①と若干異なる。

  (1)0x46889B ~ 0x4688BF をコピー(江姫の存在判定部分)

  (2)0x46889B [12] [カウンタ] [73 10 94 00] を書く(カウンタは適当でok、意味:追加領域先頭へジャンプ)

  (3)0x941073 から新武将の分を記述(下の※を参考

  (4)追加分を全て記述したら、その末尾に(1)でコピーしたものをペースト

  (5)その直後に [12] [カウンタ] [C0 88 46 00] を加える(意味:ジャンプ元の処理の後ろへ戻る

  (6)main.lbに新規イベントのアドレスを書き、[66]タグとリンクさせる。(まだイベント作成していない現時点では、ここは飛ばす)


↑の画像ではフランドールの上の部分(レミリアの箇所)を黒塗りにしていないが、画像が縦に長くなるので割愛。

※イベントリンクの内容

中身は次の(ⅰ)、(ⅱ)で構成されている。イベントが複数ある場合は、後ろに(ⅱ)が複数続く。((ⅰ)(ⅱ)(ⅱ)(ⅱ)(ⅱ)…)

-------------- (ⅰ)武将存在判定(いない場合、次の武将の箇所にジャンプ) -----------------

[03] [BD 01 5B 18] [04 06] [08] [83 8C 83 7E 83 8A 83 41]
   カウンタ        byte数   レミリア

[00] [03 12] [00 00 00 01] [01 00 00 00] [02 02] [00 00 00] [12] [BD 01 5B 18] [24 11 94 00]
  ==判定            真なら直後の命令実行   ジャンプ カウンタ   ジャンプ先(次の武将の先頭[03]へ)

---------- (ⅱ)イベント条件判定(満足している場合、lb経由でイベントへジャンプ) --------------

[66] [BD 01 5E 18] [01] [FF 1F 00 00] [03 12] [00 00 00 00] [00 00 00 00] [02 02] [00 00 00]
   カウンタ      *4でswアドレス ==判定    ここの値とswアドレスでの値を比較

[02] [BD 01 5E 18] [F0 0B 00 00]
ジャンプ カウンタ  *4でlbアドレス 

最低限変えるべき箇所はオレンジ色(swアドレスは注意が必要。後ろの空き領域を利用すると上手くいく)


■[66]タグと[69]タグの違い■

--------------------- [69] タグ(swアドレスを2箇所参照) ------------------------

[69] [カウンタ] [xx xx xx xx] [01] [yy yy yy yy] [03 12] [00 00 00 00] [zz zz zz zz]
        *4でswアドレス  *4でswアドレス  swにある値==0xzzzzzzzz

[02 02] [00 00 00] [02] [カウンタ] [mm mm mm mm]
真なら直後実行           *4でlbアドレス

--------------------- [66] タグ(swアドレスを1箇所参照) -----------------------

[66] [カウンタ] [01] [yy yy yy yy] [03 12] [00 00 00 00] [zz zz zz zz]
            *4でswアドレス    swにある値==0xzzzzzzzz

[02 02] [00 00 00] [02] [カウンタ] [mm mm mm mm]
真なら直後実行            *4でlbアドレス

・元の記述では、[69]タグの前半のswアドレス(xx xx xx xx *4)はIfGotoOnceを指している。
・[66]タグの方が記述が簡単なため、[66]タグを積極的に使用していく。
・[zz zz zz zz]の箇所を、[00 00 00 00]や[01 00 00 00]などとすることで、イベント条件を変えることが可能。複数のイベントを作る場合、ここがかぶらないようにする。
    (1回目のイベント:[00 00 00 00]、2回目のイベント:[01 00 00 00]、・・・)


■実際にゲーム内で確認■

ゲーム内の女に会う画面で対象武将を選択して、イベントが発生するか確認する。

([66]タグ内のlbアドレス参照箇所は、とりあえず既存イベントとリンクさせておく。例:[02] [カウンタ] [13 0A 00 00])

イベントが発生すれば成功(上の例なら、村上通康のイベント発生)。


【③立ち絵・立ち絵リスト作成】

新規に立ち絵を追加しない場合は、ここを飛ばして⑤に進む。

■(1)立ち絵(tigファイル)を用意■

まず立ち絵を用意する(サイズ:1280x720が望ましい。ファイル名は適当)。

■(2)立ち絵リスト(chファイル)を用意■

ここが肝要だが・・・戦極姫3では生のchファイルがないため、↓からダウンロード。
     ★ダウンロードはこちら→DL:立ち絵リスト(chファイル)

これをバイナリエディタで開いてファイル名(remiAxx.tig)の箇所を、自分の用意したtigファイルの名前にする。

その下にある [00 05 00 00] [D0 02 00 00] は、表示サイズを表している(←の場合、1280x720)。
           横サイズ   縦サイズ

chファイルのファイル名は適当に。ただし、拡張子はch。(○○.ch)

■(3)charフォルダに入れる■

まず、sengokuhime3フォルダの中にcharフォルダを作成。

charフォルダの中に、(1)のtigファイル、(2)のchファイルを入れる。

(つまり、sengokuhime3\char\○○.tig、sengokuhime3\char\○○.ch)


【④立ち絵表示の記述】

各武将ごとに立ち絵表示に関するフラグがいくつか用意されており、新武将の立ち絵を追加したい場合、そのフラグを用意する必要があるが・・・

経験上新しくフラグを用意した場合、うまく処理されないことがあるため、既存武将の立ち絵フラグを借りるのが賢明。(フラグを借りても、その既存武将と一緒に立ち絵を表示しなければ問題ない)

まず後ろに追加領域を確保。(今までと同様、追加に必要な空き領域がないため)

  ★0x944000 ~ 0x947FFF

次にどの武将のフラグを借りるか、そしてそれをどの新武将に割り当てるか決める。

今回、例として村上通康のフラグを借りることとする。

  (1)0x652B3 ~ 0x653EE をコピー(村上通康の余所見立ち絵)

  (2)0x944000 ペースト

  (3)下の画像を参考に、[12]タグのジャンプ先アドレスと、名前の箇所(remilia_A、基本)を変える。

    (「remilia_A」は③で作成したchファイル名(ただし拡張子を除く)、「基本」の部分はchファイルの中の文字と一致させる)

  (4)さらに追加したい場合、その後ろ(0x944539)から同様にして追加していく(「コピー → ペースト → アドレス・名前変更」の繰り返し)。

  (5)最後に、フラグを借りた相手の立ち絵消去部分(vanish命令部分)を探しておく。
 


左:赤い下線を引いてある箇所が変えるべきところ。右:赤い矢印はジャンプ先を表している。

面倒なのが(5)のvanish記述を探すこと。以下に、いくつか示す。

0x9B19F : souma_vanish
0x9F17B : mitinao_vanish
0x9F201 : mitiyasu_vanish
0x9F287 : mototika_vanish
0x9F5AB : matabee_vanish
0x9F631 : sotero_vanish
0x9F6B7 : karakuri_vanish

使用する場合は[01]タグを用いて、次のようにする。([01]タグに関しては、次の⑤で説明)

[01] [カウンタ] [9F B1 09 00] : souma_vanish
[01] [カウンタ] [7B F1 09 00] : mitinao_vanish
[01] [カウンタ] [01 F2 09 00] : mitiyasu_vanish
[01] [カウンタ] [87 F2 09 00] : mototika_vanish
[01] [カウンタ] [AB F5 09 00] : matabee_vanish
[01] [カウンタ] [31 F6 09 00] : sotero_vanish
[01] [カウンタ] [B7 F6 09 00] : karakuri_vanish


【⑤イベントの中身】

立ち絵表示命令が面倒な部分。

最初は、いきなりボリュームあるのを作ろうとしないで、どこかのイベントをコピペして改変するのがいいかと。

イベント内容は一番後ろに記述する。

  ★0x948000 ~

イベントの中身を作成したら、そのイベントの先頭アドレス(4byte)をmain.lbに書く。
  →書いた場所(main.lbアドレス)を4で割り、その値を[66]タグの相当する箇所に書く(飛ばした②の(6)を行う)。

■立ち絵表示~消去の流れ■

新武将(レミリア)が村上通康のフラグを借りたとすると、次のような流れとなる。

 set_xremilia_A_基本(④の箇所)remilia_vanish(mitiyasu_vanish)
表示位置設定   立ち絵表示          立ち絵消去

[01] [カウンタ] [9E 68 02 00] : set_x(中央)
[01] [カウンタ] [④のアドレス] : remilia_A,基本
[01] [カウンタ] [01 F2 09 00] : mitiyasu_vanish

※set_x(表示位置)について
   [01] [カウンタ] [9E 68 02 00] : set_x(中央)
   [01] [カウンタ] [7D 68 02 00] : set_x(やや右)
   [01] [カウンタ] [BF 68 02 00] : set_x(やや左)

(set_xの種類は他にもあるはずだが、調べるのがめんど(ry)

■タグ説明(これを知っておけば、一応作れるという分だけ)■

  [01] :画像表示
  [08] :書き込み
  [49] :BGM開始
  [1E] :BGM停止
  [1F] :ボイス
  [0F]:文章開始
  [10] :文章終了

[01] [カウンタ] [xx xx xx xx]  :画像表示
         sdアドレス

[08] [カウンタ] [xx xx xx xx] [00] [yy yy yy yy] :swアドレスへ書き込み
         *4でswアドレス  書き込む値

[49] [カウンタ] [bgmファイル] [00 00 01 00 00 00] :BGM開始

[1E] [カウンタ] [00 00 00 00]   :BGM停止

[1F] [カウンタ] [xx xx xx xx] [音声ファイル]   :ボイス再生

[0F] [カウンタ] [*4 = tko_adress] [*4 = tko_adress] [名前] [00] [行数xx] [本文] [00] :文章開始

[10] [カウンタ]:文章終わり


※注意点

・[0F]タグの本文中に[00]を入れた箇所で行が変わる。

・[0F]タグのtko_アドレスは気にする必要なし(00 00 00 00でOK)

・[08]タグを使うことで、イベント終了フラグを立てることができる。(②のイベントリンクと関連)

・どんなイベントを記述してもよいが、最後は必ず[02] [カウンタ] [1E 00 00 00]


以上の説明は、初めてmain関連の改造をする人向け。改造スレ民にとっては、既知の情報がほとんどのはず。

初めての人は、改造スレを一見すると幸せになれるかもしれない・・・(←のリンクから改造スレへ)


↓元親ルート(大嘘)

チカ「うわあ・・・、これは元親ですね。これ(右)は徐庶で、ああ、こっち(左)は颯馬ですね。
                  間違いない。なんだこのホモイベントは・・・。たまげたなあ。」


|

« 【戦極姫3】 画像追加方法 【改造】 | トップページ | 東方蟒酒宴~Age of Ethanols~ 【メモ】 »

戦極姫3_改造」カテゴリの記事

コメント

こっちの方はさすがに範囲外だったんで、試させていただきます。
私の方では固有大名←→独立勢力とか、構造体編集とかやってました。
HARLEMさんの構造体の中で、siroとdaimyoは若干私のと異なってますね。
長くなりそうですが、貼り付けます。

struct daimyo
{
BYTE 勢力名[8];
BYTE --[2];
word 当主(武将No.);
byte 格式(1:豪族、2:小大名、3:戦国大名);
byte 威光;
BYTE --[36];
word 軍資金;
word 所属武将 [252] ;
BYTE -- [4] ;
byte 同盟勢力 [5] ;
BYTE -- [23] ;
};

同盟勢力っていうのは、文字通り同盟してる勢力です。
この際、同盟する勢力両方に相手側の勢力番号を書く必要があります。

struct siro21
{
BYTE 城名 [8] ;
word 隣接城番号[5] ;
byte 現在レベル ;
byte 最大城レベル ;
byte 大名番号(独立勢力の場合255) ;
byte 勢力番号 ;
byte 武将1大名番号(無しの場合255) ;
byte 武将1所属番号 ;
byte 武将2大名番号 ;
byte 武将2所属番号 ;
byte 武将3大名番号 ;
byte 武将3所属番号 ;
byte 武将4大名番号 ;
byte 武将4所属番号 ;
byte 武将5大名番号 ;
byte 武将5所属番号 ;
byte 武将6大名番号 ;
byte 武将6所属番号 ;
BYTE -- [17] ;
byte 国番号 ;
byte 合戦場規模(0:小、1:中、2:大) ;
BYTE -- [3] ;
word 入手アイテム番号 [10];
} ;

隣接城番号→隣接している城の番号
合戦場規模→小中大を変更可能
入手アイテム番号→おそらく10個の中から1つ入手する仕様? 未確認

続きで独立勢力と固有大名を入れ替える方法を書きます。

投稿: 名無しの近衛 | 2011年7月18日 (月) 08時10分

固有大名にする意味は言わずもがなだと思うので、割愛。
例として、秋月家を黒田家に変えた場合でも。

・daimyo21.bin
秋月家の番号(52)を選びます。
当主:秋月文種(1180)→黒田如水(901)
所属武将:1180、1181、1184→901、902、903、904、905
※所属武将の番号は変える前と変えた後、両方メモしておく。

格式、威光、軍資金も自分の好きなように変えておく。
同盟勢力が欲しければ、それも変える。

・doku21.bin
元秋月家の武将(1180、1181、1184)を入れる。
その際、所属番号をメモしておく。今回は242~244で設定と仮定。

注)doku21.binは独立勢力における所属番号を表します。
つまり、daimyo21の所属武将の独立勢力版です。

黒田家は全員開始時未登場なのでdoku21に載ってませんが、開始時在野の武将だとここに載っているので、それは消しておく必要があります。

・siro21.bin
秋月の城は全て独立勢力所属(255)に変える。
また、大名番号(255)・所属番号(242~244)も変える。
黒田家は所属させたい城、今回は姫路城(273)に入れる。
黒田家所属(52)、大名番号(52)・所属番号(0~4)

・busyo2.bin
黒田家武将の現在位置を姫路城(273)に設定。
あとは兵数、俸禄、忠誠あたりを好きなように変えておく。

これで晴れて黒田家が固有の大名になります。
群雄モードでも使用可能です。
私はこれで安東家・鈴木家・黒田家なんかを作ってました。

徳川とか本願寺もやりたいんですが、徳川はストーリーに絡むのでバグる可能性大。
本願寺は三好家の難易度をかなり上げると思うので断念しました。

投稿: 名無しの近衛 | 2011年7月18日 (月) 08時36分

>名無しの近衛様
あぁ~なるほど・・・そういう構造でしたか・・・
情報ありがとうございます。

あとで構造体変えときますw

投稿: HARLEM | 2011年7月20日 (水) 07時30分

過去作も含め、こちらのツールにはいつも大変お世話になっております。
さて、戦極姫3のイベント追加【②女に会うイベントリンク作成】に関しまして、ver1.03で江姫が追加されたない状態ですと、どこからコピーすればよろしいのでしょうか。
不躾ながらお願いしたいのですが、もしお時間がございましたらご返事をお願いいたします。

投稿: AKI | 2013年4月 6日 (土) 14時31分

 AKIさん
自分の手元には「江姫なしver1.00」のファイルしかないので、それを元に説明します。
(ver1.03じゃないので、若干アドレスに違いが出るかもしれませんが、悪しからず)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

★江姫がいないので、その直前の後藤又兵衛を目安にします。
★追加領域へのジャンプ先は0x941073と仮定します。

(1)0x4686DD~0x468707(計43バイト)をコピー

(2)0x4686DDから次のように上書きで書き換える
       03 BD 01 F1 18 04 06 0A 8C → 12 BD 01 F1 18 73 10 94 00
   (※意味は追加領域へのジャンプ。追加領域を別のアドレス領域に確保してあるなら、最後の[73 10 94 00]をジャンプ先アドレスに)
   http://rmla-aneki.cocolog-nifty.com/file/sengokuhime3/main/sengoku3_mainedit04.jpg

(3)0x941073 から新武将の分を記述(ジャンプ先が異なる場合はそこから記述)

(4)追加分を全て記述したら、その末尾に(1)でコピーしたものをペースト

(5)その直後に [12] [カウンタ] [08 87 46 00] を加える(意味:ジャンプ元の処理の後ろ"0x468708"へ戻る)

(6)main.lbに新規イベントのアドレスを書き、[66]タグとリンクさせる。(まだイベント作成していない現時点では、ここは飛ばす)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

こんな感じです。
質問の回答としては、(1)と(2)だけで十分でしたかね。

もっと説明すると、コピーする箇所は後藤又兵衛でなくとも構いません。
その上の鈴木重秀でも誰でもいいんですが、わかりやすいように”最後の武将からジャンプ”させるために後藤又兵衛を選びました。
(江姫を追加すると最後は江姫になります)

ver103でアドレスが異なっていたら、その付近で↓を探してみてください。
[03][BD 01 ** **][04 06][0A][後藤又兵衛]

この[03]から43バイト分([69][カウンタ]の直前まで)をコピーです。

ぱっと見た感じ、アドレスに違いは0xD0程度しかないっぽいのですぐ見つかるかと。

投稿: HARLEM | 2013年4月 6日 (土) 18時16分

>HARLEMさん

ありがとうございます。
さっそく試してみます。

投稿: AKI | 2013年4月 6日 (土) 20時03分

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 【戦極姫3】 女に会うイベント追加(main関連) 【改造】:

« 【戦極姫3】 画像追加方法 【改造】 | トップページ | 東方蟒酒宴~Age of Ethanols~ 【メモ】 »