单位编辑:修订间差异

来自RustedWarfare Wiki
(为自己画饼...)
无编辑摘要
第1行: 第1行:
<b>序言</b><br>
游戏通过读取"Rusted Warfare\mods\units"目录下的mod文件来加载mod。<br>
本文引导想要学习制作mod单位的玩家具有制作自己单位的能力。<br>
".rwmod"文件是mod的打包文件格式,实际游戏可通过直接读取目录下的mod文件夹来读取mod数据。<br>
<br>
一个常规的mod文件夹目录结构如下所示:<br>
<b>概念</b><br>
游戏中的原版单位的属性信息有两种存储方式:一种为游戏早期的直接写在游戏的.jar或.dex文件中,另一种,在游戏具有mod系统后,以一个单位一个.ini文件的形式进行存储。我们制作mod单位使用这种形式。<br>
这里的.ini文件为UTF-8文本文件,使用记事本等文本编辑器即可修改。<br>
具体属性存储方式使用键值对(key: value)进行存储。即单位具体某项属性名称后跟英文冒号然后填这个属性的值。如:
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
# name为单位的名称,这里值为c_interceptor
XX模组
name: c_interceptor
  |- 单位
# price为单位的造价,即单位的造价为600
      |- xx单位
price: 600
            |- xx单位.ini
maxHp: 250
            |- xx单位_身体.png
            |- xx单位_炮塔.png
            |- xx单位_残骸.png
            |- xx单位_开火.ogg
            |- xx单位_子弹.png
            |- xx单位_子弹飞行轨迹.png
      |- all-units.template
  |- 地图
      |- xx.tmx
      |- xx_map.png
  |- 音乐
      |- xx.ogg
  |- mod-info.txt
</pre>
</pre>
.ini文件内容里还有小节的概念,即使用英文方括号包裹小节名称并单独占一行来划分单位的不同功能,如:
如果我们要创建一个有效的mod,其目录结构至少应该为:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
# 概念型坦克的四个炮台中两个炮台的设定,[turret_cannon2]和[turret_cannon3]
XX模组
[turret_cannon2]
  |- 单位
#top right cannon
      |- xx单位
x: 0
            |- xx单位.ini
y: 0
      |- all-units.template
attachedTo: base2
  |- mod-info.txt
copyFrom: cannon1
linkDelayWithTurret: cannon1
warmup:30
 
[turret_cannon3]
#bottom left cannon
x: 0
y: 0
attachedTo: base3
copyFrom: cannon1
linkDelayWithTurret: cannon1
warmup:60
</pre>
</pre>
<br>
其中,mod-info.txt包含了对该mod的声明信息,这里您可以提供mod的名称、介绍、可运行的最低版本要求等信息,如:<br>
<b>.ini文件的位置</b><br>
一个mod在文件存储意义上,是一个具有多层目录结构的文件夹。(mod直接以文件夹的形式而非.rwmod打包形式放入游戏读取目录下也可被游戏正常加载)<br>
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;">
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
#以PC端游戏目录为例
[mod]
mods
minVersion: 1.16
└─units
title: 坦克模拟_v0.3
    │  custom_units_here.txt
description: 我们尽量还原了坦克在战场上遇到的所有情况,请使用各具特色的坦克和队友在战斗中取得胜利。
    │
    └─中型坦克改_v0.2          ← 该mod的文件夹
        │  all-units.template
        │  mod-info.txt
        │
        ├─BGM
        ├─_未完成
        ├─其他
        ├─单位
        │  └─中型坦克          ← 该单位的文件夹
        │          中型坦克.ini  ← 单位“中型坦克”的.ini文件
        │          开火.ogg
        │          残骸.png
        │          炮塔.png
        │          车身.png
        │
        └─地图
</pre>
</pre>
<br>
all-units.template文件是纯文本文件,其内容里声明的属性将自动应用到其所在目录的次级目录的所有.ini文件中,这通常用于省写某些通用于全mod的单位属性,如:<br>
<b>接下来</b><br>
了解完.ini文件如何加载后,现在可以关注单位属性信息本身了。<br>
让我们看看我们的单位是要存在在铁锈世界里,需要有什么条件。<br>
#单位的名字是必要的,请先在脑中想一个单位的名称吧。
#单位需要有生命值,这是它在这个战争的世界里存亡的根本。
#单位应该具备空间上的体积,并加上其身体重量,这是物理的世界。
#战争需要招兵买马,生产制造都需要资源的支持,那么应该定义单位被生产出需要的资源多少。
#而生产建造需要时间,为自己mod的单位定义参差的时间,来左右游戏的节奏。
以上是单位在[core]节所应该填写的项。
#游戏是2d画面,单位应该有一个视觉上的身体,使用一张完全俯视角的图片作为单位的身体,当单位移动和旋转时,图片会移动和旋转。(呃,建筑和地图贴图是斜45°俯视,单位是垂直俯视,这是奇怪的事实)
#游戏有死亡后残骸的设定以增加真实感,出于玩家观感考虑,你应该再画出单位被摧毁后的样子。
#为单位添加其映在地板上的阴影,增加真实感。<code>image_shadow:</code>的值可以填图片路径,但通常填"AUTO"游戏自动在“身体”下绘制一个相同轮廓的半透明黑色的图片作为阴影。
以上是单位在[graphics]节所应该填写的项。
#可能您的单位需要一些攻击手段来“自保”,先使用<code>canAttack: true</code>让单位能够瞄准敌人吧。
#除了意念攻击,多数攻击手段都是有攻击距离的,使用<code>maxAttackRange:</code>填写整数来限制单位的最大攻击距离(也许你知道原版坦克的最大射程)
以上是单位在[attack]节所应该填写的项。<br>
铁锈里的攻击是炮台用于旋转瞄准和发射弹丸,弹丸用于飞行和落到敌人身上造成伤害。
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
#一个炮台
#这里声明了一种mod里的一种消耗性资源黄金,如果不使用all-units.template文件的功能,我们需要在每个单位的.ini文件中都写一段下面的声明
[turret_1]
[global_resource_gold]
x: 0                          ← 炮台相对单位自身中心的x轴位置
displayName: 黄金
y: 0                          ← 炮台相对单位自身中心的y轴位置
displayNameShort:
projectile: 1                ← 发射哪种弹丸
displayColor: #ffd700
shoot_sound:tank_firing:0.3  ← 射击时的音效,":0.3"是音量
displayWhenZero: true
shoot_flame:small            ← 射击时的火焰帧动画(使用游戏自带的帧动画,有自定义的)
displayPos: 1
shoot_light:#FFEECCCC        ← 射击时渲染的闪光的颜色
#这只是一个例子,有更多的参数选项
</pre>
</pre>
<br>
.ini文件是单位的参数配置文件,是纯文本文件。游戏里的一种单位对应一个.ini文件。我们在.ini文件中声明了一种单位所具有的属性,如单位的名称、生命值、攻击力等。下面我们将重点学习如何编辑单位的配置文件以及单位都可以由哪些属性。<br>
首先我们应该了解.ini文件是一种常见的配置文件格式,其为纯文本文件,使用特定的语法来存储声明信息。其语法结构上包含两部分:关键字和它的值(称为键值对)以及为不同功能划区的节。其具体语言格式为:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
#一个弹丸
[sectionA]
[projectile_1]
key1: VALUE
directDamage: 25  ←对命中的敌人造成的伤害
key2: VALUE
life: 60          ←弹丸至多存在多长时间
 
speed: 5          ←弹丸的飞行速度
[sectionB]
frame: 1          ←弹丸图片使用游戏自带贴图集的哪一帧
key1: VALUE
drawSize: 1      ←贴图绘制的大小
 
[sectionC]
key1: VALUE
key2: VALUE
key3: VALUE
</pre>
</pre>
[turret_NAME]和[projectile_NAME]节在一个.ini文件可以设置多个,即是一个单位可以有多个炮塔,通过变“NAME”来区分它们。
游戏定义了许多单位属性的关键字,如我们要声明一个单位的名称为“小坦克”,碰撞半径为“11”,重量为“3000”,生命值上限为“210”,移动方式为“陆地”,移动速度为“1,1”,转向速度为“4.1”,这样写:
#铁锈有海陆空兵种的设定,这取决于单位的移动类型,常见有:LAND,WATER,AIR,还有HOVER(悬浮,水陆都可通行)等。
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
#单位移动需要设定移动速度、启动时加速的加速度和停止时减速的加速度。转向速度和加速度。
[core]
以上是[movement]节应填的内容。
name: tank_custom
displayName: 小坦克
radius: 11
mass: 3000
maxHp: 210


设置单位的各个属性像是组装一台汽车,为几块功能区域选择零件,确定零件的参数,组装。在许多种属性中选择一个配方,让自己满意。<br>
[movement]
设置不同兵种创造一个动态平衡的世界。<br>
movementType: LAND
我们可以给你的帮助是:明了的零件市场。使动态平衡的战略战术概念。
moveSpeed: 1.1
maxTurnSpeed: 4.1
</pre>
所有这些关键字和功能描述都可以在[https://docs.google.com/spreadsheets/d/1aeP3pUic0IutZlgGix_cM8xR7LEH44gS4itAxETK954 官方文档]中查找。<br>
接下来我们将从游戏开发的角度了解游戏为单位定义了哪些属性。<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
单位的name是至关重要的,代码中其他单位要生成某种单位都需要引用该单位的name。name的值一般为英文。
游戏中单位的碰撞体积为圆形,radius定义了这个圆形的半径。radius的值为整数。
当单位发生碰撞时,mass数值大的一方更不易被推动。小坦克的mass的值为3000,所以我们可以理解为单位的重量的计量单位为千克。mass的值为整数。
游戏里每个单位都有生命值,maxHp定义了单位的生命值上限。maxHp的值为整数。尽管单位的生命值在游戏中显示为整数,但实际生命值的数据类型为单精度浮点数。
每个单位都有其他单位建造自己时的价格和建造所需时长。价格是price,如果mod只使用原版的全局资源credits,值可以直接填整数;如果要使用其他类型的资源应填成如,gold=200, hp=100, energy=0.5。关于资源,分为全局资源和资源

2024年9月14日 (六) 16:37的版本

游戏通过读取"Rusted Warfare\mods\units"目录下的mod文件来加载mod。
".rwmod"文件是mod的打包文件格式,实际游戏可通过直接读取目录下的mod文件夹来读取mod数据。
一个常规的mod文件夹目录结构如下所示:

XX模组
  |- 单位
      |- xx单位
            |- xx单位.ini
            |- xx单位_身体.png
            |- xx单位_炮塔.png
            |- xx单位_残骸.png
            |- xx单位_开火.ogg
            |- xx单位_子弹.png
            |- xx单位_子弹飞行轨迹.png
      |- all-units.template
  |- 地图
      |- xx.tmx
      |- xx_map.png
  |- 音乐
      |- xx.ogg
  |- mod-info.txt

如果我们要创建一个有效的mod,其目录结构至少应该为:

XX模组
  |- 单位
      |- xx单位
            |- xx单位.ini
      |- all-units.template
  |- mod-info.txt

其中,mod-info.txt包含了对该mod的声明信息,这里您可以提供mod的名称、介绍、可运行的最低版本要求等信息,如:

[mod]
minVersion: 1.16
title: 坦克模拟_v0.3
description: 我们尽量还原了坦克在战场上遇到的所有情况,请使用各具特色的坦克和队友在战斗中取得胜利。

all-units.template文件是纯文本文件,其内容里声明的属性将自动应用到其所在目录的次级目录的所有.ini文件中,这通常用于省写某些通用于全mod的单位属性,如:

#这里声明了一种mod里的一种消耗性资源黄金,如果不使用all-units.template文件的功能,我们需要在每个单位的.ini文件中都写一段下面的声明
[global_resource_gold]
displayName: 黄金
displayNameShort: 金
displayColor: #ffd700
displayWhenZero: true
displayPos: 1

.ini文件是单位的参数配置文件,是纯文本文件。游戏里的一种单位对应一个.ini文件。我们在.ini文件中声明了一种单位所具有的属性,如单位的名称、生命值、攻击力等。下面我们将重点学习如何编辑单位的配置文件以及单位都可以由哪些属性。
首先我们应该了解.ini文件是一种常见的配置文件格式,其为纯文本文件,使用特定的语法来存储声明信息。其语法结构上包含两部分:关键字和它的值(称为键值对)以及为不同功能划区的节。其具体语言格式为:

[sectionA]
key1: VALUE
key2: VALUE

[sectionB]
key1: VALUE

[sectionC]
key1: VALUE
key2: VALUE
key3: VALUE

游戏定义了许多单位属性的关键字,如我们要声明一个单位的名称为“小坦克”,碰撞半径为“11”,重量为“3000”,生命值上限为“210”,移动方式为“陆地”,移动速度为“1,1”,转向速度为“4.1”,这样写:

[core]
name: tank_custom
displayName: 小坦克
radius: 11
mass: 3000
maxHp: 210

[movement]
movementType: LAND
moveSpeed: 1.1
maxTurnSpeed: 4.1

所有这些关键字和功能描述都可以在官方文档中查找。
接下来我们将从游戏开发的角度了解游戏为单位定义了哪些属性。

单位的name是至关重要的,代码中其他单位要生成某种单位都需要引用该单位的name。name的值一般为英文。
游戏中单位的碰撞体积为圆形,radius定义了这个圆形的半径。radius的值为整数。
当单位发生碰撞时,mass数值大的一方更不易被推动。小坦克的mass的值为3000,所以我们可以理解为单位的重量的计量单位为千克。mass的值为整数。
游戏里每个单位都有生命值,maxHp定义了单位的生命值上限。maxHp的值为整数。尽管单位的生命值在游戏中显示为整数,但实际生命值的数据类型为单精度浮点数。
每个单位都有其他单位建造自己时的价格和建造所需时长。价格是price,如果mod只使用原版的全局资源credits,值可以直接填整数;如果要使用其他类型的资源应填成如,gold=200, hp=100, energy=0.5。关于资源,分为全局资源和资源