Cloudwiki

Web sandbox 프로젝트/구상/새 물질 후보

주의: 이 문서는 구상 문서다
여기 적힌 물질은 **하나도 구현되어 있지 않다.** 전부 "넣으면 좋겠다"는 후보와 그 근거이며, 실제 저장소에 존재하는 물질 목록은 [[Web sandbox 프로젝트/가이드/물질]]과 저장소 `docs/MATERIALS.md`를 봐야 한다. 구현이 끝난 항목은 이 문서에서 빼고 도감·시스템 노트로 옮긴다.


## 이 문서에 대하여

새로 추가하면 좋을 물질을 카테고리별로 모아 둔 후보 목록이다. 형식은 **후보 물질 + 제안 근거**이며, 근거는 언제나 세 축으로 쓴다 — (a) 지금 무엇이 비어 있는가, (b) 어떤 기존 인프라를 재사용하는가, (c) 비용과 리스크. 판단 기준은 프로젝트 우선순위 **① 재미 ② 편의성 ③ 과학적 고증** 순서다. 고증만 맞고 재미가 없는 물질은 후보에서 뺐다.

### 현재 규모


138 (등록 물질)
126 (팔레트 노출)
14 (카테고리)
110 (남은 id 자리)


- 등록 138종 중 **12종은 시뮬이 스스로 만드는 시스템 파티클**(Ember·Spark·Debris·Bomblet·Napalm Gel·Bubble·Heat Ray·Nuclear Ray·Firework Star·Firework Burst·Flash·Eraser)이라 팔레트에 없다.
- 카테고리는 **14개**다: solid · powder · liquid · gas · fire · smelt · oil · **polymer** · explosive · cooling · electric · life · radioactive · exotic. 여기에 팔레트 UI가 오브젝트 탭 하나를 더 붙여 화면에는 15탭으로 보인다.[* 소개문서가 "13개 카테고리"라고 적은 것은 오류다 — 🧬 고분자(polymer)가 목록에서 빠져 있다. 정작 같은 문서 본문은 에틸렌·촉매·폴리에틸렌 라인을 설명하고 있다.]

### id는 병목이 아니다

물질 id는 `Grid.cells`가 `Uint8Array`라 0~255 범위다. 현재 최대 사용 id는 145이고, 재사용이 금지된 은퇴 id가 8개(14·15·30·35·64·72·76·142) 있다. 즉 0~145 구간 146칸이 이미 소진·예약돼 있고 **쓸 수 있는 자리는 146~255의 110칸이다**(256 − 146 = 110) — 지금 규모의 80%를 더 넣어도 안 마른다.

위험: 은퇴 id 재사용 절대 금지
세이브 포맷(`src/state/persistence.ts`)은 물질 id 바이트를 RLE + base64로 **그대로** 기록하고 이름 테이블도 리매핑도 없다. 은퇴 번호를 재사용하면 옛 세이브가 조용히 다른 물질로 렌더된다. 다음 배정 번호는 146부터다.


### 그러면 진짜 비용은 무엇인가

id가 아니라 **3중 갱신**이다. 물질 하나를 넣으면 최소 다음이 함께 움직여야 한다.

| 축 | 무엇 | 빠뜨리면 |
|---|---|---|
| 코드 | `register()` 파일 · `materials/index.ts`의 `MATERIALS` 배열 · 카테고리 지정 | 팔레트에 조용히 안 뜸 |
| i18n | `src/i18n/materials.ts`의 `materialNamesKo` | **조용히 영문명으로 폴백** (타입체크가 못 잡음) |
| 아이콘 | 렌더 태그로 생성되는 기본 칩, 또는 손그림 SVG 발주 | `check:hand-icons`가 빌드를 막음 |
| 문서 | `docs/MATERIALS.md`(도감) · `docs/MATERIAL-SYSTEMS.md`(설계 노트) · Cloudwiki 도감 | 문서가 코드와 어긋남 |

자세한 계산은 아래 [#새 물질 1종의 실제 비용] 절에 있다. 요약하면 **"물질 1종 = 파일 1개"가 아니라 "물질 1종 = 최소 6곳"** 이다. 그래서 이 문서의 후보들은 되도록 **한 종이 여러 개의 죽은 물질을 동시에 살리는 것**을 우선한다.

---

## 지금 비어 있는 것 지도

### 카테고리별 재고


| 카테고리 | 수 | 두께 | 비고 |
|---|---:|---|---|
| 💥 explosive 폭발 | 16 | 최대 | 비노출 6종 포함하면 22 |
| 🪨 solid 고체 | 14 | 두꺼움 | 단 `category` 명시 선언은 12종 |
| 🏖️ powder 가루 | 14 | 두꺼움 | 식품·유기물 계열이 4종뿐 |
| 💧 liquid 액체 | 12 | 보통 | 유기용매는 알코올 1종 |
| ⚡ electric 전기 | 11 | 보통 | 전원 4 + 배선 2 + 액추에이터 5, 판단 소자 0 |
| 🔥 fire 불·열 | 11 | 보통 | |
| 🌱 life 생명 | 10 | 보통 | 동물성 0, 균류 0 |
| 💨 gas 기체 | 9 | **얇음** | 불활성 1(헬륨), 독성 1(염소) |
| 🛢️ oil 석유 | 7 | **얇음** | 분별증류 라인은 완성형 |
| ⚒️ smelt 제련 | 5 | **얇음** | 금속이 철 하나뿐 |
| ❄️ cooling 냉각 | 5 | **얇음** | 저온원만, 냉각 "장치"가 없음 |
| ☢️ radioactive 방사성 | 5 | **얇음** | 채굴 시작점도 처분 종점도 없음 |
| ✨ exotic 특수 | 4 | **최소** | Clone·Void·Antimatter·Conveyor |
| 🧬 polymer 고분자 | 3 | **최소** | 사슬이 하나뿐 |

### 역할별 공백

개수가 아니라 "무엇을 할 수 있는가"로 보면 공백이 더 크다. 아래는 전부 코드 검색으로 부재를 확인한 것이다.


화학 축의 공백
- **염기가 0종이다.** 산은 Acid·Acid Vapor·Acid Slime 3종인데 반대편은 Soda(베이킹소다) 가루 하나뿐이고, 그마저 `soda.ts` 하드코딩 경로다. pH 개념도 중화 곡선도 없다.
- **표백제가 없어 염소를 만들 수 없다.** `chlorine.ts` 주석이 스스로 "Bleach가 아직 없어서 직접 배치하는 위험물"이라고 적어 두었다.
- **진짜 침전 반응은 없다** — 용액 A + 용액 B → 불용성 고체 규칙이 0건이다. 다만 액체에서 고체가 나오는 사례 자체는 있다(Lava + Water → Obsidian, Cement + Water → Concrete).
- **비누화(saponification)가 없다.** Soap은 팔레트에서 직접 칠할 뿐 **아무것으로도 만들 수 없다** — 원료인 유지와 염기가 둘 다 없다.
- **기체가 순환하지 않는다.** CO₂는 발효·승화·소화로 생기지만 소비하는 반응이 0건이다. 광합성이 없어(`plant.ts`가 CO₂도 O₂도 참조하지 않음) 탄소 순환이 반쪽이다.
- **점토·소성이 없다.** Sand → Molten Glass → Glass는 있는데, 흙·진흙을 구우면 아무 일도 안 일어난다.

물질 로스터의 공백
- **질소 기체라는 상태가 존재하지 않는다.** Liquid N₂는 끓으면 그냥 EMPTY가 된다 — 공기 중으로 사라진다.
- **반응성 기체가 없다.** 암모니아·SO₂·CO·NO₂ 전부 부재. 기체 9종 중 화학을 하는 것은 O₂·H₂·CH₄ 셋뿐이다.
- **금속이 철·알루미늄·수은·갈륨 4종뿐이다.** 구리도 납도 없고, 제련 라인은 철 하나만 돈다.
- **`magnetic` 태그가 4종뿐**(철광석·철가루·나노봇·녹가루)이고 전부 가루다. 전자석이 여는 놀이가 "철가루 선별" 하나로 좁다.
- **유기용매가 알코올 하나.** 아세톤·에테르 같은 "녹이는 액체"가 없다(산은 부식이지 용해가 아니다).
- **가루 33종 중 식품·유기물이 설탕·효모·씨앗·톱밥 4종뿐.** 밀가루·곡물 같은 생활 물질군이 통째로 비어 있다.

생명·전기의 공백
- **동물성 생물이 0종.** 생명 10종은 성장형(Plant·Coral·Seed) 3 + 감염형 1 + 발효 1 + 크롤러 2 + 반유체 2 + 사체 1이고, 헤엄치는 것도 먹이를 쫓는 것도 없다.
- **균류·부패가 0종.** 죽은 것이 분해되어 흙으로 돌아가는 경로가 없다.
- **포식이 거의 없다.** 유일한 생명→생명 상호작용은 Virus가 `combustible`인 Plant를 감염시키는 것뿐이다. 어떤 크롤러도 다른 생명을 먹이로 지정하지 않는다.
- **광합성이 없다.** 빛 → 유기물 → 산소 경로가 없어 식물이 대기와 아무 관계가 없다.
- **전기에 판단이 없다.** 전기 11종은 전원 4종(배터리 2·터빈·태양광) + 배선 2종(전선·니크롬) + 액추에이터 5종(팬·펌프·레이저·전자석·우퍼)으로 채워져 있고, **조건을 읽거나 시간을 세는 소자가 0종**이다. "전원 → 배선 → 장치" 단방향만 있다.



---

## 붙일 자리가 이미 있는 물질

새 물질을 고르는 가장 값싼 방법은 **이미 그려 놓기만 한 물질 옆에 파트너를 놓는 것**이다. 신규 1종의 비용으로 기존 2~3종이 동시에 살아난다.

### 고립 물질 — 아무와도 엮이지 않는 것

| 물질 | 가진 것 | 지금 하는 일 | 붙일 파트너 |
|---|---|---|---|
| **Helium** 헬륨 | 밀도 0.5(최경량), `update` 없음 | 천장에 고이는 것뿐 | **풍선 오브젝트**, **액체 헬륨**(초저온) |
| **Aerogel** 에어로젤 | `conductivity: 0` | 단열벽. 방폭도 아님 | **초전도체**(극저온 유지), **액체 헬륨** |
| **Heatpipe** 히트파이프 | `conductivity: 1.0`(최고), 레이저 반사 | 열을 나르는 것뿐 | **열전소자(Peltier)**, **냉매 루프** |
| **Mesh** 체 | `porous` + `latticeFilter` | 물은 통과, 모래는 걸림 | **활성탄**(흡착 필터), **스펀지** |
| **Concrete** 콘크리트 | 순수 데이터 | Cement의 산물이고 그걸로 끝 | **강철/철근**(철근콘크리트), **탄산염 + 산 → CO₂** |

### 막다른 길 — 산물인데 아무것도 만들지 않는 것

| 물질 | 왜 막혔나 | 소비처 후보 |
|---|---|---|
| **Asphalt** 아스팔트 | 코드 주석 그대로 "Left inert" — 가연성도 없다 | **도로 포장**, **콜타르 연소 라인** |
| **Slag** 슬래그 | 뜨거우면 흐르고 식으면 굳는 것뿐. 제련 실패 산물 | **슬래그 시멘트**(Slag + 생석회 → Cement) |
| **Nuke Waste** 핵폐기물 | U238 사이클의 종점, 되돌릴 길 없음 | **유리화 폐기물**(+ Molten Glass), **납 차폐** |
| **Conveyor** 컨베이어 | 물질과의 반응 0. 배치 UI에서만 참조됨 | 공정 라인(선별·분류) 놀이 전반 |
| **Limestone** 석회석 | 제련 플럭스 전용 | **생석회 → 소석회** 사슬 (아래 참조) |
| **Chlorine** 염소 | 생물 지우기 규칙 하나, 제조법 없음 | **표백제**, **PVC 연소**, **염수 전기분해** |
| **Mercury** 수은 | 반응 0. 상전이만 | 아말감, 기압계 — 우선순위는 낮다 |

팁: 가장 값싼 한 방 — 석회 사슬
**Limestone(석회석)은 이미 팔레트에 있고, 실제로는 탄산칼슘이다.** 여기에 신규 2종만 붙이면 산-염기 축·소성 축·CO₂ 순환이 한꺼번에 열린다.


```mermaid
flowchart LR
  LS["Limestone 석회석<br/>(기존)"] -->|"900° 소성"| QL["Quicklime 생석회<br/>(신규)"]
  LS -->|"+ 산"| CO2["CO2<br/>(기존)"]
  QL -->|"+ 물 · 격렬 발열"| SL["Slaked Lime 소석회<br/>(신규 · 최초의 염기)"]
  SL -->|"+ CO2"| LS
  SL -->|"중화"| AC["Acid 산<br/>(기존)"]
  SL -->|"+ 유지"| SP["Soap 비누<br/>(기존 · 제조법 생김)"]
  QL -->|"+ Slag"| CM["Cement 시멘트<br/>(기존 · 제조법 생김)"]
```

이 그림에서 **신규는 2종뿐인데 기존 물질 6종(석회석·CO₂·산·비누·시멘트·슬래그)이 전부 새 역할을 얻는다.** 이 문서 전체에서 투자 대비 회수가 가장 큰 항목이다.

---

## 카테고리별 후보

각 표의 열은 **후보 · 상태 · 하는 일과 재미 · 제안 근거 · 비용**이다. 상태는 고체(S) / 가루(P) / 액체(L) / 기체(G).

### 🪨 고체 solid

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **강철** Steel | S | 철 + 탄소를 고온에서 붙여 만드는 상위 금속. 융점·내구가 철보다 높고 도체·자성 유지.
*재미: 광석에서 시작해 "더 좋은 철"을 직접 제련해 내는 승급 경험* | 비어있음: 제련 라인의 종착점이 Molten Iron 하나라 완성 후 할 일이 없다
재사용: `moltenironore.ts` 환원 패스, `durability`(아직 아무도 선언 안 한 필드), 스파크 도체 등록
리스크: 철과 시각적으로 구분해야 함 | 신규 1~2종
(+ 용융 강철) |
| **구리** Copper | S | 손실 0에 가까운 최고 도체 + 높은 열전도. **비자성**이고 산에 수소를 내지 않는다.
*재미: 자석에 안 붙는 전선 — 철과 구리를 나눠 쓰는 회로 설계가 생긴다* | 비어있음: **손실 0 + 비자성 + 산에 수소를 내지 않는** 조합이 없다 — 고체 알루미늄과 고체 갈륨도 비자성 도체지만 둘 다 `acidHydrogen`을 달고 있고, 갈륨은 알루미늄을 취화시키는 별도 정체성을 이미 갖는다. `acid.ts`는 "구리는 수소 아래라 거품 안 냄"을 대조군으로 이미 설명해 두었다
재사용: `conductive` + `CONDUCTOR_IDS` append, `magnetic` 미선언만으로 성립
리스크: Wire와 역할이 겹치지 않게 "맨 도체" 포지션 유지 | 신규 1~3종
(+ 구리광석·용융 구리) |
| **납** Lead | S | 327°에 녹는 무른 중금속. **방사선을 막는다.**
*재미: 우라늄을 담는 상자를 직접 짓는다 — 지금은 돌로만 막을 수 있다* | 비어있음: 방사선 차폐재가 "돌"뿐이고 전용 차폐 물질이 없다
재사용: 방사선 계통은 이미 고체 차폐를 하므로 태그 추가 없이 밀도·융점만으로 성립
리스크: 차폐를 특별 취급하려면 `radiation.ts`에 감쇠 계수가 필요 — 그건 엔진 작업 | 신규 1~2종 |
| **흑연** Graphite | S | 타지 않고 전기가 통하는 탄소. 전극·감속재·도가니 재료.
*재미: 전기분해 전극을 세워 염수에서 염소를 뽑는다* | 비어있음: 전기분해가 물·염수·산 셋 다 같은 산물(H₂+O₂)을 내고 전극 개념이 없다
재사용: `conductive` 등록, 석탄 계열 색·연소 코드
리스크: 석탄과 헷갈릴 수 있어 아이콘 구분 필요 | 신규 1종 |
| **벽돌** Brick | S | 점토를 구워 만든 내열 건축재. 열전도 낮고 단단하다.
*재미: 용광로·가마를 벽돌로 짓는 것 자체가 놀이가 된다* | 비어있음: 건축재가 Stone/Concrete/Glass/Iron뿐이고 "구워 만드는" 경로가 유리 하나다
재사용: `brickPattern` 렌더 태그가 **이미 스키마에 있다**
리스크: 점토가 선행 필요(아래 powder 참조) | 신규 1종
(점토와 세트) |
| **내화벽돌 / 알루미나** Firebrick | S | 2000° 이상을 견디는 도가니 재료. 쇳물·테르밋을 담아 둘 수 있다.
*재미: 테르밋을 붓고도 안 뚫리는 그릇이 생긴다 — 지금은 뭘 써도 뚫린다* | 비어있음: 2800° 테르밋을 담을 수 있는 물질이 없다
재사용: `docs/MATERIAL-IDEAS.md` 1-6 알루미나 제안의 **승계형**. 그 문서가 "불활성 흰 가루라 할 일이 없다"고 보류한 이유를 **"할 일"을 줘서 해소한다**
리스크: 너무 강하면 열 놀이의 긴장이 사라짐 — 융점을 2500° 근처로 두고 파괴는 허용 | 신규 1종 |
| **철근 콘크리트** Reinforced Concrete | S | Concrete와 Iron이 맞닿아 있으면 그 자리가 바뀐다. 폭발 저항이 크게 오른다.
*재미: 폭탄에 안 무너지는 벽 — 폭발 놀이에 "방어" 쪽 수가 생긴다* | 비어있음: Concrete가 완전한 막다른 길이고, 방폭 물질이 Diamond·Obsidian·우라늄 계열뿐이라 **만들 수 있는 방폭재가 없다**
재사용: 선언형 반응 테이블 1줄(`with: IRON`), `explosionProof`/`durability`
리스크: 너무 흔해지면 폭발이 시시해짐 — 제작에 철을 소모시킬 것 | 신규 1종
반응 1줄 |
| **스펀지** Sponge | S | 액체를 빨아들여 품고, 짜내거나 마르면 도로 내놓는다.
*재미: 물을 옮기는 수단이 펌프 말고 하나 더 — 기름만 골라 빨아들이는 흡착포도 가능* | 비어있음: 겹침(overlap) 계층이 Mesh·Pump·Turbine 3종만 쓴다
재사용: `porous` + `overlapFluids` 화이트리스트가 **그대로 "선택적 흡수"가 된다**(Ammonium Nitrate가 이미 이 필드를 쓴다)
리스크: 액체 총량 보존을 깨지 않게 흡수·방출을 1:1로 | 신규 1종 |
| **형광체** Phosphor | S | 방사선이나 빛을 받으면 스스로 빛난다(색이 밝아진다).
*재미: **보이지 않던 방사선이 눈에 보인다** — 선원 주변에 형광체를 깔면 사거리가 그려진다* | 비어있음: 방사선 계통에서 `radiationHit` 훅을 쓰는 물질이 산호 2종뿐이다
재사용: `radiationHit`(피해 대신 발광), `glow` 온도 램프 대신 `auxPalette` 색 인덱스
리스크: 없음에 가깝다. 순수 관측 도구라 밸런스 영향 0 | 신규 1종 |
| **초전도체** Superconductor | S | 임계온도 아래에서 전기 손실이 0이 되고 자석 위에 뜬다.
*재미: 액체 질소를 부어야 켜지는 전선 — "냉각을 유지해야 돌아가는 회로"라는 새 제약* | 비어있음: 냉각 5종이 전부 "불 끄기·얼리기" 용도이고 저온이 **기능이 되는** 물질이 하나도 없다
재사용: `CONDUCTOR_LOSS` 값 0, `freeze` 대신 자기 `update`의 온도 문턱
리스크: 자기부상은 오브젝트 물리라 비용이 큼 — **1차는 "손실 0 도체"까지만** | 신규 1종 |

### 🏖️ 가루 powder

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **생석회** Quicklime | P | 석회석을 900° 이상으로 구우면 나온다. CO₂를 뱉는다.
*재미: 돌을 구워 다른 물질로 바꾸는 최초의 "가마" 공정* | 비어있음: 소성(calcination) 공정이 0건, 석회석 소비처가 제련 플럭스 하나
재사용: 온도 문턱 3줄 + `byproduct: CO2`. 온도 사다리에서 **900° 구간은 한산하다**
리스크: 구운 CO₂가 갇힌 자리에서 안 나오는 문제(`ventByproduct` 한계) — `otherBecomes`로 우회 | 신규 1종 |
| **소석회** Slaked Lime | P | 생석회에 물을 부으면 **격렬하게 발열하며** 생긴다. 게임 최초의 염기.
*재미: 물을 부었는데 끓어오르는 가루 — 직관에 반해서 재미있다. 그리고 이걸로 산을 중화할 수 있다* | 비어있음: **염기 0종.** 산 3종의 반대편이 소다 하나뿐
재사용: 선언형 반응 테이블 `heat: +120`, 그리고 `Acid → Water` 중화 규칙 1줄
리스크: 산-염기 축은 큰 시스템이라 pH까지 가면 발산한다 — **중화 = 물질 치환**으로 좁게 시작할 것 | 신규 1종 |
| **수산화나트륨** Lye / NaOH | P | 강염기 가루. 물에 녹으면 잿물이 되고 알루미늄을 녹여 수소를 낸다.
*재미: 배수구 세정제 + 알루미늄 포일이라는 유명한 실연이 그대로 성립* | 비어있음: `docs/MATERIAL-IDEAS.md` 2-1이 "독립 라운드로 설계할 것"으로 남겨 둔 자리
재사용: `acidHydrogen` 태그의 **염기판**(`baseHydrogen` 또는 일반화된 `reactiveProduct`), 소석회와 같은 중화 경로
리스크: 소석회와 역할이 겹친다 — 둘 다 넣을 거면 **소석회 = 온건·건축, NaOH = 강력·공업**으로 나눌 것 | 신규 1~2종
(+ 잿물 액체) |
| **밀가루** Flour | P | 평범한 가루인데 **공중에 흩날린 상태에서 불을 만나면 통째로 폭발한다.**
*재미: 아무 해도 없어 보이는 가루가 제분소를 날린다 — 분진 폭발의 교과서 사례* | 비어있음: 식품·유기물 가루가 4종뿐. 분진 폭발이 알루미늄 계열에만 붙어 있다
재사용: **`aluminumdust.ts`의 부유 구름 분진 폭발이 그대로 재사용된다.** 물에 젖으면 반죽, 구우면 빵도 저비용
리스크: 거의 없음. 알루미늄 분진과 위력을 차등할 것(밀가루가 약해야 한다) | 신규 1종 |
| **점토** Clay | P | 물을 먹으면 뭉치고, 900°에 구우면 벽돌이 된다.
*재미: 흙 → 점토 → 벽돌 → 가마 → 더 많은 벽돌이라는 자급 루프* | 비어있음: 소성이 유리 하나뿐. 흙·진흙을 구워도 아무 일이 없다
재사용: Mud/Dirt의 수분 로직, Cement의 수화 패턴, `brickPattern` 렌더 태그
리스크: Mud와 시각·거동이 겹치지 않게 색과 점도를 벌릴 것 | 신규 1종
(벽돌과 세트) |
| **활성탄** Activated Carbon | P | 지나가는 기체·오염물을 붙잡아 지운다. 포화되면 멈춘다.
*재미: 연막과 독가스를 막는 방독 필터를 손으로 지을 수 있다* | 비어있음: 기체를 **제거**하는 수단이 Void와 소산(dissipate)뿐이라 방어 놀이가 없다
재사용: `porous` + Mesh의 필터 규약, 포화도는 `aux` 카운터 8비트
리스크: 무한 흡수면 Void와 같아짐 — 반드시 포화 상한을 둘 것 | 신규 1종 |
| **소다회** Soda Ash | P | 모래에 섞으면 유리 융점을 낮춘다(1250° → 900°대).
*재미: 유리를 "더 쉽게" 만드는 조제 — 레시피 최적화의 맛* | 비어있음: 유리 제조가 단일 온도 문턱 하나라 조정 여지가 없다
재사용: Limestone의 플럭스 패턴(수율·문턱을 바꾸는 이웃 판정)을 그대로 복제
리스크: 임팩트가 작다 — 석회 라운드의 곁다리로 붙일 것 | 신규 1종 |

### 💧 액체 liquid

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **표백제** Bleach | L | 생물을 죽이고 색을 뺀다. **산과 만나면 염소 가스를 뿜는다.**
*재미: 섞으면 안 되는 두 병 — "절대 하지 마세요"를 안전하게 해 보는 것 자체가 재미* | 비어있음: `chlorine.ts` 주석이 **직접 이름을 대며** 미구현을 자인하고 있다. Chlorine은 제조법이 없어 팔레트에서 꺼내는 것뿐
재사용: 선언형 반응 1줄(`with: ACID`, `produce: CHLORINE`), Chlorine의 살생 목록
리스크: 매우 낮다. **이 문서 전체에서 가장 명확하게 "이미 예고된" 물질** | 신규 1종
반응 1줄 |
| **질산** Nitric Acid | L | 강산이자 강한 산화제. 유기물에 부으면 니트로 화합물이 된다.
*재미: 지금은 팔레트에서 꺼낼 수밖에 없는 니트로·질산암모늄을 **직접 제조**하게 된다* | 비어있음: 폭발 16종(비노출 포함 22종) 중 제조 가능한 것은 흑색화약·테르밋·섬광화약·암모날 4종뿐. 니트로계는 전부 직접 배치
재사용: Acid의 부식 패스와 증기 상전이 구조를 그대로 복제, 제조 레시피는 기존 2체 컨벤션(p=0.25, `tempMax:150`)
리스크: 산이 2종이 되면 부식 규칙이 헷갈린다 — **질산은 "산화·질화" 전용**으로 성격을 벌릴 것 | 신규 1~2종 |
| **아세톤** Acetone | L | 초휘발성 유기용매. **폴리스티렌을 녹인다.** 매우 잘 탄다.
*재미: 플라스틱 구조물이 액체 한 방울에 주저앉는 장면* | 비어있음: 유기용매가 알코올 하나. "녹인다"가 산의 부식 하나로만 표현됨
재사용: Alcohol의 증발·연소 코드, 선언형 반응 `otherBecomes`
리스크: 폴리스티렌이 선행 필요 — 고분자 2차 사슬과 세트로 볼 것 | 신규 1종 |
| **식용유 / 유지** Cooking Oil | L | 물과 안 섞이고 뜬다. 200°대에 발화하고, **물을 부으면 튀며 확산된다.** 염기와 만나면 비누가 된다.
*재미: 기름 화재에 물을 붓는 최악의 대응을 재현할 수 있다* | 비어있음: **비누화 원료가 없어 Soap을 만들 수 없다.** 유류화재 예외 처리는 `combustion.ts`에 이미 있는데 정작 "식용유"가 없다
재사용: `petroleum` 태그의 유류화재 경로, `combustible` 스펙, 소석회/NaOH와의 반응 1줄
리스크: 원유·경유와 시각적으로 구분 필요(투명한 노랑) | 신규 1종 |
| **잿물** Lye Water | L | NaOH 용액. 알루미늄을 녹여 수소를 내고 유지를 비누로 바꾼다.
*재미: 산이 아닌데 금속을 녹인다 — "녹이는 건 산"이라는 고정관념을 깬다* | 비어있음: 액체 염기 0종
재사용: Saltwater의 용해·전도 구조, `acidHydrogen`의 염기판
리스크: NaOH 가루와 둘 다 넣을 필요는 없을 수 있다 — 소금/소금물 관계를 그대로 따를 것 | 신규 1종 |
| **자성 유체** Ferrofluid | L | 전자석에 끌려가 뾰족한 가시 모양으로 서는 검은 액체.
*재미: **자석 놀이의 시각적 절정** — 지금은 철가루가 붙는 것뿐인데, 흐르면서 끌려오는 액체는 그림이 완전히 다르다* | 비어있음: `magnetic` 4종이 전부 가루. 자성 액체 0종
재사용: **`magnetic` 태그 한 줄이면 전자석이 알아서 끌어당긴다**(태그를 읽는 곳이 `electromagnet.ts` 한 파일뿐)
리스크: 액체가 자기장에 끌리면 밀도 변위와 충돌할 수 있음 — `viscosity`를 높게 두고 실측 필요 | 신규 1종 |
| **암모니아수** Ammonia Water | L | 약염기 액체. 데우면 자극성 암모니아 기체를 내놓는다.
*재미: 액체 ↔ 기체를 오가는 염기 — 기체 염기라는 새 카드* | 비어있음: 염기 0종, 기체 염기 개념 없음
재사용: Acid ↔ Acid Vapor 상전이 구조의 대칭판
리스크: 염기 후보가 이미 셋(소석회·NaOH·암모니아) — **하나만 고를 것**. 우선순위는 소석회 | 신규 1~2종 |

### 💨 기체 gas

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **질소** Nitrogen | G | 아무 반응도 안 하는 무거운 불활성 기체. 산소를 밀어내 **불을 끈다.**
*재미: 방을 질소로 채우면 아무것도 타지 않는다 — 소화가 물 말고도 가능해진다* | 비어있음: 액체 질소가 끓으면 **EMPTY가 된다** — 게임에 질소 기체라는 상태가 없다. 불활성 기체가 헬륨 하나
재사용: Helium/CO₂의 순수 데이터 구조, `liquidnitrogen.ts`의 끓음 지점 한 줄 교체
리스크: 거의 없음. **부채 상환에 가깝다** | 신규 1종 |
| **암모니아** Ammonia | G | 가볍고 자극적인 염기 기체. 산 증기와 만나면 **흰 연기**(염화암모늄)가 된다.
*재미: 두 개의 투명한 기체가 만나 흰 연기 기둥을 만든다 — 순수한 볼거리* | 비어있음: 반응성 기체 0종. 기체끼리 반응하는 사례가 H₂+O₂ 하나뿐
재사용: 선언형 반응 1줄로 기체 2종 → 가루/연기
리스크: 염기 후보 중복(위 참조) | 신규 1~2종 |
| **이산화황** SO₂ | G | 황이 탈 때 나오는 매캐한 기체. **물에 녹으면 산이 된다(산성비).**
*재미: 황을 태웠더니 위에 있던 물웅덩이가 산으로 변해 바닥을 갉아먹기 시작한다* | 비어있음: 황이 "타는 가루"일 뿐 연소 산물이 없다. 산을 **만드는** 경로가 0건
재사용: `Combustible` 스펙에 산물 지정, CO₂의 무거운 기체 거동
리스크: 산이 쉽게 생기면 구조물이 쉽게 무너짐 — 변환 확률을 아주 낮게 | 신규 1종 |
| **일산화탄소** CO | G | 산소가 모자란 곳에서 타면 나온다. **무색인데 잘 타고, 모이면 터진다.**
*재미: 밀폐된 곳에서 불을 피우면 보이지 않는 폭탄이 쌓인다 — 환기라는 개념이 생긴다* | 비어있음: 연소가 "산소 있으면 세게, 없으면 약하게"뿐이고 **불완전 연소 산물이 없다**
재사용: `combustion.ts`의 산소 이웃 카운트(이미 `OXY_BOOST`로 세고 있다)를 뒤집어 읽으면 됨. 폭연은 `deflagrate.ts` 공유
리스크: 무색이라 안 보이는 것이 재미의 핵심인데 동시에 불친절 — 돋보기로만 확인되게 할 것 | 신규 1종 |
| **아세틸렌** Acetylene | G | 산소와 함께 태우면 3000° 넘는 화염이 나온다.
*재미: 철을 자르는 절단 토치* | 비어있음: 3000°대 열원이 테르밋(2800°) 하나뿐이고 그건 일회성 가루다
재사용: `Combustible.burnTemp` + 산소 강제통풍(이미 1800° 상한이 있으므로 상한 예외가 필요)
리스크: `OXY_MAX_PIN` 1800° 상한을 건드려야 해서 **연소 계통 전체에 영향** — 후순위 | 신규 1종 |

### 🔥 불·열 fire

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **숯** Charcoal | S | 나무를 **공기 없이** 구우면 나온다. 연기 없이 오래, 고온으로 탄다.
*재미: 나무를 그냥 태우면 재가 되고, 가둬서 구우면 더 좋은 연료가 된다 — 조건에 따라 결과가 갈리는 맛* | 비어있음: 열분해(건류)가 설탕 탄화 하나뿐. 나무의 후속 가공이 없다
재사용: `sugar.ts`의 탄화 패턴(온도 창 + 불꽃 없음), Coal의 연소 스펙
리스크: "공기 없이"를 판정하려면 이웃 산소/빈칸 카운트가 필요 — Coal Powder의 차폐 판정과 같은 형태 | 신규 1종 |
| **코크스** Coke | P/S | 석탄을 건류해 만든 고순도 탄소 연료. 제련 수율과 온도가 석탄보다 높다.
*재미: 제련을 잘하려면 연료부터 가공해야 한다는 한 단계 깊이* | 비어있음: 제련 환원제가 석탄가루 하나. 수율 조정 수단이 석회석 플럭스뿐
재사용: `moltenironore.ts`의 환원 패스에 분기 1줄, `coalpowder.ts`의 차폐 로직
리스크: 석탄과 역할이 겹침 — **강철 제련의 필수 조건**으로 묶으면 존재 이유가 생긴다 | 신규 1종 |
| **마그네슘** Magnesium | P/S | 눈부신 백색으로 탄다. **물로 못 끄고**(오히려 수소를 낸다) CO₂ 속에서도 탄다.
*재미: 소화기가 통하지 않는 불 — 지금까지 배운 소화법이 전부 실패한다* | 비어있음: 모든 불이 물이나 저온으로 꺼진다. "끌 수 없는 불"이 없다
재사용: 알루미늄 계열의 연소/융용 갈림 구조, `acidHydrogen` 태그, 불꽃놀이 색 인덱스(1-8 승계)
리스크: 알루미늄과 매우 유사 — **차별점은 오직 "물에 반응"** 이므로 그 하나를 선명하게 | 신규 1종 |
| **파라핀 왁스** Paraffin | S/L | 60°에 녹아 흐르고, 심지가 있으면 천천히 탄다.
*재미: 초 — 녹은 것이 흘러내려 고이고 다시 굳는 조형 놀이* | 비어있음: 융점이 낮은 가연성 고체가 없다(대부분 1000° 이상)
재사용: Resin ↔ Amber의 경화/재용융 이력, `viscosity`
리스크: 임팩트가 작다 — 석유 분획의 최중질 산물로 붙이면 무료에 가깝다 | 신규 1~2종 |

### ⚒️ 제련 smelt

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **구리광석 + 용융 구리** Copper Ore | P + L | 철과 별개의 제련 라인. 철보다 낮은 온도(1085°)에서 녹는다.
*재미: 제련로 하나로 두 금속을 다루게 되고, 온도 조절이 곧 선택이 된다* | 비어있음: 제련 5종이 전부 철 라인. **금속이 하나뿐인 제련 시스템**
재사용: `ironore.ts`/`moltenironore.ts`/`molteniron.ts` 3종의 구조를 그대로 복제 — 신규 코드가 거의 없다
리스크: 광석 3종(철·구리)이 시각적으로 구분돼야 함 | 신규 2~3종 |
| **슬래그 시멘트** Slag Cement | P | Slag를 생석회와 함께 갈면 Cement가 된다.
*재미: **제련의 쓰레기가 건축 재료가 된다** — 폐기물 재활용이라는 새 동사* | 비어있음: Slag는 완전한 막다른 길이고, Cement는 만들 수 없는 물질이다
재사용: 2체 레시피 컨벤션(p=0.25, `tempMax:150`, 1:1) 그대로. **신규 물질 없이 반응 1줄로도 가능**
리스크: 없음 | 신규 0~1종 |
| **도가니(오브젝트)** Crucible | — | 쇳물을 담아 옮기는 그릇. → 아래 오브젝트 절 참조 | 비어있음: 쇳물을 옮길 수단이 펌프뿐
재사용: 드럼통 캡슐 물리
리스크: **오브젝트 세이브 부채 선행** | 오브젝트 1종 |

### 🛢️ 석유 oil

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **벤젠 / 톨루엔** Benzene | L | 방향족 분획. 강력한 용매이자 연료이고, **폴리스티렌의 원료**다.
*재미: 증류탑에서 뽑은 것이 그대로 플라스틱 원료가 되는 세로 연결* | 비어있음: 석유 라인이 "태우는 것 + 크래킹" 둘로 끝나고 방향족 분기가 없다
재사용: `oil.ts`의 온도 밴드 boil-off에 밴드 1개 추가, `petroleumvapor.ts`의 aux 태그 응축
리스크: 온도 사다리가 이미 촘촘함 — 340~400° 빈 구간을 쓸 것 | 신규 1종 |
| **황화수소 / 사워 크루드** Sour Crude | G | 유황이 섞인 원유. 정제하면 악취 기체가 나오고 태우면 SO₂가 된다.
*재미: "좋은 원유"와 "나쁜 원유"가 생겨 정제 난이도가 갈린다* | 비어있음: 원유가 한 종류라 정제에 품질 개념이 없다
재사용: 분별증류 밴드, SO₂(위 gas 후보)
리스크: SO₂ 선행 필요. 두 개를 세트로 볼 것 | 신규 1~2종 |
| **아스팔트 포장** Pavement | S | 아스팔트를 고온으로 다지면 굳는 도로면. 뜨거워도 안 흐른다.
*재미: 아스팔트가 처음으로 "쓸모"를 갖는다* | 비어있음: Asphalt는 코드 주석 그대로 "inert"이고 소비처가 0
재사용: Cement → Concrete 수화 패턴 복제
리스크: 임팩트가 작다 — 곁다리로만 | 신규 1종 |

### 🧬 고분자 polymer

정보: 여기가 가장 얇다
현재 3종(에틸렌·촉매·폴리에틸렌)으로 사슬이 **하나뿐**이다. 그런데 크래킹 → 중합 인프라(`petroleumvapor.ts` · `ethylene.ts` · `polyethylene.ts`)가 이미 완성돼 있어, **두 번째 사슬은 첫 번째의 복제에 가깝다.** 신규 물질 대비 회수가 크다.


| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **프로필렌 → 폴리프로필렌** PP | G → P | 두 번째 중합 사슬. 폴리에틸렌보다 내열이 높다(150° 이상 견딤).
*재미: 같은 원료에서 다른 플라스틱이 나오고, 어느 걸 만들지는 온도로 갈린다* | 비어있음: 중합이 한 사슬뿐이라 "무엇을 만들까"의 선택이 없다
재사용: `ethylene.ts`의 중합 온도창·발열 자기정지·사슬 세대 제한을 그대로
리스크: 폴리에틸렌과 구분이 안 되면 무의미 — 내열 차이를 눈에 보이게 | 신규 2종 |
| **스티렌 → 폴리스티렌** PS | L → S | 가볍고 부서지기 쉬운 플라스틱. **아세톤에 녹고**, 태우면 검은 그을음이 난다.
*재미: 애써 만든 구조물이 용매 한 방울에 무너진다 — 파괴 수단이 하나 늘어난다* | 비어있음: 플라스틱을 **없애는** 수단이 연소뿐
재사용: 중합 라인 복제 + 아세톤 반응 1줄, Soap의 용해 반응 패턴
리스크: 아세톤 선행 필요 | 신규 2종 |
| **염화비닐 → PVC** | G → S | 염소를 품은 플라스틱. **태우면 염소를 뿜는다.**
*재미: 불을 지르면 독가스가 나온다 — 플라스틱 화재의 진짜 위험* | 비어있음: **Chlorine의 두 번째 소비처이자 두 번째 제조처.** 지금 염소는 만들 수도 쓸 수도 없다
재사용: 중합 라인 복제, `Combustible` 스펙에 산물 지정
리스크: 표백제(염소 제조)와 세트로 설계할 것 | 신규 2종 |
| **용융 플라스틱** Molten Plastic | L | 폴리에틸렌을 200~300°로 데우면 녹아 흐르고, 식으면 굳는다.
*재미: 플라스틱을 녹여 틀에 부어 다른 모양으로 만든다 — 재활용 루프* | 비어있음: 폴리에틸렌이 중합 라인의 **종점**이고 그 뒤가 없다
재사용: Molten Aluminum/Molten Glass의 이력(hysteresis) 상전이 구조
리스크: 낮음. 온도 사다리 200~300°은 이미 붐비므로 250° 근처를 피할 것 | 신규 1종 |

### 💥 폭발 explosive

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **질산 계열 제조 라인** | L | 질산 + 유기물(설탕·톱밥·글리세린)로 니트로계 폭약을 **만들 수 있게** 한다.
*재미: 폭약을 팔레트에서 꺼내는 게 아니라 공장을 지어 생산한다* | 비어있음: 폭발 16종(비노출 포함 22종) 중 제조 가능한 것이 4종뿐. 니트로·TNT·C4는 전부 직접 배치
재사용: 기존 2체 레시피 컨벤션 3건(테르밋·섬광화약·암모날)과 동일한 게이트(p=0.25, `tempMax:150`)
리스크: 제조 난이도가 낮으면 "그냥 꺼내 쓰기"를 못 이긴다 — 원료 확보를 길게 | 신규 1~2종 |
| **니트로셀룰로스** Guncotton | S | 톱밥/식물 + 질산. 연기 없이 순간에 타 사라진다.
*재미: 재도 연기도 안 남기고 사라지는 불 — 마술 같은 시각 효과* | 비어있음: 폭연(deflagration)이 기체·분진 전용이고 고체 무연 연소가 없다
재사용: `deflagrate.ts`, `combustion.ts` 스펙
리스크: 질산 선행 | 신규 1종 |
| **마그네슘 섬광 별** | — | 불꽃놀이 별에 백색 색인 추가.
*재미: 불꽃놀이의 은백색 섬광이 실제로 그것* | 비어있음: `docs/MATERIAL-IDEAS.md` 1-8의 승계 항목
재사용: `fireworkstar.ts`가 **이미 `aux`로 색 인덱스를 나른다** — 색 하나 추가
리스크: 임팩트가 작다. 마그네슘 라운드의 곁다리로만 | 신규 0종 |

### ❄️ 냉각 cooling

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **액체 헬륨** Liquid Helium | L | −269°. 게임에서 가장 차가운 것. 조금만 따뜻해도 즉시 끓어 날아간다.
*재미: 유지하기가 극도로 어려운 자원 — 에어로젤로 감싸고 히트파이프를 피해야 한다* | 비어있음: 최저온이 드라이아이스 −78°/LN₂. 극저온 대역이 비어 있다
재사용: **Helium(완전 고립 물질)에 파트너를 주는 유일한 후보.** Aerogel(단열)과 Heatpipe(전도)가 처음으로 전략적 의미를 얻는다
리스크: 관리 난이도가 재미의 핵심이자 짜증의 원인 — 끓는 속도 튜닝이 관건 | 신규 1종 |
| **액체 산소** LOX | L | −183° 냉매인데 **동시에 강력한 산화제**다. 연료에 닿으면 폭발적으로 탄다.
*재미: 불을 끄려고 부었는데 더 크게 탄다 — 배신하는 냉각재* | 비어있음: 냉각 5종이 전부 "안전한 소화 수단". 위험한 냉각재가 없다
재사용: Oxygen의 강제통풍 로직(`OXY_BOOST`)을 액체 상태로, LN₂의 끓음 구조
리스크: 유저가 실수로 대형 폭발을 일으키기 쉬움 — 그게 재미이기도 하다 | 신규 1종 |
| **한제(얼음 + 소금)** | — | 얼음에 소금을 뿌리면 −20°까지 내려간다. 흡열 반응.
*재미: 두 평범한 물질을 섞어 새 저온을 만든다* | 비어있음: 저온을 **만드는** 반응이 질산암모늄 냉각팩 하나
재사용: `ammoniumnitrate.ts`의 흡열 반응 테이블(`heat: -18`)을 그대로 복제. **신규 물질 0종**
리스크: 없음. 반응 1줄 | 신규 0종 |
| **냉매 / 열전소자** Refrigerant | L/S | 펌프로 순환시키면 한쪽을 식히고 다른 쪽을 데운다.
*재미: 냉장고를 짓는다 — 소모품이 아니라 계속 도는 장치* | 비어있음: 냉각이 전부 **소모성 저온원**이고 순환식 냉각이 0건
재사용: Pump(양수), Heatpipe(전도), `directPulse` 장치 규약
리스크: 열역학적으로 성립시키려면 열 이동 총량 관리가 필요 — 엔진 작업에 가깝다. **열전소자(Peltier) 쪽이 훨씬 싸다** | 신규 1~2종 |

### ⚡ 전기 electric

팁: 이 카테고리의 공백이 가장 크고, 동시에 가장 싸다
전기 11종은 전원 4 + 배선 2 + **액추에이터 5**로 끝난다. 센서도 논리도 타이머도 없어 "전원 → 배선 → 장치" 단방향밖에 없다. 그런데 새 장치의 추가 비용은 3단계로 정해져 있다 — ① `conductive`를 **안** 달고 ② `directPulse` 훅을 등록하고 ③ `floodDeviceBody`를 호출한다. **발생원 쪽은 한 줄도 안 고친다.** 게다가 팬·레이저·펌프·전자석이 이미 `aux`에 카운트다운을 쓰고 있어, 타이머는 **그 카운트다운을 출력으로 되돌리는 것**뿐이다.


| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **온도 센서** Thermostat | S | 자기 온도가 임계를 넘으면(또는 밑돌면) 펄스를 낸다.
*재미: **자동 냉각 루프**가 성립한다 — 원자로가 과열되면 스스로 펌프가 돈다* | 비어있음: 조건 판단 소자 0종. 지금은 유저가 손으로 스파크 브러시를 눌러야 한다
재사용: `sim.getTemp` + `directPulse` 대신 자기 `update`에서 펄스 방출. 임계값은 `aux`에 저장
리스크: 임계값을 어떻게 설정할지(UI)가 유일한 난제 — 배치 드래그로 방향을 정하는 팬/레이저 선례를 따를 것 | 신규 1종 |
| **인버터(NOT)** | S | 전기가 **안 들어올 때** 펄스를 낸다.
*재미: 인버터 두 개를 이으면 스스로 깜빡이는 발진기가 된다 — 유저가 클럭을 발명하게 된다* | 비어있음: 논리 소자 0종
재사용: 배터리의 주기 펄스 구조 + `directPulse`로 억제
리스크: 발진 주기가 틱과 맞물려 성능에 영향 — 최소 주기 하한 필요 | 신규 1종 |
| **지연 소자** Delay | S | 펄스를 받고 N틱 뒤에 다시 낸다.
*재미: 순차 폭파 — 다이너마이트를 시간차로 터뜨리는 연출* | 비어있음: 타이머가 다이너마이트 도화선(오브젝트 전용) 하나
재사용: **팬/레이저/펌프의 `POWERED_TICKS` 카운트다운을 그대로 쓰되 만료 시 펄스를 낸다**
리스크: 매우 낮음 | 신규 1종 |
| **물질 감지기** Detector | S | 지정한 물질이 닿으면 펄스를 낸다.
*재미: 물이 차오르면 자동으로 배수 펌프가 돈다 — 유저가 자동화 공장을 짓는다* | 비어있음: 환경을 읽는 소자 0종
재사용: `sim.get` 이웃 스캔 + Clone의 "첫 접촉 물질 id를 `aux`에 낙점" 패턴을 **그대로 복사**
리스크: 낮음. Clone의 UX 선례가 있어 학습 비용도 낮다 | 신규 1종 |
| **스위치 / 버튼** Switch | S | 클릭하면 켜지고 꺼진다. 켜져 있는 동안 펄스를 통과시킨다.
*재미: 회로를 만들고 **손으로 켤 수 있게** 된다 — 지금은 배터리를 놓거나 지우는 게 유일한 조작* | 비어있음: 인월드 조작 장치 0종
재사용: `directPulse` + `aux` 상태 비트. 클릭 처리는 `PointerPainter`에 분기 1개
리스크: 브러시 도구와 클릭이 충돌 — 전용 도구가 필요할 수 있다 | 신규 1종 |
| **램프** Lamp | S | 통전되면 빛(약한 Heat Ray)과 열을 낸다.
*재미: 태양광 패널을 램프로 켤 수 있게 되고, **빛으로 조류를 키우는 것**도 가능해진다* | 비어있음: 빛의 발생원이 Heat Ray/Nuclear Ray뿐이고 유저가 만들 수 없다. Solar Panel의 `lightPulse` 훅은 **정의만 되어 있고 광원이 하나뿐**
재사용: `laser.ts`의 빔 발사 구조를 약하게, `lightPulse` 규약 그대로
리스크: 낮음. 광합성 후보(life)와 직결된다 | 신규 1종 |
| **전극** Electrode | S | 용액에 담근 채 통전하면 그 용액에서 **매질별로 다른 산물**을 뽑는다.
*재미: 소금물에서 염소와 잿물이 나온다 — 전기로 화학을 하는 첫 장치* | 비어있음: 전기분해가 물·염수·산 모두 **동일하게 H₂+O₂**를 낸다. 실제 염수 전기분해 산물(Chlorine + NaOH)이 없다
재사용: `spark.ts`의 `electrolyse`가 **이미 `conductorId`를 구분하고 있다** — 분기 한 줄
리스크: 흑연(고체 후보)과 세트. 매우 낮은 비용 대비 화학 축이 크게 열린다 | 신규 1종 |
| **열전소자** Peltier | S | 통전 시 한쪽 면은 뜨거워지고 반대 면은 차가워진다.
*재미: 전기만으로 얼음을 만든다 — 소모품 없는 냉각* | 비어있음: 냉각이 전부 소모성. 전기로 온도를 **내리는** 수단 0건
재사용: Nichrome의 줄열 적립 구조를 부호만 뒤집어서, `directPulse` 장치 규약
리스크: 무한 냉각은 열 놀이를 망가뜨림 — 반드시 반대 면 발열과 짝을 이룰 것 | 신규 1종 |
| **축전기** Capacitor | S | 펄스를 여러 틱 모았다가 한 번에 강하게 방출한다.
*재미: 약한 전원으로도 먼 곳까지 도달하는 강펄스를 만든다* | 비어있음: 펄스 강도(0~255, `aux` 상위 바이트)가 **소스에서만 정해지고 중간에서 바뀌지 않는다**
재사용: 스파크의 강도 바이트를 직접 쓰기
리스크: 강도 상한을 넘기면 도체 클래스 패킹이 깨짐 — `test:electricity`가 지켜 준다 | 신규 1종 |

### 🌱 생명 life

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **조류** Algae | S/L | 물속에서 번지고, **빛을 받으면 산소를 낸다.** CO₂를 소비한다.
*재미: **게임 최초의 광합성** — 밀폐 수조에 조류와 램프를 넣으면 산소가 차오른다* | 비어있음: 광합성 0건. `plant.ts`는 CO₂도 O₂도 참조하지 않는다. CO₂는 **소비처가 자연 소산뿐**이라 탄소 순환이 반쪽
재사용: Coral의 성장 모델(소금물 소비), `lightPulse` 훅(램프/Heat Ray가 빛을 준다), `byproduct: OXYGEN`
리스크: 산소가 무한 생산되면 연소 밸런스가 무너짐 — CO₂ 소비를 필수 조건으로 걸 것 | 신규 1종 |
| **이끼** Moss | S | 습한 돌·흙 표면을 아주 천천히 덮는다. 물이 없으면 멈춘다.
*재미: 방치한 구조물이 시간이 지나면 초록으로 덮인다 — 세계가 늙는다* | 비어있음: 성장형 생명이 전부 위로 뻗는다(Plant·Coral). 표면을 기는 성장이 없다
재사용: `crawler.ts`의 벽타기 뼈대 + Coral의 저확률 성장
리스크: 성능 — 넓게 퍼지는 생명은 활성 타일을 계속 깨운다. 성장률을 아주 낮게 | 신규 1종 |
| **곰팡이 / 부패균** Mold | S | 젖은 유기물(나무·설탕·꿀·식물)에 번지고, 다 먹으면 **흙으로 되돌린다.**
*재미: 죽은 것이 사라지지 않고 썩어서 땅이 된다 — 순환이 닫힌다* | 비어있음: **부패 0건.** 유기물의 종점이 연소(→재)뿐이고 사체 분해 경로가 없다
재사용: Virus의 감염 확산 모델(대상 목록을 `combustible`로 잡는 방식) + Dirt 산출
리스크: Virus와 확산 방식이 겹침 — **Virus는 즉시·공격적, 곰팡이는 느리고 습기 필요**로 성격을 벌릴 것 | 신규 1종 |
| **버섯** Mushroom | S | 썩은 나무·곰팡이 자리에서 결실한다. 밟히거나 타면 포자를 뿌린다.
*재미: 곰팡이를 방치했더니 뭔가 자라났다는 발견의 순간* | 비어있음: 결실(fruiting) 개념이 Seed 하나
재사용: `seed.ts`의 발아 진행도(`aux` + `auxPalette` 색 램프) 구조 그대로
리스크: 곰팡이 선행 필요. 세트로 | 신규 1종 |
| **물고기** Fish | S | 물속을 헤엄치고 조류를 먹는다. 물 밖·오염된 물에서는 죽는다.
*재미: **수조를 꾸미는 이유가 생긴다.** 지금 물은 재료일 뿐 서식지가 아니다* | 비어있음: **동물성 생물 0종.** 헤엄치는 것이 하나도 없다
재사용: `crawler.ts`의 이동 정책(액체 `'avoid'`를 뒤집어 `'require'`), `eatAndReproduce`의 FOOD 배열
리스크: 액체 안에서의 이동은 크롤러가 안 다뤄 본 영역 — 새 이동 정책 1개가 필요 | 신규 1종 |
| **애벌레(초식 벌레)** Grub | S | Plant를 먹고 번식한다. 먹이가 끊기면 굶어 죽는다.
*재미: 정성껏 키운 정원이 벌레에게 먹힌다 — 식물 생태에 처음으로 소비자가 붙는다* | 비어있음: 어떤 크롤러도 다른 생명을 먹이로 지정하지 않는다. 포식 사슬 0
재사용: **`eatAndReproduce(x,y,sim,ID,FOOD,chance)`의 `FOOD` 배열에 Plant id를 넣는 것이 전부.** 사망 잔해는 `radiationDeath`/`blastDeathId` 태그로 공짜
리스크: 흰개미와 거동이 같아 보일 수 있음 — 먹이와 색으로만 구분되게 | 신규 1종 |
| **개미** Ant | S | 설탕·꿀을 향해 이동하고 줄을 지어 나른다.
*재미: 목적지를 향해 가는 최초의 생물 — 흰개미·나노봇은 무작정 기어다닐 뿐이다* | 비어있음: 유인(attraction) 개념이 자성 말고는 없다
재사용: 크롤러 뼈대 + 전자석의 측지 스윕과 유사한 근거리 탐색
리스크: 경로 탐색은 비싸다 — 반경 3~4칸 근시안으로 제한 | 신규 1종 |

노트: 새 생명 물질에는 조용히 새는 자리가 하나 더 있다
염소는 방사선처럼 태그로 생명을 판정하지 않고 **`chlorine.ts` 안의 하드코딩 id 목록**으로 죽인다. 새 생명 물질을 추가하면 이 목록에도 넣어야 하고, 빠뜨리면 "염소가 안 죽이는 생물"이 조용히 생긴다. `engine/radiation.ts`의 주석이 이 불일치를 스스로 인정하고 있다. **장기적으로는 `Material.living` 태그로 일반화하는 것이 옳다.**


### ☢️ 방사성 radioactive

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **유리화 폐기물** Vitrified Waste | S | 핵폐기물을 용융 유리와 섞어 굳힌다. 선량이 크게 줄고 물에 안 녹는다.
*재미: 치울 수 없던 것을 처리하는 방법이 생긴다 — 뒷정리도 놀이가 된다* | 비어있음: **Nuke Waste는 U238 사이클의 종점이고 되돌릴 경로가 0.** 방사성 5종에 처분 수단이 없다
재사용: 2체 반응 1줄(`with: MOLTEN_GLASS`), `radiation` 선량 값만 낮게
리스크: 없음에 가깝다. **막다른 길 하나를 정확히 막는 후보** | 신규 1종 |
| **우라늄광석** Uranium Ore | P | 방사성 계열의 채굴 시작점. 정련해야 U235가 된다.
*재미: 지금은 팔레트에서 U235를 바로 꺼낸다 — 원자로를 짓기까지의 과정이 통째로 없다* | 비어있음: 방사성 5종 전부 제조 불가, 직접 배치
재사용: `ironore.ts`의 광석 → 용융 → 금속 3단 구조 복제
리스크: 정련 공정을 어디에 붙일지(제련 라인 재사용 vs 전용) 결정 필요 | 신규 1~2종 |
| **낙진** Fallout | P | 폭발·멜트다운 후 하늘에서 내려 쌓이는 약한 방사성 가루.
*재미: 폭발이 끝난 뒤에도 세계에 흔적이 남는다 — 여파가 있는 폭발* | 비어있음: 핵폭발의 사후 효과가 없다. 터지면 그걸로 끝
재사용: `radiation` 태그 + Ash의 가벼운 가루 거동, `life` 붕괴 태그로 서서히 사라지게
리스크: 정리가 귀찮아지면 짜증 — `life` 붕괴로 반드시 자연 소멸시킬 것 | 신규 1종 |

### ✨ exotic 특수

| 후보 | 상태 | 하는 일 · 왜 재미있는가 | 제안 근거 | 비용 |
|---|---|---|---|---|
| **영구자석** Magnet | S | 전원 없이 항상 자기장을 낸다.
*재미: 전자석은 배선이 필요해 진입 장벽이 있는데, 자석은 그냥 놓으면 된다* | 비어있음: 자기장 발생원이 전자석 하나이고 반드시 통전이 필요하다
재사용: `Grid.magnetFields` 발행 코드를 통전 조건 없이 매 틱 호출
리스크: 항상 켜져 있으면 성능 부담 — 사거리를 짧게 | 신규 1종 |

---

## 오브젝트 후보

위험: 먼저 갚아야 할 부채가 있다
**오브젝트는 세이브·스냅샷 어디에도 직렬화되지 않는다.** `src/state/persistence.ts`에 `objects` 문자열이 한 건도 없고, 스냅샷은 로드할 때 오히려 `liveGrid.objects.length = 0`으로 **지워 버린다**. 즉 드럼통·나무 상자로 지은 구조물은 새로고침 한 번에 사라지고 스냅샷으로 보존할 수도 없다.

**오브젝트를 늘릴수록 이 부채가 커진다.** 새 오브젝트 하나는 "세이브 안 되는 장난감"을 하나 더 만드는 일이다. 아래 후보는 전부 **직렬화 선행**을 전제로 한다. `SimBody`는 평범한 POJO 유니온이라 JSON 직렬화 비용 자체는 낮고, `.psbx.json` 포맷이 이미 존재한다.


| 후보 | 무엇 | 제안 근거 |
|---|---|---|
| **풍선** Balloon | 헬륨을 채우면 뜨고, 뾰족한 것에 닿거나 뜨거워지면 터진다 | 비어있음: Helium이 완전 고립 물질이고 부력 놀이의 대상이 없다
재사용: 고무공(`ball`) 물리 + 나무 상자의 파괴 분기
리스크: 부력을 기체 밀도와 연동하려면 `stepObjects`에 한 줄 |
| **도가니** Crucible | 쇳물·용암을 담아 옮기고 기울여 붓는다 | 비어있음: 액체를 옮기는 수단이 펌프뿐
재사용: 드럼통 캡슐 물리 + `DrumFill` 유출 구조(이미 empty/oil/acid 3종이 한 바디를 공유)
리스크: 내용물 온도 유지 규칙이 필요 |
| **수레 / 대차** Cart | 컨베이어 위에서 물질을 실어 나른다 | 비어있음: Conveyor가 물질과 아무 반응이 없다
재사용: 캡슐 물리 + Conveyor의 방향 `aux`
리스크: 바퀴 회전은 캡슐로 근사 가능(나무 상자가 `halfLength: 0` 디스크로 처리된 선례) |
| **유리병** Bottle | 액체를 담고, 깨지면 내용물과 깨진 유리를 쏟는다 | 비어있음: 깨지는 용기가 없다
재사용: 드럼통 유출 + Glass의 `shatterId`
리스크: 낮음 |
| **프로판 탱크** Propane Tank | 가열하면 부풀다가 대형 폭발(BLEVE) | 비어있음: 오브젝트 폭발이 다이너마이트 하나
재사용: 다이너마이트의 2단 폭발 + 드럼통 융용 카운터
리스크: 낮음 |
| **모터 / 회전축** Motor | 통전 시 회전해 붙은 것을 돌린다 | 비어있음: 바디 간 구속(joint)이 0건 — 충돌만 있다
재사용: `directPulse`
리스크: **구속 솔버는 새 수학이라 비용이 크다.** C급 |

---

## 이미 제안됐거나 보류된 것 — 승계·기각 판정

`docs/MATERIAL-IDEAS.md`에 조사가 끝난 채 보류된 5건이 있다. **재발명 금지**를 위해 각 항목에 판정을 내린다.


| 기존 항목 | 원래 보류 사유 | 판정 | 근거 |
|---|---|---|---|
| **1-6. 알루미나 (Al₂O₃)** | 불활성 흰 가루라 팔레트 한 칸이 아깝고, 잔류물이 물–가루 사이를 막아 수소 반응이 스스로 질식한다 | [조건부 승계] | 보류 사유는 "**할 일이 없다**"였다. 할 일 후보가 둘 생겼다 — **내화재**(도가니·내화벽돌: 2800° 테르밋을 담을 물질이 게임에 하나도 없다)와 **전해 원료**([[Web sandbox 프로젝트/구상/새 화학반응 공정 후보]]의 알루미늄 전해제련). **둘 중 하나만 서도 보류 사유가 소멸한다.** 단 어느 쪽이든 **반응 잔류물로는 넣지 말 것**(질식 문제는 그대로다) — 잔류물은 기존 Sand/Ash로 대체하고, 알루미나는 **별도 제조 경로를 가진 물질**로만 등장시킨다 |
| **1-7. 염소 + 알루미늄** | 실제로는 격렬 발열이지만 Chlorine의 정체성이 "생물 살상 기체"라 결이 다르다 | [조건부 승계] | 보류 사유가 "**염소의 정체성이 좁다**"였는데, 이 문서의 표백제·PVC·전극 후보가 염소를 **제조·소비·부산물 3면으로 확장**한다. 염소가 "화학 물질"이 되면 결의 문제는 자동 해소된다. **염소 라운드에 포함**시키되 단독으로는 넣지 말 것 |
| **1-8. 불꽃놀이 백색 섬광** | `aux` 색 인덱스에 색 하나 추가 수준이나 임팩트가 작다 | [승계 (곁다리)] | 판정 유지 — 단독 가치는 낮다. 다만 **마그네슘 후보가 채택되면 비용이 0에 수렴**한다(마그네슘 = 백색 섬광이 곧 고증). 마그네슘 라운드에 딸려 보낼 것 |
| **2-0. 탄산염 + 산 → CO₂** | `acidHydrogen`이 산물을 수소로 고정하고 있어 `acidProduct`로 일반화해야 한다 | [승계 · A급] | **가장 강하게 승계한다.** Limestone·Coral·Bleached Coral·Concrete·Cement가 전부 석회질인데 산에 조용히 사라지기만 한다. 이 문서의 석회 사슬(생석회·소석회)과 **같은 태그 일반화를 공유**하므로 두 작업을 합치면 인프라 비용이 절반이다. 무거운 CO₂가 바닥에 깔리는 연출은 수소 거품과 정반대라 시각적 대비도 확실하다 |
| **2-1. 수산화나트륨 / 산-염기 계통** | 사실상 산-염기 시스템 전체를 여는 일이라 독립 라운드로 설계할 것 | [승계 · A급] | 판정 유지하되 **범위를 줄여 승계한다.** pH 수치·중화 곡선은 넣지 않는다(발산한다). **"염기 1~2종 + 중화 = 물질 치환"까지만** 구현하고, 진입점은 NaOH가 아니라 **소석회**로 바꾼다 — 석회석이 이미 팔레트에 있어 제조 사슬이 자연스럽게 붙기 때문이다. NaOH는 그 다음 |

노트: 엔진 쪽 선행 과제 3건도 같은 문서에 있다
같은 문서 §3이 기록한 엔진 한계 3건은 이 문서의 여러 후보가 공유하는 병목이다 — ① `ReactionRule.catalystRequired` 부재(현 `catalyst`는 확률 배수라 0×4=0), ② `acidHydrogen`의 산물 고정, ③ `byproduct`가 막힌 셀에서 무력. 상세와 대안은 [[Web sandbox 프로젝트/구상/엔진 개선안]]에서 다룬다.


---

## 새 물질 1종의 실제 비용

후보를 고를 때 "몇 종이냐"보다 중요한 것이 이것이다.


1. 코드 등록
`src/game/materials/<이름>.ts`에 `register({ id, name, phase, color, density, ... })`. 필수 필드는 5개뿐이고 나머지 69개는 옵셔널이다. 그리고 **`materials/index.ts`의 `MATERIALS` 배열에 넣어야 팔레트에 뜬다** — 빠뜨리면 조용히 안 보인다.

2. 한국어명
`src/i18n/materials.ts`의 `materialNamesKo`에 한 줄. **영어 물질명 테이블은 존재하지 않는다** — `register({ name })`이 곧 영어 라벨이다. `materialNamesKo`는 `Record<number, string>` 인덱스 시그니처라 **빠뜨려도 타입체크가 못 잡고 조용히 영문명으로 폴백한다.** CLAUDE.md가 경고하는 "조용한 실패"가 정확히 여기다.

3. 아이콘
두 계층이다. **기본은 생성 타일** — `render/materialSvg.ts`가 캔버스 렌더 규칙을 9×9 셀 패치에 그대로 재생하므로, `colorVary`·`lattice`·`glow` 같은 렌더 태그를 선언하면 **아이콘이 자동으로 따라온다(비용 0).** 그 위를 덮는 것이 손그림으로, 현재 **138종 중 26종**만 손그림이다.

손그림 규격: **24×24 타일 · rect ≤ 100개 · 색 ≤ 5가지 · 기본색 ≥ 60% · 아이콘당 4 KB 상한**, 주석·`id`·`class`·`style`·`opacity`·`stroke`·`fill="none"` 전면 금지. 배선 키는 영문명의 소문자 kebab-case 파일명이라 **키가 어긋나면 모듈에는 실리는데 화면에는 안 나오는 무신호 실패**가 된다 — 그래서 `npm run check:hand-icons`가 **`npm run build`의 두 번째 단계로 물려 있다**(`check:material-ids && check:hand-icons && astro build`).

4. 형질별 부가 등록
`Material` 필드만으로 완결되는 형질(`magnetic`·`laserReflective`·`acidResistant`·`explosionProof`·`radiation`·`radiationDeath`·모든 렌더 태그)은 **다른 파일을 안 건드린다.** 반면 아래는 반드시 다른 파일이 따라온다.

• `conductive` → `materials/spark.ts`의 `CONDUCTOR_IDS`에 **append만**(순서 = 세이브에 패킹되는 클래스 인덱스, 중간 삽입 금지) + `CONDUCTOR_LOSS` 대응 항목. 빠뜨리면 브라우저 로드 시 throw
• `combustible` → `materials/combustion.ts`의 `Combustible` 스펙(`burnChance`/`autoIgniteTemp`/`burnTemp`/`easyDouse`/`ashChance`) + 자기 `update`에서 `tryBurn()` 호출. 빠뜨리면 **조용히 안 탄다**
• `directPulse`(전기 장치) → `engine/deviceBody.ts`의 `floodDeviceBody` + `SimContext`에 `BodyFlood` 필드. 빠뜨리면 틱당 몸체 재플러드로 성능이 무너진다
• 생명 물질 → **`materials/chlorine.ts`의 하드코딩 id 목록**. 빠뜨리면 염소가 안 죽인다

5. 융점·비등점이 필요하면
**선언형 필드가 존재하지 않는다.** `Material.freeze`는 "제자리에서 언다"일 뿐 물질을 바꾸지 않는다. 융해·비등·승화는 전부 각 물질의 `update` 안에서 `sim.getTemp` 문턱 비교로 하드코딩한다(현재 67개 파일이 그렇게 하고 있다). 경계 깜빡임을 막으려면 융점/응고점을 다르게 두는 이력(hysteresis) 패턴을 따를 것(갈륨 30°/28°, 알루미늄 660°/560°).

6. 검증
`npm run check:material-ids`가 id 중복을 잡고 **빌드의 첫 단계로 물려 있다** — 빌드가 자동으로 막아 주는 것은 이것 하나뿐이다. 계통을 건드리면 해당 하네스도 함께 돌린다(`test:electricity` · `test:acidmetal` · `test:radiation` · `test:aluminum` · `test:plastic` 등). 테스트 프레임워크가 없고 `check(name, ok, detail)` 자작 헬퍼 + 종료코드가 전부라 **새 검사를 붙이는 비용이 거의 0**이다 — 러너 하나를 복붙하면 된다.

7. 문서
`docs/MATERIALS.md`(도감 행) + `docs/MATERIAL-SYSTEMS.md`(설계 노트) + Cloudwiki [[Web sandbox 프로젝트/가이드/물질]](도감 표). 소개문서는 하이라이트만.



### 그래서 얼마인가

| 물질 유형 | 코드 지점 | 아이콘 | 검증 | 체감 비용 |
|---|---|---|---|---|
| 순수 데이터 (예: 질소, 헬륨류) | 2곳 | 생성 타일 | id 검사만 | 15% |
| 온도 상전이 + 반응 테이블 (예: 생석회, 표백제) | 3곳 | 생성 타일 | 계통 하네스 1건 | 40% |
| 도체 / 연료 (예: 구리, 숯) | 4~5곳 | 손그림 권장 | 기존 하네스 갱신 | 60% |
| 전기 장치 (예: 센서, 타이머) | 5~6곳 | 손그림 필수 | `test:electricity` 확장 | 75% |
| 생명 (예: 조류, 물고기) | 5곳 + `chlorine.ts` | 손그림 권장 | `test:radiation` 커버리지 + 신규 | 85% |
| 오브젝트 | 8~9곳 | 스프라이트 | 신규 하네스 | 100% |

---

## 우선순위 정리

### A급 — 지금 바로 착수할 값어치가 있는 것

기준: **기존 물질을 여럿 살리거나, 통째로 비어 있는 축을 여는데, 인프라 재사용률이 높은 것.**

| 항목 | 신규 종수 | 무엇을 여는가 | 무엇을 살리는가 |
|---|---:|---|---|
| **석회 사슬** (생석회 · 소석회) | 2 | 산-염기 축 · 소성 공정 · CO₂ 순환 | Limestone · CO₂ · Acid · Soap · Cement · Slag |
| **표백제** | 1 | 염소 화학 (제조 → 소비) | Chlorine (코드가 직접 예고한 물질) |
| **탄산염 + 산 → CO₂** | 0 | `acidProduct` 태그 일반화 | Limestone · Coral · Concrete · Cement |
| **질소 기체** | 1 | 불활성 기체 · 질소 화학의 문 | Liquid N₂ (지금은 끓으면 사라진다) |
| **전기 판단 소자 3종** (센서 · 인버터 · 지연) | 3 | 자동화 — 조건과 시간 | 전기 장치 11종 전부 |
| **전극 + 흑연** | 2 | 매질별 전기분해 (염수 → 염소 + 잿물) | Chlorine · Saltwater · Spark |
| **유리화 폐기물** | 1 | 방사성 폐기물 처분 | Nuke Waste (유일한 종점) |
| **밀가루** | 1 | 생활 물질 · 분진 폭발 확장 | `aluminumdust.ts` 인프라 |
| **초식 벌레** | 1 | 포식 사슬의 첫 고리 | Plant · `crawler.ts` |

### B급 — 재미는 크지만 선행 조건이나 새 계통이 필요한 것

| 항목 | 신규 종수 | 선행 조건 |
|---|---:|---|
| **고분자 2·3차 사슬** (PP · PS · PVC) | 4~6 | 아세톤(PS 용해) · 표백제/염소(PVC) |
| **구리 라인** (광석 · 쇳물 · 금속) | 3 | 제련 구조 복제. 아이콘 3종 |
| **조류 + 광합성** | 1 | 램프(광원) 또는 Heat Ray 재해석 |
| **곰팡이 → 버섯** (부패 순환) | 2 | 세트로만 의미가 있다 |
| **강철 + 코크스** | 2~3 | 제련 라인 심화. `durability` 필드 실사용 개시 |
| **점토 → 벽돌** | 2 | 소성 온도 문턱. `brickPattern` 태그는 이미 있다 |
| **액체 헬륨 + 초전도체** | 2 | 극저온 유지가 짜증이 되지 않게 튜닝 필요 |
| **아세톤 · 식용유 · 비누화** | 2 | 염기 선행(A급 석회 사슬) |
| **질산 → 폭약 제조 라인** | 2~3 | 산이 2종이 되는 설계 결정 |
| **자성 유체** | 1 | `magnetic` 태그 한 줄이지만 액체 + 자기장 물리 실측 필요 |
| **물고기** | 1 | 크롤러에 수중 이동 정책 신규 1개 |
| **일산화탄소 · SO₂** | 2 | 연소 계통에 산물 지정 필드 |

### C급 — 결이 다르거나 비용이 큰 것

| 항목 | 왜 후순위인가 |
|---|---|
| **암모니아 / 암모니아수** | 염기 후보가 이미 셋이라 중복. 소석회·NaOH 다음 |
| **아세틸렌** | `OXY_MAX_PIN` 1800° 상한을 건드려야 해서 연소 계통 전체에 영향 |
| **냉매 순환 루프** | 열 이동 총량 관리가 필요 — 물질 작업이 아니라 엔진 작업. 열전소자로 대체 가능 |
| **영구자석** | 항상 켜진 자기장은 성능 부담. 전자석으로 충분히 놀 수 있다 |
| **수은 화학 (아말감)** | 반응 상대가 0인 물질이지만, 살려도 여는 놀이가 좁다 |
| **모터 / 조인트 오브젝트** | 바디 간 구속 솔버는 새 수학. 비용 최대 |
| **파라핀 · 아스팔트 포장 · 소다회** | 임팩트가 작다. 각각 해당 라운드의 곁다리로만 |
| **개미(유인 이동)** | 근거리 탐색이라도 비용이 있고, 초식 벌레와 재미가 겹친다 |

성공: 한 줄 결론
**id는 110칸 남아 있어 병목이 아니고, 진짜 병목은 아이콘·i18n·docs 3중 갱신이다.** 그러므로 고르는 기준은 "몇 종을 넣느냐"가 아니라 **"이 한 종이 이미 있는 몇 종을 살리느냐"** 여야 한다. 그 기준에서 1순위는 **석회 사슬 2종**이고(기존 6종 회수), 2순위는 **표백제 1종**이며(코드가 이름을 대며 기다리고 있다), 3순위는 **전기 판단 소자 3종**이다(장치 11종 전부의 쓸모를 바꾼다).


---

## 관련 문서

- [[Web sandbox 프로젝트/구상]] — 구상 인덱스(상위)
- [[Web sandbox 프로젝트/구상/새 화학반응 공정 후보]] — 이 문서의 후보들이 참여할 반응·공정
- [[Web sandbox 프로젝트/구상/엔진 개선안]] — `acidProduct` 일반화, `catalystRequired`, 오브젝트 직렬화 등 선행 과제
- [[Web sandbox 프로젝트/구상/엔진 최적화 방안]]
- [[Web sandbox 프로젝트/구상/UI UX 개선안]]
- [[Web sandbox 프로젝트/구상/시작 화면과 도감 페이지]]
- [[Web sandbox 프로젝트/가이드/물질]] — 현재 구현된 물질 도감
- [[Web sandbox 프로젝트]] — 소개문서