单位编辑:修订间差异

来自RustedWarfare Wiki
(页面内容被替换为“{{欢迎编辑|}} 本页面将介绍游戏mod使用的代码方面的细节。 ==RW的世界== Rusted Warfare(以下均简称“铁锈”)的世界是由单位和地图两部分组成,地图是一个有限的二维空间,地图上的每个坐标点理论上都可到达,目前铁锈地图没有做地形高度相关的设定,地形不会阻挡发射的弹丸(炮弹),建造的纳米光线,单位能否通过某个区域是通过单纯地设置…”)
标签替换
无编辑摘要
标签移动版编辑 移动版网页编辑
 
(未显示2个用户的24个中间版本)
第1行: 第1行:
{{欢迎编辑|}}
游戏通过读取"Rusted Warfare\mods\units"目录下的mod文件来加载mod。<br>
本页面将介绍游戏mod使用的代码方面的细节。
".rwmod"文件是mod的打包文件格式,实际游戏可通过直接读取目录下的mod文件夹来读取mod数据。<br>
 
一个常规的mod文件夹目录结构如下所示:<br>
==RW的世界==
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
Rusted Warfare(以下均简称“铁锈”)的世界是由单位和地图两部分组成,地图是一个有限的二维空间,地图上的每个坐标点理论上都可到达,目前铁锈地图没有做地形高度相关的设定,地形不会阻挡发射的弹丸(炮弹),建造的纳米光线,单位能否通过某个区域是通过单纯地设置不同的地块类型实现的。地图本身都是静物,没有使用帧动画。铁锈为地图设有触发层,可以根据玩家行为做出反馈,丰富游戏性。铁锈的单位在空间概念上是一个个圆形区域,可以理解为身体,无论单位贴图形状大小,玩家的选中,单位之间的碰撞,弹丸在命中前提下爆炸的位置等都根据这个圆形判定,但如目标的坐标位置,路径和范围伤害命中等判定是根据中心点的。铁锈的单位有自身高度的属性,会影响弹丸生成的位置,单位间的距离等。
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
</pre>
如果我们要创建一个有效的mod,其目录结构至少应该为:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
XX模组
  |- 单位
      |- xx单位
            |- xx单位.ini
      |- all-units.template
  |- mod-info.txt
</pre>
其中,mod-info.txt包含了对该mod的声明信息,这里您可以提供mod的名称、介绍、可运行的最低版本要求等信息,如:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
[mod]
minVersion:v1.15
title:在这里编写你的标题MOD
description: 你的MOD简介
</pre>
all-units.template文件是纯文本文件,其内容里声明的属性将自动应用到其所在目录的次级目录的所有.ini文件中,这通常用于省写某些通用于全mod的单位属性,如:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
#这里声明了一种mod里的一种消耗性资源黄金,如果不使用all-units.template文件的功能,我们需要在每个单位的.ini文件中都写一段下面的声明
[global_resource_gold]
displayName: 黄金
displayNameShort: 金
displayColor: #ffd700
displayWhenZero: true
displayPos: 1
</pre>
.ini文件是单位的参数配置文件,是纯文本文件。游戏里的一种单位对应一个.ini文件。我们在.ini文件中声明了一种单位所具有的属性,如单位的名称、生命值、攻击力等。下面我们将重点学习如何编辑单位的配置文件以及单位都可以由哪些属性。<br>
首先我们应该了解.ini文件是一种常见的配置文件格式,其为纯文本文件,使用特定的语法来存储声明信息。其语法结构上包含两部分:关键字和它的值(称为键值对)以及为不同功能划区的节。其具体语言格式为:<br>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
[sectionA]
key1: VALUE
key2: VALUE


游戏规则方面,铁锈主要提供了战役(mission),波次生存(survival),遭遇战(skirmish)三种玩法,这些都可以通过设置具体地图的属性实现。铁锈一个玩家控制一个队伍(team),队伍可以是ai玩家控制的,队伍正常的最多有十个,按其在地图上的出生点编号,还有无人控制的编号为-1的中立队伍和编号为-2的敌意中立队伍,队伍间可以在游戏开始前设置结盟,显示为Team-A,B...(编者不知道team name和team id怎么用中文区分)。铁锈有战争迷雾(fog of war)的设定,单位可以设置雾中可视范围。铁锈遭遇战结束游戏的条件是战场只剩一个队伍或联盟,当自己队伍失去所有能建造单位或声明自己是建造者的单位时,游戏判负,地图属性可以设置其他胜败条件。铁锈的每个单位有自己的资源(resource),包括生命值,能量值,弹药等都划为资源,也可以有全队伍共用资源,像原版的资金。
[sectionB]
key1: VALUE


==要求==
[sectionC]
能将图片音频和代码整合到一起,能在游戏中正常使用,且符合自己的计划。<br />
key1: VALUE
具体:<br />
key2: VALUE
*你需要找到适合你构想单位的贴图,可能是本体的炮台的弹丸的特效的多帧动画的腿和胳膊的贴花的,因而你可能需要使用绘画软件自己画出来。图片要使用png格式的。
key3: VALUE
*音频一般是,背景音乐,开火音效,爆炸音效,选中音效,动作执行音效等,这些可能需要你在网上寻找。音频通常使用ogg格式,也可以使用wav格式。
*代码方面,知道了单位代码的执行逻辑,需要某个功能时查询公认的代码表,再之后习惯写稍复杂的逻辑判断就可以了,虽然要接触全英文,但并不涉及专业复杂问题。单位代码一般是一个单位一个ini文件,当然代码还涉及固定用途的all-units.template文件和mod-info.txt文件,都是utf-8编码的纯文本文件。
*不得不提的是游戏还在更新本身并不完善,现有的可能真的难以实现某些功能,还有小部分游戏bug存在,因而制作过程中要与人交流及时反馈问题,进而加深了解,做出更多有趣的内容。
 
==开始==
===mod的使用===
做mod有条件的一般使用电脑操作,本教程也会倾向讲pc端,不过只要安卓机上有顺手的文件管理器和文本编辑器还有绘画软件也可以一样操作。做mod前提是你已经熟悉mod的导入加载操作,这里将要求你统一使用文件夹而非游戏内的导入按钮进行操作,首先你应该了解铁锈文件夹的内容。
<pre style="white-space:pre;overflow:auto;float:right;width:50%;">
/assets
  /builtin_mods -- 内置mod
  /builtin_mods_enabled -- 默认启用的内置mod
  /gui
  /maps -- 地图
    /challenge -- 挑战地图
    /menu_background -- 主界面背景地图
    /normal -- 任务地图
    /skirmish -- 遭遇战地图
    /survival -- 生存地图
    /testing -- 测试地图
  /music -- 音乐
  /shaders -- 着色器
  /tilesets -- 地图地块集
  /translataions -- 本地化
  /units -- 原版单位
/cache -- 缓存
  /mods-info.cachedata -- mod的mod-info.txt文件缓存
/font -- 游戏使用的字体
/jvm
/jvm64
/libs
/mods -- mod文件夹
  /maps -- 地图文件夹
  /units -- 单位文件夹
/res
  /anim
  /drawable
  /layout
  /raw
  /values
  /xml
crashes.txt -- 崩溃日志
fallback.bat
fallback_lowmem.bat
fallback64.bat
...
game-lib.jar
...
preferences.ini -- 用户偏好
...
Rusted Warfare - 64.exe -- 64位游戏程序
Rusted Warfare.exe -- 32位游戏程序
...
</pre>
</pre>
在<nowiki>"{game_floder}/mods/units"</nowiki>目录下的mod文件夹和<code>.rwmod</code>文件都可以被游戏读取到。
游戏定义了许多单位属性的关键字,如我们要声明一个单位的名称为“小坦克”,碰撞半径为“11”,重量为“3000”,生命值上限为“210”,移动方式为“陆地”,移动速度为“1,1”,转向速度为“4.1”,这样写:
<font color="red">施工中</font>
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
<!----
<br /><br /><br />
----
ini文件是一种配置文件,由节(Section)、键(Key)、值(Value)组成。一个节中通常包含多个键,每个键对应一个值,键和值通过<code>:</code>进行连接。<ref>一般ini通过<code>=</code>连接,但在铁锈中使用<code>:</code>连接</ref>在铁锈中,ini文件用于存储单位的信息,对单位的各种数值进行设置。
 
例如:
{{折叠|一个ini文件例子|<pre>
[core]
[core]
name: tank
name: tank_custom
price: 1000
displayName: 小坦克
radius: 11
mass: 3000
maxHp: 210


[movement]
[movement]
moveSpeed: 2
movementType: LAND
</pre>}}
moveSpeed: 1.1
在上面这段ini中,我们可以清晰的看到:core中name的值为tank,movement中moveSpeed的值为2。
maxTurnSpeed: 4.1
</pre>
所有这些关键字和功能描述都可以在[https://docs.google.com/spreadsheets/d/1aeP3pUic0IutZlgGix_cM8xR7LEH44gS4itAxETK954 官方文档]中查找。<br>
接下来我们将从游戏开发的角度了解游戏为单位定义了哪些属性。<br>


[[Mod语法|详细的ini教程]]
注册名称<br>
 
使用[core]name关键字为单位确定名称,当其他地方要用到这个单位时,我们会引用该名称。单位名称通常用英文字母和下划线命名。<br>
== 调试单位 ==
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;">
 
#
=== 重新加载单位 ===
[core]
通常情况下,每次进入铁锈时,模组会被自动加载。单击主界面中“模组”按钮后,找到“重载数据”按钮,单击即可重新加载模组数据。
name: medium_tank
 
</pre>
如果你正在沙盒中进行模组调试,在actions、all和modded中可以找到“Reload units”,单击此按钮铁锈将会重新加载所有单位。如果你只是更改了单位的数据,也可以在modded中单击“Quick Reload”,此时铁锈会以很快的速度重新加载单位。
 
=== Debug按钮 ===
在沙盒的actions中,有一个“Debug”选项,默认为关闭,打开此选项后,单击任意单位的血量都会看到“--Debug--”字样和当前单位的信息。
{{折叠|Debug可以显示的信息|* 单位name
* 单位id
* x
* y
* 高度
* 角度
* 图层
* 自定义资源
* 自定义内存(memory数组中的值不能显示)
* 自定义目标(customTarget1)}}
如果你的单位使用了自动触发(AutoTrigger),在打开“Debug”选项后,还可以打开“Trigger Debug”选项,打开此选项后,选中任意单位将能够看到它们的自动触发,并且能够看到自动触发中单个条件的值。<references />
 
== 相关链接 ==
 
* [[自定义内存]]
 
* [[模组导入]]
 
* [[变量]]
 
[[分类:模组制作]]
-->

2024年12月29日 (日) 13:42的最新版本

游戏通过读取"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:v1.15
title:在这里编写你的标题MOD
description: 你的MOD简介

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

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

注册名称
使用[core]name关键字为单位确定名称,当其他地方要用到这个单位时,我们会引用该名称。单位名称通常用英文字母和下划线命名。

#
[core]
name: medium_tank