MODの作り方/ハンドガンの弾の作り方

Last-modified: 2020-12-26 (土) 07:47:23
Version1.0.0現在の情報です

ページが完成しました。
英語版wikiと私自身の推測で作りました。
実際の環境(factorio)で動いておりますので、実行してもおかしくなることはないはずです(自己責任ですが)。

=============================
目次

=============================

このmodはなにか

ここの記事で紹介するmodは、「ハンドガン・タレット」で使用できる『弾薬(ammo)』を追加するものです。
具体的には「石の弾丸(StoneMagazine)」を追加するmodです。

ディレクトリ構造

BulletPackets_0.1.0
| data.lua
| item.lua
| info.json

┗ーーgraphics
|  |stone-rounds-magazine.png

┗ーーlocale
   ┗ーーja
      |locale.cfg

=============================
☆フォルダ・ファイル説明

・data.lua
『item.lua』を呼び出す処理を行う。
ちなみに、『data.lua』は、ゲームが自動的に呼び出すため、『data.lua』を呼び出す処理は必要ないです。

・item.lua
アイテムの定義と、レシピの定義をします。
最後に、アイテムとレシピを対応づけつつ、「dataテーブル(ゲームの全アイテムが保存されているテーブル状のデータ構造)」に追加します。
これによって、ゲーム内で使用・制作ができるようになります。

・info.json
mod自体の定義をします。
具体的には、「modの名前」「対応factorioのバージョン」などです。
これが無いと、modとして認識されません。

graphicsフォルダの中のstone-rounds-magazine.pngファイル
ハンドガンの弾のアイコンデータ(画像ファイル)です。
『item.lua』のアイテム定義で使用します。
↓この記事で使う『stone-rounds-magazine.png』ファイルです。右クリックして名前を付けて保存でご自身のPCに保存して下さい。
stone-rounds-magazine.png

・"localeフォルダ"の中の"ja"フォルダの中の"locale.cfg"
『item.lua』で設定した「アイテム名(厳密には変数名)」を指定して、表示名・表示説明を追加します。
これが無くても遊べますが、ゲーム内でアイテム名と説明が出ず、ユーザは困ってしまいます。

各ファイルのソースコードと説明

・data.lua

require("item")

『require("item")』は、「item.lua」を呼び出す処理です。


・item.lua

 --アイテム(StoneMagazine)の定義
 local StoneMagazine = {
   type = "ammo",
   name = "StoneMagazine",
   icon = "__base__/../BulletPackets_0.1.0/graphics/stone-rounds-magazine.png",
   icon_size = 64, icon_mipmaps = 4,
   ammo_type =
   {
     category = "bullet",
     action =
     {
       type = "direct",
       action_delivery =
       {
         type = "instant",
         source_effects =
         {
           type = "create-explosion",
           entity_name = "explosion-gunshot"
         },
         target_effects =
         {
           {
             type = "create-entity",
             entity_name = "explosion-hit",
             offsets = {{0, 1}},
             offset_deviation = {{-0.5, -0.5}, {0.5, 0.5}}
           },
           {
             type = "damage",
             damage = { amount = 5, type = "physical"}
           }
         }
       }
     }
   },
   magazine_size = 10,
   subgroup = "ammo",
   order = "a[basic-clips]-c[StoneMagazine]",
   stack_size = 200
 }
 --レシピ(recipe)の定義
 local recipe = {
   type = "recipe",
   name = "StoneMagazine",
   enabled = true,
   energy_required = 10,
   ingredients =
   {
     {"stone", 1},
   },
   result = "StoneMagazine"
 }
 --アイテムとレシピを「dataテーブル」に追加する。
 data:extend{StoneMagazine,recipe}

このファイル(item.lua)は、大きく見て「アイテム定義」「レシピ定義」「dataテーブルに追加」の3つのフェーズから成ります
また、五行目の『icon = "__base__/../BulletPackets_0.1.0/graphics/stone-rounds-magazine.png"』で、作成した「graphicsフォルダ」のなかにある「stone-rounds-magazine.png」を読み込んでいます。


・info.json

{
 "name": "BulletPackets",
 "version": "0.1.0",
 "title": "BulletPackets",
 "author": "Moka",
 "factorio_version": "1.0",
 "dependencies": ["base >= 1.0"],
 "description": "This mod adds in more and more Bullet."
}

このファイル(info.json)は、mod自体の情報を記述します。
mane(modの名前)、version(modのバージョン)、factorio_version(対応するfactorioのバージョン)などです。


・locale.cfg

[item-name]
StoneMagazine=石の弾丸
[item-description]
StoneMagazine=石製の弾丸。威力は低いがたくさん作れるかも?

アイテム名(厳密には変数名)を指定し、それに文字列を設定します。
すると、ゲーム内でアイテムにカーソルを当てたときに、しっかりアイテム名と説明が表示されます。
文字化けする場合は、文字コードを変えてファイルを作って下さい。(私は『UTF-8』で作成)
==<注意>==
『StoneMagazine=石の弾丸』の『=』の前後に「スペース」を入れないで下さい。
スペースを入れると、うまく処理ができないようです。
========

将来に向けて

この記事では、ハンドガンの弾を1つだけ追加しました。
『item.lua』ファイルで、同じかんじにアイテム・レシピ、そしてdataテーブルへの追加をすれば、すきなハンドガンの弾を作れます。

ちなみに、もともとfactorio自体が持っているデータ(アイテムやレシピなど)が記述されたファイルをみながら作ると楽です。
アイテムデータ:『Factorio/data/base/prototypes/item』のなかにいろいろ。
レシピデータ:『Factorio/data/base/prototypes/recipe』のなかにいろいろ。

英語wikiや他ブログを見ましたが、私には難しく、だいぶ無理矢理な実装かもしれません。

以上です。

コメント

  • 私自身、まだ勉強中の身です。質問やアドバイスなどありましたら、遠慮無くコメントお願いします!! -- 当ページの制作者? 2020-12-17 (木) 10:09:36
  • 誤字修正[.lue]→[.lua]、[lacale]→[locale]、[barrett]→[bullet] -- 2020-12-26 (土) 07:47:23