【Stormworks】ディーゼルエンジンの作り方

# 注意
・本記事は「[Stormworks Advent calendar 2023](https://adventar.org/calendars/8700)」の10日目の記事です
・本記事はこの動画を基にして作られています。詳しく知りたい方はこちらも併せてご覧ください。

https://www.nicovideo.jp/watch/sm43096669

・本記事では、過給制御についての解説はしません。過給制御については Stormworks 第2 Advent Calendar 2023 14日目の夜月さんの記事が参考になります。

https://note.com/yoduki7170/n/n43af12e33488

~~難しいこと分かんねえし他人にぶん投げるぜ！~~

# もくじ
#### 1\. 覚えておくと役に立つかもしれないお話
#### 2\. 既存エンジンを動かそう
#### 3\. モジュラーエンジンを動かそう
#### 4\. まとめ・あとがき


## 1\. 前提知識
実際に作り始める前に、まず前提知識の説明をば
覚える必要のあるポイントは、大きく分けて二つです

### ・エンジンに必要な要素
まずエンジンを動かすのには何が、なぜ必要なのか軽く押さえて頂ければと思います

ということでご用意しましたこちらの図
<img width="500" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/20ecab71-d66d-4e65-38ad-2e7c0eb829e0.jpeg></img>
それぞれがなぜ必要なのか解説していきましょう

#### ①燃料
燃料を燃やして動力を取り出すので、当然っちゃ当然ですね
今回はディーゼルエンジンなので、燃料はディーゼル(軽油)を使います

#### ②空気
ディーゼルエンジンは空気を圧縮、加熱することで燃料に自然着火する仕組みです
そのためこれが無いと燃料を燃やせません

#### ③排気
燃焼後の気体がエンジン内に残っていては邪魔ですので、次の燃焼に備えて排出します

#### ④冷却
燃料に火をつけて燃やしているので、当然熱が出ます
放っておくとオーバーヒートしてしまうので、十分に冷却する必要がありますね
Stormworksでのオーバーヒート温度は115℃になっています

以上がエンジンに必要な要素です。では次

### ・ディーゼルエンジンの構造
必要な要素が分かったところで、次は具体的にどうエンジンが動くのか、確認しておきましょう

ということで同じくご用意してきましたこちらの図
<img width=500 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/fe7bd1b8-ace2-c4e2-d09c-e7fa3c4e5602.jpeg></img>

エンジンが回転するプロセスについては見ての通りなのですが、ここで注目したいのは構造面です
#### シリンダ
まず上側、空気と燃料を燃やして出し入れしている部分を「シリンダ」と呼びます
エンジンにおいて実際にパワーを生み出す部分で、一般的にはこの数(気筒数)がエンジンの規模としてよく用いられます
シリンダが4個なら4気筒、12個なら12気筒といった具合です

#### クランクシャフト
次に下側、シリンダのパワーを受けて回転している部分を「クランクシャフト」と呼びます
シリンダで生み出されたパワーを回転する力に変える部分で、これにどうシリンダを接続するかでエンジンの呼び方が変わります
代表的なのだと「直列」「水平対向」「V型」「星形」なんてのがありますね

\
以上の二つはモジュラーエンジンを触る時にパーツとして扱いますので、頭の片隅に置いて見ていただければと思います

## 2\.既成エンジンを動かそう
というわけでここからは皆様お待ちかね、実際にエンジンを組んでいきます
媒体の都合上どうしても雑な解説になりますので、詳しく見たい方は[こちら](https://www.nicovideo.jp/watch/sm43096669)から動画をご覧ください

今回は既成エンジンの中でも一番お手軽な、スモールエンジンを組み立てていきます

### 1.必要なパーツ
まずは必要なパーツのリストです
+ Block
+ Pipe Straight
+ Pipe Angled
+ Small Engine
+ Fluid Exhaust
+ Air Ram
+ Fluid Tank Medium
+ Fluid Heat Radiator 3x3 (electric)
+ Small Propeller
+ Throttle Lever
+ Push Button
+ Constant On Signal
+ Small Battery


### 2. 構造部を組み立てよう
#### ①土台を用意する
+ Block
<img width=500 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/cc5cae93-5d83-fe33-732d-97ae09cea21d.jpeg></img>

ブロックで適当な土台を作ります

#### ②エンジン
+ Small Engine
<img width=500 src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/4205da3b-f10a-fbb9-8201-d4f599ea3d57.jpeg></img>

エンジンの配管にはそれぞれ役割があるので、それぞれにカーソルを合わせて確認しておくと良いです


#### ③排気口
+ Pipe Angled
+ Fluid Exhaust
  <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/c8849783-34c8-b99f-5a0a-a26431a1aff7.jpeg width=500>

見栄えを意識して、排気管は上に曲げておきます。特に意味はありません

#### ④吸気口
+ Pipe Angled
+ Air Ram
  <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/83efbe49-5626-d3db-95b3-2af78bc06ff0.jpeg width=500>

吸気と排気が近くにありますが、排気を吸い込むことで何か影響が出る、ということはありません

#### ⑤燃料
+ Pipe Straight
+ Pipe Angled
+ Fuid Tank Medium
  <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/71d1630b-78ce-b0e5-9716-5c23875db6ad.jpeg width=500>

既定でディーゼル燃料が入っているので、置いて接続するだけで済みます


#### ⑥冷却系統
+ Fluid Heat Radiator 3x3 (Electric)
+ Pipe Straight
+ Pipe Angled
  <img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/cae3f4e1-8d49-58cd-7b60-2cb2797b93cd.jpeg width=500>

冷却系統は他と比較して考えることが少し増えるので、動画にて仕組みを詳しく解説してます

#### ⑦動きを見るための動力パーツ
+ Small Propeller
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/5db81fb6-1811-8961-a9d4-508c8d1d5a13.png width=500>

このままだと動かしてもただうるさいだけですので、何かしら動力パーツを付けておきます


\
これでエンジンの構造部の組み立ては終わりです

### 3. ロジックを組もう
あとは、動作させるための信号を各パーツに送っていきます
てことでまたまた用意しましたこちらの図
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/43b52e52-6dd6-739b-604e-76cf4750dd39.jpeg width=500>
ロジックの種類を整理したものになるんですが、今回はこのうちの１番上、"DATA"を主に使います


DATAの中にも二種類ありまして
+ パーツのON/OFFに使われる"Boolean"
+ スロットルなどに使われる"Number"

とそれぞれ分かれています
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/fcf355dc-76f8-daa5-7b41-39af0463c4a1.jpeg width=500>

ロジックの配線を接続することで、これらの信号をパーツからパーツへと伝達できます
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/60d11788-2e81-8966-ad39-e47437ccbbd4.jpeg width=500>
ちなみに出力は複数の入力に接続できますが、入力は単一の出力しか受け付けません
出力：入力 = １：複数　の関係とでも言えばいいんでしょうか

ではロジックについて軽く説明したところで、ここからは実際に組んでいきます

#### ①必要なパーツの設置
+ Throttle Lever
+ Push Button
+ Constant On Signal
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/584fbbd0-a2ac-1b42-5eaa-579d5a53cdcb.jpeg width=500>

まずはエンジンの制御に必要なパーツを設置します

#### ②"DATA"の信号を接続
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/cea007bc-c4da-54f0-b580-7f247e9c14fc.jpeg width=500>

先ほど置いたパーツから、対象の各パーツに信号を入力していきます
+ "Throttle Lever"->エンジンの"Throttle"入力
+ "Push Button"->エンジンの"Starter"入力
+ "Constant On Signal"->ラジエーターの"Fan On/Off"入力

以上の通りに接続してください

#### ③"Electric"の信号を接続
+ Small Battery
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/cb2e0369-6446-f85f-3c40-bfcd41bf709d.jpeg width=500>

これは基本的にバッテリーから全部のパーツに繋げておけばOKです

てなわけで、以上でスモールエンジンが完成です
忘れずにセーブして、スポーンさせましょう
### 4. 実際にエンジンを動かそう
まずは今回作ったエンジンをスポーンさせまして
1. "Throttle Lever"の値を最大(1)まで上げる
2. "Push Button"を少しの間押してスターターをかける
以上の手順でエンジンを始動します
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/4d84b23f-bbb7-c0d9-71c0-2228caeffdda.jpeg ,width=500>

成功すれば、エンジンの駆動音とともにプロペラが回りだすはずです
スターターから手を離すと回転が止まってしまうの場合は、どこかで失敗しています

## 3. モジュラーエンジンを動かそう
### 1. 既成エンジンとの差異
既成エンジンを動かせたところで、次はモジュラーエンジンです
既成エンジンとの違いとして
+ 使うパーツの数が多い
+ 過給に対応している

以上二点が挙げられます

Tips：過給について
+ 自然吸気(NA)：大気圧のみで吸気を行う方式
+ 過給(ターボ)：過給機を用いて強制的に吸気量を増加させ、一度により多くの燃料を燃焼させる方式

身近なところでは車のエンジンがあり、それぞれ「自然吸気エンジン」「ターボエンジン」などと呼ばれます。
※厳密には「過給≠ターボ」らしいのですが、雰囲気が伝わればいいので今は気にしないことにします。

### 2. 必要なパーツ
滅茶苦茶多いので読み飛ばして大丈夫です
+ Modular Engine Cylinder 1x1
+ Modular Engine Crankshaft 1x1
+ Modular Engine Clutch 1x1 
+ Modular Engine Drive Belt 1x1 
+ Modular Engine Starter
+ Modular Engine Coolant Manifold
+ Modular Engine Fuel Manifold
+ Modular Engine Air Manifold
+ Modular Engine Exhaust Manifold
+ Modular Engine Manifold (Corner)
+ Fluid Heat Radiator 3x3 (Electric)
+ Fluid Tank Medium
+ Fluid Exhaust
+ Pipe Corner
+ Pipe Straight
+ Pipe T-Piece
+ Impellor Pump (Small)
+ Air Ram
+ Throttle Lever
+ Push Button
+ Constant On Signal
+ Constant Number
+ Battery Small
+ Small Propeller


### 3. 構造部を組み立てよう
#### ①土台を用意する
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/60bc8c4b-c6c1-c9ee-e107-ad7752426a59.jpeg width=500>

土台は先ほど組み立てたスモールエンジンのものを流用します

#### ②クランクシャフト
+ Modular Engine Crankshaft 1x1 
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/5fedb62a-59c1-64fb-2111-21a08bc85f68.png width=500>

2つ繋げて設置
両端の断面が丸くなっていることを確認してください

#### ③シリンダ
+ Modular Engine Cylinder 1x1 
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/acf94363-bd11-c547-05f7-3f98c48f6bd8.png width=500>

クランクシャフトの側面にカーソルを合わせて、４個設置
シリンダ底面とクランクシャフト側面の四角い形状を合わせるように向きを整えます

#### ④クラッチ
+ Modular Engine Clutch 1x1 

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/923c183f-d019-5eb4-56a9-4fb487c8d3dc.png width=500>

クランクシャフト両端とクラッチ底面の丸い形状を合わせるように配置します

#### ⑤ドライブベルトとスターター
+ Modular Engine Drive Belt 1x1 
+ Modular Engine Starter
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/8b67d32b-7f82-0af3-3e10-7f76f624a135.png width=500>

反対側に回ってドライブベルトとスターターを設置します
この時に、写真のようにベルトが両者に巻き付くようにしてください
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/ca1cadb1-afcb-fa4a-bfce-dbbe53e938ae.png width=200>

設置後はベルトが描画されなくなりますが、向きがあっていれば大丈夫です

#### ⑥シリンダ同士を接続
+ Modular Engine Manifold(Corner)
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/e10de680-7687-178d-2c59-7ff75385c3ab.png width=500>

上面と側面のシリンダを、レンコンのような穴を介して接続します
こうすることでシリンダ間で燃料や空気などを共有できます


これでエンジンの中心部は完成です
ここからはエンジンに対する入出力を作っていきます

#### ⑦冷却系統
ここは少しやることが多いです
+ Modular Engine Coolant Manifold
+ Fluid Heat Radiator 3x3 (Electric)
+ Impeller Pump (Small)
+ Pipe Angled
+ Pipe T-Piece

1\. "Modular Engine Coolant Manifold"を設置
　<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/525bb013-fbb2-bb60-cd8b-d09af4573643.png width=500>

2\. その上に"Fluid Heat Radiator 3x3 (Electric)"を設置
　<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/cc5c35b7-2374-6042-4274-6c652009fcb8.png width=500>
ラジエーターの接続口が２つとも手前に来るように設置します

3\. "Impeller Pump (Small)を設置
　<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/1174964c-fe06-90d7-4076-cb3bc5e422ab.png width=500>

**ラジエーターとクーラントマニホールドが繋がり**、かつ**動力の接続口が下側に来る**ように設置します。ここは動画じゃないと分かりにくいかも...

4\. 配管を接続
　<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/9ad64bc7-95cd-02ab-e0e6-3058477d1e8f.png width=500>

冷却水の循環経路とポンプの動力を接続します
これが終われば冷却系統は完成です

#### ➇排気
+ Fluid Exhaust
+ Modular Engine Exhaust Manifold (Corner)
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/de40f39d-03ce-5881-f524-c64052c3ecf7.png
 width=500>

"Exhaust Manifold"をシリンダの側面に合わせて設置し、その上に"Fluid Exhaust"を設置します

#### ⑨吸気
+ Modular Engine Air Manifold
+ Air Ram
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/e1481472-f877-6628-989e-57f675a92081.png width=500>

"Air Manifold"をシリンダに合わせて配置し、その先に"Air Ram"を設置

#### 燃料
+ Modular Engine Fuel Manifold
+ Fluid Tank Medium
+ Pipe Angled

※見づらかったので冷却系統を一時撤去してます
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/cca314ca-6842-2183-36e3-0f7f2cb769dc.png width=500>

これもさっきと似たように"Fuel Manifold"を設置し、その先に"Fluid Tank Medium"を接続

これで、エンジンに必要な要素はすべて揃いました

## 4. ロジックを組もう
残すところはロジックだけです
なんとなく制御が難しいイメージを持たれがちですが、**過給をしなければ**至極簡単に済みます
※過給については私が理解できてないのでここでは説明しません

### 1. 制御用パーツを設置する
+ Function(1 input)
+ Constant Number

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/e75fcb82-6e31-2b69-e0b5-23114e54c08e.png width=500>

それぞれ適当な位置に設置して、選択モード(画面上の↖マーク)から中身を変更します

"Constant Number"
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/0d9663b0-78c0-63cb-8325-8ad95e068dcb.png width=300>
エンジンのクラッチに入力する値
範囲は0~1で、1の時に最大量の動力を伝えます

"Function(1 input)"
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/951b6e7d-cfa1-7725-6722-185c5f1ffb7a.png width=300>
"Fuel Manifold"に入力する値
実用的なかける数の範囲はだいたい0.44~0.54で、この値が大きくなればなるほどパワーと燃料消費量が上がります
分かりやすいのでここでは0.5にしておきましょう


### 2. ロジックを接続する
#### ①DATAの信号を接続する
まずはロジックのうち"DATA"のビューに入りまして
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/2a787ed1-d04e-ec33-6b5c-bc52ca327839.png width=500>

この状態から、以下の通りに信号を繋げます
+ "Throttle Lever" -> "Modular Engine Fuel Manifold" & "Function(1 input)
+ "Push Button" -> "Modular Engine Starter"
+ "Constant On Signal" -> "Fluid Heat Radiator 3x3(Electric)
+ "Constant Number" -> "Modular Engine Clutch"
+ Function(1 input) -> "Modular Engine Air Manifold"

このように接続されていれば大丈夫です
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/5c3ea6cd-452d-5921-c729-1190d4c5ceca.png width=500>
※ロジックの線は強調表示してます

#### ②電力を接続する
次に"Electric"のビューに移動して、バッテリーからすべてのパーツに対して電力を繋げます
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/74b2bd62-d496-69c2-ccc2-d52be584a3be.png width=500>
こうなっていればOK、これでモジュラーエンジンも完成です

### 5. エンジンを動かそう
ここまで終わったら、あとは動かすだけです
これも同じくスポーンさせまして、
1. "Throttle Lever"の値を最大まで上げる
2. "Push Button"を少しの間押してスターターをかける

以上の手順でエンジンを始動します

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2016616/da86bfbc-5510-50cd-560d-c73d07ba581b.png width=500>

スターターを離した状態でプロペラが回っていれば成功です


## まとめ
今回は、Stormworksの既成エンジン・ディーゼルエンジンについて解説しました。
書きながら自身の理解不足が判明したり、検証のきっかけになったりと、個人的にはいい機会が得られたなと思っています。
詳しいことはさっぱりですので、検証などその手のものは他の方に任せます！


## あとがき
#### 燃料スロットルとエンジンパワー(RPS)の関係はこちらにまとめました

https://docs.google.com/spreadsheets/d/1OPay-cH0gs1G1NDvH7DCxMo9V1X7Szh1JGMGgMbudtI/edit?usp=sharing

**正確な計測ではない**ので、ふーんそうなんだ程度で見てください


#### 記事のベースになった動画

https://www.nicovideo.jp/watch/sm43096669

#### 夜月さんの記事

https://note.com/yoduki7170/n/n43af12e33488

#### Stormworks Advent Calendar 2023
1枚目(この記事はこっち)

https://adventar.org/calendars/8700

2枚目

https://adventar.org/calendars/9267