MOD制作教学“从无知到装哔”你会是下一个大佬吗?

MOD制作教学“从无知到装哔”你会是下一个大佬吗?

> 教程 > MOD制作教学“从无知到装哔”你会是下一个大佬吗?短•刷•阅•编•历本文章为 (123855714) 原创,未经作者允许,请勿擅自修改,转载请注明出处并附带 本页链接。×

MediaWiki:Timer12020/04/02 19:11:0本文上次更新

,请注意文章时效!×

摘要:

此教程为本萌新接触工厂后五个月开始编写

那么,这里分享一下自己的学习成果以及尽量的讲解多个全新的mod的制作过程。

由于学习的知识比较零碎,只能想到什么讲解什么。

因为涉及各种工具的使用,因此工具的使用方法请自行百度,本文只提供工具名称。

本萌新学习时间不长,难免会有疏漏和错误,请各位大佬指正。

本帖所使用各种注解符号:

◆重点,必要、必须、强制

◇次要点,非必要、非必须、非强制,包含建议

★必要必填字段

☆必要但不是必填字段

其它为非必要字段

〖1〗〖2〗〖3〗……〖99〗〖100〗〖101〗……索引标签

【1】【2】【3】……【99】【100】【101】……解答对应索引标签

◆mod中,注意区分“大小写”

各种mod制作、创作、构思交流

欢迎进群讨论:208715008

目录

1 制作准备

1.1 游戏本体

1.2 文本编辑器

1.2.1 Notepad++

1.3 图像处理软件

1.3.1 画图

1.3.2 Blender

1.3.3 WinRAR

2 了解mod

2.1 整体构造

2.2 mod本体

2.3 mod基础信息

2.4 mod内容

2.4.1 数据文件

2.4.2 脚本文件

2.4.3 配置文件

2.4.4 语言文件

2.4.5 图像文件

2.4.6 音乐文件

2.4.7 其它文件

3 物品及建筑

3.1 物体

3.1.1 非功能性物体

3.1.2 功能性物体

3.2 实体

3.2.1 非建筑物

3.2.2 建筑物

3.3 流体

4 实例一:大容量木质箱子

4.1 第一步:建立mod目录结构文件

4.2 第二步:编写代码

4.2.1 info.json

4.2.2 data.lua

4.2.3 item.lua

4.2.4 recipe.lua

4.2.5 entity.lua

4.2.6 locale.cfg

4.3 第三步:打包

5 实例二:增加小型电线杆连接距离及覆盖范围

6 番外篇:如何汉化MOD

制作准备

制作mod前,我们先要准备好制作环境和一些工具。

游戏本体

首先是游戏本体,我使用的是官方 alpha windows 64位 zip版本

版本支持 Windows 7, 8, 10, Vista(Mac请绕道)

◆而此版本官方下载渠道必须正版权限。

(虽然Steam版本或其它版本游戏本体也可以,但可能无法看到调试信息)

下载连接请访问官方网站download页面,找到以下关键字点击下载即可

MS Windows (64 bit zip package)

compatible with Windows 7, 8, 10, Vista

文本编辑器

Notepad++

免费的文本编辑器

或 Sublime Text 等其它支持utf-8无BOM格式的文本编辑器均可

◆windows自带记事本不支持无BOM格式

图像处理软件

画图

系统自带的图像处理软件

或 PS 等只要能做png图片的各种图像处理软件均可

◆要注意的是画图不支持透明色

Blender

Steam上免费使用的3d建模软件

或 3dsMax 等其它各种3d建模软件均可

◇前期教程均不涉及,此为进阶教程使用

WinRAR

共享软件,网上能找到破解版本

或 免费的7-Zip 等其它各种支持zip格式的压缩软件均可

了解mod

工具准备好后,先了解一下mod的整体构造

整体构造

mod是一个以zip格式储存内容的压缩包。

也可以不打包以文件夹形式存放使用

◇但游戏加载以zip格式mod优先

一个完整的mod分为两大部分:外壳和内容。

外壳包括mod本体文件夹和mod基础信息文件。

◆此为mod的核心,两者缺一不可

mod本体

mod本体文件夹是以“mod核心名称加下划线加版本号”命名的文件夹

mod名称分为“核心名称”和“显示名称”〖1〗

示例:

MyMods_0.1.0

Demo_1.0.0

test_ship_1.2.34

Iron-Man_4.5.678

mod基础信息

mod基础信息文件是一个 info.json 文件

储存格式为JSON(JavaScript Object Notation, JS 对象标记)是一种轻量级的数据交换格式。

它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。

文件编码为 utf-8 无 BOM 格式 编码。

文件储存内容包括:

★mod核心名称:name 【1】

核心名称可由英文、数字、横杠、下划线、空格等组成。

但只能以英文、数字、下划线开头,不能以横杠或空格开头,不能以横杠、下划线或空格结尾。

核心名称区分大小写,并且确保是唯一的。〖2〗

核心名称在游戏中并不显示

◆必须跟文件夹的名称一致

◇强烈不建议使用横杠或空格,请用下划线代替

☆mod显示名称:title 〖3〗

此为菜单中模组列表显示的标题名称

也是游戏中以黄色字体标注在物品中部的名称

★mod版本号:version

版本号格式为GNU风格版本号格式

由主版本号、子版本号和修正版本号三个部分组成,所有定义的部分都必须是大于或等于 0 的整数。

示例:

0.1.2

0.1.234

1.23.456

12.34.567

◆必须跟文件夹的版本号一致

mod描述:description 〖4〗

描述mod简介及用途

☆mod作者:author

填上你的名字,让别人知道这是谁制作的。

作者联系方式:contact

可填写邮箱、QQ、Blog等等……

mod主页:homepage

一般为mod全面介绍及使用方法的网页页面连接。

如论坛、贴吧、视频等……

当然你填上自己的QQ空间连接也是没有问题的……

★游戏版本号:factorio_version

此处填写能使用此mod游戏版本号,如0.18

mod依赖关系:dependencies 〖5〗

默认为base,即官方基础包(官方的mod)

如果你的mod使用了其它mod的物品、图片、音乐或任何东西,

请把依赖的mod名称填上,更建议把mod的版本号指定(也可不填版本号),

依据版本号,可向上兼容依赖关系,但不能向下兼容。

某些建议依赖,但不是必须的,可以在mod名称前加问号。

可填写多个依赖mod名称。

示例:

"dependencies": ["base"]

"dependencies": ["base >= 0.15"]

"dependencies": ["base >= 0.15.31"]

"dependencies": ["base >= 0.15", "artsCore >= 0.1.3"]

"dependencies": ["base", "? EvoGUI"]

"dependencies": ["btsCrazyBlood", "EvoGUI", "? Waterfill_v15 >= 0.1.2"]

mod内容

内容包括各种数据文件、脚本文件、配置文件、语言文件、图像文件、音乐文件、其它文件。

◇内容不是必须全部都有,可选择性添加

数据文件

数据文件均为lua格式 〖6〗

data.lua

data-updates.lua

data-final-fixes.lua

以及在以上三个文件中使用require引用的文件

以上三个文件内容格式并无差异,不同文件名只是加载顺序不同

脚本文件

脚本文件也是lua格式 〖7〗

control.lua

以及在文件中使用require引用的文件

配置文件

配置文件同样是lua格式 〖8〗

settings.lua

settings-updates.lua

settings-final-fixes.lua

以及在以上三个文件中使用require引用的文件

以上三个文件内容格式并无差异,不同文件名只是加载顺序不同

语言文件

语言文件是cfg格式 〖9〗

文件路径为 mod本体文件夹\locale\①\②.cfg

①填写语言缩写(如en、zh-CN 等等)

②填写文件名称(可任意英文名称)

语言文件必须存放到对应目录下才生效

◇语言文件格式为ini文件格式

ini文件是一种常见的配置文件。它以简单的文字与简单的结构组成。

ini文件在不同的使用方式上,可用不同的扩展名,如ini、cfg等。

而这里mod使用的,便是以cfg为扩展名

◆mod仅支持cfg扩展名的语言文件

图像文件

图像文件是png格式 〖10〗

*.png

填写文件名称(可任意名称)

◆mod仅支持png格式图片

音乐文件

音乐文件是ogg格式

*.ogg

填写文件名称(可任意名称)

◆mod仅支持ogg格式音频文件

其它文件

其它文件如txt、log、md等等……

◆此类文件非mod文件,仅作为说明、日志、协议等用途

◇并不建议添加此类文件

物品及建筑

知道了mod结构,现在来说一下游戏中的物品及建筑

游戏中的物品,可以分为三大类型:物体、实体、流体。

物体

物体可细分为两个小类型:非功能性物体(配方)和功能性物体(装备、插件、科技包等)。

非功能性物体

铁板、电路板、塑料、处理器、卫星等…

一个非功能性物体一般由两段代码组成:

物品属性 type = "item"

物品配方 type = "recipe"

功能性物体

铁斧镐、手枪、速度插件、机器人、胶囊、固体燃料、夜视镜、火箭等…

一个功能性物体一般由三段代码组成:

物品属性 type = "item"

物品配方 type = "recipe"

物体功能 type = "mining-tool" 或 "gun" 或 "ammo" 或 "armor" 等……

实体

实体也可细分为两个小类型:非建筑物(资源、汽车、生物等)和建筑物(电线杆、混凝土、铁轨等)。

非建筑物

矿、水域、油井、树、汽车、坦克、火车、鱼、虫子、你(没错,就是你…)

矿、油等资源一般由三段代码组成:

物品属性 type = "item"

资源属性 type = "resource"

资源生成控制 type = "autoplace-control"

建筑物

铁箱子、研究中心、机枪塔、蓄电器、雷达、炼油厂、管道、机械臂、发射井等…

一个建筑物一般由三段代码组成:属性、配方和实体

物品属性 type = "item"

物品配方 type = "recipe"

实体功能 type = "car" 或 "fish" 或 "player" 或 "lab" 或 "rocket" 或 "pipe" 等……

流体

各种能通过管道运输的液体、气体…

一般流体由两段代码组成:

流体属性 type = "fluid"

流体配方 type = "recipe"

看到这里估计会有些人看得一脸蒙蔽…

不过没关系,看着下面的实例再回来这里复习,就会非常清晰了

实例一:大容量木质箱子

首先,需要做一个基础计划

我们用原版的“木制箱”代码,来修改出“大容量木质箱子”

箱子堆叠每组100个(原版50)

箱子容量为30(原版16)

箱子配方为:木板8个(原版4个)

箱子燃烧热值8MJ(原版4MJ)

计划完毕,然后开始制作了…

第一步:建立mod目录结构文件

新建一个文件夹,名称为 TeachsBigWoodChest_0.1.0

打开 TeachsBigWoodChest_0.1.0 文件夹

建立两个文件

info.json

data.lua

再建立两个文件夹

prototypes

locale

打开 prototypes 文件夹

建立三个文件

entity.lua标识

item.lua标识

recipe.lua

返回上一层目录,再打开 locale 文件夹

建立文件夹

zh-CN

打开 zh-CN 文件夹

建立文件

locale.cfg

至此目录结构已经建立完毕

以下为结构树形目录展示

+TeachsBigWoodChest_0.1.0

|+locale

||+zh-CN

|||-locale.cfg

|+prototypes

||-entity.lua

||-item.lua

||-recipe.lua

|-data.lua

|-info.json

第二步:编写代码

info.json

{

"name": "TeachsBigwoodenchest",

"version": "0.1.0",

"title": "Teach's Big wooden chest",

"author": "aspd199",

"contact": "admin@art8620.com",

"homepage": "https://mods.factorio.com/mods/aspd199",

"description": "Create a Big wooden chest",

"factorio_version": "0.15",

"dependencies": ["base >= 0.15"]

}

◇注意json格式,非结尾行,行尾需要“逗号”,结尾行,行尾不需要“逗号”

data.lua

【6】

格式为 require("文件夹.文件名")

require("prototypes.entity")

require("prototypes.item")

require("prototypes.recipe")

例如本例三个文件路径为:

TeachsBigwoodenchest_0.1.0\prototypes\entity.lua

TeachsBigwoodenchest_0.1.0\prototypes\item.lua

TeachsBigwoodenchest_0.1.0\prototypes\recipe.lua

item.lua

data:extend({

{

type = "item", --类型为物品属性

name = "Big-wooden-chest", --物体内部名称〖11〗

icon = "__base__/graphics/icons/wooden-chest.png", --物体在背包显示的图标

flags = {"goes-to-quickbar"}, --物体标识〖12〗

fuel_category = "chemical", --燃料类型

--由于燃烧属于化学反应,因此这里类型填写 chemical

fuel_value = "8MJ", --燃料热值

--可在游戏中进行能量转化,如发电、汽车驱动等

subgroup = "storage", --物品分组〖13〗

order = "a[items]-a[Big-wooden-chest]", --物品在分组中排列顺序〖14〗

place_result = "Big-wooden-chest", --放置物(一般填物体内部名称)〖15〗

stack_size = 100 --每格堆叠数量

}

})

recipe.lua

data:extend({

{

type = "recipe", --类型为物品配方

name = "Big-wooden-chest", --配方内部名称,一般为物体内部名称〖11〗

ingredients = {{"wood", 8}}, --配方需求原料〖16〗(原料名称,数量,多种原料格式参考json)

result = "Big-wooden-chest" --成品物体内部名称

}

})

entity.lua

data:extend({

{

type = "container", --这里实体功能的类型为容器箱子

name = "Big-wooden-chest", --物体内部名称

icon = "__base__/graphics/icons/wooden-chest.png", --物体在背包显示的图标

flags = {"placeable-neutral", "player-creation"}, --物体标识〖12〗

minable = {mining_time = 1, result = "Big-wooden-chest"}, --拆除回收建筑物的时间和回收后的物体内部名称

--例如拆除箱子后回收得到的是木板,这里就可以写 result = "wood"

max_health = 100, --箱子血量

corpse = "small-remnants", --损坏后的残骸量

collision_box = {{-0.35, -0.35}, {0.35, 0.35}}, --建筑碰撞面积

--这里使用的是“平面直角坐标系统”,数值为第三象限x,y,和第一象限x,y,和第一象限x

--游戏中每一格位置在坐标系统中为0.5跨度,所以箱子占地一格,大小就是 0.5 x 0.5

fast_replaceable_group = "container", --快速替换分组

--相同实体功能类型的物品,能快速放置替换,而无需拆除后才能放置

selection_box = {{-0.5, -0.5}, {0.5, 0.5}}, --鼠标移到建筑上的选择框大小

inventory_size = 30, --箱子容量

open_sound = { filename = "__base__/sound/wooden-chest-open.ogg" }, --打开箱子的声音

close_sound = { filename = "__base__/sound/wooden-chest-close.ogg" }, --关闭箱子的声音

vehicle_impact_sound = { filename = "__base__/sound/car-wood-impact.ogg", volume = 1.0 }, --被汽车撞的声音

picture = --建筑图片素材

{

filename = "__base__/graphics/entity/wooden-chest/wooden-chest.png",

priority = "extra-high", --图片优先级

width = 46, --图片素材宽度

height = 33, --图片素材高度

shift = {0.25, 0.015625} --建筑图片素材在游戏中偏移量(这里数值为百分比)

},

circuit_wire_connection_point = --电路连接点

{

shadow = --红绿线阴影基于坐标系统中心原点偏移量

{

red = {0.734375, 0.453125},

green = {0.609375, 0.515625},

},

wire = --红绿线连接点基于坐标系统中心原点偏移量

{

red = {0.40625, 0.21875},

green = {0.40625, 0.375},

}

},

circuit_connector_sprites = get_circuit_connector_sprites({0.1875, 0.15625}, nil, 18), --电路连接器

--电路连接器基于坐标系统中心原点偏移量

--这里的 18 是电路连接器样式〖17〗

circuit_wire_max_distance = 9 --红绿线最大连接距离格数

}

})

locale.cfg

【9】

[entity-name]

Big-wooden-chest=大容量木质箱子

[mod-name]

TeachsBigwoodenchest=教程实例一:大容量木质箱子

[mod-description]

TeachsBigwoodenchest=创建一个大容量木质箱子

◆这里entity-name使用的是“物体内部名称”【11】

格式为:

[entity-name]

物体内部名称=物体显示名称

物体显示名称即游戏中能看到的名称…

汉化也是通过修改此字段以达到更改名称显示语言

如果换成其它国家文字则游戏中显示其它国家文字

◆而mod-name和moddescription使用的是“mod核心名称”【1】

格式为:

[mod-name]

mod核心名称=mod显示名称

[mod-description]

mod核心名称=mod描述介绍

第三步:打包

把整个 TeachsBigwoodenchest_0.1.0文件夹打包成 TeachsBigwoodenchest_0.1.0.zip压缩包

◆注意打包时必须是把整个文件夹打包,而不只是文件夹里面的文件

◆打包压缩文件必须为zip格式

◇最后把mod压缩包放置到 %appdata%\factorio\mods 目录中

启动游戏测试效果!

完成!

实例二:增加小型电线杆连接距离及覆盖范围

点击查看:MOD制作教学 - 大范围小型电线杆

番外篇:如何汉化MOD

点击查看:MOD汉化教学

相关推荐

香港回归27周年 重温激动人心时刻
GBT36507-2018

香港回归27周年 重温激动人心时刻

📅 07-11 👁️ 4275
眉毛刮了多久能长出来
GBT36507-2018

眉毛刮了多久能长出来

📅 07-05 👁️ 9193
死神:千年血战第二部发布时间表:所有剧集及其发布时间
对比了中美的 167 个订阅服务价格,我有哪些思考
正规医院治疗腋臭多少钱
GBT36507-2018

正规医院治疗腋臭多少钱

📅 07-10 👁️ 1917
creator专八
365网站取款不给怎么办

creator专八

📅 07-03 👁️ 9589