njo

FactorioのMod作成について

FactorioはMod作成を簡単に行えるようになってて、ゲームのModを始めて作成したい人にもオススメ。

FactorioがMod作成を簡単に行える理由

FactorioのModは全てゲームのModディレクトリに生かzipの状態で配置される。そのため、人のModの中身を見てコードを参考にする事がとても簡単。中身が見れないModはない。人にソースコードが見られる事が前提なので、Githubでpublicに公開されているModも多い。
他のゲームでは、コンパイルされたパッケージで配置されるものも多い。そのようなゲームだと人のコードを参考にする事は難しくなるし、非公開が前提なのでGithubに上げている人も少なくなる。

Luaで公式のAPIを使用するだけでModが作れる。そのため、ゲーム自体とテキストエディタだけでMod作成は完結する。Mod作成にUnityやUnreal Engineの使用が必要になるゲームも多いが、まずその利用方法を勉強するだけでも大変そう。

開発支援系のツールが便利。FactorioのModにはMod作成を便利にするModがある。後述。Visual Studio Codeには、FactorioのMod作成支援用の拡張機能がある。

Mod作成時に便利なリンク集

Visual Studio Codeデバッグ拡張機能

APIのドキュメントがVScodeから確認できたりデバッグボタン押せばFactorioが起動したり、ブレークポイントも使える。

marketplace.visualstudio.com

Mod作成支援Mod

Lua API Event Trace

ゲーム内でEventを出力させるもの。Eventをトリガーにして機能を追加したい時など、実際に発生しているEventを確認できるので便利。

mods.factorio.com

Lua API global Variable Viewer (gvv)

各Modの永続化したいデータはglobalというテーブルの中に設定できる。それらをゲーム内で表示できるようにするもの。表示させたいModのcontrol.luaの最後に if script.active_mods["gvv"] then require("__gvv__.gvv")() end を追加することで、そのModの変数を確認できるようになる。参考にしたい他人のModのcontrol.luaにもとりあえずこれを突っ込むとコードを理解しやすくなってオススメ。

mods.factorio.com

その他のリンク

Modの翻訳

Modの作成とはちょっとズレルけど。
FactorioのModの翻訳は、locale/ja/*.cfg のようなパスにiniに似た形式で配置する。
他人のModを翻訳したい場合の主な2パターンは、GithubやsourcehutにPRを送る方法。あと翻訳プラットフォームのcrowdinに対応しているModもある。このcrowdinのプロジェクトには複数のModが登録されていて、ここに訳を追加すると週一ぐらいで自動的にGithub側へPRが飛ばされる。割と多くのModがこのプロジェクトに対応させてたりするので、まずはここで探してみるのがいい。

crowdin.com

FactorioのMod作成で難しいところ

グラフィックを追加する事は難しい。Factorioは3Dのスプライト画像を2Dのアニメーションに変換してる。特にアニメーションが必要なグラフィックはそれを作る事自体が大変。特にキャラクターの見た目を入れ替えるのはかなりの労力。簡素なスタイルで簡単にグラフィックを追加できるRimworld等とは対照的。

個人的なMod開発環境の紹介

自分はWindowsのゲーミングPCを持っているが、ゲーム以外の開発や基本的なパソコンの用途ではMacを使っている。

Modを作成しているときはデバッグなどのために、そのModを実際にゲームに追加してテストプレイしながら作成する形になるが、それに使うFactorioのゲーム自体は、開発用のセーブファイルだけがある状態のFactorioを使いたいため、通常プレイのFactorioとは別なものにしたい。

Facotorioが良いのは、まずWindowsに加えてMacLinuxに対応している点とsteam以外にも、公式で単体販売がされている点。自分は通常のプレイではWindowsでsteamのFactorioをプレイしているが、Mod作成時は、公式サイトで買った単体のFactorioを起動して使っている。MacでSteam版を動かしてもいいが、Steamクラウドを切ったりしておかないとWindowsの方と同期して面倒なことになる。完全な通常プレイと開発環境の分離ができて便利。