Imperivm Resurrected

Formaciones nuevas

Las formaciones de héroe (Línea, Frente, Bloque, Caballería) son datos: un formations.xml con bonificaciones y colocación, y dos órdenes por formación en data\commands\Hero.xml. Un mod añade las suyas con parches, sin compilar nada.

Ejemplo: examples/formation-example (la Cuña).

Camino rápido

create-formation.js escribe las tres piezas. Necesitas la carpeta DATA del juego (Datos del juego):

node tools/create-formation.js <DATA> mods/my-mod Wedge --damage 3 --armor 1 --like "Cavalry core" --key i
Opción Qué hace
<Name> El Name de la formación: letras y números, sin espacios. Tiene que ser nuevo
--damage, --armor, --pierce-defense, --slash-defense, --range, --level Las bonificaciones (de -1000 a 1000). Sin ninguna, la formación solo cambia la colocación
--like La formación del juego de la que copiar la lista de clases, el tamaño, el espaciado y la imagen del botón: Front (predeterminada), Line, Block, Cavalry core, Horse Wings, Ranged Wings
--classes "Unit=wings,Horse=front" Tu propia colocación, en lugar de la de --like. Los huecos son front, wings y center
--width, --height, --front, --wing-x, --wing-y Width, Height y los tres espaciados (Offset…)
--key La tecla que selecciona la formación. Sin ella, busca una libre
--description, --button El Description (en inglés) y un botón distinto (States/…)

Genera:

patches\data\formations.xml                     the formation
patches\data\commands\Hero.xml                  its two buttons, form-<name>-menu and form-<name>
patches\data\subai\hero_formation_verify.vs     the script patch
mod.json                                        only if the folder doesn't have one

Si el mod ya tiene otra formación, la nueva se añade a esos mismos archivos sin sobrescribir la anterior. Lo mismo vale para el parche del script: cada formación añade su propio @replace.

Comprueba que la tecla esté libre para el héroe, que hereda las órdenes de Unit y Military. Si choca, avisa y genera igualmente. En el juego solo i está libre, así que la segunda formación de un mod tendrá que compartir tecla: elige una letra y asegúrate de que el choque no te estorba.

Los botones usan la imagen de la formación base. Para tener la tuya, mira Imágenes personalizadas y pasa --button.

Qué hace por dentro (hacerlo a mano)

Las tres piezas

1. La formación (patches\data\formations.xml):

<patch>
  <add select="/Formations">
    <FormationClass Name="Wedge"
        Description="The warriors form a wedge with the cavalry at the point."
        Width="3" Height="1"
        BonusDamage="3" BonusArmor="1"
        OffsetFrontLineByY="40" OffsetWingsByX="30" OffsetWingsByY="0">
      <Class Name="Unit" Wings="1"/>
      <Class Name="Horse" FrontLine="1"/>
      <Class Name="BaseMage" CentralBlock="1"/>
      <Class Name="Peasant" CentralBlock="1"/>
    </FormationClass>
  </add>
</patch>
Atributo Qué hace
Name El nombre de la formación; las órdenes se refieren a él
Description No se muestra en el botón: el juego enseña un texto fijo ("Army bonus during stand ground") con los iconos de bonificación
Width, Height Tamaño de la cuadrícula del grupo de primera línea (FrontLine). En la Cuña, donde Unit va a los flancos, Width=3 solo afecta a los caballos
BonusDamage, BonusArmor, BonusRange, BonusLevel Bonificaciones del ejército, solo mientras las tropas están quietas ("stand ground"). Se limitan a -1000..1000
BonusDefencePierce, BonusDefenceSlash Defensa contra perforación y contra corte por separado. BonusArmor fija las dos a la vez
OffsetFrontLineByY, OffsetWingsByX, OffsetWingsByY A qué distancia del héroe se colocan la primera línea y los flancos
<Class Name="…" …/> Dónde van las unidades de esa clase: FrontLine="1" delante, Wings="1" a los lados, CentralBlock="1" en el centro, alrededor del héroe

BonusAttack aparece en una de las formaciones del juego pero no hace nada: no cuentes con él.

2. Los botones (patches\data\commands\Hero.xml). Dos órdenes: form-<name>-menu (el botón que ves cuando esa es la formación actual) y form-<name> (el que la selecciona). Las dos llevan param="<Name>" y menu="1". Copia form-front-menu y form-front y cambia name, param, key y button (la imagen; mira Imágenes).

La tecla no debe chocar con otra orden del héroe, y el héroe además hereda las órdenes de Unit. En data\commands (extráelo con extract-data.js, mira Parches) busca key="x" en HERO.XML y UNIT.XML. El ejemplo usa i, que no está en ninguno; q, por ejemplo, pertenece a reveal.

3. Un parche para el script que deja pasar los botones (patches\data\subai\hero_formation_verify.vs). El script del juego solo deja elegir una formación cuando está abierto uno de sus cuatro menús, nombrados en una lista. Añade el tuyo:

@replace if (cmd_name != "form-front-menu")
if (cmd_name != "form-front-menu")
	if (cmd_name != "form-wedge-menu")
@end

Si otro mod parchea esa misma línea para añadir otra formación, los parches se apilan: cada @replace reescribe la línea del juego y deja la tuya detrás.

Online

Las bonificaciones cambian la jugabilidad: todos los jugadores deben tener el mismo mod.