Featured image of post 饥荒模组开发-魔法工坊

饥荒模组开发-魔法工坊

项目介绍

“魔法工坊"是一个为《饥荒联机版》开发的模组,主要提供多种超模魔法物品,让游戏生存变得更加轻松。本文将详细介绍该模组的开发过程、使用的游戏API以及资源引入方法。

模组功能

目前模组包含两个主要物品:

1. 魔法背包

特性:

  • 2x6格大容量布局
  • 提供持续照明效果(半径6,亮度0.9)
  • 120点保温和防暑效果
  • 100%防水效果
  • 每5秒恢复5点生命值、3点饥饿值和5点精神值
  • 物品永久保鲜,防止腐烂
  • 装备时自动打开背包

制作材料:

  • 6个蜘蛛丝
  • 2个蓝宝石
  • 2个红宝石

2. 创世工具

特性:

  • 集成所有工具功能:斧子、锤子、铲子、镐子、钓鱼竿、捕虫网
  • 2倍采集效率
  • 68点武器伤害
  • 提供50%伤害减免(相当于50点护甲)
  • 1.5倍移动速度
  • 999点耐久度(耗尽后消失)
  • 装备时提供照明效果(半径8,亮度0.9)
  • 2格武器攻击范围

技术实现

项目结构

饥荒模组的标准结构如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
modmain.lua          -- 模组入口文件
modinfo.lua          -- 模组信息文件
scripts/
  ├── prefabs/       -- 预制体定义
     ├── mofabackpack.lua
     └── csstool.lua
  └── components/    -- 自定义组件
anim/                -- 动画文件
  ├── mofabackpack.zip
  └── swap_csstool.zip
images/              -- 图标文件
  ├── mofabackpack.tex
  ├── mofabackpack.xml
  ├── csstool.tex
  └── csstool.xml

使用的游戏API

1. 物品注册API

1
2
3
4
5
6
7
8
9
-- 在modmain.lua中注册预制体
PrefabFiles = {
    "mofabackpack",
    "csstool",
}

-- 添加小地图图标
AddMinimapAtlas("images/mofabackpack.xml")
AddMinimapAtlas("images/csstool.xml")

2. 物品属性API

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
-- 背包容器API
inst:AddComponent("container")
inst.components.container:SetNumSlots(12)
inst.components.container.widgetslotpos = SLOTPOS
inst.components.container.widgetanimbank = "ui_backpack_2x6"
inst.components.container.widgetanimbuild = "ui_backpack_2x6"

-- 光源API
inst:AddComponent("lightsource")
inst.components.lightsource:SetRadius(6)
inst.components.lightsource:SetIntensity(0.9)
inst.components.lightsource:SetFalloff(0.5)
inst.components.lightsource:SetColour(180/255, 195/255, 225/255)
inst.components.lightsource:Enable(true)

-- 保鲜API
inst:AddComponent("preserver")
inst.components.preserver:SetPerishRateMultiplier(0)

3. 工具功能API

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
-- 工具API
inst:AddComponent("tool")
inst.components.tool:SetAction(ACTIONS.CHOP, 2)  -- 2倍砍树效率
inst.components.tool:SetAction(ACTIONS.MINE, 2)  -- 2倍挖矿效率
inst.components.tool:SetAction(ACTIONS.HAMMER, 2) -- 2倍锤击效率
inst.components.tool:SetAction(ACTIONS.DIG, 2)   -- 2倍挖掘效率

-- 武器API
inst:AddComponent("weapon")
inst.components.weapon:SetDamage(68)
inst.components.weapon:SetRange(2)

4. 装备效果API

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
-- 装备API
inst:AddComponent("equippable")
inst.components.equippable.equipslot = EQUIPSLOTS.BODY
inst.components.equippable.walkspeedmult = 1.5  -- 移动速度提升

-- 装备时的事件监听
inst.components.equippable:SetOnEquip(onequip)
inst.components.equippable:SetOnUnequip(onunequip)

-- 保暖/防暑API
inst:AddComponent("insulator")
inst.components.insulator:SetInsulation(120)
inst.components.insulator:SetSummer()
inst.components.insulator:SetWinter()

5. 制作配方API

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
-- 在modmain.lua中添加制作配方
local mofabackpack = Recipe("mofabackpack", 
    {
        Ingredient("silk", 6),        -- 蜘蛛丝
        Ingredient("bluegem", 2),     -- 蓝宝石
        Ingredient("redgem", 2),      -- 红宝石
    }, 
    RECIPETABS.SURVIVAL,              -- 在生存栏制作
    TECH.SCIENCE_TWO,                 -- 需要科学机器
    nil, nil, nil, nil, nil,
    "images/mofabackpack.xml")        -- 制作图标
mofabackpack.atlas = "images/mofabackpack.xml"

资源创建与引入

1. 贴图创建

饥荒模组的贴图需要两个文件:

  • .tex 文件:实际的贴图文件
  • .xml 文件:Atlas文件,定义贴图的UV坐标

创建贴图的步骤:

  1. 使用图像编辑软件(如Photoshop)创建PNG图像
  2. 使用Klei的TEXTool工具将PNG转换为TEX格式
  3. 使用Klei的Atlas工具生成XML文件
1
2
# 转换命令示例
TEXTool.exe mofabackpack.png mofabackpack.tex

2. 动画文件创建

动画文件需要使用Spriter软件创建,然后导出为饥荒可用的格式:

  1. 在Spriter中创建角色动画
  2. 导出为SCML格式
  3. 使用Klei的SCML工具转换为饥荒的动画格式(.zip和.bin文件)
1
2
# 转换命令示例
ktech.exe --atlas mofabackpack.scml

3. 资源引入

在模组代码中引入资源的方法:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-- 在预制体定义中引入资源
local assets = {
    Asset("ANIM", "anim/mofabackpack.zip"),
    Asset("ANIM", "anim/ui_backpack_2x6.zip"),
    Asset("ATLAS", "images/mofabackpack.xml"),
    Asset("IMAGE", "images/mofabackpack.tex"),
}

-- 在装备时切换角色动画
function onequip(inst, owner)
    owner.AnimState:OverrideSymbol("swap_body", "swap_mofabackpack", "backpack")
    owner.AnimState:OverrideSymbol("swap_body", "swap_mofabackpack", "swap_body")
end

模组扩展方法

要添加新物品到模组中,需要以下步骤:

  1. scripts/prefabs 目录下创建新的物品脚本文件

  2. modmain.lua 中添加新物品的注册信息:

    • 添加预制体名称到 PrefabFiles 表中
    • 添加小地图图标(如需要)
    • 添加物品名称和描述的本地化
    • 添加物品的制作配方
  3. 创建必要的资源文件:

    • 动画文件:anim/物品名.zip(地面显示)和 anim/swap_物品名.zip(装备时显示)
    • 图标文件:images/物品名.xml(Atlas文件)和 images/物品名.tex(贴图文件)

总结

“魔法工坊"模组通过饥荒的Lua API实现了强大的游戏物品,包括多功能背包和全能工具。开发过程涉及到物品属性设置、装备效果、容器系统、光照系统等多种游戏机制的使用。

模组开发需要了解饥荒的API体系和资源格式,包括贴图创建、动画制作和代码编写。通过合理组织项目结构和资源文件,可以创建出功能丰富、体验良好的游戏模组。

未来计划添加更多魔法物品,进一步丰富模组内容,为玩家提供更多有趣的游戏体验。

使用 Hugo 构建
主题 StackJimmy 设计