单位编辑:修订间差异

为自己画饼...
无编辑摘要
标签移动版编辑 移动版网页编辑 可视化编辑
(为自己画饼...)
 
(未显示2个用户的13个中间版本)
第1行:
<b>序言</b><br>
== 创建单位 ==
本文引导想要学习制作mod单位的玩家具有制作自己单位的能力。<br>
先请按步骤将这个名为“hello”的单位加入到游戏中。
<br>
1.打开游戏的mod文件路径,rustedWarfare/units或Rusted Warfare\mods\units。<br>
<b>概念</b><br>
2.创建一个名为hello的文件夹。<br>
游戏中的原版单位的属性信息有两种存储方式:一种为游戏早期的直接写在游戏的.jar或.dex文件中,另一种,在游戏具有mod系统后,以一个单位一个.ini文件的形式进行存储。我们制作mod单位使用这种形式。<br>
3.在hello文件夹中创建一个名为hello.ini的文件。<br>
4这里的.ini文件为UTF-8文本文件,使记事本等文本编辑器打开hello.ini文件即可修改。<br>
具体属性存储方式使用键值对(key: value)进行存储。即单位具体某项属性名称后跟英文冒号然后填这个属性的值。如:
5.复制以下代码到文本编辑器中。
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
<pre>
# name为单位的名称,这里值为c_interceptor
[core]
name:hello c_interceptor
# price为单位的造价,即单位的造价为600
radius: 10
price: 600
mass: 3000
maxHp: 800250
price: 1000
 
[graphics]
image: SHARED:light_50.png
 
[attack]
canAttack: false
 
[movement]
movementType: LAND
</pre>
.ini文件内容里还有小节的概念,即使用英文方括号包裹小节名称并单独占一行来划分单位的不同功能,如:
6.启动游戏,在主界面点击mods(或模组)进入mod管理界面。<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
7.勾选名为hello的项,点击Reload(或重新加载)按钮,完成后点击Save(或保存),回到主界面。<br>
# 概念型坦克的四个炮台中两个炮台的设定,[turret_cannon2]和[turret_cannon3]
8.点击单人游戏-沙盒模式-开始,进入沙盒模式的对局。<br>
[turret_cannon2]
9.通过侧边栏找到hello单位并放置在战场上。<br>
#top right cannon
10.试着选中这个单位,并下达移动指令,观察单位是否会进行转向和移动。<br>
x: 0
11.到这里你便成功在游戏中创建了一个新的单位。<br>
y: 0
经过以上体验,我可以带点全知视角地帮你总结创建单位的思路:
attachedTo: base2
*在放置mod的文件路径下创建新单位的文件夹。
copyFrom: cannon1
*为这个单位写一个ini文件,这个文件将包含这个单位的所有属性信息。
linkDelayWithTurret: cannon1
*将单位加载进游戏中,选择沙盒模式进行调试。
warmup:30
这里关键环节是在ini文件中填入有效的属性信息。
 
[turret_cannon3]
具体地,单位是一堆参数的集合,你要做的是为每个属性填写具体的值。比如单位的名称是什么你要填写“单位的名称是‘重型坦克’”,单位的生命值是多少,你要填写“单位是生命值是‘600’”,只不过现实情况是你需要将这些信息格式化地记录在ini文件中,其变成“name: 重型坦克”“maxHp: 600”,这里游戏给出的书写规则是maxHp表示单位的生命值上限,你需要遵从这些规则。此外游戏规定ini里的每个属性代码需要从属于某个节,即表现为:
#bottom left cannon
<pre>
x: 0
[turret_2]
y: 0
image:
attachedTo: base3
[projectile_1]
copyFrom: cannon1
image:
linkDelayWithTurret: cannon1
warmup:60
</pre>
<br>
这里节“turret_2”的“image”属性实际意义是炮塔2的贴图,节“projectile_1”的“image”属性的实际意义是炮弹1的贴图,两个“image”如果没有写在各自的节下面它是表达不出“这个贴图是谁的”这层意思的。
<b>.ini文件的位置</b><br>
 
一个mod在文件存储意义上,是一个具有多层目录结构的文件夹。(mod直接以文件夹的形式而非.rwmod打包形式放入游戏读取目录下也可被游戏正常加载)<br>
这些属性和从属于哪个节官方文档(我们习惯称为代码表)都有给出。你应该大致读几遍代码表,了解每个代码什么功能,熟悉后,你就可以独自读ini文件增删单位的属性了。
mod文件想要加载到游戏中应该放在:(PC端)"Rusted Warfare/mods/units/" (Android端)"rustedWarfare/units/"或"/com.corrodinggames.rts/files/units/"
 
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
== 调试单位 ==
#以PC端游戏目录为例
看了前面的理论,你可能完全无感,接下来我会引导你改进一下最开始的单位,来充实细节。
mods
 
└─units
我们先来注释每行代码的作用。
│ custom_units_here.txt
<pre>
 
└─中型坦克改_v0.2 ← 该mod的文件夹
#在行首使用#使该行内容不会被游戏读取为有效内容
│ all-units.template
 
│ mod-info.txt
[core]
#单位的真名
├─BGM
name:hello
├─_未完成
#单位的碰撞半径
├─其他
radius: 10
# ├─单位的重量
│ └─中型坦克 ← 该单位的文件夹
mass: 3000
│ 中型坦克.ini ← 单位“中型坦克”的.ini文件
#单位的生命值上限
│ 开火.ogg
maxHp: 800
│ 残骸.png
#单位的造价
│ 炮塔.png
price: 1000
│ 车身.png
 
[graphics]
└─地图
#单位的主体图像,这样的写的值表示使用游戏自带的shared文件夹里light_50.png文件作为单位主体贴图
image: SHARED:light_50.png
 
[attack]
#单位是否可攻击,false表示否,true表示是
canAttack: false
 
[movement]
#移动类型,陆地,这个移动类型的单位只能在无属性地块上移动,不能到达在水上岩浆上陡崖上
movementType: LAND
</pre>
<br>
我们观察到这个单位移动时转向过慢,移动过于僵硬,请在movement节下做如下修改(可以不抄注释):
<b>接下来</b><br>
<pre>
了解完.ini文件如何加载后,现在可以关注单位属性信息本身了。<br>
[movement]
让我们看看我们的单位是要存在在铁锈世界里,需要有什么条件。<br>
movementType: LAND
#单位的名字是必要的,请先在脑中想一个单位的名称吧。
 
#单位需要有生命值,这是它在这个战争的世界里存亡的根本。
#设置了单位的移动速度为1
#单位应该具备空间上的体积,并加上其身体重量,这是物理的世界。
moveSpeed: 1
#战争需要招兵买马,生产制造都需要资源的支持,那么应该定义单位被生产出需要的资源多少。
#下面两个分别是单位开始移动时的加速幅度和结束移动时的减速幅度,这样让其移动显得自然
#而生产建造需要时间,为自己mod的单位定义参差的时间,来左右游戏的节奏。
moveAccelerationSpeed: 0.05
以上是单位在[core]节所应该填写的项。
moveDecelerationSpeed: 0.05
#游戏是2d画面,单位应该有一个视觉上的身体,使用一张完全俯视角的图片作为单位的身体,当单位移动和旋转时,图片会移动和旋转。(呃,建筑和地图贴图是斜45°俯视,单位是垂直俯视,这是奇怪的事实)
 
#游戏有死亡后残骸的设定以增加真实感,出于玩家观感考虑,你应该再画出单位被摧毁后的样子。
#把转向速度设置成一个极端的值,让它看起来没有转向的过程
#为单位添加其映在地板上的阴影,增加真实感。<code>image_shadow:</code>的值可以填图片路径,但通常填"AUTO"游戏自动在“身体”下绘制一个相同轮廓的半透明黑色的图片作为阴影。
maxTurnSpeed: 360
以上是单位在[graphics]节所应该填写的项。
#这是转向的加速度,设置成0也是为了让它看起来没有转向过程
#可能您的单位需要一些攻击手段来“自保”,先使用<code>canAttack: true</code>让单位能够瞄准敌人吧。
turnAcceleration: 0
#除了意念攻击,多数攻击手段都是有攻击距离的,使用<code>maxAttackRange:</code>填写整数来限制单位的最大攻击距离(也许你知道原版坦克的最大射程)
以上是单位在[attack]节所应该填写的项。<br>
铁锈里的攻击是炮台用于旋转瞄准和发射弹丸,弹丸用于飞行和落到敌人身上造成伤害。
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
#一个炮台
[turret_1]
x: 0 ← 炮台相对单位自身中心的x轴位置
y: 0 ← 炮台相对单位自身中心的y轴位置
projectile: 1 ← 发射哪种弹丸
shoot_sound:tank_firing:0.3 ← 射击时的音效,":0.3"是音量
shoot_flame:small ← 射击时的火焰帧动画(使用游戏自带的帧动画,有自定义的)
shoot_light:#FFEECCCC ← 射击时渲染的闪光的颜色
#这只是一个例子,有更多的参数选项
</pre>
<br>
ctrl + s保存修改后,直接在沙盒模式的操作栏点击重新加载按钮来改变游戏中的单位属性。(后面不再提示)
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
 
#一个弹丸
现在单位移动不那么卡顿了。接下来我们把单位想象成一个可以远程发射光球的进攻性兵种。根据以下代码在对应的节下修改。(后面不再提示)
<pre>
[attack]
#由不可攻击改成可以攻击
canAttack: true
#可对地
canAttackLandUnits: true
#可对空
canAttackFlyingUnits: true
#可反潜
canAttackUnderwaterUnits: false
#最大攻击范围
maxAttackRange: 210
 
[turret_1]
#炮塔的相对位置
x: 0
y: 0
#炮塔的贴图,用了透明的贴图替代
image: SHARED:blank.png
#炮塔旋转速度,我想让它很快
turnSpeed: 360
turnSpeedAcceleration: 0
#炮塔发射那种炮弹
projectile: 1
#炮弹出现的位置
size: 0
#发射间隔,这里是1秒
delay: 60
 
[projectile_1]
directDamage: 25 ←对命中的敌人造成的伤害
#炮弹的贴图
life: 60 ←弹丸至多存在多长时间
image: SHARED:beam1_start.png
speed: 5 ←弹丸的飞行速度
#炮弹的最大存在时长,这里是4秒
frame: 1 ←弹丸图片使用游戏自带贴图集的哪一帧
life: 240
drawSize: 1 ←贴图绘制的大小
#炮弹的飞行速度
speed: 3
#炮弹的伤害
directDamage: 10
</pre>
[turret_NAME]和[projectile_NAME]节在一个.ini文件可以设置多个,即是一个单位可以有多个炮塔,通过变“NAME”来区分它们。
现在单位具有对空对地的攻击能力了。再增加一些修饰性特效。
#铁锈有海陆空兵种的设定,这取决于单位的移动类型,常见有:LAND,WATER,AIR,还有HOVER(悬浮,水陆都可通行)等。
<pre>
#单位移动需要设定移动速度、启动时加速的加速度和停止时减速的加速度。转向速度和加速度。
</pre>
以上是[movement]节应填的内容。
 
=== 重新加载单位 ===
通常情况下,每次进入铁锈时,模组会被自动加载。单击主界面中“模组”按钮后,找到“重载数据”按钮,单击即可重新加载模组数据。
 
如果你正在沙盒中进行模组调试,在actions、all和modded中可以找到“Reload units”,单击此按钮铁锈将会重新加载所有单位。如果你只是更改了单位的数据,也可以在modded中单击“Quick Reload”,此时铁锈会以很快的速度重新加载单位。
 
=== Debug按钮 ===
在沙盒的actions中,有一个“Debug”选项,默认为关闭,打开此选项后,单击任意单位的血量都会看到“--Debug--”字样和当前单位的信息。
{{折叠|Debug可以显示的信息|* 单位name
* 单位id
* x
* y
* 高度
* 角度
* 图层
* 自定义资源
* 自定义内存(memory数组中的值不能显示)
* 自定义目标(customTarget1)}}
如果你的单位使用了自动触发(AutoTrigger),在打开“Debug”选项后,还可以打开“Trigger Debug”选项,打开此选项后,选中任意单位将能够看到它们的自动触发,并且能够看到自动触发中单个条件的值。<references />
 
设置单位的各个属性像是组装一台汽车,为几块功能区域选择零件,确定零件的参数,组装。在许多种属性中选择一个配方,让自己满意。<br>
== 相关链接 ==
设置不同兵种创造一个动态平衡的世界。<br>
*基础
我们可以给你的帮助是:明了的零件市场。使动态平衡的战略战术概念。
# [[自定义内存]]
# [[数组]]
# [[模组导入]]
# [[变量|宏]]
*特殊
# [[随机数]]
# [[概率与随机偏移]]
[[分类:模组制作]]
573

个编辑