> ## Documentation Index
> Fetch the complete documentation index at: https://docs.makkii.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# 信号モデル

> ロジック接続の信号型・値域・型変換ルール・接続制約

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

## 信号型一覧

ロジック接続には次の型があります。ノードの色は型ごとに固定されており、ゲーム内で見分けられます。

| 型                | ノード色 | 方向性          | 用途            |
| ---------------- | ---- | ------------ | ------------- |
| On/Off (Boolean) | 赤    | 出力 → 入力（単方向） | 2値信号          |
| Number           | 緑    | 出力 → 入力（単方向） | 数値信号          |
| Composite        | 紫    | 出力 → 入力（単方向） | 複数信号を多重化した信号  |
| Video            | 水色   | 出力 → 入力（単方向） | カメラ・モニター間の映像  |
| Audio            | 黄緑   | 出力 → 入力（単方向） | 音声            |
| Electric         | 黄    | 双方向          | 電力接続（物理的な電力網） |
| Rope             | 暗灰/黒 | 双方向          | ロープ・ウインチの物理接続 |

このほか、Definition 上は Fluid（配管）と Power（機械動力）という接続型もありますが、これらはロジック信号ではなく、向き付きの物理ポート同士が隣接することで機能する接続です。

<Note>
  Electric・Rope・Fluid・Power はロジックの信号伝播（本ページ以降で説明する内容）の対象外です。
</Note>

## 信号値の内部表現

| 型         | 表現                                 | 値域               | 未接続時の値    |
| --------- | ---------------------------------- | ---------------- | --------- |
| On/Off    | 真偽値                                | `true` / `false` | `false`   |
| Number    | 32-bit 浮動小数点 (f32)                 | IEEE 754 単精度     | `0.0`     |
| Composite | 32 Number チャンネル + 32 Boolean チャンネル | チャンネルごとに上記と同じ    | 各チャンネル既定値 |

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

| ブロック           | 動作                             |
| -------------- | ------------------------------ |
| Threshold Gate | `min <= x <= max` なら On        |
| Greater Than   | `a > b` なら On                  |
| Less Than      | `a < b` なら On                  |
| Equal          | `\|a - b\| <= tolerance` なら On |

### On/Off → Number

| ブロック                | 動作                                       |
| ------------------- | ---------------------------------------- |
| Numerical Switchbox | On/Off 入力で2つの Number 入力を切り替えて出力する        |
| Up/Down             | Up/Down の On/Off 入力から -1〜+1 の 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** で表示・指定します。

<Note>
  マイクロコントローラーの内部データ（XML）では、チャンネル番号は 0〜31 で保持されます。UI 表示の 1〜32 とは 1 ずれた対応関係です。
</Note>

### 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 値をビット単位で完全に復元できます。

<Warning>
  Composite Binary To Number は任意の 32 Boolean の組み合わせを受け付けるため、Number To Composite Binary を経由していないビット列を渡すと、NaN や無限大、非正規化数になることがあります。
</Warning>


## Related topics

- [Lua スクリプトブロック](/stormworks/logic/lua-api.md)
- [Stormworks Wiki](/stormworks/index.md)
- [ロジックブロック](/stormworks/logic/logic-blocks.md)
- [ティックと信号伝播](/stormworks/logic/tick-order.md)
- [対応 Lua 構文と意味保存モデル](/stormmin/reference/lua-support.md)
