拡張パック(追加パック)の編集の仕方
拡張パックを使うには信号機アドオン_v1.64.283以降が必要です。
信号機アドオンは、モデルを差し替えて遊べるように作ってあります。
本体のスクリプトを直す必要はありません。
やり方は難しい順に3つあります。上から順に読んでください。
1段目だけで満足できる人も多いはずです。
1つめは、素材を Blockbench で直して、リソースパックとして上に置くやり方。
いちばん簡単で、見た目が丸ごと差し替わります。スクリプトは要りません。
2つめは、拡張パックにして本体に名乗るやり方。
「モデルを変更」の一覧に並んで選べるようになり、作った人の名前も出ます。
3つめは、ARD(描画距離突破)まで自前で用意するやり方。
自分のモデルも、64ブロックより遠くで消えなくなります。
■ 差し替えられるのは7種類
見た目だけが入れ替わるのが、車両用信号機・歩行者用信号機・標示板・地名表。
ブロックごと入れ替わるのが、信号柱・腕金・押ボタン箱です。
このほかに「電柱」の枠も空けてあります。標準のモデルはありませんが、
拡張パックが自前の電柱を出せば、柱として扱われます。
制御盤と予告灯は、いまのところ差し替えできません。
標示板と地名表は電線につながっていないので、制御盤の「モデルを変更」で、
制御盤から20メートル以内のものをまとめて差し替えます。
制御のしくみ(現示・秒数・電線・通電判定・押ボタン・夜間モード)は、
いっさい触らなくて構いません。そこは本体が全部やります。

■ 素材データ
拡張パック素材の zip を配布ページに置いてあります。
中身は、種類ごとに1つずつ、そのまま入れれば動く拡張パックです。
モデルとテクスチャだけを裸で渡すのはやめました。
どこへ置けばいいのか、どう名乗ればいいのかが分からず、
そこで止まってしまうからです。

7つとも中身は同じ作りです。
BP には、パックの札(manifest)と、本体へ名乗るスクリプトと、中身の定義。
RP には、モデルとテクスチャ。そして、その種類だけの手引きが1枚。
直すのは、RP のモデルとテクスチャの2つだけです。
残りは触らなくて構いません。

車両用信号機は、本体では点灯レンズを128本の横帯に切り分けてあります
(理由は第1部の注意点5)。そのままでは編集できたものではないので、
素材では切り分ける前の1枚板に戻してあります。
京三 低コストのモデルは入っていません。
あれは春咲製作所製をお借りしているもので、
素材として配る権利がこちらに無いためです。
信号機の素材は、碧臨製作所が作った標準モデルです。
第1部 いちばん簡単なやり方
■ しくみは「上にあるパックが勝つ」だけ
統合版のリソースパックは、同じ名前のファイルを、上にあるパックが丸ごと
差し替えます。モデルも同じで、同じ識別子(geometry.〇〇)があれば、
上のパックのものが使われます。
つまり、自分のパックを信号機アドオンより上に置くだけで差し替わります。
スクリプトは要りません。ビヘイビアパックも要りません。
リソースパックが1つあれば足ります。

■ 手順
まず、素材のモデルを Blockbench で開きます。
素材_車両用信号機 の中の
RP/models/entity/smpsignal_signal_visual.geo.json を開き、
右の Texture パネルの「+」から、同じパックの
RP/textures/entity/smpsignal_aoiro_signal.png を読み込んでください。
次に直します。形を変えても、テクスチャを塗り替えても構いません。
いちばん簡単で失敗が少ないのは、テクスチャだけ塗り替えるやり方です。
同梱の「茶色の信号機」も、それだけで作っています。
直したら、自分のリソースパックに入れます。
このとき、本体とまったく同じ場所・同じ名前で置いてください。
ここを変えると差し替わりません。

柱と腕金なら models/blocks/spole.geo.json、models/blocks/arm.geo.json、
テクスチャは textures/blocks/aoiro_spole.png です。
最後に、ワールドの設定で、信号機アドオンのリソースパックより上に置きます。
これで終わりです。ゲームに入れば差し替わっています。
■ 注意点(ここを読まないと必ずつまずきます)
1. ボーンの名前は変えない
灯火の出し隠しは名前でやっています。名前が違うと、その灯火は永遠に点きません。
車両用は、本体が body、青レンズが lamp_g_on と lamp_g_off、
黄が lamp_y、赤が lamp_r。矢印灯の箱が arrows_box_l、_s、_r で、
矢印そのものが arrow_l_on と arrow_l_off(s が直進、r が右折)。
腕は arm_l と arm_r です。
歩行者用は、進めが lamp_go_on と lamp_go_off、
止まれが lamp_stop_on と lamp_stop_off、
残り時間バーが tbar_on_1 から 4 と tbar_off_1 から 4 です。
信号柱は、軸が shaft、根元が base、天板が cap。
根元と天板は、ブロック状態 aoiro:base と aoiro:top で出し隠ししていて、
本体が自動で切り替えます。
腕金は、段ごとの桁が bar0 から bar2、柱の留め具が clamp0 から clamp2、
左右の伸ばし棒が extp0 から extp2 と extm0 から extm2 です。
標示板は、文言20種ぶん(aoiro_plate_v0 から v19)と、
縦書き用(vv0 から vv19)が入っています。1つのモデルに1つの文言です。
地名表は板だけです。文字は1字ずつ別のエンティティで貼るので、
板の面の位置を大きく変えると文字がずれます。
ボーンを足すぶんには自由です。常に出たままになります。
2. 全部が差し替わります。選べません
この方法は、本体のモデルそのものを上書きします。
交差点ごとに使い分けたり、「モデルを変更」で選んだりはできません。
作った人の名前も画面に出ません。それをやりたいなら第2部です。
3. 遠くでは元のモデルに戻ります
本体には ARD(描画距離突破)が入っていて、64ブロックより遠い信号機は、
虚像という別のエンティティが描いています。
虚像が使うモデルは、名前の末尾に _ghost が付いた別の識別子です。
そのため、近くだけ自分のモデル、遠くは標準、というちぐはぐな見え方になります。
直すなら、models/entity/fdr_ghost.geo.json の中の _ghost が付いたモデルにも、
同じ編集を入れてください。中身は同じモデルを、
移動用と回転用のボーンで包んだだけのものです。
テクスチャだけ塗り替えた場合は、虚像も同じテクスチャを見るので、
何もしなくて大丈夫です。
4. 筐体は「自由な形(poly_mesh)」でできています
車両用の body、歩行者用の body とスピーカーは、
キューブではなく poly_mesh(自由な頂点の集まり)です。
丸い庇をキューブで作ることはできないためです。
Blockbench の版によっては、poly_mesh を読み込めないことがあります。
開いたときに筐体が消えていたら、その版では扱えません。
その場合は、テクスチャだけ塗り替えるか、
キューブでできている部分(柱・腕金・押ボタン箱・灯火の板・矢印の箱)
だけを直してください。
柱と腕金と押ボタン箱は全部キューブなので、どの版でも安心して編集できます。
5. 光らせたい画素はアルファ1。ただしアルファ0は黒く塗られます
点灯した灯火は、材質 entity_emissive で描いています。
この材質は、アルファ1の画素を光らせます。
そして、アルファ0の画素を黒で塗りつぶします。透明にはなりません。
丸い灯火を四角い板に貼ると、丸からはみ出した四隅が黒く光ります。
庇の下は奥が暗いので、そこだけ黒い四角が浮いて、とても目立ちます。
本体はこれを、四隅の面をそもそも作らないことで解決しています。
点灯レンズの板を、円に収まる横帯128本に切り分けてあるのがそれです。
素材では1枚板に戻してあるので、そのまま使うと四隅が黒く光ります。
気になる場合は、丸に近い形に切るか、灯火の絵を四角いデザインにしてください。
6. 点いている板と消えている板は、同じ位置・同じ大きさに
lamp_g_on と lamp_g_off は、同じ場所にある同じ大きさの板です。
片方だけ動かすと、点けたときだけ灯火が宙に浮きます。
本体でも一度やりました。縦型で灯火が6.6ピクセル上にずれていたのがそれです。
7. ブロックには大きさの制限があります
柱・腕金・押ボタン箱は、モデル全体が各軸30ピクセル以内、
座標はマイナス16から32ピクセルの中に収める必要があります。
キューブの回転は22.5度の倍数が確実です。回転後の大きさで判定されます。
超えると、そのブロックは焼けずにクエスチョンマークになり、
持ち物の絵まで透明になります。
信号機・歩行者用・標示板・地名表(エンティティ)に、この制限はありません。
8. エンティティのモデルはマイナスZが正面
信号機・歩行者用・標示板・地名表は、マイナスZ側を向きます。
部品をプラスZ側に置くと後ろを向きます。
9. 本体を更新すると、ずれることがあります
この方法は本体のファイルを上書きしているので、
本体側でモデルを直した回に、あなたのモデルだけ古いまま残ります。
灯火の位置を変えた更新があると、そこだけ合わなくなります。
長く使うなら、やはり第2部の形が安全です。
第2部 拡張パックにする(一覧に並ぶ形)
■ なぜ「名乗る」のか
統合版には、他のパックのスクリプトを読み込む方法がありません。
import もできませんし、他のパックの dynamic property も読めません。
そこで、パック間で唯一やりとりできる scriptevent を使います。
拡張パックは起動時に「私はこういうモデルを持っています」と名乗るだけ。
本体はそれを受け取って一覧に載せます。

この形なので、本体を書き換えなくて済みます。本体が更新されても壊れません。
後から拡張パックを入れても効きます。何度名乗っても上書きされるだけです。
拡張パックだけ入れても、本体が無ければ何も起きません。事故になりません。
■ 素材をそのまま土台にする
素材の「素材_〇〇」が、そのまま動く一式です。
UUID も名乗るスクリプトも入っているので、
フォルダの名前を変えて自分のパックにするのがいちばん早いです。
本体のソースを持っている人は、雛形を作る道具もあります。
tools/new_ext_pack.py にパックの名前と英数字の頭を渡すと、
この投稿が役に立ったら「いいね」や「フォロー」をお願いします!






![[長野の新顔!]E131系200番台配布](https://aorin-minio.duckdns.org/wordpress-media/2026/05/image_6a1264456a069_1779590213.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=GK47e2b89271218529b6293010%2F20260922%2Fgarage%2Fs3%2Faws4_request&X-Amz-Date=20260922T101751Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=bcc26eff7bf74a7f18f0a4d4984b20b7af7d477d5addc513c1513b6e7ad3b0da)
