フラグ群 sokf_ 破壊可能な小道具 使用可能な小道具 移動可能な小道具 頂点アニメーション付き小道具 光源 影 水や川 馬と階段 小道具の変数 小道具の変種 - 代替マテリアル メタ・タイプ、亜種 ID、変種 ID その他の注意点
シーン小道具(scene prop)の各レコードには次のような項目がある。
(1) シーン小道具 ID(string): 他ファイルからシーン小道具を参照するために使われる。ID 名の前に接頭子 spr_ が自動的に付加される。
(2) フラグ群: 指定可能なフラグは header_scene_props.py で定義されている。
(3) メッシュ名(string): メッシュの名前。
(4) 物理オブジェクト名(string): メッシュに関連付けられた衝突判定オブジェクトの名前。
(5) トリガー: このシーン小道具に関連付けられた単純トリガー。
module_scene_props.py (導入の文章 要追記)
訳注:
小道具と言っても、建物のような大きなものも扱います。上記レコード項目からも わかる通り、シーン小道具モジュールは、物品(Items)モジュールとは直接関連付けられておらず、(.brf ファイル内の)メッシュに直結しています。シーン小道具に指定した ID は Warband に備わったイン・ゲーム・エディタに一覧表示され、シーン内のインスタンス(実体)として、例えばロウソクを必要な数だけ配置できます。詳しくは「イン・ゲーム・エディタ」のページを。
下図はシーン小道具に登録された candle_b と arabian_village_house_a というレコードに対応するメッシュ(メインとサブ)を OpenBRF Redux でプレビューした例です。それぞれ Warband の CommonRes フォルダの object_meshes.brf と arabian_village.brf に含まれています。OpenBRF Redux について詳しくは「BRF ファイルと OpenBRF の概要」のページを。

下記は module_sceneprops.py 内にある当該レコードです。ロウソクのほうは、炎を灯すコードが第 5 項目に指定されています。
("candle_b",0,"candle_b","0",
[
(ti_on_scene_prop_init,
[
(set_position_delta,0,0,25),
(particle_system_add_new, "psys_candle_light"),
]),
]),
("arabian_village_house_a",0,"arabian_village_house_a","bo_arabian_village_house_a", []),
フラグ群 sokf_
下記のシーン小道具フラグを指定できます。
| sokf_add_fire | Native、With Fire & Sword、Viking Conquest、Napoleonic Wars で使われず廃止(要追記) |
| sokf_add_light | Native、With Fire & Sword、Viking Conquest、Napoleonic Wars で使われず廃止(要追記) |
| sokf_add_smoke | Native、With Fire & Sword、Viking Conquest、Napoleonic Wars で使われず廃止(要追記) |
| sokf_destructible | この小道具を破壊可能にする。 |
| sokf_dont_move_agent_over | (要追記) 不確か: 動く小道具がエージェントに影響を与えない? |
| sokf_dynamic | (要追記) |
| sokf_dynamic_physics | (要追記) |
| sokf_enforce_shadows | (要追記) |
| sokf_face_player | この小道具が常にプレイヤーのほうを向くようにする [1]。 |
| sokf_handle_as_flora | (要追記) |
| sokf_invisible | この小道具を非表示にする。 典型的な用途は、光源や目に見えないバリア。 |
| sokf_missiles_not_attached | 飛翔体が この小道具に着弾しないようにする [2]。 |
| sokf_moveable | この小道具の動作を、衝突判定メッシュとともに有効にする [3]。それはマルチ・プレイヤーでのクライアントとも自動的に同期される [4]。このフラグは、この小道具が影を落とさないようにする [5]。 |
| sokf_place_at_origin | この小道具が、常に入場点(entry point)0 に配置されるようにする [6]。典型的な用途は、主人公の持ち物。 |
| sokf_show_hit_point_bar | shows the remaining hit points of the destructible scene prop. |
| sokf_static_movement | サーバはゲーム・エンジンのコードを実行し、「使用可能で かつ 可動なら影響を受けるような小道具」がプレイヤーに見えているかどうかを調べる。シーン小道具の動きと衝突検出がさほど重要でない場合(つまり「多くのエージェントが乗っていて そこから落ちたくない船」とかではなく、「どのエージェントも近接せず、狭い区域だけで動く扉」や「などが該当)、このフラグは この小道具が実行速度に与える影響を軽減する。このフラグは Napoleonic Wars 向けに追加された。Persistent World では扉や木などの回転で多用されている。 [7] |
| sokf_type_ai_limiter | AI の動きは妨げ、プレイヤーの動きは妨げないようなシーン小道具にする。 |
| sokf_type_ai_limiter3d | 上と同様で、3D オブジェクト用? Viking Conquest で使われている。(要追記) |
| sokf_type_barrier | この小道具を、(通常は目に見えない)単純な 2D バリアにし、そのシーンでのプレイヤーの動きを制限する(?) (要追記) |
| sokf_type_barrier_leave | 上と同様、ただし、街のメニュー経由でシーンから去ることができる(?) (要追記) |
| sokf_type_barrier3d | この小道具を、(通常は目に見えない)単純な 3D バリアにし、そのシーンでのプレイヤーの動きを制限する(?) (要追記) |
| sokf_type_container | この小道具をチェスト(持ち物の置き場)として使えるようにする。 |
| sokf_type_ladder | この小道具の動きを遅くする? (要追記) |
| sokf_type_player_limiter | (要追記) |
| spanim_linear | (要追記) |
| spanim_loop_linear | (要追記) |
| spr_hit_points(x) | 破壊可能な小道具のヒット・ポイント(HP)を指定する。 |
| spr_use_time(x) | この小道具の使用に必要な時間を指定する。通常はマルチ・プレイヤーで使う。この小道具をシングル・プレイヤーでも使えるようにするには、module.ini で can_use_scene_props_in_single_player = 1 を指定する。このフラグが機能するためには、小道具に衝突判定メッシュが必要 [8]。トリガー ti_on_scene_prop_use を使う場合、このフラグを指定する必要がある [9]。 |
破壊可能な小道具
破壊可能なシーン小道具。 ithilienranger, Modding Q&A
使用可能な小道具 [10]
(訳注: この「使用可能なシーン小道具」(usable scene prop)の意味は、プレイヤーが意思表示する(F キーを押し続ける)とトリガーが発火するように設定したシーン小道具を意味します。この項の最後のほうで後述される通り、通常はマルチ・プレイヤー用で、シングル・プレイヤーで有効にすることもできます。)
「使用可能な小道具」にプレイヤーが近づくと、オレンジ色のキー入力待ちポップアップが現れます。それが表示されている時に F ボタンを押し続けると、進行状況を表わすプログレス・バーが進んでいきます。小道具に この設定をすると、次のような 3 つの異なる段階のイベントを発生させることができます。
- プレイヤーがバーの進行を開始時、ti_on_scene_prop_start_use が発火。
- プレイヤーが中断時、ti_on_scene_prop_cancel_use が発火。この小道具の衝突判定メッシュが どこかのエージェントと交差した時にも、自動的にキャンセルは発生する。
- プレイヤーがバーを 100 % 進行させた時、 ti_on_scene_prop_use が発火。プレイヤーが なお押し続けると、バーは再度 0 % から進行し始める。それを防ぐには、scene_prop_enable_after_time 命令を使って遅延するようにしておく。
シーン小道具を「使用可能な小道具」に設定するには、spr_use_time() という関数をフラグ(の一つ)として指定します。引数に指定する値は、バーを埋める(0 % から 100 % に引き上げる)のにかかる時間(秒)です。0 を指定した場合、F を押すとすぐにアクティブ化され、押し続ける必要がなくなります。更に、プロンプトを表示するにはトリガー ti_on_scene_prop_use が必要です。これは空のトリガーでも充分ですが、存在する必要があります。入力待ちテキストはリアルタイムで更新されるので、空のトリガーの目的は、小道具のアクティブ化ではなく、プレイヤーに現在のヘルス状態やスロット値を入力待ちポップアップに表示する機会を与えることです。
小道具を使用可能なものにする場合、衝突判定メッシュを持っている必要があります。MOD 開発者が小道具のレコード自体を追加する際は、その点を考慮するだけでなく、(prop_instance_enable_physics, ":prop", 0) 経由の衝突判定メッシュを無効にすることで使用可能の指定を無効にする可能性があることにも要注意です。また、衝突判定メッシュが有効だったとしても、いずれかのエージェントが それに触れていると効き目がありません(だから主人公が「使用可能な小道具」の上に立っている場合、そこから降りるまで入力待ちポップアップは表示されません)。
入力待ちテキストはスクリプト game_get_use_string の中で設定する必要があります。この表示はカスタム・オーバレイよりも優先度が低いので、たとえ透明なものであっても何かを一番手前に重ねると、入力待ち表示が見えなくなることに注意して下さい。
通常、「使用可能な小道具」はマルチ・プレイヤー・モードでのみ有効にできますが、module.ini で can_use_scene_props_in_single_player = 1 と設定することで、シングル・プレイヤーでも有効にできます。
情報テキストを使う。 dunde, Modding Q&A
使用可能なシーン小道具の効果を無効にする。 Somebody, Modding Q&A
移動可能な小道具
マルチ・プレイヤーでシーン小道具を動かす。 Vornne, Modding Q&A
頂点アニメーション付き小道具
シーン小道具の頂点アニメーション。 Lumos, Modding Q&A, meanwhile it is possible though, Dalion.
頂点アニメーションを付けたシーン小道具。 HyperCharge (credit), Animating - import / export
prop_instance_deform_in_range を使って、BRF 内で見られる頂点アニメーションを操作。 Dalion, Mount & Blade Modding Discord
光源
光源の数は、屋外シーンでは 10 個まで、屋内シーンでは 4 個までに制限されていることに注意して下さい。もっと多く配置できますが、地形はペイントされません。ただし、主人公のモデルは光を反射します [11]。
関連する議論。 remark と remark と potential workaround。
点光源の最大数。 cmpxchg8b, [WB] Warband Script Enhancer v3.2.0 と [WB] Warband Script Enhancer v3.2.0
光源の類の最大数。 Somebody と cmpxchg8b, Modding Q&A
シーンの入射光の最大数。 Ruthven と _Sebastian, Modding Q&A, と _Sebastian_, Modding Q&A
影
影エンジンのバグ(理解が正しければ、module scene props が衝突判定メッシュに連結)。 _Sebastian_, Modding Q&A
エージェントの影。 cmpxchg6b, Modding Q&A
水や川
水や川のシーン小道具。 _Sebastian_ と InVain, Modding Q&A と Gotha (credit), problem with river_water と Marko (credit), Modding Q&A と Invain と Marko, Modding Q&A
馬と階段
馬が階段を歩けるようにする。 NPC99, Modding Q&A
小道具の変数
両変数のそれぞれの最大値は 127, Dalion, Mount & Blade Modding Discord。より一般的な説明も必要。
小道具の変種 - 代替マテリアル
シーン小道具の代替マテリアル。 Lav, Modding Q&A と Antonis と La Grandmaster, Modding Q&A と Modding Q&A
プレハブ式シーン小道具のコード例。 dstn, Mount & Blade Modding Discord
メタ・タイプ、亜種 ID、変種 ID[12]
内部的には、シーン上のほとんどの物品は同じクラス(ミッション・オブジェクト)のインスタンスであり、同じコレクションに収められています。それらを区別するのは、メタ・タイプ(meta type)、亜種 ID(sub kind ID)、それと 2 つの変種 ID(variation ID)です。メタ・タイプはオブジェクトのタイプを識別するもので、下記のように分類されます。
- Meta Type 0: シーン小道具(エディタで配置)
- Meta Type 1: 入場点
- Meta Type 2: シーンの物品(エディタで配置)
- Meta Type 3: (不明)
- Meta Type 4: 植生(樹木、岩、...)
- Meta Type 5: 小路
- Meta Type 6: 発生する物品(プレイヤーが手放し、地面に落とした時)
- Meta Type 7: 発生する物品(飛翔体が命中時)
- Meta Type 8: 発生する物品(エージェントが倒された時)
- Meta Type 9: (不明)
- Meta Type 10: 発生する(スポーンされる)シーン小道具
亜種 ID は、基礎となる(訳注: 内在する?)物品の ID(物品なら物品タイプ ID、シーン小道具ならシーン小道具 ID など)です。変種 ID は様々なものに使われます。物品のメッシュのバリエーションを持つ物品、通路(?)(訳注: passage)のメニュー ID など。次のようなサーバ・エラーをまだ見たことが無いなら、恐らくそのうち目にすることでしょう。
Synchronization with server failed: trying to recreate existing object (id: %d, meta_type: %d, sub_kind_id: %d, variation_id: %d) with meta_type: %d, sub_kind_id: %d, variation_id: %d, do_prune: %d
(訳注: 訳すと、「サーバとの同期に失敗: 既存オブジェクト (id: %d, メタ・タイプ: %d, 亜種 ID: %d, 変種 ID: %d) の再作成をトライ中。」。do_prune は説明が無いので不明(何かの切り捨て?)。)
これで これらの項目が何を意味するか、大まかには判りますね。
奇妙なことに、sokf_missiles_not_attached はエディタで配置された(メタ・タイプ 0 の)シーン小道具に対して機能しますが、エンジン開発者は動的ミッション・オブジェクトに対してのみ機能すると指摘しました。動的ミッション・オブジェクトとは、落とすと生成するする物品(メタ・タイプ 6)、エージェントが倒された時に地面に落ちるする物品(同 8)、飛翔体が何かに当たった時に生成される物品(同 7)、および発生する(スポーンされる)シーン小道具 (同 10) です。
その他の注意点
片面だけの衝突判定メッシュ。 Somebody, Modding Q&A
ハード・コーディングされたシーン小道具? Somebody, Modding Q&A
- 脚注と出典:
- [1] cmpxchg8b, Modding Q&A.
- [2] Somebody, Modding Q&A.
- [3] cmpxchg8b, Modding Q&A.
- [4] Somebody, Modding Q&A.
- [5] _Sebastian_, Modding Q&A.
- [6] Somebody, Modding Q&A.
- [7] Vornne, Map Stability and Crashes.
- [8] Sinisterius, Modding Q&A.
- [9] _Sebastion_, Modding Q&A.
- [10] この項は Dalion 氏による。
- [11] The Bowman, Mount & Blade Modding Discord.
- [12] 右の投稿の情報を組み入れ済み。 cmpxchg8b, Modding Q&A.