Skip to content

Steel: pig iron + blast furnace (fixes #249) - #258

Merged
valzargaming merged 22 commits into
masterfrom
claude/steel-pig-iron
Oct 29, 2026
Merged

valzargaming merged 22 commits into
masterfrom
claude/steel-pig-iron

Conversation

@valzargaming

@valzargaming valzargaming commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

Builds on and supersedes #249 (by @fruitnoodle) — keeps that PR's commits and sprites, then fixes what was broken. #249 is left open for the maintainer to close.

Changelog

  • Added pig iron ingots, smelted from iron ore in a new blast furnace (age 2+, 25 iron to build).
  • Added a steel sheet recipe at the anvil (medieval armor category): 1 pig iron ingot → 1 steel sheet.

Fixes on top of #249

  • Broken YAML in armor.yml, Craft/metallurgy.yml and Recipes/Construction/metallurgy.yml (bad indentation; the blast furnace graph was pasted inside the StoneKiln graph and duplicated with two BlastFurnace construction ids). This is what failed the YAML Linter.
  • Added a PigIron material prototype (lathes consume materials, not stacks) and changed the ingot composition from Iron to PigIron.
  • Added the missing IngotPigIron lathe recipe (RawIron 100 → 1 pig iron) referenced by the blast furnace pack; the furnace now parents OreProcessor like the bloomery/stone kiln.
  • Renamed SheetSheetCiv14 → SheetSteelCiv14 and gave it an icon.
  • Registered pig_iron_one/half/full in ingots.rsi/meta.json.
  • Added materials-pig-iron locale string.

Status

  • Release build: passes. Not tested in-game.
  • YAML Linter: no errors in files this PR touches. CI linter fails on master's Railing.rsi casing (from Gulag map/gamemode #251); locally the linter also reports Gulag prototype/locale errors from master.
  • Focused integration tests: 6 failures, none involving steel/pig iron; NoMaterialArbitrage crashes early (dogbed), so it never checked these recipes.
  • Details and exact commands are in the dated progress comments.

🤖 Generated with Claude Code

Current CI blocker - 2026-10-28

At head cf1c3fd3bc56eb561ac373d064da4f7bb5298ddf, the YAML Linter failed. The log aborts on the case-sensitive /Textures/Civ14/Objects/Railing.rsi reference. The shared repair is available for maintainer review in #259; the independently reviewed stacked repair in #256 and combined verification in #257 retain their own scope. Those passing trees do not turn this head's failed check into a pass. Existing source owners should coordinate the chosen integration route. In-game testing remains unverified; it is not an additional source-fix hold.

Merged baseline reconciliation

Head 7ff96b8693f6e682084af7d60e2cca95bfea7991 merges master 8be6f015dc77dc3f57c5686ad2843e2f7001a97b (#259), preserving all steel feature files unchanged. Seven baseline Gulag contracts and git diff --check passed locally. At this head YAML Linter, packaging, both schemas and CRLF passed. The legacy renderer workflow reported success but logged a swallowed exception for the obsolete Dev map; it does not establish successful rendering. #253 fixes that workflow. No in-game testing was performed in this reconciliation.

Reconciled renderer pipeline

Head 9d22c2f069286bb8906c6ea5caa88c881fde862a merges master ba831b6f8addb16faaaa0b28c2a2467083b07911 (#253) with no changes to the nine steel feature files. Seventeen inherited offline Gulag and renderer contracts and git diff --check passed locally; they do not exercise steel recipes. On this head full YAML Linter, renderer and aggregate, packaging, both schemas and CRLF passed. The renderer verified missing-RSI failure exit 134, then normal exit 0 and an 8064×8064 PNG. These checks do not exercise the steel recipes. Previous CI results above apply to the earlier head.

fruitnoodle and others added 20 commits August 19, 2025 19:23
- Fix broken YAML indentation in armor.yml, metallurgy.yml and the
  construction graph (blast furnace block had been pasted inside the
  StoneKiln graph and duplicated).
- Add the PigIron material prototype so lathes can consume it, and
  give pig iron ingots PigIron composition instead of Iron.
- Add the missing IngotPigIron lathe recipe (RawIron -> pig iron) used
  by the blast furnace pack; parent BlastFurnace on OreProcessor like
  the bloomery and stone kiln.
- Rename SheetSheetCiv14 to SheetSteelCiv14 and give it an icon.
- Register pig_iron_* states in ingots.rsi/meta.json.
- Add materials-pig-iron locale string.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added Untriaged This issue has not been reviewed yet Changes: Sprites Changes: No C# labels Oct 28, 2026
@valzargaming

Copy link
Copy Markdown
Member Author

Progress — 2026-10-28 (step 1–2: diagnose + fix)

Done:

  • Read steel, probably doesent work, ill fix the bugs next pr #249 diff/CI. Original YAML Linter failure (run 17451965012, log expired: HTTP 410) explained by invalid YAML: misindented - type: latheRecipe in armor.yml, BlastFurnace entity missing components: and misindented, latheRecipePack misindented, construction graph pasted inside StoneKiln graph + duplicate BlastFurnace construction ids.
  • Also missing: PigIron material prototype, IngotPigIron latheRecipe, RSI meta states, locale.
  • Branch claude/steel-pig-iron = steel, probably doesent work, ill fix the bugs next pr #249 head (2cc9dca) + merge of master (459f0b9) + fix commit cf1c3fd. Fix applied with a Python rewrite script; full diff in this PR.

Commands: git fetch origin pull/249/head:pr-249; git checkout -b claude/steel-pig-iron pr-249 && git merge origin/master; git push -u origin claude/steel-pig-iron.

Unverified: nothing compiled/linted yet; not tested in-game.
Next: git submodule update --init --recursive && dotnet restore && dotnet build -c Release --no-restore /p:WarningsAsErrors= /m && dotnet run --project Content.YAMLLinter --no-build -c Release, then dotnet test Content.IntegrationTests -c Release --no-build --filter 'FullyQualifiedName~MaterialArbitrage|FullyQualifiedName~Lathe|FullyQualifiedName~Construction'.

@coderabbitai

coderabbitai Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 459f0b9 and cf1c3fd.

Files ignored due to path filters: 4
  • Resources/Textures/Objects/Materials/ingots.rsi/meta.json is excluded by !**/meta.json
  • Resources/Textures/Objects/Materials/ingots.rsi/pig_iron_full.png is excluded by !**/*.png
  • Resources/Textures/Objects/Materials/ingots.rsi/pig_iron_half.png is excluded by !**/*.png
  • Resources/Textures/Objects/Materials/ingots.rsi/pig_iron_one.png is excluded by !**/*.png
Files selected for processing: 5
  • Resources/Locale/en-US/materials/materials.ftl
  • Resources/Prototypes/Civ14/Entities/Objects/Materials/materials_metals.yml
  • Resources/Prototypes/Civ14/Entities/Structures/Craft/armor.yml
  • Resources/Prototypes/Civ14/Entities/Structures/Craft/metallurgy.yml
  • Resources/Prototypes/Civ14/Recipes/Construction/metallurgy.yml

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.

Summary by CodeRabbit

  • New Features
    • Added pig iron as a craftable material, with ingots that can be stacked up to 30.
    • Added the blast furnace, which can be constructed to smelt raw iron into pig iron.
    • Added a recipe for crafting steel sheets from pig iron.

Walkthrough

The changes add pig iron materials and ingots, a constructible blast furnace that processes RawIron into pig iron, and an AnvilArmorMedieval recipe that uses PigIron to produce steel sheets.

Changes

Pig Iron Production Chain

Layer / File(s) Summary
Pig iron material and ingot
Resources/Prototypes/Civ14/Entities/Objects/Materials/materials_metals.yml, Resources/Locale/en-US/materials/materials.ftl
The prototypes define pig iron material, ingot variants, and a stack with a maximum count of 30. The locale adds the “pig iron” label.
Blast furnace construction and production
Resources/Prototypes/Civ14/Recipes/Construction/metallurgy.yml, Resources/Prototypes/Civ14/Entities/Structures/Craft/metallurgy.yml
The construction recipe builds a BlastFurnace using 25 Iron over 15 seconds. The furnace recipe produces one pig iron ingot from 100 RawIron in two seconds.
Steel-sheet crafting
Resources/Prototypes/Civ14/Entities/Structures/Craft/armor.yml
The AnvilArmorMedieval recipe pack gains a recipe that uses 100 PigIron to produce SheetSteel1 in four seconds.

Priority: Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant Player
  participant BlastFurnace
  participant RawIron
  participant IngotPigIron1
  participant SheetSteelCiv14
  participant SheetSteel1
  Player->>BlastFurnace: Build using the BlastFurnace construction recipe
  Player->>BlastFurnace: Provide 100 RawIron
  BlastFurnace->>IngotPigIron1: Produce one pig iron ingot
  Player->>SheetSteelCiv14: Provide 100 PigIron
  SheetSteelCiv14->>SheetSteel1: Produce one steel sheet
Loading
Merge Risk: Minimal · up to cf1c3

The pig-iron production chain is connected across materials, construction, furnace processing, and steel-sheet crafting, with no identified merge-blocking risk.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title clearly summarises the main changes: pig iron production and the blast furnace. It is concise and specific.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The pull request description directly matches the changeset. It describes the pig iron material, blast furnace, steel-sheet recipe, YAML fixes, missing prototypes, locale entry, and validation results…
Full details: Description check

Explanation

The pull request description directly matches the changeset. It describes the pig iron material, blast furnace, steel-sheet recipe, YAML fixes, missing prototypes, locale entry, and validation results.

Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Raw iron enters the furnace bright,
Pig iron forms in two seconds right.
Stack the ingots, thirty to a pile,
Then craft a steel sheet with a medieval smile.
The anvil gets a new recipe—no need to fan the fire.

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 28, 2026 •

Copy link
Copy Markdown

RSI Diff Bot; head commit 9d22c2f merging into ba831b6
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/Objects/Materials/ingots.rsi

State Old New Status
pig_iron_full Added
pig_iron_half Added
pig_iron_one Added

Edit: diff updated after 9d22c2f

@valzargaming

Copy link
Copy Markdown
Member Author

Final handoff — 2026-10-28 (steps 3–4: build, lint, tests)

Local (Windows, worktree, branch claude/steel-pig-iron @ cf1c3fd):

  • git submodule update --init --recursive && dotnet restore → OK
  • dotnet build --configuration Release --no-restore -p:WarningsAsErrors= -m → Build succeeded, 0 errors (Git Bash note: use -m/-p:, not /m /p:. MSYS rewrites them into paths → MSB1008)
  • dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj --no-build -c Release → fails, but 0 errors in files this PR touches. Every error is in Gulag content from master (Gulag map/gamemode #251): missing GulagPrisoner* NpcFactions and JobGulag* PlayTimeTrackers, gulag_commissary locale ids Rbl / Gulag Commissary, and an Item.state field.
  • dotnet test Content.IntegrationTests -c Release --no-build --filter "FullyQualifiedName~MaterialArbitrage|FullyQualifiedName~Lathe|FullyQualifiedName~Construction|FullyQualifiedName~PrototypeSaveTest|FullyQualifiedName~StackTest" → 2 passed, 6 failed. No failure mentions PigIron, BlastFurnace, SheetSteelCiv14 or IngotPigIron:
    • NoMaterialArbitrage: crashes early on KeyNotFoundException 'dogbed', so it did not actually check the new recipes.
    • TestLatheRecipeIngredientsFitLathe: only upstream OreProcessor/OreProcessorIndustrial vs Coal. BlastFurnace overrides staticPacks, and neither it nor the anvil is reported.
    • UninitializedSaveTest: StalkerMoveSpeed/ContainerContainer on unrelated prototypes.
    • Lattice/FloorConstructDeconstruct: No active hand (test harness).

GitHub CI on this PR: everything green except YAML Linter. It crashes with Unable to load RSI '/Textures/Civ14/Objects/Railing.rsi': Walls/barricades.yml (from #251 on master) references Railing.rsi, but the folder is railing.rsi, and Linux is case-sensitive. This is pre-existing on master and not caused by this PR. It masks the rest of the linter output on CI, so the next CI linter run after that fix may show the Gulag errors above.

Unverified: not tested in-game (build blast furnace → smelt ore → pig iron → anvil → steel sheet). Balance is unchanged from #249's intent (100 RawIron → 1 pig iron; 100 PigIron → 1 steel sheet; furnace costs 25 iron, age 2+).

Blockers: none for this PR's content. A green linter needs a separate master fix for Railing.rsi casing and the Gulag prototypes.
Next: maintainer reviews/merges this PR and closes #249. Separately, fix the Railing.rsi → railing.rsi casing and the Gulag linter errors on master.

@valzargaming
valzargaming merged commit a8a774a into master Oct 29, 2026
16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Changes: No C# Changes: Sprites Untriaged This issue has not been reviewed yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants