Factorio Mod を作成したみた。~レシピの追加:ウルガヌス編~

Factorio Mod を作成したみた。~レシピの追加:ウルガヌス編~

はじめに

前回に引き続きmodを作っていきます。
みんな大好きbob’s mod 、base2.0には対応していますがspace ageにまだ対応していません。そのうち更新してくれると思っていますが。

ただちょっと待ってられないな~っていことで詰まない程度にアイテムレシピを追加していこうと思います。
なにも考えずに宇宙に飛び立ち詰んだ。

レシピなどの追加方法

Modのデータは data.lua ⇒ data-update.lua ⇒ data-final-fixes.lua の順で読み込まれ登録されていく。
final-fixesが他のModのupdateを読み込んだあとに読み込まれるので何も考えずに適応させるにはいいらしいとのこと。
フォルダ構成はこんな感じ。

-mod_name
|-locale
 |-ja
  |-mod_name.cfg
|-info.json
|-data.lua
|-data-update.lua
|-data-final-fixes.lua

data-final-fixes内に追加したいレシピを書き込んでいくことにします。

レシピの作り方

baseのデータが\\SteamLibrary\steamapps\common\Factorio\data\base\prototypes\recipe.luaに保存されています。これを参考にしましょう。もしくはここ

保存されているデータを閲覧する際は思わぬ更新に注意してください。

data:extend
({
  {
    type = "recipe",
    name = "speed-module",
    enabled = false,
    ingredients =
    {
      {type = "item", name = "advanced-circuit", amount = 5},
      {type = "item", name = "electronic-circuit", amount = 5}
    },
    energy_required = 15,
    results = {{type="item", name="speed-module", amount=1}}
  },
})

例としてスピードモジュールのレシピを持ってきました。意外と簡単。
その他のオプションはmod portal に記載があります。
これをdata-final-fixes.luaに書き込めばレシピが追加されます。

追加するレシピ
電子基板80%成功。バニラを復活
発展基盤50%成功。バニラを復活
制御基板50%成功。バニラを復活
貫通弾薬90%成功。バニラを復活
石からクオーツを抽出5%の確率で石からクオーツを発見
bobs銅タングステンバニラタングステン+銅板
炭化タングステン変換バニラ⇔bobs
銅溶岩からニッケルの発見1%の確率で銅溶岩からニッケルを発見
石から錫を抽出1%の確率で石から錫を発見
バッテリーバニラを復活
bobs遮熱タイルそれっぽいレシピで追加
搬送ベルト系

これだけ追加しました。
ウルガヌスでとれる資源は石炭、タングステン(バニラ)、硫酸、溶岩です。
初手、電子基板作成で詰みます。半田と抵抗を作るための錫、鉛が入手できません。
電子基板が作れないとなると、機械系がすべて制作できないので全く先に進まない状況になります。

ということで銅線と鉄板で作成できるバニラレシピを復活させます。
ただ、半田や抵抗を使うにはちょっと劣るという体裁で、80%確率で作成できるものとしました。
発展基盤、制御基板も同じような形です。
バッテリー、貫通弾薬に関しても鉛が手に入らないので同様にバニラレシピを復活しました。

次、遮熱タイル及びロケット素材系の対策。
窒化ケイ素、炭化タングステンが素材になりますが、当然そのままでは作れませんのでいろいろ追加します。
まずバニラタングステンとの変換。これで炭化タングステン、ロケットエンジンなど作れるようになります。
 ※記事を書いてる途中でアップデート。ロケットエンジン素材が変更される・・・。タングステン版を追加しました。
続いて、ケイ素の発掘。ウルガヌスの環境ならどっかにケイ素はいるだろ。ってことで溶岩から鉄などを作ると副産物として出てくる石を電気炉で炙ることによってケイ素をとれるようにします。ニッケルも同じ理屈です。
最後、遮熱タイルは別レシピも追加しておきました。
レジン+プラスチック+炭化タングステン+塩化水素+窒素を溶鉱炉で作成。それっぽい。

最後に搬送ベルト。ターボ搬送ベルトをタングステン+方解石で作れるようにしました。

実際作ったレシピの一部です。全体は実際にMODをダウンロードして見てください。

data:extend({
      {
        type = "recipe",
        name = "vanilla-electronic-circuit",
        category = "bob-electronics",
        enabled = false,
        ingredients = {
          { type = "item", name = "iron-plate", amount = 1 },
          { type = "item", name = "copper-cable", amount = 3 }
        },
        allow_productivity = true,
        surface_conditions = {
         {
           property = "pressure",
           min = 2000,
           max = 4000
         },
        },
        results = { { type = "item", name = "electronic-circuit", amount = 1 ,probability = 0.8} }
      },
-/-/-/
      {
        type = "recipe",
        name = "bob-heat-shield-tile-2",
        category = "metallurgy",
        subgroup = "vulcanus-processes",
        energy_required = 10,
        enabled = false,
        ingredients = {
          { type = "item", name = "bob-tungsten-carbide", amount = 10 },
          { type = "item", name = "bob-resin", amount = 10 },
          { type = "item", name = "plastic-bar", amount = 5 },
          { type = "fluid", name = "bob-hydrogen-chloride", amount = 50 },
          { type = "fluid", name = "bob-nitrogen", amount = 20 },
        },
        allow_productivity = true,
        surface_conditions = {
          {
            property = "pressure",
            min = 4000,
            max = 4000
          }
        },
        results = { { type = "item", name = "bob-heat-shield-tile", amount = 1 } },
      }, 
././././
})


テクノロジーの適用

enable=true とすれば、適用した瞬間にレシピを使用することが可能ですが、やはりウルガヌスに到着した時に使用できるようになっていたほうがそれっぽくていいと思います。
既存のテクノロジーにunlock-recipeイベントを追加していくことで実現可能です。

今回は方解石プロセスの研究に追加していきます。

local my_custom_recipes = {
--ここに設定したレシピをいれてく。
    "vanilla-electronic-circuit",
    "vanilla-advanced-circuit",
・・・・
} 

local tech = data.raw.technology["calcite-processing"] --追加したいテクノロジー名
if tech then
    tech.effects = tech.effects or {}
    for _, recipe in pairs(my_custom_recipes) do
      table.insert(tech.effects, {
        type = "unlock-recipe",
        recipe = recipe
      })
    end
end


レシピを追加した後にループで追加すれば研究後に開放するようになります。
レシピを追加する前にやると当然設定されません。

完成版

※全惑星でレシピ追加してます。


おわりに

作り方がわかるとかなり楽しいです。なんせ、自由にあれこれできてしまうので、思った通りに遊べてしまうというのがgood! ただでさえやり込んでしまうゲームであるのに、さらにやり込みそうですね。
今後もいろいろと作っていきたいな~と思ってます。

コメント