单位编辑:修订间差异
小 (页面内容被替换为“{{欢迎编辑|}} 本页面将介绍游戏mod使用的代码方面的细节。 ==RW的世界== Rusted Warfare(以下均简称“铁锈”)的世界是由单位和地图两部分组成,地图是一个有限的二维空间,地图上的每个坐标点理论上都可到达,目前铁锈地图没有做地形高度相关的设定,地形不会阻挡发射的弹丸(炮弹),建造的纳米光线,单位能否通过某个区域是通过单纯地设置…”) 标签:替换 |
(为自己画饼...) |
||
(未显示2个用户的21个中间版本) | |||
第1行: | 第1行: | ||
<b>序言</b><br> |
|||
{{欢迎编辑|}} |
|||
本文引导想要学习制作mod单位的玩家具有制作自己单位的能力。<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;"> |
|||
# name为单位的名称,这里值为c_interceptor |
|||
name: c_interceptor |
|||
# price为单位的造价,即单位的造价为600 |
|||
price: 600 |
|||
maxHp: 250 |
|||
</pre> |
|||
.ini文件内容里还有小节的概念,即使用英文方括号包裹小节名称并单独占一行来划分单位的不同功能,如: |
|||
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;"> |
|||
# 概念型坦克的四个炮台中两个炮台的设定,[turret_cannon2]和[turret_cannon3] |
|||
[turret_cannon2] |
|||
#top right cannon |
|||
x: 0 |
|||
y: 0 |
|||
attachedTo: base2 |
|||
copyFrom: cannon1 |
|||
linkDelayWithTurret: cannon1 |
|||
warmup:30 |
|||
[turret_cannon3] |
|||
==RW的世界== |
|||
#bottom left cannon |
|||
Rusted Warfare(以下均简称“铁锈”)的世界是由单位和地图两部分组成,地图是一个有限的二维空间,地图上的每个坐标点理论上都可到达,目前铁锈地图没有做地形高度相关的设定,地形不会阻挡发射的弹丸(炮弹),建造的纳米光线,单位能否通过某个区域是通过单纯地设置不同的地块类型实现的。地图本身都是静物,没有使用帧动画。铁锈为地图设有触发层,可以根据玩家行为做出反馈,丰富游戏性。铁锈的单位在空间概念上是一个个圆形区域,可以理解为身体,无论单位贴图形状大小,玩家的选中,单位之间的碰撞,弹丸在命中前提下爆炸的位置等都根据这个圆形判定,但如目标的坐标位置,路径和范围伤害命中等判定是根据中心点的。铁锈的单位有自身高度的属性,会影响弹丸生成的位置,单位间的距离等。 |
|||
x: 0 |
|||
y: 0 |
|||
每个单位的具体属性至少有名称,最大生命值,重量和半径,建造价格和速度,雾中视野,运输需槽位,主体图像,可以攻击与否,移动类型,自身高度,移动转向速度。单位能够被建造修复回收和建造修复回收,能够设置若干炮台,炮台能发射弹丸,弹丸能对其他单位造成伤害,单位能够生成使用资源,包括建造用的资金,激光防御所需的能量,抵挡伤害用的护盾值等以及自行设定的自定义的资源,单位还有原版未使用的护甲值等。单位分为可移动的和建筑物,区别在于建筑不能接受移动指令,体积不是圆形而是矩形,建造必须使用纳米等。单位身上可以加腿和臂起到装饰作用,身上加附属的单位实现移动城堡的效果,加贴花更丰富视觉效果,加特效和帧动画使战场更加生动, 使用自定义资源自定义建筑放置规则配合逻辑参数和触发动作,能够控制单位的部分主要属性,使单位自动完成一系列动作,增强单位玩家间的互动等。 |
|||
attachedTo: base3 |
|||
copyFrom: cannon1 |
|||
游戏规则方面,铁锈主要提供了战役(mission),波次生存(survival),遭遇战(skirmish)三种玩法,这些都可以通过设置具体地图的属性实现。铁锈一个玩家控制一个队伍(team),队伍可以是ai玩家控制的,队伍正常的最多有十个,按其在地图上的出生点编号,还有无人控制的编号为-1的中立队伍和编号为-2的敌意中立队伍,队伍间可以在游戏开始前设置结盟,显示为Team-A,B...(编者不知道team name和team id怎么用中文区分)。铁锈有战争迷雾(fog of war)的设定,单位可以设置雾中可视范围。铁锈遭遇战结束游戏的条件是战场只剩一个队伍或联盟,当自己队伍失去所有能建造单位或声明自己是建造者的单位时,游戏判负,地图属性可以设置其他胜败条件。铁锈的每个单位有自己的资源(resource),包括生命值,能量值,弹药等都划为资源,也可以有全队伍共用资源,像原版的资金。 |
|||
linkDelayWithTurret: cannon1 |
|||
warmup:60 |
|||
==要求== |
|||
能将图片音频和代码整合到一起,能在游戏中正常使用,且符合自己的计划。<br /> |
|||
具体:<br /> |
|||
*你需要找到适合你构想单位的贴图,可能是本体的炮台的弹丸的特效的多帧动画的腿和胳膊的贴花的,因而你可能需要使用绘画软件自己画出来。图片要使用png格式的。 |
|||
*音频一般是,背景音乐,开火音效,爆炸音效,选中音效,动作执行音效等,这些可能需要你在网上寻找。音频通常使用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> |
||
<br> |
|||
在<nowiki>"{game_floder}/mods/units"</nowiki>目录下的mod文件夹和<code>.rwmod</code>文件都可以被游戏读取到。 |
|||
<b>.ini文件的位置</b><br> |
|||
<font color="red">施工中</font> |
|||
一个mod在文件存储意义上,是一个具有多层目录结构的文件夹。(mod直接以文件夹的形式而非.rwmod打包形式放入游戏读取目录下也可被游戏正常加载)<br> |
|||
<!---- |
|||
mod文件想要加载到游戏中应该放在:(PC端)"Rusted Warfare/mods/units/" (Android端)"rustedWarfare/units/"或"/com.corrodinggames.rts/files/units/" |
|||
<br /><br /><br /> |
|||
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;"> |
|||
---- |
|||
#以PC端游戏目录为例 |
|||
ini文件是一种配置文件,由节(Section)、键(Key)、值(Value)组成。一个节中通常包含多个键,每个键对应一个值,键和值通过<code>:</code>进行连接。<ref>一般ini通过<code>=</code>连接,但在铁锈中使用<code>:</code>连接</ref>在铁锈中,ini文件用于存储单位的信息,对单位的各种数值进行设置。 |
|||
mods |
|||
└─units |
|||
例如: |
|||
│ custom_units_here.txt |
|||
{{折叠|一个ini文件例子|<pre> |
|||
│ |
|||
[core] |
|||
└─中型坦克改_v0.2 ← 该mod的文件夹 |
|||
name: tank |
|||
│ all-units.template |
|||
price: 1000 |
|||
│ mod-info.txt |
|||
│ |
|||
[movement] |
|||
├─BGM |
|||
moveSpeed: 2 |
|||
├─_未完成 |
|||
</pre>}} |
|||
├─其他 |
|||
在上面这段ini中,我们可以清晰的看到:core中name的值为tank,movement中moveSpeed的值为2。 |
|||
├─单位 |
|||
│ └─中型坦克 ← 该单位的文件夹 |
|||
[[Mod语法|详细的ini教程]] |
|||
│ 中型坦克.ini ← 单位“中型坦克”的.ini文件 |
|||
│ 开火.ogg |
|||
== 调试单位 == |
|||
│ 残骸.png |
|||
│ 炮塔.png |
|||
=== 重新加载单位 === |
|||
│ 车身.png |
|||
通常情况下,每次进入铁锈时,模组会被自动加载。单击主界面中“模组”按钮后,找到“重载数据”按钮,单击即可重新加载模组数据。 |
|||
│ |
|||
└─地图 |
|||
如果你正在沙盒中进行模组调试,在actions、all和modded中可以找到“Reload units”,单击此按钮铁锈将会重新加载所有单位。如果你只是更改了单位的数据,也可以在modded中单击“Quick Reload”,此时铁锈会以很快的速度重新加载单位。 |
|||
</pre> |
|||
<br> |
|||
=== Debug按钮 === |
|||
<b>接下来</b><br> |
|||
在沙盒的actions中,有一个“Debug”选项,默认为关闭,打开此选项后,单击任意单位的血量都会看到“--Debug--”字样和当前单位的信息。 |
|||
了解完.ini文件如何加载后,现在可以关注单位属性信息本身了。<br> |
|||
{{折叠|Debug可以显示的信息|* 单位name |
|||
让我们看看我们的单位是要存在在铁锈世界里,需要有什么条件。<br> |
|||
* 单位id |
|||
#单位的名字是必要的,请先在脑中想一个单位的名称吧。 |
|||
* x |
|||
#单位需要有生命值,这是它在这个战争的世界里存亡的根本。 |
|||
* y |
|||
#单位应该具备空间上的体积,并加上其身体重量,这是物理的世界。 |
|||
* 高度 |
|||
#战争需要招兵买马,生产制造都需要资源的支持,那么应该定义单位被生产出需要的资源多少。 |
|||
* 角度 |
|||
#而生产建造需要时间,为自己mod的单位定义参差的时间,来左右游戏的节奏。 |
|||
* 图层 |
|||
以上是单位在[core]节所应该填写的项。 |
|||
* 自定义资源 |
|||
#游戏是2d画面,单位应该有一个视觉上的身体,使用一张完全俯视角的图片作为单位的身体,当单位移动和旋转时,图片会移动和旋转。(呃,建筑和地图贴图是斜45°俯视,单位是垂直俯视,这是奇怪的事实) |
|||
* 自定义内存(memory数组中的值不能显示) |
|||
#游戏有死亡后残骸的设定以增加真实感,出于玩家观感考虑,你应该再画出单位被摧毁后的样子。 |
|||
* 自定义目标(customTarget1)}} |
|||
#为单位添加其映在地板上的阴影,增加真实感。<code>image_shadow:</code>的值可以填图片路径,但通常填"AUTO"游戏自动在“身体”下绘制一个相同轮廓的半透明黑色的图片作为阴影。 |
|||
如果你的单位使用了自动触发(AutoTrigger),在打开“Debug”选项后,还可以打开“Trigger Debug”选项,打开此选项后,选中任意单位将能够看到它们的自动触发,并且能够看到自动触发中单个条件的值。<references /> |
|||
以上是单位在[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;"> |
|||
* [[模组导入]] |
|||
#一个炮台 |
|||
[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> |
|||
<pre style="margin: 0;padding: 5px;border: 1px solid;background-color: #fffff5;white-space: pre;overflow-x: auto;"> |
|||
#一个弹丸 |
|||
[projectile_1] |
|||
directDamage: 25 ←对命中的敌人造成的伤害 |
|||
life: 60 ←弹丸至多存在多长时间 |
|||
speed: 5 ←弹丸的飞行速度 |
|||
frame: 1 ←弹丸图片使用游戏自带贴图集的哪一帧 |
|||
drawSize: 1 ←贴图绘制的大小 |
|||
</pre> |
|||
[turret_NAME]和[projectile_NAME]节在一个.ini文件可以设置多个,即是一个单位可以有多个炮塔,通过变“NAME”来区分它们。 |
|||
#铁锈有海陆空兵种的设定,这取决于单位的移动类型,常见有:LAND,WATER,AIR,还有HOVER(悬浮,水陆都可通行)等。 |
|||
#单位移动需要设定移动速度、启动时加速的加速度和停止时减速的加速度。转向速度和加速度。 |
|||
以上是[movement]节应填的内容。 |
|||
设置单位的各个属性像是组装一台汽车,为几块功能区域选择零件,确定零件的参数,组装。在许多种属性中选择一个配方,让自己满意。<br> |
|||
[[分类:模组制作]] |
|||
设置不同兵种创造一个动态平衡的世界。<br> |
|||
--> |
|||
我们可以给你的帮助是:明了的零件市场。使动态平衡的战略战术概念。 |
2024年2月26日 (一) 22:19的最新版本
序言
本文引导想要学习制作mod单位的玩家具有制作自己单位的能力。
概念
游戏中的原版单位的属性信息有两种存储方式:一种为游戏早期的直接写在游戏的.jar或.dex文件中,另一种,在游戏具有mod系统后,以一个单位一个.ini文件的形式进行存储。我们制作mod单位使用这种形式。
这里的.ini文件为UTF-8文本文件,使用记事本等文本编辑器即可修改。
具体属性存储方式使用键值对(key: value)进行存储。即单位具体某项属性名称后跟英文冒号然后填这个属性的值。如:
# name为单位的名称,这里值为c_interceptor name: c_interceptor # price为单位的造价,即单位的造价为600 price: 600 maxHp: 250
.ini文件内容里还有小节的概念,即使用英文方括号包裹小节名称并单独占一行来划分单位的不同功能,如:
# 概念型坦克的四个炮台中两个炮台的设定,[turret_cannon2]和[turret_cannon3] [turret_cannon2] #top right cannon x: 0 y: 0 attachedTo: base2 copyFrom: cannon1 linkDelayWithTurret: cannon1 warmup:30 [turret_cannon3] #bottom left cannon x: 0 y: 0 attachedTo: base3 copyFrom: cannon1 linkDelayWithTurret: cannon1 warmup:60
.ini文件的位置
一个mod在文件存储意义上,是一个具有多层目录结构的文件夹。(mod直接以文件夹的形式而非.rwmod打包形式放入游戏读取目录下也可被游戏正常加载)
mod文件想要加载到游戏中应该放在:(PC端)"Rusted Warfare/mods/units/" (Android端)"rustedWarfare/units/"或"/com.corrodinggames.rts/files/units/"
#以PC端游戏目录为例 mods └─units │ custom_units_here.txt │ └─中型坦克改_v0.2 ← 该mod的文件夹 │ all-units.template │ mod-info.txt │ ├─BGM ├─_未完成 ├─其他 ├─单位 │ └─中型坦克 ← 该单位的文件夹 │ 中型坦克.ini ← 单位“中型坦克”的.ini文件 │ 开火.ogg │ 残骸.png │ 炮塔.png │ 车身.png │ └─地图
接下来
了解完.ini文件如何加载后,现在可以关注单位属性信息本身了。
让我们看看我们的单位是要存在在铁锈世界里,需要有什么条件。
- 单位的名字是必要的,请先在脑中想一个单位的名称吧。
- 单位需要有生命值,这是它在这个战争的世界里存亡的根本。
- 单位应该具备空间上的体积,并加上其身体重量,这是物理的世界。
- 战争需要招兵买马,生产制造都需要资源的支持,那么应该定义单位被生产出需要的资源多少。
- 而生产建造需要时间,为自己mod的单位定义参差的时间,来左右游戏的节奏。
以上是单位在[core]节所应该填写的项。
- 游戏是2d画面,单位应该有一个视觉上的身体,使用一张完全俯视角的图片作为单位的身体,当单位移动和旋转时,图片会移动和旋转。(呃,建筑和地图贴图是斜45°俯视,单位是垂直俯视,这是奇怪的事实)
- 游戏有死亡后残骸的设定以增加真实感,出于玩家观感考虑,你应该再画出单位被摧毁后的样子。
- 为单位添加其映在地板上的阴影,增加真实感。
image_shadow:
的值可以填图片路径,但通常填"AUTO"游戏自动在“身体”下绘制一个相同轮廓的半透明黑色的图片作为阴影。
以上是单位在[graphics]节所应该填写的项。
- 可能您的单位需要一些攻击手段来“自保”,先使用
canAttack: true
让单位能够瞄准敌人吧。 - 除了意念攻击,多数攻击手段都是有攻击距离的,使用
maxAttackRange:
填写整数来限制单位的最大攻击距离(也许你知道原版坦克的最大射程)
以上是单位在[attack]节所应该填写的项。
铁锈里的攻击是炮台用于旋转瞄准和发射弹丸,弹丸用于飞行和落到敌人身上造成伤害。
#一个炮台 [turret_1] x: 0 ← 炮台相对单位自身中心的x轴位置 y: 0 ← 炮台相对单位自身中心的y轴位置 projectile: 1 ← 发射哪种弹丸 shoot_sound:tank_firing:0.3 ← 射击时的音效,":0.3"是音量 shoot_flame:small ← 射击时的火焰帧动画(使用游戏自带的帧动画,有自定义的) shoot_light:#FFEECCCC ← 射击时渲染的闪光的颜色 #这只是一个例子,有更多的参数选项
#一个弹丸 [projectile_1] directDamage: 25 ←对命中的敌人造成的伤害 life: 60 ←弹丸至多存在多长时间 speed: 5 ←弹丸的飞行速度 frame: 1 ←弹丸图片使用游戏自带贴图集的哪一帧 drawSize: 1 ←贴图绘制的大小
[turret_NAME]和[projectile_NAME]节在一个.ini文件可以设置多个,即是一个单位可以有多个炮塔,通过变“NAME”来区分它们。
- 铁锈有海陆空兵种的设定,这取决于单位的移动类型,常见有:LAND,WATER,AIR,还有HOVER(悬浮,水陆都可通行)等。
- 单位移动需要设定移动速度、启动时加速的加速度和停止时减速的加速度。转向速度和加速度。
以上是[movement]节应填的内容。
设置单位的各个属性像是组装一台汽车,为几块功能区域选择零件,确定零件的参数,组装。在许多种属性中选择一个配方,让自己满意。
设置不同兵种创造一个动态平衡的世界。
我们可以给你的帮助是:明了的零件市场。使动态平衡的战略战术概念。