
想要制作《地城英雄志》有史以来最棒的模组,却不知从何下手?别再犹豫了,本指南将为你展示《地城英雄志》模组制作的基础知识,助你开启艺术创作之旅。 开始之前:编辑工具 与其他一些游戏不同,《地城英雄志》的模组制作不需要太多软件。你只需要一个图像编辑程序和一个能将文件保存为.xml格式的文本编辑器。 以下列出了一些可用于完成所有这些操作的免费热门程序: 图像编辑:Gimp

Paint NET

文本编辑 Sublime Text

Notepad ++

开始制作你的模组:基础与目录 所有模组都需要一个共同的东西:文件目录!游戏要求所有模组都具有一致的结构,如果你希望你的模组正常运行,就需要将基础文件夹放在正确的位置。根据你的操作系统,具体位置如下: Mac OSX: ~/Library/Application Support/Dungeons of Dredmor/mods Windows XP 及更早版本: C:/Documents and Settings/【你的用户名】/Gaslamp Games/Dungeons of Dredmor/mods Windows Vista 及 7: C:/Users/【你的用户名】/Documents/Gaslamp Games/Dungeons of Dredmor/mods Linux: $HOME/.local/share/Dredmor 在上述基础位置(Windows 和 Mac 系统为 /mods 文件夹,Linux 系统为 /Dredmor 文件夹)中,创建你自己的模组文件夹。例如,我的【饼干信徒】模组存放位置为: C:/Users/*我的名字*/Documents/Gaslamp Games/《地下城冒险》/mods/Disciple of Cookie 在你的模组文件夹中,标准流程是创建以下文件夹(不过你只需创建需要放入文件的文件夹,具体取决于你的模组内容): /items 你的模组中所有物品(武器、食物、 armor、炼金材料以及任何玩家可以拾取的东西)的图像文件都放在这里。 /mod 模组所需的代码(《地下城冒险》的所有代码均为.xml格式)存放在这里。这包括内容数据库——引用你的模组所有新增内容的代码,例如skillDB、spellDB以及其他后续会讨论的数据库。必须放在这里的一个文件是modDB。/soundfx 目前该文件夹似乎并未实际发挥作用。理论上,它应包含你的模组所需的音效。不过,建议直接引用完整游戏中使用的音效。 /sprites 图像文件存放于此,包括技能树图标、法术图标以及动态的法术和怪物精灵图。 完成上述操作后,你的模组文件夹结构应与下方示例类似。

注意目录 - 我使用的是Windows 7。 mod.xml 所有模组都需要一个名为mod的文件,该文件位于你的模组(mod)的/mod文件夹中。此文件为游戏提供有关你的模组的一些基本信息。该文件的基本结构如下(注意:<!-- 这表示注释。此样式括号内的任何文本都会被代码忽略 -->): <dredmormod> <revision text="1"/> <author text="你的作者名称"/> <name text="你的模组名称"/> <description text="默认显示在创意工坊中的模组描述"/> <info totalconversion="0"/> <!-- 除非你计划彻底改造游戏,否则此处应保持为0。 --> <require expansion="1"/> <!----仅当你的模组引用了【迪格尔众神领域】的内容时才包含此项--> <require expansion="2"/> <!--仅当你的模组引用了【你必须给资料片起个名字】的内容时才包含此项--> <require expansion="3"/> <!--仅当你的模组引用了【巫师之地的征服】的内容时才包含此项--> </dredmormod> 制作法术,第一部分 法术是《地下城冒险》不可或缺的一部分,因此在你的模组制作过程中,很可能需要在某些时候使用它们。最明显的用途是在玩家提升技能树等级时授予法术,但怪物、陷阱、法杖甚至一些武器也会使用法术。实际上,任何具有直接伤害以外效果的事物都需要法术。幸运的是,所有法术都集中在一个地方:spellDB.xml文件,该文件应放在你的模组的/mod文件夹中。无论你在spellDB.xml文件中放入什么内容,它都应遵循以下基本格式(除非你的模组中没有法术,这种情况下则完全不需要包含该文件): <spellDB> <spell> <!--这里是法术代码的位置--> </spell> <spell> <!--这是第二个法术--> </spell> </spellDB> 后续的任何法术都应遵循相同的模式。不过,其余代码的外观会根据所编写的特定法术类型而有所不同。 魔法法术 以下是我在【饼干信徒】模组中使用的一个法术示例。<spell name="未来饼干之梦" type="targetemptyfloor" icon="sprites/spells/futcookie32.png"> <requirements mp="60" savvyBonus="2" mincost="30"/> <effect type="spawnitematlocation" itemName="长老饼干" /> <anim sprite="sprites/spells/cookie_cast/cookie_cast" frames="6" framerate="50" centerEffect="1" sfx="missile" /> <description text="预见饼干可能出现的位置,并让现实随之改变。" /> </spell> 这到底是怎么回事呢?让我们逐行分析。 <spell name="未来饼干之梦" type="targetemptyfloor" icon="sprites/spells/futcookie32.png"> name="Dreams of Future Cookie"::这是该法术的名称,用于在代码的其他部分引用此法术。如果这是玩家施放的法术,这也将是该法术在法术列表中显示的名称。 type="targetemptyfloor":法术类型,用于告知游戏该法术的施放方式。此法术只能在游戏中的空地板格子上使用。 icon="sprites/spells/futcookie32.png":这是我放置法术图标的位置,相对于模组的基础文件夹。 <requirements mp="60" savvyBonus="2" mincost="30"/> mp="60":该法术消耗的魔法值数量。 savvyBonus="2":玩家角色每拥有一点感知属性,魔法值消耗就会减少的数值。 mincost="30":法术的最低魔法值消耗,感知加成无法使消耗低于此数值。

得益于该法术的感知加成,足够的感知值已将法术的法力消耗从默认的60点降至最低30点。 <effect type="spawnitematlocation" itemName="Elder Cookie"/> type="spawnitematlocation"::法术将产生的效果。此效果会在指定位置生成特定物品。 itemName="Elder Cookie"::该法术生成的物品名称。 <anim sprite="sprites/spells/cookie_cast/cookie_cast" frames="6" framerate="50" centerEffect="1" sfx="missile" /> sprite="sprites/spells/cookie_cast/cookie_cast"::法术精灵动画的位置。 frames="6"::该精灵的帧数。 framerate="50"::每帧显示的时间(以毫秒为单位)。centerEffect="1"::将精灵居中显示在其出现的格子中央。 sfx="missile"::使用的音效,如《地城英雄志》基础效果中所定义。 <description text="预见饼干可能出现的位置,并让现实随之改变。"/> text="预见饼干可能出现的位置,并让现实随之改变。"::用于法术描述的文本字符串。 怪物法术 怪物使用的法术与其他法术基本相似,但有一些重要区别。以下是闪烁蝙蝠使用的闪烁法术。 <spell name="怪物闪烁" type="target" icon="skills/spells/blink32.那么区别是什么呢? <description monsterText="blinks!"/> monsterText="blinks!":怪物技能需要这种独特的描述类型。 <ai hint="self"/> hint="self":告知怪物应该在哪里施放技能。 制作技能,第二部分 增益技能 增益效果嵌套在技能中,并且也可以与单个技能内的其他信息共存。在这个例子中,我们将查看【北极漩涡】技能中的增益效果。【法术名称:北极漩涡】 类型:指向性 图标:skills/spells/arctic_vortex32.png 【需求】 魔力值:9 感知加成:0.22 【 buff效果】 使用间隔:1 持续时间:4 作用自身:否 允许叠加:是 图标:skills/spells/arctic_vortex64.png 小图标:skills/spells/arctic_vortex32.png 最大叠加层数:8 负面效果:是 【光环效果】 名称:sprites/sfx/arctic_vortex/arctic_vortex 起始帧:0 总帧数:6 帧率:100 【主要 buff】 ID:2,数值:-1(敏捷) 【次要 buff】 ID:5,数值:-5(闪避) 【抗性 buff】 极寒抗性:-1 【描述】 怪物文本:召唤北方的寒风! 文本:召唤北方的寒风来折磨你的敌人,从骨子里冻结他们的血肉。造成持续伤害,并降低其闪避能力和寒冷抗性。 查看该法术中位于< buff > </ buff >标签之间的部分。 < buff useTimer="1" time="4" self="0" allowstacking="1" icon="skills/spells/arctic_vortex64.png" smallicon="skills/spells/arctic_vortex32.png" stacksize="8" bad="1" > useTimer="1":声明该增益效果将在设定时间后结束。 time="4":法术效果持续的时间。 self="1":如果法术以玩家为目标,此值应为1;否则,应为0。allowstacking="1"::声明单个目标是否可以同时激活多个该法术实例。 icon="skills/spells/arctic_vortex64.png"::法术图标的位置,相对于模组的基础文件夹,尺寸应为64x64像素。 smallicon="skills/spells/arctic_vortex32.png"::法术小图标的位置,相对于模组的基础文件夹,尺寸应为32x32像素。 stacksize="8"::该法术在单个目标上可叠加的次数。 bad="1"::该法术是被视为增益效果还是减益效果。<halo name="sprites/sfx/arctic_vortex/arctic_vortex" first="0" num="6" frameRate="100"/> name="sprites/sfx/arctic_vortex/arctic_vortex"::该增益光环特效精灵的位置,相对于模组的基础文件夹。 first="0"::声明动画开始的帧。 num="6"::该特定精灵的帧数。 frameRate="100"::动画中每帧应显示的时间,以毫秒为单位。 <primarybuff id="2" amount="-1"/> <!-- 敏捷 --> id="2"::声明要修改的主要属性。在这种情况下,是敏捷。 amount="-1"::修改所声明属性的数值。 <secondarybuff id="5" amount="-5"/> <!-- 闪避 --> id="5"::声明要修改的次要属性。在这种情况下,是闪避率。amount="-5"::用于修改指定属性的数值。 <resistbuff hyperborean="-1"/> hyperborean="-1"::用于修改指定抗性类型的数值。 法术模板 法术模板用于制作范围效果,因此不仅用于可施放的法术,还用于法术地雷和手榴弹。

默认游戏所引用的模板编码。请注意,Gaslamp Games的团队对待代码的态度与对待游戏的态度同样认真(另请注意本节末尾的【模板链接】,它将引导你了解有关制作自定义模板的一些基本信息)。 法术模板只需对标准法术代码进行小幅修改,因此让我们查看铁炸弹爆炸部分的代码。<spell name="钢铁炸弹爆炸" type="template" templateID="11"> <effect type="damage" blasting="4" conflagratory="2" affectscaster="1"/> <anim sprite="sprites/sfx/combust_hit/combust_hit" frames="9" framerate="80" centerEffect="1" sfx="blast"/> </spell> 此法术的主体与其他法术类似,但<spell>标签开头的内容正是模板发挥作用之处。 <spell name="钢铁炸弹爆炸" type="template" templateID="11"> name="钢铁炸弹爆炸"::法术名称。 type="template"::声明该法术类型为模板,这意味着其效果将相对于施法点产生作用。 templateID="11"::要使用的特定模板,已在游戏模板列表中声明。更多法术参考 虽然上述示例能帮助你开始编写法术,但你能做的远不止我明确说明的这些。以下资源可助你打造更具创意的法术。 法术系统参考 - 可用于法术以影响其行为的各种标签列表 法术类型 - 可使用的不同法术类型列表 法术效果 - 法术施放时可能产生的各种效果列表 模板 - 进一步探讨模板使用与创建的页面 法术技巧 - 社区相关内容Gaslamp Games论坛上的一个帖子,探讨了在《地下城冒险》中利用法术和模组进行创意操作的各种技巧。 制作物品:第一部分 与法术需要spellDB.xml文件以及模组需要modDB.xml文件类似,物品也需要创建一个遵循以下模板的itemsDB.xml文件: <itemDB> <item> <!--此处为物品的主体代码--> </item> <item> <!--此处为第二个物品的主体代码--> </item> </itemDB> 可制作的物品共有9种,每种物品都需要不同的信息才能正常生效:食物、饮料、武器、盔甲、箭矢、投掷武器、药水、陷阱和制作材料。幸运的是,它们都比编写法术要容易得多。 食物 为了了解食物的编写方式,我们来看看原本没什么用的苹果。 <item name="Apple" iconFile="items/food_apple.png" level="2"> <price amount="9"/> <food hp="5"/> <description text="它能让那些令人毛骨悚然的医生远离你。"/> </item> 那么每一行是做什么的呢? <item name="Apple" iconFile="items/food_apple.png" level="2"> name="Apple"::物品的名称。任何代码都可以使用这个名称来引用该物品。 iconFile="items/food_apple.png"::物品图像的位置,相对于你的模组基础文件夹。 level="2"::该物品最常出现的楼层等级。<price amount="9"/> amount="9"::物品的基础价格,游戏会根据不同难度等级自动进行相应调整。 <food hp="5"/> hp="5"::使用该食物道具时为使用者恢复的生命值。 <description text="It keeps those creepy doctors away."/> text="它能让那些令人毛骨悚然的医生远离你。"::物品的描述文本。 饮品 饮品与食物极为相似,只需修改<food/>标签中的信息即可。我们以迪格尔 Nog 为例来对此进行说明。 <item name="迪格尔 Nog" iconFile="items/booze_digglenog."这是一大杯迪格尔 Nog。如果你以前没感觉到,这绝对能让你充满节日欢乐。 具体来说,在那个<食物/>标签处。 mp="20":玩家饮用此饮品时获得的魔法值数量。 effect="Diggle Nog Effect":玩家使用此物品时施放的法术。 meat="1":让游戏知道该物品不适合素食者。 值得注意的是,这些属性中的任何一个都可以用于食物物品,包括mp属性。然而,当它们被应用时,可能会出现一些奇怪的行为。

例如,这是玩家正在食用我模组中的饼干。该物品同时具有生命值和魔法值标签,但仅显示其提供的生命值数值。此外,当玩家食用它时,会播放饮用动画。 药水 药水的功能与食物和饮料非常相似。唯一真正的区别是使用<potion/>标签而非<food/>标签。 <item name="治疗药水" iconFile="items/potion_health0.png" level="1"> <description text="这个小烧瓶里装满了粘稠的 crimson 液体。"/> <potion spell="次级治疗药水"/> <price amount="60"/> </item> <potion spell="次级治疗药水"/> spell="次级治疗药水"::药水通过向玩家施放法术来发挥作用——这指定了药水要施放的法术。武器 武器!是游戏中非常受欢迎的一类物品。它们与其他物品有何不同?让我们从莱肯法杖中寻找答案。 <物品名称="莱肯法杖" 图标文件="items/staff_lekon.png" 神器="1" 等级="12" 类型="3"> <价格 数量="20000"/> <武器 钝击="8" 以太="8" 存在="8"/> <神器 品质="7"/> <目标命中效果增益 名称="莱肯混乱效果" 百分比="50"/> <描述 文本="这根法杖曾被莱肯在旅途中使用,向敌人投射令人分心的幽默影像。"/> </物品> <物品>标签是一切开始变化的地方。 <物品名称="莱肯法杖" 图标文件="items/staff_lekon.触发此踏板会导致石像鬼向你吐出一道巨大的旋转以太能量箭。哎哟! 价格:420 由于独特的代码行包含在<trap/>标签内,我们将对此进行查看。 <trap origin="dungeon/trap_wall_gargoyle0.png" originFacing="south" originMount="wall" trigger="always" casts="Aethereal Missile" level="5"/> origin="dungeon/trap_wall_gargoyle0.png":用于向玩家发射能量箭的特征图像文件位置,相对于模组的基础文件夹。originFacing="south"::弩箭发射器应朝向的位置,以及它相对于陷阱的位置。此发射器将位于北侧,直接在陷阱上方,朝向陷阱。 originMount="wall"::弩箭发射器应安装的位置。 trigger="always"::陷阱被踩到时的触发次数。选项为"always"(始终触发)和"once"(触发一次)。 casts="Aethereal Missile"::陷阱被踩到时触发的效果。无论是否制作弩箭发射器,此标签始终用于陷阱。 level="5"::该物品最常出现的楼层等级。name="莱肯法杖"::该物品的名称。你可以通过引用此名称在代码的其他部分引用该物品。 iconFile="items/staff_lekon.png"::物品图标的位置,相对于模组的基础文件夹。 artifact="1"::防止物品名称发生变化(例如克朗改造)。 level="12"::该物品最常出现的楼层等级。 type="3"::该物品的武器种类——这里是法杖类型武器。 每种武器类型由不同的类型编号表示。你可以使用下面的图表作为参考。类型编号 武器 0 剑 1 斧 2 锤 3 法杖 4 弓 5 投掷武器 6 弩箭 7 匕首 8 长柄武器 武器特有的下一行代码是<weapon/>标签。 <weapon crushing="8" aethereal="8" existential="8"/> crushing="8":告知游戏该武器应造成的钝击伤害数值。 aethereal="8":告知游戏该武器应造成的以太伤害数值。 existential="8":告知游戏该武器应造成的存在伤害数值。更多伤害类型,请查阅“制作物品:第二部分”末尾的参考章节。<artifact quality="7"/> quality="7"::使物品有机会生成时附带7个随机加成 <targetHitEffectBuff name="莱肯混乱效果" percentage="50"/> name="莱肯混乱效果"::此武器击中目标时所施放的法术名称 percentage="50"::该武器每次命中时施放指定法术的几率 制作物品(第二部分) 护甲 护甲与武器存在一些细微差异。这一点在交通锥的代码中有所体现。 <item name="交通锥" iconFile="items/helm_traffic_cone.png"> <price amount="20"/> <armour level="1" type="头部"/> <secondarybuff id="6" amount="1"/> <!----闪避-- <描述文本="它或许只是一顶滑稽的帽子,但至少能让你不会被车撞到。"/> </物品> <物品>标签内的信息在之前的示例中已有涉及,<价格/>标签也是如此,所以我们从<护甲/>标签开始讲解。 <护甲等级="1"类型="头部"/> 等级="1"::决定该物品最常出现的楼层。请注意,与其他将等级标签置于<物品>标签内的物品不同,护甲要求等级标签必须位于<护甲>标签内。 类型="头部"::说明该护甲的穿戴部位。其他可选部位包括:胸部、腿部、手部、脚部、颈部、戒指、盾牌和袖子。 <次要增益编号="6"数值="1"/>--闪避-- id="6"::受影响的次级增益类型 amount="1"::已识别次级属性的修改量。若需查看所有可引用的属性增益列表,请查阅本部分底部的参考链接。 箭矢 箭矢与武器极为相似,但有两个重要区别。以倒刺铜箭为例: <item name="特斯拉之箭" iconFile="items/bolt_tesla.png" level="7" type="6" maxstack="5"> <price amount="178"/> <weapon crushing="1" hit="特斯拉之箭命中"/> <description text="由巫师特斯拉发明,这些箭矢在推出时震惊了弩箭界。"/> </item> 这两个区别均位于<item>标签内。<物品名称="特斯拉之矢" 图标文件="items/bolt_tesla.png" 等级="7" 类型="6" 最大堆叠数="5"> 名称="特斯拉之矢"::物品名称。在代码其他部分引用此物品时,直接使用此名称。 图标文件="items/bolt_tesla.png"::物品图像文件位置,相对于模组的基础文件夹。 等级="7"::此物品最常出现的楼层等级。 类型="6"::声明物品类型。"6"表示此物品为矢类。 最大堆叠数="5"::单个堆叠中该物品的数量。 投掷武器 投掷武器与其他所有物品种类一样,需要一些独特代码。例如,我们来看看 bola。 <物品名称="bola" 图标文件="items/thrown_bolas.【物品】 价格:16 武器属性:钝击伤害1,窒息伤害3,投掷动画为sprites/sfx/thrown_bolas.spr,命中效果为 bola根须 法术 描述:试着跟海关官员解释这些东西吧。 投掷武器在<weapon/>标签中有其独特信息。 crushing="1":该物品应造成的钝击伤害数值。 asphyxiative="3":该物品应造成的窒息伤害数值。 thrown="sprites/sfx/thrown_bolas.spr":物品投掷时在空中飞行的精灵动画。 hit="Bolas Root":对受影响目标施放的法术。陷阱 陷阱在设计上存在一些差异,但所有陷阱都有一个共同点:踩上去就会触发法术。有时是爆炸,有时是从地牢墙壁射出的箭矢。由于前者只是后者的一种,且没有关于攻击来源的信息(只需指定某个法术,它就会生效),我们来看魔法石像鬼发射器的例子,它会从附近墙壁上的装置向玩家发射箭矢。 <物品名称="魔法石像鬼发射器"图标文件="dungeon/trap_pressure_plate0.png"> <陷阱来源="dungeon/trap_wall_gargoyle0.

游戏中一种陷阱(及其附带的螺栓发射器),使用originFacing="south"(朝南)和originMount="wall"(墙壁安装)标签。 制作材料 任何物品都可以成为制作材料,只需在<item>标签中添加两个新标签即可实现。不过,有些物品,例如【塑料锭】,除了作为制作材料外确实没有其他用途。 <item name="Plastic Ingot" iconFile="items/ingot_plastic.png" alchemical="1" craftoutput="1"> <price amount="100"/> <description text="轻盈、鲜艳,且完全不可生物降解。"/> </item> <item name="Plastic Ingot" iconFile="items/ingot_plastic.png" alchemical="1" craftoutput="1"> name="Plastic Ingot"::物品名称,用于在游戏中以及代码的其他部分引用该物品。iconFile="items/ingot_plastic.png"::物品图像文件的位置,相对于模组的基础文件。 alchemical="1"::声明该物品是否会出现在合成贩卖机中。 craftoutput="1"::声明该物品是否可以通过合成制作。 物品参考 物品系统参考-不同标签的列表,附带对其作用和支持它们的物品类型的基本解释。 玩家属性-不同玩家属性的列表,这些属性常用于增益效果中。 伤害类型-游戏中不同伤害类型的列表,用于引用造成伤害和抵抗伤害。创建房间 《地下城冒险》通过从一系列预制房间中选择来生成地牢,这些房间都存储在基础游戏的单个文件中。尽管自定义房间不像法术或物品那样是游戏模组中热门的部分,但你的模组中确实可以包含自定义房间,基础游戏会引用这些房间并将其随机分布在地牢各处。你制作的任何房间都应放入一个名为rooms.xml的文件中,并将该文件放置在游戏的/mod文件夹内。该文件的基本结构应模仿以下模板: <roomDB> <room> <!--这是模组添加的第一个房间--> </room> <room> <!--这是模组添加的第二个房间--> </room> </roomDB> 每个<room>标签都包含一个完整的房间。为了了解房间代码的结构,我们来看一个我已添加到游戏中的房间示例。 <room width="21" height="12" name="狗头人测试室"> <row text="#####################"/> <row text="#....#P!.423.!P#.^..#"/> <row text="#......!!!.!!!......#"/> <row text="#........PPP........#"/> <row text="#....^..............#"/> <row text="#...............^...#"/> <row text="#......GGGGGGG......#"/> <row text="#......G6...5G......#"/> <row text="d.....GG..1..GG.....d"/> <row text="#..........^........#"/> <row text="#................^..<row text="######D#######D######"/> <flags minLevel="0" maxLevel="3" special="1" noblockers="1"/> <pedestal at="1" name="狗头人测试纪念台" text="这里是曾经宏伟的矮人狗头人测试室仅存的遗迹。请勿掠夺这一历史遗迹。"/> <loot at="2" amount="1" type="神器"/> <loot at="3" amount="1" type="箭矢" percent="95"/> <loot at="4" amount="1" type="药水" percent="95"/> <loot at="5" amount="1" type="药水"/> <customblocker name="狗头人纪念神龛" at="6" png="dungeon/koboldstat.png" description="这座纪念碑是为了纪念那些为推动矮人金属市场而牺牲的、遭受残害的众多狗头人。"要理解这里发生了什么,让我们稍微分解一下代码。 <room width="21" height="12" name="狗头人测试室"> width="21":必须始终声明每个房间最宽横截面的宽度。 height="12":必须始终声明每个房间最高横截面的高度。 name="狗头人测试室":房间的名称。说实话,给房间命名除了让测试变得更容易之外,并没有太大作用。 <row text="#####################"/> <row text="#....#P!.423.!P#.^..#"/> <row text="#......!!!.!!!......#"/> <row text="#........PPP........#"/> <row text="#....^..............#"/> <row text="#...............^...#"/> <row text="#......GGGGGGG......"<row text="#......G6...5G......#"/> <row text="d.....GG..1..GG.....d"/> <row text="#..........^........#"/> <row text="#................^..#"/> <row text="######D#######D######"/> row text="#####################"/> :: 这部分代码定义了房间的一行。这部分代码本质上是房间本身的视觉描绘。可以将其与下方两张游戏内房间的图片进行对比。

这是房间的下半部分。

这是房间的上半部分,在假墙被摧毁之后。 关于上述代码,需要注意的重要部分是它与游戏内容是1:1对应的。text=""标签内包含的每个字符都代表游戏中的一个地面区域。要了解使用哪些字符以及每个字符的含义(例如,我第一次学习制作房间时曾想“这游戏里有假墙?”),请参考下面的表格。 字符 游戏中等价物 # 墙壁 P 墙壁,可能带有挂毯或画作 ! 可破坏墙壁 .地板砖 X 无法通过的地砖 ^ 可能出现的随机地面装饰 D 横向门 d 纵向门 @ 可能出现的随机地面障碍物 S 店主(布拉克斯) s 商店入口 i 商品展示台 L 岩浆 W 水 I 冰 G 黏液 房间代码的其余部分提供了关于该房间的额外信息以及可能在那里发现的任何特殊物品。 <flags minLevel="0" maxLevel="3" special="1" noblockers="1"/> minLevel="0":此房间最早可出现的楼层,其中第一层为0级。 maxLevel="0":此房间可出现的最深楼层。 special="1":若设为"1",则每层只会出现一次此房间。noblockers="1"::若设为"1",此房间将不会生成自动售货机和超级宝箱等阻挡性物品。 <pedestal at="1" name=" kobold测试标识" text="这里是曾经宏伟的矮人kobold测试室仅存的遗迹。请勿掠夺这一历史遗迹。"/> at="1"::放置基座的房间参考编号。 name=" kobold测试标识"::光标悬停在基座上时显示的文本。 text="这里是曾经宏伟的矮人kobold测试室仅存的遗迹。请勿掠夺这一历史遗迹。"::点击基座时显示的文本。 <loot at="2" amount="1" type="artifact"/> at="2"::放置战利品的房间参考编号。amount="1"::放置在参考点的战利品数量。 type="artifact"::在参考点生成的战利品类型。战利品类型选项包括:药水、武器、护甲、食物、祖尔基德、神器、 reagents、工具包、箭矢、组件、法杖、杂物。 <loot at="3" amount="1" type="bolts" percent="95"/> 虽然前例中使用了at、amount和type标签,但percent标签是新增的。 percent="95"::战利品生成的概率。 <customblocker name="Memorial Kobold Shrine" at="6" png="dungeon/koboldstat.png" description="这是一座纪念碑,用以纪念那些为推动矮人金属市场而牺牲的、被残忍对待的 kobolds。"/> name="Memorial Kobold Shrine"::鼠标悬停时显示的物品名称。at="6"::生成物品的参考编号。 png="dungeon/koboldstat.png"::物品图像文件的位置,相对于模组的基础文件夹。 description="这是一座纪念碑,用以纪念那些为推动矮人金属市场而牺牲的无数被残害的 kobold(狗头人)。"::鼠标悬停在物品上时显示的描述。 制作怪物:第一部分 对游戏中现有的怪物种类感到厌倦了吗?你可以创建更多怪物!要做到这一点,你需要在你的/mod文件夹中添加一个modDB.xml文件,该文件需要看起来像这样: <monDB> <monster> <!--此处为怪物代码所在位置--> </monster> <monster> <!--此处为另一个怪物的代码所在位置--> </monster> </monDB> 所有怪物的编码方式相似,因此我们来查看【Blobber(黏怪)】的部分代码以了解其具体形式。

<怪物 名称=" blob怪" 等级="0" 体型="小型" 溅血效果="粘液" 分类="其他"> <闲置动画 左="sprites/monster/blobby/blobby_run_l.spr" 右="sprites/monster/blobby/blobby_run_r.spr" 上="sprites/monster/blobby/blobby_run_u.spr" 下="sprites/monster/blobby/blobby_run_d.spr"/> <攻击动画 左="sprites/monster/blobby/blobby_atk_l.spr" 右="sprites/monster/blobby/blobby_atk_r.spr" 上="sprites/monster/blobby/blobby_atk_u.spr" 下="sprites/monster/blobby/blobby_atk_d.spr"/> <受击动画 左="sprites/monster/blobby/blobby_hit_l.spr" 右="sprites/monster/blobby/blobby_hit_r.spr" 上="sprites/monster/blobby/blobby_hit_u.spr" 下="sprites/monster/blobby/blobby_hit_d.spr"/> <死亡动画 名称="sprites/monster/blobby/blobby_die.spr"/> <!【音效】攻击="blob攻击" 命中="blob伤害" 死亡="blob死亡" 施法="blob施法" 【音效】攻击="琼脂攻击" 命中="琼脂伤害" 死亡="琼脂死亡" 施法="琼脂施法" 【AI】攻击性=3 活动范围=4 【视野】角度=270 修正值=0.75 【击中效果】法术="弱酸性水池" 触发概率=1/5 【属性】数量=2 经验值=5 【伤害】钝击=1 酸性=2 【次要增益】ID=4 数值=-5(暴击) 【次要增益】ID=6 数值=9(闪避) 【抗性】酸性=3 穿刺=2 【信息】学名=(Gloppus Gloppus Generis) 描述=这是一团有生命的粘液,可能来自某个冒险者的腋窝。制作怪物(第二部分) 关于怪物版本的说明 正如 blob 怪示例所示,怪物版本基于基础怪物的代码。因此,它们的代码(作为基础<monster>标签的子集进行组织)除了色调外,省略了所有关于怪物外观的信息。色调只是一个用于修改原始怪物所有精灵颜色的值(可以尝试调整该值来了解不同数值对应的颜色效果)。在“制作怪物(第一部分)”示例中看到的其他标签,只是可在基础怪物中查看的修改后属性。 迪格尔参考示例 - 对迪格尔代码的详细解析。本次更新存在一些值得注意的差异,例如可让玩家变身为怪物的代码。 制作与配方 任何物品都可用于制作配方。正如物品部分所述,部分物品专门用于制作,而其他物品则带有表明其为制作产出物的标签。不过,制作配方基本上可独立于所涉及的物品存在——配方本身会引用所使用的物品和产出的物品。 常规制作 制作功能默认包含在游戏中,且应包含在一个遵循以下模式的craftDB.xml文件中: <craftDB> <craft> <!--此处为单个配方的代码位置--> </craft> <craft> <!--第二个配方的代码将放在这里--> </craft> </craftDB> 配方本身应使用以下语法: <craft hidden="1"> <output skill="2" name="强效赋能药剂" amount="1"/> <output skill="4" name="强效赋能药剂" amount="2"/> <output skill="5" name="强效赋能药剂" amount="3"/> <tool tag="alchemy"/> <input name="魔力药剂"/> <input name="翠绿毒药"/> <input name="生命之水"/> </craft> 这是什么意思? <craft hidden="1"> hidden="1"::如果为"1",玩家必须在某处找到配方才能学习。如果为"0",或者省略hidden标签,玩家将默认知晓该配方。<output skill="2" name="强效赋能药剂" amount="1"/> skill="2"::可产出该产物的制作等级。 name="强效赋能药剂"::在output标签中声明的技能等级下,此配方所产出的物品。 amount="1"::此产出的物品数量。单个配方可声明多个产出,正如强效赋能药剂的示例所示,这些产出通常用于在不同制作技能等级下产出不同数量的同一物品。 <tool tag="alchemy"/> tag="alchemy"::制作该物品所需的制作工具,进而关联到制作能力。可选值包括alchemy、still、ingot、smithing、tinkerer、grinder和smithing。<input name="魔力药剂"/> name="魔力药剂"::配方所需的一种物品名称。配方通常需要多种材料,每种材料都需要单独的<input/>标签。<monster name="电力黏球" level="1"> <palette tint="-50"/> <resistances 伏特="4" 穿刺="2" /> <stats numFig="2" numRog="1" xpValue="10"/> <damage 碾压="1" 伏特="2" 酸性="0"/> <secondarybuff id="4" amount="-5"/> <!-- 暴击 --> <info latin="(Gloppus Gloppus Electrolysissus)" text="如果你以为这只是一团普通的活性黏液,那你可要大吃一惊了。"<怪物 名称="偷窃粘液怪" 等级="4"> <色调 色彩="-75"/> <抗性 酸性="4" 穿刺="2"/> <属性 力量="1" 敏捷="6" 偷窃="1" 经验值="40"/> <伤害 钝击="1" 伏特="2" 酸性="0"/> <AI 偷窃概率="20"/> <次级增益 编号="4" 数值="-5"/> <!-- 暴击 --> <次级增益 编号="6" 数值="25"/> <!-- 闪避 --> <信息 学名="(Gloppus Gloppus Packrattus)" 描述="偷窃粘液怪喜欢把它能拿到的所有东西都据为己有(如果它有手的话?)。"/> </怪物> 可以看出,基础怪物被创建后,会通过编辑来生成不同的怪物。这就是那些超强力重涂色怪物的情况。为确保其正常运作,务必确保<monster>标签都像上述示例那样闭合。我们将从基础的Blob怪开始看起。 <monster name="Blob怪" level="0" tiny="1" splat="goo" taxa="Other"> name="Blob怪"::怪物的名称。 level="0"::该怪物最常出现的等级。 tiny="1"::当此怪物在墙后时是否应有箭头指向它。若为"1",则会显示箭头。 splat="goo"::该怪物死亡时会留下的血迹类型。 taxa="Other"::怪物的种类,用于某些对不同怪物有不同效果的法术。可选类型如下:动物、软泥怪、恶魔、亡灵、构装体及其他。 <idleSprite left="sprites/monster/blobby/blobby_run_l.spr" right="sprites/monster/blobby/blobby_run_r.spr" up="sprites/monster/blobby/blobby_run_u.spr" down="sprites/monster/blobby/blobby_run_d.spr"/> left="sprites/monster/blobby/blobby_run_l.spr"::软泥怪向左移动时使用的精灵文件位置。 right="sprites/monster/blobby/blobby_run_r.spr"::软泥怪向右移动时使用的精灵文件位置。 up="sprites/monster/blobby/blobby_run_u.spr"::软泥怪向上移动时使用的精灵文件位置。 down="sprites/monster/blobby/blobby_run_d.spr"::软泥怪向下移动时使用的精灵文件位置。上述示例展示了Blob移动所需的代码,为怪物提供了向左、向右、向上和向下移动的动画。每个怪物应包含三组遵循此基本方向动画模板的动画:idleSprite(如之前示例所示)、attackSprite(用于怪物攻击的动画)和hitSprite(怪物被攻击时播放的动画)。列出的第四种精灵dieSprite只需一个通过名称标签声明的精灵动画,如Blob代码中所示。 <sfx attack="agar_attack" hit="agar_damage" die="agar_die" spell="agar_cast"/> attack="agar_attack":怪物攻击时播放的声音。hit="agar_damage"::怪物被击中时播放的音效。 die="agar_damage"::怪物死亡时播放的音效。 spell="agar_damage"::怪物施法时播放的音效。 所有这些被引用的音效,以及模组中可使用的所有音效,均位于基础游戏的/sfx文件夹中。 <ai aggressiveness="3" span="4" /> aggressiveness="3"::玩家与怪物的距离达到此值时,怪物会开始跟随玩家。 span="4"::怪物会忘记玩家的距离。 <sight cone="270" modifier="0.75" /> cone="270"::怪物前方的视野角度。 modifier="0.75"::用于修改怪物的视野角度。<触发法术="弱酸性水池" 触发概率="5分之一"/> 法术="弱酸性水池"::受到伤害时施放的法术。 触发概率="5分之一"::法术施放的频率(此处为每5次命中触发1次)。 <属性 战士等级="2" 经验值="5"/> 战士等级="2"::该怪物拥有的战士职业等级数量。同样可选择盗贼等级和法师等级,分别对应盗贼和法师职业等级。 经验值="5"::该怪物的经验值奖励。 <伤害 碾压="1" 酸性="2"/> <次要增益 编号="4" 数值="-5"/> <!-- 暴击 --> <次要增益 编号="6" 数值="9"/> <!---- 闪避 -- <抗性 酸性="3" 穿刺="2" /> 这些属性与武器和护甲部分中显示的属性完全相同——它们定义了怪物的攻击伤害及其额外属性,与前面提到的<属性/>标签中给出的主要属性点相关。有关这些属性的更多信息,请查看武器和护甲子部分以及物品部分中的物品参考。 <信息 拉丁名="(Gloppus Gloppus Generis)" 文本="这是一团有生命的黏液,可能来自某个冒险者的腋窝。"/> latin="(Gloppus Gloppus Generis)":怪物的拉丁名。实际上游戏中完全没有使用这个名称。 text="It's a blob of animated slime, possibly from an adventurer's armpit.":怪物的描述文本。

此外,不同配方使用的材料数量不同,最多为四个。 镶嵌 镶嵌功能需要【巫师之地的征服】扩展包,它需要一个结构类似的数据库文件——encrustDB.xml,其组织方式应如下例所示。 <encrustDB> <unstableEffect/> <!--此处用于定义不稳定的镶嵌效果--> <encrust> <!--此处为第一个镶嵌配方的代码--> </encrust> <encrust> <!--此处为第二个镶嵌配方的代码--> </encrust> </encrustDB> encrustDB可用于制作镶嵌的不稳定效果以及镶嵌配方。首先,让我们来看一个不稳定镶嵌效果的示例:爆炸诅咒。 <unstableEffect name="Exploder" spell="Grenade Self"/> name="Exploder"::诅咒的名称 spell="Grenade Self"::触发不稳定效果时施放的法术 不稳定效果实际上就是对玩家施放的有害法术——它们有一个名称和一个相关的施放法术,仅此而已。然而,镶嵌本身则更为复杂——如下方的毁灭鞘套示例所示。 <encrust name="Ruinous Sheathing"> <description text="这把武器会消耗骨骼并腐蚀血肉。真可怕。【技能名称:无】 描述:练习携带他人的盾牌让你更擅长使用自己的盾牌。 次要增益:格挡值+8 【技能名称:闪避掩护!】 描述:打得更聪明,而非更强!被击中后可在一段时间内提升防御力。 玩家受击效果增益:获得【闪避掩护!】状态,防御力提升20% 次要增益:格挡值+2 首先,我们来解析<skill>标签中的信息,该标签在所有技能树中用于告知游戏此技能树的存在。<skill name="持盾者" id="8" type="战士" achievement="ACHIEVEMENT_SHIELD_MASTERY" description="使用盾牌时可获得战斗加成和特殊攻击。"> name="持盾者"::技能树名称。 id="8"::该技能树的标识符。每个技能树都必须有其唯一的标识符。但当前技能树中已不再使用id标签,而是使用skillName标签,并将其值设置为某个短语而非数字。 type="战士"::技能树的类型,这决定了玩家每次升级该技能树时获得的技能点类型。该值的选项有战士、巫师和盗贼。成就="ACHIEVEMENT_SHIELD_MASTERY"::完成该技能树时解锁的成就。目前,在模组中包含此成就并无实际作用。 描述="使用盾牌时可获得战斗加成和特殊攻击。"::技能树的描述。<art icon="skills/skill_shieldbearer.png"/> 图标="skills/skill_shieldbearer.png"::用作技能树代表性图标的图像位置。<loadout type="armour" subtype="Wooden Shield"/> 类型="armour"::玩家选择此技能树生成时获得的物品类型。此标签的选项包括:armour、weapon、wand、gem、potion、food、booze、artifact、mushroom、toolkit和misc。子类型="木盾"::指定类型的特定物品将给予玩家。需要注意的是,<loadout>标签完全是可选的。接下来,我们将了解<ability>标签中应包含的内容。<附魔名称="毁灭鞘装"> 名称="毁灭鞘装"::附魔的名称。 <描述文本="这把武器吞噬骨骼,腐蚀血肉。真可怕。"/> 测试文本="这把武器吞噬骨骼,腐蚀血肉。真可怕。"::附魔的描述文本。 <工具标签="炼金术"/> <槽位类型="武器"/> <材料名称="翠绿毒药"/> <材料名称="翠绿毒药"/> <材料名称="酸液瓶"/> <材料名称="青铜匕首"/> <技能等级="3"/> <伤害加成酸性="3"腐烂="3"/> <附魔效果名称="邪恶闪光倒刺"/> <不稳定性数值="8"/><tool tag="alchemy"/> tag="alchemy"::制作此物品所需的制作工具,进而引申为制作能力。可选值包括炼金术、蒸馏器、铸锭、锻造、工匠、研磨器和锻造。 <slot type="weapon"/> type="weapon"::此镶嵌可应用的物品类型。该标签的可选值包括武器、盾牌、远程武器、胸甲、腿甲、护手、腰带、戒指、鞋子、头盔和项链。 <input name="Verdant Poison"/> name="Verdant Poison"::此镶嵌所需的一种输入物品。所有输入物品都需要各自的<input/>标签。 <skill level="3"/> level="3"::玩家完成此镶嵌所需的相应技能等级。<伤害加成 酸性="3" 腐化="3"/> 酸性="3"::为受此镶嵌影响的物品增加的酸性伤害值。 腐化="3"::为受此镶嵌影响的物品增加的腐化伤害值。伤害、主属性、副属性和防御加成均遵循用于为物品应用这些数值的相同标签约定——有关这些内容可用选项的更详细说明,请参考【制作物品】部分。此外需要说明的是,法术也可以添加到物品镶嵌中;尽管在【毁灭鞘套】示例中没有此类代码,但以下是该代码行应有的示例:<power name="Grenadier"/>。<power/>标签中唯一可添加的信息是名称,而赋予名称的值是将被添加到镶嵌物品上的法术名称(该物品必须是武器或十字弓)。<encrustwith name="wickedly gleaming barbs"/>。name="wickedly gleaming barbs"::用于描述此镶嵌对被镶嵌物品进行镶嵌的描述文本。<instability amount="8"/>。amount="8"::添加到镶嵌物品上的不稳定性数值。不稳定性本质上是在对物品进行镶嵌时,其中一种不稳定镶嵌效果被应用到该物品上的几率。每次后续镶嵌都会为物品带来新的不稳定性数值,该数值会与该次镶嵌前物品已有的不稳定性数值相乘。例如,一个不稳定性数值为10的物品,在镶嵌一个不稳定性数值为8的镶嵌物后,其不稳定性数值将变为80。此数值随后将作为不稳定效果被应用到新镶嵌物品上的几率(以100为基数)。 制作技能树 技能树是游戏中最受欢迎的模组类型之一,但幸运的是,创建它们并不特别困难。每个技能树都遵循相同的结构,应按如下所示放置在skillDB.xml文件中。 <skillDB> <skill skillName="某技能树名称"> <!--此处填写技能树的一些基本信息--> </skill> <ability skillName="某技能树名称" startSkill="1"> <!--此处填写技能树的第一级内容--> </ability> <ability skillName="某技能树名称" level="0"> <!--此处填写技能树的第二级内容--> </ability> <ability skillName="某技能树名称" level="1"> <!--此处为技能树第三级内容--> </ability> <skill skillName="另一技能树名称"> <!--此处为技能树的一些基本信息--> </skill> <ability skillName="另一技能树名称" startSkill="1"> <!--此处为技能树第一级内容--> </ability> <ability skillName="另一技能树名称" level="0"> <!--此处为技能树第二级内容--> </ability> <ability skillName="另一技能树名称" level="1"> <!--这是技能树第三层的位置-- </ability> </skillDB> 举个例子,我们来看看盾卫者技能树的一部分。 <skill name="盾卫者" id="8" type="战士" achievement="ACHIEVEMENT_SHIELD_MASTERY" description="使用盾牌时可获得战斗加成和特殊攻击。"> <art icon="skills/skill_shieldbearer.png"/> <loadout type="armour" subtype="木盾"/> </skill> <ability name="盾卫者" icon="skills/skill_shieldbearer.png" skill="8" startSkill="1"> <description text="是带着盾牌凯旋,还是躺在盾牌之下?这是为注重防御的冒险者准备的。"/> </ability> <ability name="盾牌侍从" icon="skills/skill_shieldbearer.

不同技能树可以拥有不同数量的技能等级,但技能的最大数量为8个(再多就无法放入技能书了!)。 <ability name="Duck And Cover!" icon="skills/warrior/shieldbearer1_64.png" skill="8" level="1"> name="Duck And Cover!"::此技能的名称。 icon="skills/warrior/shieldbearer1_64.png"::用作此技能图标的图像位置。 skill="8"::表明该技能属于哪个技能树。如上文所述,应使用skillName标签而非id标签。 level="1"::该特定技能在技能树中解锁的等级。技能树中的第一个技能应使用startSkill标签而非level标签,下一个技能应使用level标签并将值设为“0”,再下一个设为“1”,以此类推。 <description text="打得更聪明,而非更强!被击中后可在一段时间内提升你的防御力。"/> text="打得更聪明,而非更强!被击中后可在一段时间内提升你的防御力。"::该技能的描述文本。 <playerHitEffectBuff percentage="20" name="闪避掩护!"/> percentage="20"::该 buff 的触发几率。 name="闪避掩护!"::击中效果 buff 触发时所施放的法术名称。 <secondarybuff id="7" amount="2"/> <!-- 格挡 --> id="7"::此技能所加成的次要属性。amount="2"::指定属性的变化数值。 技能树参考 技能系统参考 - 包含可用于创建技能树的各类标签说明。 制作精灵图 /sprite文件夹通常不仅用于存储精灵图,还用于存储模组引用的所有图像文件。然而,游戏中实际的动画(称为精灵图)不能仅作为该文件夹中的另一个文件存在,而是需要有自己的子文件夹。基础游戏中的一些早期文件会引用".spr"文件,但此系统已不再使用。相反,你为怪物、法术或其他任何内容制作的精灵图,都应简称为“精灵图名称”,其中该精灵图名称是包含动画组成图像的基础文件夹的名称。例如,我们来看一行引用动画精灵图的代码示例: <anim sprite="sprites/spells/cookie_cast/cookie_cast" frames="6" framerate="50" centerEffect="1" sfx="missile" /> 该代码行的具体作用可在“制作法术”部分找到,但这里我们关注的是sprite=部分。可以看到,其值不以文件类型结尾,而只是写着“cookie_cast”。这是因为游戏知道此处的值应为动画精灵,因此会假定它接收到的是一个包含图像的文件目录(根据帧数的值,应有6张图像)。

这是精灵文件引用的目标文件夹。图像文件本身按顺序编号,从0开始一直到精灵总数减一。

你的数字实际上不需要四位,只要所有数字的位数相同即可。 动画精灵的实际美术设计完全由你这位模组制作者决定。在这方面,你只需记住你正在制作帧。使用的第一个图像文件cookie_cast0000是动画的第一帧,而cookie_cast0001是第二帧。你的目标应该始终是创建一个保持一致艺术风格的动画,但这超出了本教程的范围。 测试你的模组 制作模组时,发布前测试你的作品总是个好主意。没人喜欢下载损坏或有严重bug的东西。要做到这一点,有三种值得注意的方法可以测试你的模组并确保一切正常。 《地下城冒险》模组验证器 《地下城冒险》模组验证器是一款用于在模组发布到创意工坊前检查代码错误的工具。不过,在首次加载模组到游戏之前,也可以使用它来进行检查——实际上,这样做是个好主意。验证器本身是一个单独的文件,你需要将模组的编译副本拖入其中。要制作这个副本(发布模组也需要此副本),请将模组的各个文件夹(/items、/mod、/sprites等)压缩成一个.zip文件夹,该文件夹需与你的基础模组文件夹具有相同的目录结构。换句话说,当你打开这个.zip文件夹时,其内容应该大致如下:

是的,这和教程开头的图片是同一张。我可没偷懒。 接着,你需要将这个.zip文件夹放到《地下城冒险》的Steam文件夹中,默认路径为steamapps/common/Dungeons of Dredmor/,然后将其拖拽到名为DredmorModValidator的.exe文件上。稍等片刻后,会生成一个名为【你的模组.zip文件夹名称】.zip.ValidationLog的文本文档,它会识别出你的模组中存在的任何编码错误。如果日志提示有错误,请尝试修复它们,然后重新压缩模组并将新的.zip文件拖入验证器。一旦生成的文本文档为空,你就可以确定你的模组没有任何导致bug的编码语法错误了。调试模式 调试模式是运行《地下城冒险》的一种特殊方式,它能为你提供本质上相当于作弊的功能,从而让测试你的模组变得更简单。要以调试模式启动游戏,首先在你的Steam库中右键点击该游戏,然后点击“属性”。

接下来,点击【设置启动选项】。

最后,只需在启动选项框中输入【-debug-flag】,点击确定,然后关闭属性窗口。

现在,每当你启动游戏时,它都会以调试模式运行。这意味着两件事:你可以点击游戏内地图将自己传送到点击的位置(如果该位置在房间内),并且可以使用下表中列出的任何键盘快捷键。 快捷键 操作 b 前往口袋维度 I 给自己随机战利品 + 加快所有动画速度 - 减慢所有动画速度 P 上一层 p 下一层 L 显示地图 l 升级15次 测试房间 自定义房间很容易测试。要加载它,你首先需要将房间代码添加到基础游戏的rooms.xml文件中,该文件位于模组验证器部分提到的《地城英雄志》Steam文件夹的/game文件夹中。只需在文本编辑器中打开该文件,将模组的rooms.xml文件中的房间代码复制到这个文件中,并确保适当地更新任何引用的自定义物品的目录。完成后,使用以下启动选项启动游戏(如调试模式部分所述):-debug-flag -testroom "你的房间名称" -x 2 -y 2,然后开始新游戏。你将加载自定义房间,而非默认房间!此外,x和y坐标可以设置为适合你房间的任何值。 发布模组 要发布模组,首先将其编译成.zip文件夹。正如测试模组部分所提到的,你需要确保模组的目录结构在压缩文件夹中得以保留。完成此操作后,在Steam中设置游戏启动选项为“-publisher”并启动游戏。这将打开一个特殊的创意工坊发布程序,该程序会检测你创建的模组文件夹,并询问你想要发布哪一个。

请指明你想要发布的模组,发布工具会要求你找到你创建的模组压缩包所在的目录。接下来,你需要选择一个文件作为模组的图标——不必过于担心,之后你可以在创意工坊内进行更改。然后,压缩文件将通过模组验证器的检查,如果发现问题,模组将无法发布。请返回并修复这些问题!一旦所有语法错误都得到纠正,模组验证器会确认并通过你的模组。恭喜——只需确认你希望将作品发布到创意工坊,你就完成了!现在可以考虑添加截图和美术作品,让你的模组更具吸引力。 如果问题仍然存在,请查看以下资源以获取帮助。参考与资源 仍对如何创建房间有疑问?不确定如何制作你想到的那个超酷法术?想要学习XML编码?可以查看以下实用资源。 游戏文件本身!—— 请记住,你可以查看《地城英雄志》Steam文件夹中的文件。这些是基础游戏运行的文件,能作为很棒的学习工具。 Gaslamp Games论坛—— 去看看游戏开发商Gaslamp Games的论坛吧。论坛上的用户对模组制作非常了解,或许能帮你解决大部分问题。 Steam《地城英雄志》论坛—— Steam讨论区会有帮助,尤其是创意工坊讨论板块。 DredmodDredmod是《地下城冒险》的模组制作维基,里面有许多有用的页面和教程。w3 Schools - 想了解更多关于.xml的知识吗?当然可以!你可以查看w3 schools的教程,获取该语言的基础介绍。
2026-03-21 10:00:35 发布在
Dungeons of Dredmor
说点好听的...
收藏
0
0
