Skip to main content
Stormworks のロジックシステムは、ブロック間を専用の接続線(ワイヤ)でつなぐことで信号を伝えます。接続線には型があり、異なる型のノード同士は物理的に接続できません。

信号型一覧

ロジック接続には次の型があります。ノードの色は型ごとに固定されており、ゲーム内で見分けられます。 このほか、Definition 上は Fluid(配管)と Power(機械動力)という接続型もありますが、これらはロジック信号ではなく、向き付きの物理ポート同士が隣接することで機能する接続です。
Electric・Rope・Fluid・Power はロジックの信号伝播(本ページ以降で説明する内容)の対象外です。

信号値の内部表現

Number 信号は 32-bit 単精度浮動小数点で扱われます。64-bit 精度ではありません。 マイクロコントローラーが破損した場合、Boolean 出力はすべて false、Number 出力はすべて 0.0、Video は黒画面になります。修復すると破損前の状態に復帰しますが、内部で実行していた Lua スクリプトがエラー状態に入っていた場合は、修復しても復帰しません。

接続ルール

  • 型一致が必須です。同じ型のノード同士のみ接続できます。
  • 入力ノードは、型ごとに1本のワイヤしか受け付けません(Electric・Rope を除く)。
  • 出力ノードは、無制限に分岐できます(1つの出力から複数の入力へ接続可能)。
  • Electric・Rope は双方向で、入力・出力の区別がなく複数接続できます。
  • 同一ブロックのノード同士を接続することはできません(自己接続禁止)。
  • 同じ位置(ボクセル)に異なる型のノードが共存することがあります。この場合、型ごとに独立して1本まで接続を受け付けます。1つの型の接続を切っても、同じ位置にある別の型の接続には影響しません。

型変換

暗黙的な型変換はありません。 On/Off と Number は厳密に分離された信号型で、変換には専用のブロックが必要です。

Number → On/Off

On/Off → Number

Numerical Switchbox に定数 1 と定数 0 を入力すれば、On/Off から Number への簡易な変換として使えます。

Composite との変換

Composite 信号の内容の読み書きは、マイクロコントローラー内部の Composite Read / Composite Write ブロックでのみ可能です。車両レベルの配線では、Composite は中身を分解されずにそのまま1本の信号として伝播します。

Composite 信号

Composite 信号は、32 個の Number チャンネルと 32 個の Boolean チャンネルを同時に運ぶ多重化信号です。Number と Boolean は独立したチャンネル空間で、同じチャンネル番号に Number と Boolean の両方を同時に保持できます。 ゲーム内 UI・Lua の input/output API・マイクロコントローラーのプロパティでは、チャンネル番号は 1〜32 で表示・指定します。
マイクロコントローラーの内部データ(XML)では、チャンネル番号は 0〜31 で保持されます。UI 表示の 1〜32 とは 1 ずれた対応関係です。

Composite Write のパススルー

Composite Write ブロックは Composite 入力を持ち、既存のデータをそのまま出力側へ通過させます(パススルー)。ブロックが書き込むのは接続されているチャンネルだけで、それ以外のチャンネルは変更されません。この性質により、複数の Composite Write ブロックを直列に接続して、チャンネルごとに別々の場所で書き込むという使い方ができます。

Composite Binary 変換

Number To Composite Binary ブロックは、Number(f32)の各ビットをそのまま 32 個の Boolean チャンネルに展開します(チャンネル1 = ビット0、チャンネル32 = ビット31)。逆に Composite Binary To Number ブロックは、32 個の Boolean チャンネルを IEEE 754 float の生のビット列として再解釈し、Number に戻します。整数への変換ではなく、ビット列としての再解釈です。 この2つのブロックを直結すると、経由前の Number 値をビット単位で完全に復元できます。
Composite Binary To Number は任意の 32 Boolean の組み合わせを受け付けるため、Number To Composite Binary を経由していないビット列を渡すと、NaN や無限大、非正規化数になることがあります。