Module System > Document by Jik(3)

M&B Module System Documentation PART7-10

PART1-3へ(リンク)
PART4-6へ(リンク)





PART7 シーン編集(Scene Editing)

このパートでは、実際にM&Bをエディットモードで起動する必要があります。
エディットモードからシーンに入り、それに手を加えるわけです。

エディットモードを使ってHareck君の顔を作ります。
しかしその前に、先に作ったMod Townのシーンをセットアップしなくてはなりません。
以前テストであの街に入った時、きちんと機能していたでしょうか?
答えは涙が出るくらいノーです。というわけで次のステップは街を機能するようにします!

小さな問題から取り掛かることにします。今の設定だとゲームは5つあるTraining Groundのどこかから始まります。
好きな場所から始める方法を知っているかも知れませんが、とりあえずMod Townの近くでスタートするようにします。

module_parties.pyを開き、”training_ground_#”の行を探します。
別に変えなくても良いと思うかもしれませんが、便宜上Mod Townの近くからスタートするようにします。
面倒ならコピー&ペーストでもOKですが、ここはバージョンアップの影響を受けやすい場所なので、
やり方を覚えるために手を動かすことをおすすめします。

("training_ground_1", "Training Field",
icon_training_ground|icon_training_ground|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none,
fac_neutral,0,ai_bhvr_hold,0, (-3,-3) ,[], 100),
# ("training_ground_1", "Training Field",
icon_training_ground|icon_training_ground|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none,
fac_neutral,0,ai_bhvr_hold,0,(44,61),[], 100),
# ("training_ground_2", "Training Field",
icon_training_ground|icon_training_ground|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none,
fac_neutral,0,ai_bhvr_hold,0,(-38, 81.7),[], 100),
# ("training_ground_3", "Training Field",
icon_training_ground|icon_training_ground|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none,
fac_neutral,0,ai_bhvr_hold,0,(89.2, 16),[], 100),
# ("training_ground_4", "Training Field",
icon_training_ground|icon_training_ground|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none,
fac_neutral,0,ai_bhvr_hold,0,(9.5 , -80.5),[], 100),
# ("training_ground_5", "Training Field",
icon_training_ground|icon_training_ground|pf_hide_defenders|pf_is_static|pf_always_visible|pf_label_medium, no_menu, pt_none,
fac_neutral,0,ai_bhvr_hold,0,(-34.75, -30.3),[], 100),

最初のTraining ground の行をコピーし、配置を (-3,-3) に変更しました。これはMod Townの傍です。
そして他のTraining groundをコメントアウトしました。

こうする事でテストプレイが容易になります。しかし他のスクリプトがこれらの行に依存していた場合、
ゲームは(1)ビルド失敗(2)ロードしない(3)クラッシュのどれかになります。
Nativeのコードの一部を変化/削除する場合はその範囲をよくチェックしましょう。

これらの変更により、開始時の登場地点となる Training groundが Mod Townの近くの1つだけになります。
もしTraining groundを見たくも無い場合は、フラグ pf_disabledを加えることで、登場地点として保ったままゲームから消すことが出来ます。

7.1 シーンの追加
まずはTavernの定義から始めます。module_scenes.pyを開きましょう。
Mod Townに入ったときに気付いたかもしれませんが、ランダムな街のシーンで代用されていました。
他のTavernのシーンを例として見てみます。
("town_7_tavern",sf_indoors, "interior_town_house_f", "bo_interior_town_house_f", (-100,-100),(100,100),-100,"0",
["exit"],[]),

module_scene.pyのタプルの構造を見ていきます。
1)シーンID。他のファイルからの参照に使います。前頭語scn_が付きます。
2)フラグ。header_sceneに利用可能なフラグの表があります。
3)メッシュの名前。屋内のシーンのみで使います。屋外では”none”を入れます。
4)ボディの名前。これも屋内のシーンのみで使います。屋外では”none”を入れます。
5)最小座標。最小の(x,y)座標です。この数値を越えて進入することは出来ません。
6)最大座標。最大の(x,y)座標です。
7)水位。
8)地形コード。地形ジェネレータからコードを取得できます。
9)このシーンからアクセス可能な他のシーンのリスト。
  ※非推奨。将来的に削除される可能性があります。
   新しいシステムでは”通行”番号がシーン間の移動に用いられます。
10)シーンで使われるチェスト兵士のリスト。
  エディットモードでチェスト兵士を配置することでチェストにアクセスにできます。
  チェストの番号はどのチェスト兵士のインベントリにアクセスするかに利用されています。
(訳注:チェスト兵士の説明は3.7にあります。)

更に街特有の定義があることに気付くでしょう。
編集する前によく見て、有益な情報を得ることは常にナイスアイディアなのです。
この場合は「header_sceneに利用可能なフラグの表があります」です。

“town_7_tevern”をTavernリストの最後、"town_18_tavern"の下にコピーし、手を加えます。
( "town_mod_tavern" ,sf_indoors,"interior_town_house_f", "bo_interior_town_house_f", (-100,-100),(100,100),-100,"0",
["exit"],[]),

ここで必要なのはIDの変更だけです。
街のリストと同じ順番になっている点に注意してください。これはこの後も同様です。
このTavernはMod Townの一部として重要です。ここではUxkhalのシーンを転用しました。
次はこれを微調整して完全にします。
セーブしてビルドします。

7.2 ゲーム内シーンエディタ
ビルドに成功したらM&Bを起動し、エディットモードにします。
起動してConfigureのAdvancedのタブの中に Enable Edit Modeのチェックがあるのでオンにします。
注意書きに目を通して置いてください。(訳注:「ゲームが重くなります」)

大規模戦闘に入らない限りは大丈夫でしょうが、シーンの設定が終わったらこれはオフにします。
更にVideoタブから Start Windowedもチェックしておきます。
解像度を800x600程度にしておくのも良いかもしれません。
終わったらMODを起動します。

Hareck君の顔コードを作ります。
New gameから進めて、顔のメイキングになったら、Hareck君に与えたい顔を作ります。
出来上がったらCtrl+Eを押すと上に顔コードの入ったボックスが表示されます。
ボックスをクリックするとコードがクリップボードにコピーされます。

それをどこかにペーストしておきます。うっかり無くした場合は下のコードを使えばいいでしょう。
0x0000000e8000558036db6db6dbefb6db00000000001db6db0000000000000000

ゲームを始め、 Mod Townの Tavernに行きます。
うわー暗い
更によく見るとTavernの中にいる全員が同じ場所に立っていることが分かるでしょう。
これでは機能しているとはとてもいえません。そこでシーンをエディットする必要があるわけです。

エディットモードのチェックがオンのとき、Ctrl+Eを押すとエディットモードが起動します。
するとツールバーが出現し、ウィンドウモードでよかったと思うことでしょう。

私自身がエキスパートではないので、シーンエディットの全てには触れません。
Tavernをきちんと機能させるために必要な部分のみに触れます。

まずは基本操作です。
シーン内の移動はWASDを使います。カメラの回転は左ドラッグです。
移動方向はカメラの正面が基準です。なので地面にカメラを向けてWを押すとまっすぐ地面に直行します。
右クリックでシーン内のオブジェクトを選択します。
色々動かして感覚を掴みましょう。

次にTavernが機能するため(と見栄え)に必要なオブジェクトを追加します。
追加する必要があるもの:登場ポイント(Entry Point)、通路=出口、光源

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

他にもシーンの見栄えのために幾つかのアイテムを追加しますが、最初は登場ポイントからです。

他のTavernと比べると、まずTavern Keeperの出現ポイントが必要です。
彼らは出現ポイント9に現れるようなので、我々も同様にします。
ツールバーの [Add Object] ボタンの左にあるドロップダウンから "Entry Point" を選択します。
そして、その下のボックスの中の"Entry Point"がハイライトされている状態にします。

[Add Object]ボタンを押すと、カーソルに黄色い矢印がくっ付いてくるようになります。
床の真ん中あたりで右クリックして配置します。
配置したあとは[Add Object]ボタンを押して追加モードをオフにします。

上のボックスに[Entry Point 1]が追加されたはずです。
そのすぐ上には Entry Pointのステータスが表示されています。
表示されている矢印を右クリックすると選択されたことになります。

オブジェクトを選択した状態で;
Gキーを押したままドラッグするとがXY平面上を移動します。
Tキーを押したままドラッグするとZ軸上を移動します。
Zキーを押したままドラッグするとZ軸を中心に回転します。

最後にZキーを使ってTavern Keeperに人々の方を向かせます。
最初のシーンオブジェクトが出来ました!

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

これをTavern Keeperの居場所にするために、Entry Point 9 にします。
変化はすぐには現れないので、まずはセーブすることにします。
[Close]ボタンを押すとセーブするかの選択肢が出るのでセーブします。
Tavernから一度出て再び入りエディットモードで確認すると、Entry Point 9になっているはずです。
(訳注:この時点ではまだKeeperはいない)

他にも番号16~24のEntry Pointを作ります。
更にもう2つをアクターのために置いておきます。番号は5と6です。
5を(保安官として)ドアの近くに、6を(Geoffreyのために)階段のそばに置きます。

見回すと虚空に向かって開いているのが目に付くでしょう。
そこにはドアがあるべきで、また同時に”通路(Passage)”も必要です。

多くのシーンでは他の部屋に移動できます。
“通路”はmapやメニューを介さずにシーン間の移動を可能にします。
ドロップダウンから[Passage]を選択し[Add Object]ボタンを押します。
アイコンは見えにくいですが、壁や空中にカーソルを合わせると変なのが見えます。

とりあえず右クリックして[Add Object]ボタンを元に戻します。
そうすると赤い長方形が見えるはずです。Entry Pointと同様に動かせるので、
ドアの前に動かしておきます。ドアの外側に出ないように注意してください。

Passageのステータスから、他のTavernと同じEntry No 4、menu item No 3に変更します。
最後にドアをつけます。プルダウン [Scene Prop] から "panel_door_b" を選びます。
[Add Object]をクリックし、ドアを置いてからオフにしたあと位置を調整します。

_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

最後に明かりを加えます。
[Scene Props]の中に何種類かありますが、せっかく暖炉があるのでそこに赤い光を置くことにします。
更に“fire_big”を選び、暖炉の中に配置します。
訳注:少し分かりにくいので補足します。 
fire_big自体は十分な光源にはなりません。
[Scene Props]の中にある”light”や”light_red”が光源になります。
light_nightは夜だけ発光する光源のようです。
他のTavernなどでエディットモードを起動するとよく分かると思います。

光を置いた後に消しても、その場に残っているように見えるかもしれませんが、
その場合は一度シーンを出て戻ると消えます。

ここまで終わって、Tavernの人達は16-24のEntry Pointに立っているが、Tavern Keeperが居ないことに気付いたでしょう。
次でTavern Keeperも含めた"アクター"を配置します。

練習もかねて[Scene prop]を好きなように追加してみるのも良いでしょう。
一通り終わったら終了してモジュールシステムに戻り、module_troops.pyを開きます。

7.3 メインアクター
シーンとアクターの準備が出来たので、両者を組み合わせます。
Hareck君とGeoffrey君の行を探し、Hareck君の顔コードを追加します。

# Add Extra Quest NPCs below this point
##JIK - new troop entry
["new_troop","new_troop","new_troops",tf_guarantee_boots|tf_guarantee_armor|tf_guarantee_helmet,no_scene,reserved,fac_commoners,
[itm_sword_medieval_a,itm_leather_jerkin,itm_skullcap,itm_hide_boots],
str_9|agi_9|level(4),wp(80),knows_common,mercenary_face_1, mercenary_face_2],
["npc17","Geoffrey","Geoffrey",tf_hero|tf_unmoveable_in_party_window, scn_town_mod_tavern|entry(6) ,reserved,fac_geoffrey,
[itm_courtly_outfit,itm_hide_boots,itm_new_mace],
def_attrib|level(6),wp(60),knows_trade_3|knows_inventory_management_2|knows_riding_2,0x000000019d004001570b893712c8d28d00000000001dc8
990000000000000000],
["Constable_Hareck","Constable Hareck","Constable Hareck",tf_hero, scn_town_mod_tavern|entry(5) ,reserved,fac_commoners,
[itm_leather_jacket,itm_hide_boots],def_attrib|level(5),wp(20),knows_common,
0x0000000e8000558036db6db6dbefb6db00000000001db6db0000000000000000 ],

最後にTavern Keeperを追加します。
Tavern Keeperのリストの最後に他のTavern Keeperをコピーして修正します。
[ "town_mod_tavernkeeper","Mod_Tavern_Keeper","Mod_Tavern_Keeper" ,tf_hero|tf_randomize_face|tf_female, scn_town_mod_tavern|entry(9) ,0,
fac_commoners,[itm_woolen_dress, itm_nomad_boots],def_attrib|level(2),wp(20),knows_common, woman_face_1, woman_face_2],

ゲームに戻るとTavernに彼らが居るはずです。
話しかけると傭兵として雇わないかといった、汎用の返事が返ってくるでしょう。
次は彼らにダイアログを与えます。

PART8 ダイアログ(Module Dialogs)


PART9 トリガー※未完成(Triggers NOT COMPLETED YET)


PART10 ゲームメニュー※未完成(Module Game Menus NOT COMPLETED YET)