多语言展示
当前在线:1090今日阅读:167今日分享:16

饥荒mod 制作教程

制作一个一个mod ,然后有很多人用你做的mod,可以说是一件十分有意义的事, 但是对于新手来说,看着那些程序代码,他不认识你,你不认识他,想要学习mod,又没有一个mod制作教程, 现在我就满足大家的愿望,写一个有关mod制作与饥荒游戏代码的贴子。 -----------------------------------------------------------------------------
工具/原料
1

【1】一个完整的英文版饥荒(用来查看物品的英文)

2

 
【2】Textool (用来制作图片)

3

【3】 SciTE软件(用来修改代码 用记事本也行但是不方便)

4


【4】还有一些图片编辑软件 等等

第一章,mod
2

饥荒mod的原理  注:此原理只适用于饥荒 这个游戏 别的游戏不知道  饥荒mod主要的原理有三种类型  【1】 直接在modmain.lua 文件里调用全局函数(表) 并进行修改  【2】 在替换路径相同的同名文件 (把某mod文件夹看做饥荒里的data 文件夹 路径相同且同名的 就会被替换{源文件还在 只是饥荒把新的文件看做旧的来运行})  这样做的方式跟直接修改代码的一样,但是源文件不会被损坏,如果出现错误把mod卸掉就行  【3】 新增一些文件,与饥荒里的文件不同名的 或者路径不相同的

3

如何新建一个mod  【1】任意一个地方 新建一个文件夹,这个文件夹的名称就是你新mod的名称 ( 我这里用 czf为例 ) 【2】在文件夹czf里 新建一个名为modmain.Lua 的文本档案 ,一个mod的雏形就这样诞生了 。 注:这时czf文件夹就相当于你饥荒里的data文件夹 而modmain就是用来调用全局函数(表)的文件,用lua语言在里面调用就行了  【3】一些物品属性是局部变量的,不能在这个文件里调用与改变,我们就要用替换法来修改  【4】Modmain.Lua文件还可以用来写注释,说明这个mod是谁做的 用来做什么的 什么时候做的等等

4

修改一些简单代码  制作一个mod,要功能齐全是一件很不容易的事,最好有一个团队来合作  我就以修改人物生命上限为例【找生命上限的方法可以用来寻找别的属性】 ---------------------------------------------------------------------------  【1】首先我们要知道要修改的代码在哪里,我们知道人物生命上限是150  我们打开饥荒文件夹 搜索150 一共找到33个文件  既然是代码 我们把lua文件外的文件不理他们  【2】还剩下21个 既然是人物生命上限 不关地图什么事,把路径里有map(地图)的也忽略  【3】还剩下12个 生命的英文是health 我们在这12个文件里一个一个搜索health 如果没有就忽略掉(这里有一个简单的方法,用SciTE软件同时打开12个再用find all(搜索全部)不用十几秒12个文件就搜索完了)  【4】还剩下4个 因为 生命上限是150 所以我们就看看在health附近有没有150  最终找到了在tuning 文件里的表TUNING 里的WILSON_HEALTH 数值为150  我们就确定了WILSON_HEALTH为人物生命代码  而且在定义表TUNING={}前面没有加local 说明这是一个全局的表  【【【总结】】】】 以上这个方法虽然很繁琐 但是最有效果 当然我们可以用对比法 这个方法以后再说

5

制作一个简简单单的mod(重点)  打开1.3所制作的czf 文件夹 打开里面的modmain.lua  在里面输入  【【【【 --修改人物生命mod  --夜尽天明制作于2013.06.05  TUNING.WILSON_HEALTH=10000】】】 改完后 记得save(保存)  好了 这时的czf 文件夹已经不再是一个普通的文件夹了  他是一个mod 一个你自己制作的mod

第二章
1

替换法是一种比较常用到的方法,因为他可以修改局部变量,在饥荒里 局部变量可比全局变量多得多,原理见1.2 里  2.1先来一个容易的  【【做一个mod之前要想好是做什么的 才会有地方下手】】】  我以修改树木掉落为例,用饥荒英文版可以知道 树木英文是evergreens  我们打开...\data\scripts\prefabs\evergreens.lua  (当然你搜索evergreens也行)  树木的掉落物木头的英文是log 我们就"sind all "log  总共用三处地方有log  再有 松果的英文是pinecone 这下很明白了  树木掉落就在evergreens.lua文件里的  【【【【【  ocal builds =  {  normal = {  file="evergreen_new",  prefab_name="evergreen",  normal_loot = {"log", "log", ""},  short_loot = {"log"},  tall_loot = {"log", "log", "log", "pinecone", "pinecone"},  drop_pinecones=true,  leif="leif",  },  】】】】】】】  先不急,我们是在做mod,备份evergreens.lua 到一个用1.3 新建的mod里  路径就是D:\your mod name(你的mod)\scripts\prefabs\evergreens.lua  之后 修改mod里的evergreens.lua 文件 好了之后记得save  【【见附件里的 砍树掉落木头翻三倍 mod】

2

2.2再来一个简单的  【【【【【【【方法教程-----对比法】】】】】】  我以 light (点燃) 为例  [1]先找到可以点燃物品的工具的lua(以下简称 *)  如火杖(firestaff.lua) 火把(torch.lua)等等  不可以点燃物品的工具的lua(以下简称 +)  如 斧子(axe.lua) 锄头(pickaxe.lua)等等  [2]用scite 打开 这四个文件对比  把* 和+ 代码相同的删掉(不保存 没事)  把*里不相同的删掉  把+里不相同的删掉  【【【特别说明一下  anim:SetBank("pickaxe")  anim:SetBuild("pickaxe")  anim:PlayAnimation("idle")  在每个物品里都会出现这三行 我就认为他们是相同的)】】】】  [3]到最后 也许会剩下几行,那就关闭一个(不保存)重开 删 掉刚才剩下的一部分 保存(记得备份)进入游戏看看,是不是想要的  最后剩下inst:AddComponent("lighter") 这就是 light 代码了  (其实直接看英文就知道了hehe ~~~~)  [4]开始修改了,在axe.Lua 或你想的工具 在fn 函数里 添加  inst:AddComponent("lighter")  这个工具就有light 功能了 噢耶!  [5]先不急,我们是在做mod,备份axe.lua 到一个用1.3 新建的mod里  路径就是D:\your mod name(你的mod)\scripts\prefabs\axe.lua  之后 修改mod里的axe.lua 文件 好了之后记得save

3

2.3从一行变两行  2.2里最终的结果是一行代码 接下来的结果将会是两行代码  我们要修改物品叠加上限,利用对比法  可以轻松找到(轻松???)物品叠加的代码是  【【【【【【【inst:AddComponent("stackable")  inst.components.stackable.maxsize = TUNING.STACK_SIZE_SMALLITEM  】】】】】】  在不可叠加物品里写上这段代码 物品就可以叠加了  【见附件里的 狗牙陷阱叠加.rar】

第三章 我的小物品
1

在饥荒里 我们可以随意添加一个个物品 或者动物(只要你做的出模型而且会ui)  一个物品分成  【1】 图片部分(tex)  【2】 主代码部分  【3】 附属代码  【4】注册码部分(在6月5日后已经放在附属码里)

2

tex 图片制作  Tex 图片是饥荒里的图片格式 你在游戏里见到的所有东东(包括菜单)都是用一张张tex图片拼成的  在饥荒里 我认为的图片分成两部分 一是tex图片 还有就是 人物模型(anim)  tex图片 可以用textool 导入和导出 注意导入格式而已 ----------------------------------------------------------------------------------------- 怎样知道图片格式呢 打开一张tex 图片(饥荒里的) 看窗口的最下面一行 如图:  格式就是DXT5 大小64*64 是1D的 MIPMAPS 为1 ---------------------------------------------------------------------------------------------  打开TEXCreator.exe 出现如下界面     1.黑色的是你图片要导入图片的路径  2.深绿色是你新tex图片的保存路径  3.红色的选择DXT5  4.黄色的选择 1D  5.绿色的选第一个  6.蓝色的不要点  7.粉红色的也不要点  8.深蓝色的是开始导入依照上面的方法,如果进入游戏出错,可以更换图片格式

3

人物模型制作  用上面的方法导入一张人物模型  人物模型格式见anim文件夹里的压缩文件  (导出 anim 里的某个人物模型tex图片 用图形编辑软件修改(背景要透明)) 【【【【注意图片大小 【【【注意大小 【【大小【】】】】】】】】】】  之后导入成一个新的tex 文件  --------------------------------------------------------------------------------------------------- 关键来了 注意看  备份一个anim 里的压缩文件(就是你要修改的那个人物模型)  打开备份好的压缩文件(注意 是用 winrar 打开 不是解压)  把上面更改好tex 文件改名为atlas-0.tex  【【【【【关键 关键关键关键关键关键】】】】】  把这个tex 拖入刚才打开的压缩文件的窗口里 弹出一个窗口 你选择替换文件  终于好了 一个新的人物模型就这样诞生了0.0

4

主代码部分  这个你可以选择一个与你新物品相似的 物品的lua文件 作为模板  可是要更改一些东西  我以log.lua为例 --------------------------------------------------------------------------------------- 第一行的  local assets=  {  Asset("ANIM", "data/anim/log.zip"),  Asset("IMAGE", "data/inventoryimages/log.tex"),  }  这些要改成你的新物品的 ---------------------------------------------------------------------------------- 14 15行的  inst.AnimState:SetBank("log")  inst.AnimState:SetBuild("log")  也要改 ------------------------------------------------------------------------------------------------------ 最后一行的return Prefab( "common/inventory/log", fn, assets)  也要改 -------------------------------------------------------------------------------------------- 这些改好之后,可以再新增一些代码进去,用上面所说的两种找代码的方法  主代码基本就好了

5

附属代码部分  他来自哪里  一个物品的来源有  【1】掉落(树啊 怪物啊)  【2】制作(界面边上的建造栏)  【3】天上掉的(15版的地震会掉石头 不过我不知道怎么修改,忽略掉) ------------------------------------------------------------------------------------------- 物品掉落可以修改那个怪物 或者植物的lua 文件 见2.1  制作物品可以用Recipe 函数来弄 就会在下面详解  天上掉的方法忽略掉

6

他要去哪里  【1】 工具(…有无限耐久)  【2】可以吃 【【【【inst:AddComponent("perishable")  inst.components.perishable:SetPerishTime(TUNING.PERISH_SUPERSLOW)  inst.components.perishable:StartPerishing()  inst.components.perishable.onperishreplacement = "spoiled_food"】】  【3】 可以烧(【【inst:AddComponent("fuel")  inst.components.fuel.fuelvalue = TUNING.MED_FUEL】】】】】  【4】可以制作东西(【【【Recipe】】】  【5】可以给别的动物(这个我不会 等以后更新)  只想到这么多了 以后再补充

7

你到底叫什么东东  更改人物语言文件 从而使物品有一个名字  【【【【strings.lua文件】】

8

在6.5 日 版之后 注册码会包含在附属码里  注册码  注册码就像一个名单一样 如果你没有在里面登记 你的物品就会被饥荒忽略掉  修改方法如下  【1】在你的新mod 文件夹里 创建一个名为prefabs.xml 的文本档案  复制下面的代码进去(或者自己去饥荒data文件夹里的prefabs.xml 里看格式)                                  如果有多个 格式详见饥荒原版prefabs.xml  (注意语法要符合 xml 语法)

9

整理一下下  【1】新建一个mod  【2】把人物模型的压缩包放在  【3】你的mod名称\anim\ 里  【4】把 图片放在…\ inventoryimages\里  【5】把主代码放在(和掉落代码一起)放在 ……\ scripts\ prefabs\里  【6】把prefabs.xml 放在你的mod文件夹里  好了 一个历经千辛万苦的mod 就这样好了

第四章饥荒函数
3

增加几率  我们可以用math.random 来产生随机数,有三种调用方式:  第一:不带参数,将产生 [0,1)范围内的随机数.  第二:带一个参数n,将产生1 <= x <= n范围内的随机数x.  第三:带两个参数a和b,将产生a <= x <= b范围内的随机数x  【local czf1={}  local czf=math.random(100)  if czf <= 20 then  czf1[1]="log"  elseif czf <=50 then  czf1[1]="log"  czf1[2]="log"  else  czf1[1]="log"  czf1[2]="log"  czf1[3]="log"  end】  在evergreen是文件里加上上面代码(不能在fn函数里)  之后把  【sparse = {  file="evergreen_new_2",  prefab_name="evergreen_sparse",  normal_loot = {"log","log"},  short_loot = {"log"},  tall_loot = {"log", "log","log"},  drop_pinecones=false,  leif="leif_sparse",】  改成【sparse = {  file="evergreen_new_2",  prefab_name="evergreen_sparse",  normal_loot = czf,  short_loot = czf,  tall_loot = czf,  drop_pinecones=false,  leif="leif_sparse",】  注 以上代码有可能不成功{}

注意事项
1

附件下载地址 http://pan.baidu.com/share/link?shareid=3249133832&uk=3140382264

2

textool官网(会更新textool 目前最高1.3版) http://www.dev-zilla.net/kleistudio/

3

国外mod教程 http://forums.kleientertainment.com/showthread.php?10817-TUTORIAL-Creating-a-Mod-using-the-Mod-System http://forums.kleientertainment.com/showthread.php?18685-Tutorial-My-first-mod-creating-a-new-stat

推荐信息