|
- 部队从兵种继承时不会修改能力,因而兵种能力就是部队能力。
- 系统以集中、预定义方式管理能力。预定义能力被集中存放在[units]块下,一个[units].[abilities]块定义一种能力(参考<data>/core/units.cfg)。任一[abilitys]块下必须有一个全局唯一id,兵种宣称自已要使用哪种能力时使用该id。举个例子,“abilities = illumination, curing, heals16”指示该兵种拥有“照明”、“治愈”、“自疗”能力。如果想向系统增加一种能力,使用下面步骤。
1:在[units]块下增加一个[abilities]块,赋给该[abilities]块一个和已存在[abilities]不冲突的id。[abilities]块则指示能力实现(以下会叙述如何写[abilities]块)。向系统增加持能可使用“ABILITIES_DEF”宏。
2:在希望拥有该能力的兵种中设置“abilities”字段。abilities指示了该兵种拥有的能力,当拥有多项能力时,中间用“,”分隔。
如何定义[abilities]块
一个[abilities]块大致可分为三个部分;说明、条件、操作。让结合“治疗+16”进一步说明。- #define ABILITY_HEALS16
- [heals]
- value=16
- id=heals16
- name= _ "heals +16"
- female_name= _ "female^heals +16"
- description= _ "Heals +16:
- This unit combines herbal remedies with magic to heal units more quickly than is normally possible on the battlefield.
- A unit cared for by this healer may heal up to 8 HP per turn, or stop poison from taking effect for that turn.
- A poisoned unit cannot be cured of its poison by a healer, and must seek the care of a village or a unit that can cure."
- affect_self=no
- poison=slowed
- [affect_adjacent]
- adjacent=n,ne,se,s,sw,nw
- [/affect_adjacent]
- [/heals]
- #enddef
复制代码- 说明:它是对能力的总体描述。块中和说明相关的字段有“id”、“name”、“female_name”和“description”。
- 条件:它指示能力要能发挥作用需满足的条件。和条件相关的有“affect_self”字段以及“affect_adjacent”块。
- 操作:它指示一旦满足条件后则执行的操作,它是能力实际产生影响部分。怎么写操作和具体能力相关,“治疗+16”和操作相关是两个字段。“value”、“poison”。“value=16”指示对被能力单位增加16HP;“poison=slowed”指示如果被能力单位正处于中毒状态时,则此回合不降HP(中毒单位每回合降8HP)。
对能力中的三要素,说明没什么好补充的,以下详细叙述“条件”、“操作”。
要素之条件
在描述条件前让先看下能力释放逻辑。释放逻辑指的是能力是怎么被释放的。对能力拥有者来说,释放能力是个被动过程,即拥有技持单位是“等”着被询问是否有该项持能,如果有就释放。以下是通用释放逻辑。
- 程序运行到特定时刻,被能力单位认为有种能力能强化自已,开始询问是否有该持能。
- 从自已所在位置到六个相邻位置,依次检查能力条件,如果该位置上存在可释放的单位,把该单位操作加入操作集。
- 操作集是空,退出释放逻辑。否则进入4。
- 执行操作集。
治疗能力。程序运行到新回合开始时要进入治疗阶段,程序挑出一个可治疗单位(HP未满),针对该单位从自已所在位置到六个相邻位置依次询问是否有相关单位拥有治疗能力,如果有,把该操作加入操作集。形成的操作集不为空时,从集合中选出个最好治疗操作(像增加的HP最大),执行该操作。此时可治疗单位称被能力单位。
领导持能。当部队要攻击时,针对正要实施的攻击单位从自已所在位置到六个相邻位置询问是否有相关单位拥有领导能力,如果有,把该操作加入操作集。形成的操作集不为空时,从集合中选出个最好领导操作(像增加的攻击力最大)。此时攻击单位称被能力单位。
此种逻辑下,拥用能力单位是被动方,当要判断是否可释放条件时,被能力单位反而成了“中心”单位。条件包括两种:位置条件、被能力单位的特殊要求。
条件I:位置条件
被能力单位和拥有能力单位必须满足一定位置条件才发动能力。
能力可能影响自已,可能影响相邻单位。但最多影响相邻单位,无法影响相邻以外的单位,像隔一格的。
affect_self指示该能力是否影响自已。yes时影响,否则不影响。默认影响。
affect_adjacent块指示该持能影响哪些相邻单位。由于最多影响相邻位置,于是可出现“n”、“ne”、“se”、“s”、“sw”、“nw”中一个或多个。
在任一时刻,能力是否能释放依赖被能力单位的当前位置,affect_self、affect_adjacent等于设定了位置条件。
对“治疗+16”来说,被能力单位和拥有能力单位必须满足相邻关系;而对“自疗+16”来说,被能力单位和拥有能力单位必须是同一个单位。
条件II:被能力单位的特殊要求
“领导”能力能强化等级低的单位的攻击力,也就是说被能力单位(“中心”单位)的等级必须低于拥有能力单位等级。这个低于关系就是对被能力单位的特殊要求。- #define ABILITY_LEADERSHIP_LEVEL_1
- # Canned definition of the Leadership (level 1) ability to be included in an
- # [abilities] clause.
- [leadership]
- id=leadership1
- value=10
- cumulative=no
- name= _ "leadership"
- female_name= _ "female^leadership"
- description= _ "Leadership:
- This unit can lead our own units that are next to it, making them fight better.
- Adjacent own units of lower level will do more damage in battle. When a unit adjacent to, of a lower level than, and on the same side as a unit with Leadership engages in combat, its attacks do 25% more damage times the difference in their levels."
- affect_self=no
- [affect_adjacent]
- adjacent=n,ne,se,s,sw,nw
- [filter]
- level=0
- [/filter]
- [/affect_adjacent]
- [/leadership]
- #enddef
复制代码 [affect_adjacent]块中的[filter]块就用于描述这个特珠要求,它是一个标准单位过滤器。相应的,[leadership]根下(如果存在)的[filter_self]就用于描述自已既是被能力又是拥有能力单位时的特殊要求。
能力条件中没对拥有者有特殊要求。拥有者只要同时满足拥有该能力和位置条件就行了。 |
|