高级玩家

- 贡献度
- 78
- 金元
- 1504
- 积分
- 462
- 精华
- 0
- 注册时间
- 2011-1-8

|
本帖最后由 whrily 于 2013-3-26 23:58 编辑
即使是这么多游戏地图也没法满足你吗?
想用短时间做个好MOD吗?!
想和朋友一起玩自己的地图然后晒技术吗?!
想瞬间得到无限成就感吗?!!!
……别做梦了,好好学习吧
咳,其实做MOD也不是一件那么难的事情
你只需要拥有理科生的编程头脑,文科生的英语水平
好吧,你都没有?没关系,我来一步步教你做MOD
废话不多说,教程是我自己写的,字比较多,所以我就传文件了,省的大家看着头晕
至于为什么不做视频……因为很麻烦,而且不直观,这不是用几句话就能说明白的东西
好的话就顶一下~!
制作MOD教程(初级篇).rar
(8.38 KB, 下载次数: 251)
PS:wps文件,推荐用WPS Office 2012或更高版本打开
以下为教程本文,有兴趣的可以研究下,暂时先不写中级篇……比较复杂
首先新开一个文件夹,名称为MOD名称,举例为ForTheKing
在这个文件夹下新建文件夹,命名为Content
Content文件夹下再新建文件夹叫Levels
一般我们做的都是挑战地图,就算做剧情地图,也是用挑战模式进入的
所以在Levels文件夹下再建立一个叫Challenges的文件夹
此时找到你的魔能文件夹Magicka\Content\Levels
找到Dialog_ForTheKing.xml
复制到你的MOD的Levels文件夹下,并且改名成Dialog_***.xml(*是你的MOD的名称)
这个文件是语音和字幕播放文件,系统需要调用,所以千万不能错
为什么使用这个文件,后面会有解释
这个时候在Levels文件夹下有Dialog_ForTheKing.xml文件和Challenges文件夹
(以下均以ForTheKing为例,请记得自行改名,不再对此进行说明)
进入Challenges文件夹
新建一个文本文档,命名为ch_ForTheKing.lvl(注意扩展名别是txt)
打开以后,把以下代码粘贴进去
<?xml version="1.0" encoding="utf-8" ?>
<Level>
<Loading>ForTheKing_Preview</Loading>
<Name>#Challenge_ForTheKing</Name>
<Description>#Challenge_ForTheKing_d</Description>
<Start scene="chs_ForTheKing" area="start" spawnplayers="true"/>
<Dialogs>../Dialog_ForTheKing.xml</Dialogs>
<Scenes>
<Scene>../BattleField/chs_ForTheKing.xml</Scene>
</Scenes>
</Level>
进行一下解释
<?xml version="1.0" encoding="utf-8" ?>版本号不用管
<Level>代表战役包含在这里,不用管
<Loading>ForTheKing_Preview</Loading>调用图片文件(*001)
<Name>#Challenge_ForTheKing</Name>调用名字(*002)
<Description>#Challenge_ForTheKing_d</Description>调用说明(*002)
<Start scene="chs_ForTheKing" area="start" spawnplayers="true"/>设置初始地图(*003)
<Dialogs>../Dialog_ForTheKing.xml</Dialogs>调用语音和字幕文件(*004)
<Scenes>所有战役地图包含在这里
<Scene>../BattleField/chs_ForTheKing.xml</Scene>设置所有地图(*003)
</Scenes>结束语法
</Level>结束语法
*001
找到你的魔能文件夹Magicka\Content\Levels\Challenges
找到ForTheKing_Preview.xnb
复制到你的MOD的Challenges文件夹下,然后改名,你懂得
这是你的MOD在游戏里的显示图片,当然你可以选择其他图片
等MOD全部做好了,在魔能文件夹里搜索其他的xnb文件来更换(名字还是要改成这个)
换成你喜欢的图片就好了
*002
注意这里是指向了另一个文件
打开魔能原版的Content\Languages\eng
可以找到ForTheKing.loctable.xml文件
找到以下文字
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="String">#Challenge_ForTheKing</Data></Cell>
<Cell><Data ss:Type="String">为了国王</Data></Cell>
<Cell><Data ss:Type="String">ForTheKing</Data></Cell>
<Cell><Data ss:Type="String">ForTheKing: name</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell><Data ss:Type="String">#Challenge_ForTheKing_d</Data></Cell>
<Cell><Data ss:Type="String">玩家会成为国王的右手,帮助士兵们战胜邪恶的兽人与术士</Data></Cell>
<Cell><Data ss:Type="String">Players will become the king's right-hand man, assisting soldiers to defeat the orcs and evil wizards army</Data></Cell>
<Cell><Data ss:Type="String">ForTheKing: description</Data></Cell>
</Row>
懂了吧~不用解释了
*004
这里就是之前做的Dialog_ForTheKing.xml文件
*注意,如果更换了地图,最好确保这个文件里有地图中调用到的语音,否则会出错
*003
接下来是重点,也就是地图
我标注的*002有两个,是互相关联的
<Start scene="chs_ForTheKing" area="start" spawnplayers="true"/>
这里chs_ForTheKing是起始地图名称
area="start"表示出生点(之后的area语句都代表位置,如XX的位置在哪)
spawnplayers="true"表示是否产生玩家,当然选ture(是)了,如果不产生,就是false(否)
<Scene>../BattleField/chs_ForTheKing.xml</Scene>
上面起始地图是调用这里的名称而不是调用文件的,而这里才是场景地图文件的调用
(听懂了么- =好吧没关系继续)
ForTheKing这个MOD里只有一个场景,不能说明问题,来看看下面的
<Start scene="chs_BossParty1_1" area="start" spawnplayers="true"/>
<Scenes>
<Scene>chs_BossParty1_1.xml</Scene>
<Scene>chs_BossParty1_2.xml</Scene>
<Scene>../Niflheim/chs_BossParty2_1.xml</Scene>
<Scene>../Niflheim/chs_BossParty2_2.xml</Scene>
<Scene>../Niflheim/chs_BossParty2_3.xml</Scene>
<Scene>../Ruins/chs_BossParty3_1.xml</Scene>
<Scene>../Swamp/chs_BossParty3_2.xml</Scene>
<Scene>../Swamp/chs_BossParty3_3.xml</Scene>
<Scene>chs_BossParty3_4.xml</Scene>
<Scene>../Ruins/chs_BossParty4_1.xml</Scene>
<Scene>../Swamp/chs_BossParty4_2.xml</Scene>
<Scene>../Niflheim/chs_BossParty4_3.xml</Scene>
<Scene>../EndofWorld/chs_BossParty5_1.xml</Scene>
</Scenes>
这是BossParty这个MOD的所有场景地图调用
可以看到起始地图是chs_BossParty1_1,当然你可以改成其他
*是不是每个地图打完自动到下一个地图呢?当然不是,注意这里场景的顺序不是固定的,可以随便换,当然为了方便自己观看,还是从头到尾按顺序排的好
*BossParty一共有13关哦~
你会发现在原来的魔能里有Niflheim,Ruins,Swamp这样的文件夹
没错,这里的 <Scene>../**/***.xml</Scene>是默认调用Challenges文件夹里的内容
你把地图放在哪里,就在这里写好调用位置就行了
现在你可以开始编写地图了
*啊,其实很简单的,明白了语法之后,就是不断的复制和粘贴……
以下是重点中的重点
现在以BossParty为例
来看chs_BossParty1_1.xml文件(不要问我在哪里),用记事本打开
里面包含一些代码,我们来一个个看
<?xml version="1.0" encoding="utf-8" ?>
<Scene>
这些是代码开头,不用管
<model>ch_havindr_arena</model>
这里是使用的场景地图,你可以从原版的其他xml文件里找到不同的地图
现在用的是哈文德竞技场
<reverb roomType="10" mix="40" />
这一行紧跟着上一行,每个地图都有特定的数值,使用时一起用就可以
(至于有何作用,表示我也不清楚)
接下来学习每个语法
——————————————————————————————
<trigger id="***" autorun="***" repeat="***">
……
</trigger>
是触发器
Id就是名字,每个触发器的名字都不能相同
autorun自动运行,如果是true,那么一开始就会运行,否则将被冻结
Repeat表示是否重复,如果是true,那么触发器可以无限次被触发
autorun和Repeat同时为true时,触发器会自己无限触发自己
*代码中的if语法不能和autorun共用,这点在初级篇不做介绍
——————————————————————————————
<if>
……
</if>
<then>
……
</then>
代表“如果”“然后”,只有完成了if里面的条件,才能触发then里面的语句
如果不写if命令也没关系,就当作没有条件,直接触发then里面的语句
——————————————————————————————
<stopMusic delay="0"/>
场景的开头可以加入这个语句,这句的意思是停止所有正在播放的音乐
如果希望上一关的音乐继续在这关无缝播放,则不需要添加这一行
delay 的意思是延迟,很多地方都会出现这个命令,意思是这句命令延迟多少秒执行
——————————————————————————————
<playAnimation name="rope1" loop="true"/>
<playAnimation name="rope2" loop="true"/>
<playAnimation name="rope3" loop="true"/>
<playAnimation name="rope4" loop="true"/>
玩家动画,其实无所谓,可以不加
——————————————————————————————
来看下一段
<playmusic cue="music_boss" delay="3.5"/>
播放音乐,音乐种类可以在其他文件找到
——————————————————————————————
<spawnboss generic="false" boss="jormungandr" area="north" healthBarWidth="0.8" delayed="true"/>
<activateBoss delay="2"/>
<bossTitle title="#Boss_N02" subtitle="#Boss_T2" DisplayTime="4.5" FadeIn=".5" FadeOut="1"/>
产生BOSS青蛇
要注意的是area,也就是产生的位置
每个地图都有很多位置,名称也不一样,我该怎么找到这些名称呢
打开魔能原版的这些场景地图文件,你会发现很多标注有area="XXX"的地方
你可以使用那些位置,之后测试的时候就知道是哪里了
*另外healthBarWidth是血条长度,一般不改
activateBoss delay是激活BOSS的延迟时间,BOSS和普通小兵不同,不激活就只是个摆设
bossTitle这行我也不懂,不用管,每个BOSS都不一样,顺带复制过来用就可以了
——————————————
值得一提的是,产生普通小兵的语法更简单
<trigger id="wave07" repeat="false">
<then>
<playSound id="Doorcloses" cue="Misc/misc_bf_woodgate" volume="30" delay="0" />
<spawn type="zombie" order="attack" animation="spawn" area="spawn_wizard_chair0" nr="2" delay="2">
<Move position="spawn_teacher0" />
</spawn>
<spawn type="zombie" order="attack" animation="spawn" area="spawn_wizard_chair1" nr="2" delay="7" />
</then>
</trigger>
*playSound是播放声效
产生单位有两种语法
第一种
<spawn type=……>
……
</spawn>
必须有开头和结尾,中间省略的部分是产生方式和命令,详细可以自己查下里面的英文单词
(不需要英语好~但至少不能一个都看不懂吧……)
第二种
<spawn type=……/>
不需要结尾,但是后面要有“/”符号
——————————————————————————————
之后来看文件最后一段
<bossdead />代表BOSS挂掉,放在If语句里,懂了吧
<endCutscene />结束暂停场景
<enableInput delay="0"/>打开玩家操控
<cutscene />暂停场景
<disableInput delay="0"/>关闭玩家操控
<endbossfight />停止BOSS战斗
这几句加起来的结果是当BOSS挂掉之后,画面暂停(上下出现黑边),玩家不能操控
然后
<changescene scene="chs_BossParty1_2" transition="fade" transitionTime="1" spawnPlayers="true" spawnPoint="start" delay="1"/>
changescene变换场景地图
scene 选择地图chs_BossParty1_2
transition 变换方式(可以无视)
transitionTime 变换时间
spawnPlayers 是否产生玩家
spawnPoint 产生位置
于是每个场景就是这样跳到下一个场景的
那么还有什么不懂?
恭喜你!你已经了解一个MOD的基本构造了!
虽然看起来很长,但是看懂了之后自己操作就很方便了
|
|