记录一下人生中的第一个自制mod!从真正开始制作到目前的v1.0版本其实只用了三天时间嘿嘿😎
⚠️文章可能包含:无逻辑叙事,大量自言自语,不符合原作世界观的oc,数值爆炸的原创法杖
一。Mod介绍
Mod全称:Little Witch Miru /:(/:是拿着法杖施法的意思)
Mod功能:修改了玩家角色外观(萌萌的白毛小法师!),拥有四支自制的初始法杖。
最开始创作的时候其实是先设计了法杖,小法师外观纯粹是为了方便绘制而设计成现在这样的。(当然了也确实在各种程度上符合了我的xp)
oc与法杖初设
【小法师】
名字:Miru(米鹿)
外观:
法袍:深灰色,附有绿色条带
项链:
蓝宝石护身符(保护罩)
绿宝石护身符(传送门)
发色:白
瞳色:蓝
身份:来自森林的小魔法师
个性:充满好奇心、对奇怪事物的接受度超强
爱好:探险、研究法术、制作法杖(米鹿会自己制作木之法杖,这也是为什么她的法杖和矿洞里捡到的看起来不太一样。)
喜好:大自然、超自然、闪亮亮的东西
【法杖Ⅰ】
Miru的功能型法杖,一般用于回血、传送和照明。
具有两个形态。初始形态为一根树枝上镶嵌着一颗蓝宝石,升级后树枝会围绕蓝宝石形成一个不完整的圆环,并且树叶长得更多更长,法杖底部增加一颗小蓝宝石。
基本属性:
乱序:否
施法数:1
容量:3→5
散射:0
始终释放:治愈(回血)
【法杖Ⅱ】
Miru的主战力法杖,战斗方式为精准射击。
外观形似弓箭的法杖。(但Miru确实喜欢把它当成弓箭使用,里面的法术放的是带有追踪的触发风之箭。)
基本属性:
乱序:否
施法数:1
容量:7
散射:-1
【法杖Ⅲ】
Miru开路用的法杖,也能用于一些简单的战斗场景,战斗方式为散打。
基本属性:
乱序:是
施法数:3
容量:7
散射:6
【法杖Ⅳ】
Miru的法术背包,基本上只用来存放法术。
基本属性:
乱序:是
施法数:1
容量:20
散射:3
二。制作过程记录
我流mod制作(试错)过程:
研究能实现类似功能的mod,搞清楚各个文件的作用。(看上去很正式的样子,实际上完全是心血来潮就直接开始画画了x)
绘制贴图(player.png等文件),找个合适的文件,替换,测试。
研究法杖贴图替换原理,研究法杖数值设置方法,测试。
整个过程中绘制player.png是最费时间的,画一两百个帧的精灵图真的要了我的老命(闭目)
从原本使用动画模式绘制变成了直接手搓精灵图了😇🙏
后面开始想要稍微系统一点地学习一下,然后发现b站没有视频讲怎么做mod,有一个讲解制作皮肤mod的文章(Noita的零基础mod制作入门 - 哔哩哔哩)还是我替换完之后才看到的。(那时候已经想要替换法杖了)
于是只好退而求其次翻去YouTube留学(不是),结果真的看到了几个帮助比较大的视频。(Noita Modding Tutorial Ep 1 | Introduction and Setup - YouTube,
Noita Modding Part 1 | Starter Wand Template + Tutorial - YouTube)
三。如何制作Noita Mod
一般mod的实现原理:使用mods下的你的mod文件夹 覆盖掉原本data文件夹中同款相对路径的文件。(合理猜测很多游戏的mod都是这个原理)
制作mod的改进流程:
1. 解包
在 SteamLibrary\steamapps\common\Noita 下,把 tools_modding 文件夹里面的东西拖到Noita文件夹中,执行 data_wak_unpack.bat ,你就可以 Users\用户名\AppData\LocalLow\Nolla_Games_Noita 下找到一个新的文件夹叫 data ,里面就是所有你可以替换的文件了。(应该是这样)
至此,我们有两个重要的常用的文件夹,Noita和data。
稍微介绍一下里面的文件,文件类型主要是png和xml还有lua。
png就是显而易见的贴图文件,想要修改这个文件最主要是考验一些广义的PS能力,上限很大程度取决于你的审美(笑)。
xml:类似html的标记语言,用来定义游戏中的物体、法杖、敌人、粒子效果等等。在我看来基本上就是辅助你的png用的,比如怎么解读精灵图。
lua:一种轻量级脚本语言,设定物体的行为逻辑。如果你不用写一些很复杂逻辑的话,基本上可以不用去学这个语言,直接修改参数就行。
2. 确认目标
打开解包后的data文件夹,寻找你想替换的文件,在自己的mod文件夹里建立相同系统的目录。
比如说你想替换的是mina的基本行走图,Nolla_Games_Noita\data\enemies_gfx\player.png,那么你在自己的mod文件夹下也应该先建立data\enemies_gfx文件夹,里面装着player.png(路径为mods\你的mod\data\enemies_gfx\player.png)。
你的mod文件夹和Nolla_Games_Noita是相对同级的!
3. 重写替换文件的内容
打开你的Noita\mods文件夹,你会发现里面有一个example文件夹,没错,这就是官方给你准备的mod示例。(所以我才说官方简直超支持玩家搞mod啊!)
一些我的mod里用到的文件:
(这部分可以对照我的mod文件夹看)
\init.lua
必须有这个文件。一般不用改动。
\mod.xml
必须有这个文件。
内容也比较简单,比如我这个,Little什么的就是在游戏里显示的mod名字,Let's是mod介绍。
<Mod
name="Little Witch Miru /:"
description="Let's be cute Miru ^^ Have funn!~"
version="1.0"
type="MOD"
author="Ruru"
tags="player characters"
>
</Mod>
\data\enemies_gfx\player.png
关于这个图里哪些部分具体对应哪个动作,可以在player.xml里面查看。比如:
<RectAnimation
frame_count="6"
frame_height="19"
frame_wait="0.2"
frame_width="12"
frames_per_row="8"
name="stand"
pos_x="0"
pos_y="1" >
</RectAnimation>
意思就是说,stand(待机)动作有6帧,帧间隔0.2秒,高19像素,宽12像素,一行最多8帧(我不知道这个设定有什么必要性),从坐标(0,1)开始解析。
反正是很好理解的参数,实在不会就问AI。而且基本上只有你的图像确实和原图范围差异巨大时才需要修改一下height和width。
\data\enemies_gfx\player_arm.png
角色手臂的图像,按需修改即可。
\data\enemies_gfx\xx_hotspots.png
作用点。比方说你的手臂要挂在你的身体哪个地方,你的法杖要挂在你的手臂哪里。
data\entities\player.xml
主要修改了玩家进入游戏时的物品栏。
\mods\miru\data\ragdolls\各种png
你死掉时分裂的身体。
\mods\miru\data\ragdolls\filenames.txt
里面记录着你死掉时身体会分裂成哪些图像。
\data\items_gfx\wand.png
法杖贴图。
\data\items_gfx\wand.xml
解析法杖图像用的文件。(比如设置你的手抓在法杖的哪个位置)
\data\entities\items\wand.xml
定义法杖行为,可以设定法杖参数和塞初始法术。
\data\entities\items\wand_setup.lua
可以设置法杖的永远释放参数。(具体方法在附录)
四。(自用)二改我的法杖
功能:\data\entities\items\wand.xml
PS:在设置法术时,使用的都是法术ID,并非等同于你平时看到的法术名称(尤其对于我们中文玩家TvT),所以其实你是需要一些手段去寻找某个法术对应的法术ID的。
推荐三种方法:
1. 把游戏调成英文版
2. 在Nolla_Games_Noita\data\ui_gfx\gun_actions中看好你要的法术图标的png名字,然后去Nolla_Games_Noita\data\scripts\gun\gun_actions.lua文件中搜索,看看是哪个法术ID使用了这个png。
3. 可能有参考价值的网站:Noita Cheat Sheet: View and share Spell and Perk wand crafting combinations
本人常用法术:
加速SPEED,自动追踪AUTOAIM,加速追踪HOMING_ACCELERATING,
火花弹LIGHT_BULLET,激光LASER,触发魔法箭BULLET_TRIGGER,蓝色泡泡弹BUBBLESHOT,死亡十字DEATH_CROSS
钻头DIGGER,锯链CHAINSAW,小传送弹TELEPORT_PROJECTILE_SHORT,传送TELEPORT_PROJECTILE
水轨迹WATER_TRAIL,火焰轨迹FIRE_TRAIL,冰冻FREEZE
想试试:COLOUR_RAINBOW
五。更新日志
v1.1
增加骨骼图,修复染色图错误。
附录
如何使法杖拥有永远施放某法术的效果:
1. 在目录mods/WandTemplate/data/entities/items下(放置 my_wand.xml 的地方)创建 my_wand_setup.lua
2. 打开并编辑这个 .lua 文件,复制粘贴以下内容进去:
dofile("data/scripts/lib/utilities.lua")
dofile("data/scripts/gun/procedural/gun_action_utils.lua")
local entity_id = GetUpdatedEntityID()
AddGunActionPermanent(entity_id, "PEBBLE")
PEBBLE就是那个永远释放的法术ID,你可以自行修改。
3. 打开my_wand.xml,滚动到接近 XML 文件末尾的位置。
找到标注为 LuaComponent 的注释段,去掉注释符号(即 <!-- 和 --> )
把:script_source_file="(某个路径)"
替换成:
script_source_file="data/entities/items/my_wand_setup.lua"
如何生成uv map:
如何生成旧版本的 stainmap(污渍贴图)
第一步,是下载一个旧版本的 Noita —— 在 stainmap 生成机制被破坏之前的版本。
为此,我们首先需要打开浏览器,并在地址栏输入:
steam://nav/console
在控制台中输入:
download_depot 881100 881101 2326595580679356504
] download_depot 881100 881101 2326595580679356504
Downloading depot 881101 (673 files, 1158 MB) ...
Depot download complete : "C:\Program Files (x86)\Steam\steamapps\content\app_881100\depot_881101" (manifest 2326595580679356504)
-
881100
是 Noita 游戏的 app ID -
881101
是我们想要的 depot(内容包)ID -
后面的长串数字是该特定版本的标识符
这条命令会下载我们需要的 Noita 旧版本数据。
下载完成后,你可以在以下目录找到它:
steam/steamapps/content/app_881100/depot_881101
接下来,使用一个 MOD 工具
将这个工具包放入你刚下载的 depot 的 mod 文件夹中。
里面包含一些说明文档,但暂时可以忽略。
关键的三个文件(路径:data/enemy_gfx
)
-
player.png
:这是你要生成 stainmap 的精灵图 -
player.xml
:这是动画数据文件 -
player_uv_src.png
:这是 stainmap 生成器使用的空间定位图
之前提到过,uv_src
是 stainmap 生成器的参考文件。
你可以打开 spatialdata.txt
文件查看颜色代码和其对应的部位名称。
但其实只需要记住:绿色(Green)和白色(White) 是最重要的两种颜色。
操作步骤如下:
-
打开
player.png
,将你想做 stainmap 的角色图像放进去,并对齐到右上角。 -
打开
player.xml
,复制粘贴你要使用角色的动画数据到文件最上方,只要偏移量和帧位置设置合理,通常是可以正常生成的。 -
修改
player_uv_src.png
,根据你的角色给出合适的空间定位颜色。
如果你看到项目文件里还有作者自己的角色图(.xcf 和 .png),可以删除它们,换成你自己的图像。
最后准备生成 stainmap:
请确认以下路径中 没有 旧的 player.png
文件:
data/generated/sprite_uv_maps/
否则 Noita 不会重新生成 stainmap。
确认清空后,运行 noita_dev.exe
,就可以开始生成 stainmap 了!