Imperivm Resurrected

Riferimento dell'SDK

Elenco da consultare di tutto ciò che una mod può dichiarare. Per imparare a farlo, guarda le guide collegate in ogni tabella.

I percorsi di questa pagina usano \. Il gioco non distingue maiuscole e minuscole.

1. Struttura di una mod

Una mod è una cartella di mods\. Le cartelle che iniziano con . o _ vengono ignorate. Senza mod.json, il gioco ne crea uno base (con autoGenerated).

"Gameplay" = tutti i giocatori devono avere la stessa mod (README).

Percorso nella mod Cosa fa Gameplay
mod.json La scheda della mod. Vedi sezione 2 No
data\… File nuovi o che sostituiscono quelli del gioco, con lo stesso percorso Sì
scenarios\, adventures\, conquests\ Mappe, avventure e conquiste Sì
units\, buildings\, mapobjects\ Sostituiscono quelli del gioco. I .xml e i .pass (impronte) contano; i .rle e il resto no Solo .xml e .pass
visuals\ Effetti e proiettili Solo .xml
packs\*.bfhp Mappe (casuali, insediamenti…) Sì
packs\*.pak Pacchetti che si montano insieme a quelli del gioco Dipende da cosa contengono
randommap\, randommapsettlements\ Forme di mappa casuale e modelli di città (Mappe casuali, Modelli di città) Sì
patches\<percorso> Patch del file del gioco con quel percorso. Solo .xml, .ini e .vs. Vedi sezione 6 Dipende dal percorso che modifica
civs\<id>.json Civiltà. Sezione 3 Sì
specials\*.json Specialità. Sezione 4 Sì
options\*.json Opzioni di partita. Sezione 5 Sì
events\<Evento>.vs Script di evento. Sezione 7 Sì
loc\<idioma>.loc.xml, loc\<idioma>\*.loc.xml Testi che si aggiungono a quelli del gioco (Lingue) No
local\<idioma>\<percorso> File che il gioco vede come currentlang\<percorso>, solo con quella lingua No
local\<idioma>.pak Pacchetto di lingua (anche <idioma>_algo.pak). Si monta solo quello della lingua del gioco Dipende da cosa contiene
hidden.txt File del gioco che la mod nasconde, un percorso per riga; quelli dopo [lingua] si nascondono solo con quella lingua. Per le mod vecchie che toglievano file sostituendo i pacchetti del gioco; lo scrive riduci-mod.js Sì, se nasconde file di gameplay
rle.mmp.tail Grafica aggiunta in fondo all'rle.mmp del gioco, con l'impronta dell'rle.mmp che amplia. Lo scrive riduci-mod.js. Può esserci un solo pacchetto attivo che ce l'ha No
movies\… Filmati (PlayMovie): si cercano prima nei pacchetti attivi, in ordine di caricamento No
gameres\… Immagini dell'interfaccia singole (Immagini) No
Qualsiasi altro percorso File singolo con lo stesso percorso che nel gioco No
  • Estensioni vietate: .exe .dll .asi .bat .cmd .com .scr .ps1 .vbs .js .msi .sys .cpl .lnk .reg .jar .hta .wsf .pif. Con una di queste, la mod non si carica.
  • Un'estensione che non è tra quelle note e non è vietata viene accettata e non viene mai eseguita.
  • Se due mod hanno lo stesso file, un file sciolto vince su uno dentro un .pak; tra due file sciolti, o tra due dentro .pak, vince quella che viene prima nell'ordine di caricamento. Quell'ordine lo calcola il gioco, non si sceglie: prima conta ciò che chiedono le mod (una mod sta sopra a quelle di cui ha bisogno in requires e a quelle del suo loadAfter, e sotto a quelle del suo loadBefore); poi le estetiche stanno sopra ai contenuti (mappe, battaglie, conquista) e questi sopra alle mod che cambiano il gameplay; a parità, per id. Con le stesse mod esce lo stesso ordine su tutti i computer. Nella scheda di ogni mod, il gestore mostra i file che condivide con altre mod attive e di quale mod si usa ciascuno. Se due mod attive sostituiscono gli stessi file di gameplay e nessuna nomina l'altra in requires, loadAfter o loadBefore, appare come problema: bisogna usarne solo una, o una patch di compatibilità (una mod che porta i file uniti e ha entrambe nel suo loadAfter). Se tutti i file che condividono sono estetici (texture, suoni, interfaccia), il giocatore può scegliere di quale mod usarli; la scelta si salva nel profilo, vale solo per i file sciolti e non cambia né l'ordine di caricamento né ciò che conta online. Per cambiare pochi valori di un file che anche un'altra mod può toccare, è meglio una patch (sezione 6): le patch si sommano invece di sostituire il file.

Cartella di prova <gioco>\mod\ (senza creare una mod; vince su tutte le mod):

Percorso Cosa fa
mod\<percorso> Sostituisce il file del gioco con quel percorso (se [Mods] Override=1)
mod\patches\<percorso>, mod\loc\<idioma>.loc.xml, mod\events\<Evento>.vs, mod\civs\*.json, mod\specials\*.json Lo stesso che in una mod. options\ da qui non si legge
mod\_cache\ La genera il gioco (testi aggiunti, file con le patch). Non toccarla

2. mod.json

Campo Tipo Default Cosa fa
id testo nome della cartella, in minuscolo e con - Identificatore della mod
name testo o oggetto per lingua nome della cartella Nome nel gestore
version testo vuoto Versione
authors elenco di testi vuoto Autori
description testo o oggetto per lingua vuoto Descrizione
license testo vuoto Licenza
redistributable booleano false L'host può inviare la mod a chi non ce l'ha
requires elenco di id, o di oggetti {"id", "version"} vuoto Mod di cui ha bisogno. version accetta >=, <=, >, <, =, *, o un numero (uguale)
incompatibleWith elenco di id vuoto Mod con cui non si può attivare
loadAfter elenco di id vuoto La tua mod sta sopra a quelle: vincono i suoi file, patch e testi
loadBefore elenco di id vuoto La tua mod sta sotto a quelle
category testo vuoto Categoria di GameBanana (Pubblicare)
tags elenco di testi vuoto Tag di GameBanana: giocatori (mappe) e lingua (campagne, traduzioni, audio)
sources oggetto nessuno url (o page), gamebanana (numero) ed tags (elenco, si sommano a quelle sopra)
language oggetto, elenco di oggetti o testo nessuno code, name e base (di default english). Solo testo = solo il codice. Vedi Lingue
commands oggetto nessuno {"<file degli ordini senza estensione>": {"name": testo o oggetto per lingua}}. Vedi Tasti

Un testo per lingua sceglie quello del gioco; se manca, l'inglese; se manca, il primo.

Alias in inglese che il gioco legge comunque: name, description, license, redistributable, language (con code, name).

3. civs\<id>.json

Guida: Civiltà.

Campo Tipo Default Obbligatorio Cosa fa
id testo nome del file No Lettere, numeri e _; inizia con una lettera; fino a 24. Si salva in minuscolo. Negli script è la costante così come la scrivi, con la prima maiuscola (Dacia, RomeImperial)
index intero 10-99 — Sì Numero della civiltà
base testo Gaul No Civiltà del gioco da cui eredita: Gaul, RepublicanRome, Carthage, Iberia, ImperialRome, Britain, Egypt, Germany (anche Rome, Roman, Briton)
name testo o oggetto per lingua l'id con la maiuscola iniziale No Nome nella lobby
letter una lettera quella della base No Prefisso di classi e ordini
template testo vuoto No Prefisso dei tuoi modelli di città e villaggio
internalName testo quello della base No Nome con cui il gioco cerca i file dell'interfaccia. Vale anche in race= se non è quello della base
folder testo quello della base No Nome nei testi di selezione
random booleano true No Entra nel sorteggio della civiltà casuale
biome testo (una civiltà del gioco) la base No Terreno, alberi e oggetti della mappa casuale
ai booleano false No L'IA gioca con le tue classi e i tuoi ordini (altrimenti, con quelli della base). Nel sorteggio, a un'IA toccano solo quelle che ce l'hanno
ownAi booleano false No Con ai: la mod porta tutti gli script di IA
alias oggetto nessuno No classes e commands: nome nella base → nome nella tua civiltà (ogni valore, un testo)
variant booleano false No Variante della base: usa le sue classi, GetPlayerRace dà la base e Mod_PlayerCiv quella scelta. Con essa, ai vale true se non indicato
replacesBase booleano false No La base non compare nella lobby: questa civiltà prende il suo posto e la sua quota del sorteggio casuale
  • race="<id>" in <properties> di una classe usa la civiltà tramite il suo id o il suo internalName.
  • id o index ripetuti: vale quello della mod che viene prima; gli altri vengono ignorati con un avviso.
  • Alias in inglese: index, name, letter, template, internalName, folder, random, biome, ai, ownAi.

4. specials\*.json

Guida: Specialità.

Campo Tipo Default Obbligatorio Cosa fa
id testo — Sì Lettere, numeri e _; inizia con una lettera; fino a 24. Non può essere una specialità del gioco. È la costante di script (Critical) e il nome in unit_specials
bit intero 36-63 — Sì Bit della maschera. Non cambiarlo dopo la pubblicazione
name testo o oggetto per lingua l'id No Nome
description testo o oggetto per lingua vuoto No Viene letta; non viene mostrata
icon testo vuoto No Viene letto; non viene usato
  • id o bit ripetuti: vale quello della mod che viene prima.
  • In unit_specials, i nomi sono separati da virgole; quelli delle mod non distinguono maiuscole e minuscole. Il gioco ignora quelli che non conosce.
  • Alias in inglese: name, description, icon.

5. options\<id>.json

Guida: Opzioni di partita.

Campo Tipo Default Cosa fa
id testo nome del file Lettere, numeri, _ e -; fino a 32. Si salva in minuscolo. È quello che usano Mod_GetOption e Mod_GetOptionValue
name testo o oggetto per lingua l'id Testo nella lobby
description testo o oggetto per lingua vuoto Aiuto della riga
values elenco da 2 a 16 nessuno (= interruttore) Ogni valore: un testo, oppure {"id", "nombre"}. Il primo è lo 0
default booleano, numero o testo false / 0 Interruttore: true/false. Lista: numero del valore (da 0) o il suo id. Un id che non esiste dà 0
  • Un values con meno di 2 o più di 16 elementi fa ignorare l'intera opzione.
  • Bit: interruttore 1; lista di 2 valori 1; da 3-4, 2; da 5-8, 3; da 9-16, 4. Entrano in ordine alfabetico di id.
  • Con id ripetuto vale quello della mod che viene prima.
  • Alias in inglese: name, description, values, default.

6. Patch

Guida: Patch. Una patch va in patches\<percorso del file del gioco>. Solo .xml, .ini e .vs. Ordine: dall'ultima mod dell'ordine di caricamento alla prima, così la prima ha l'ultima parola; mod\patches per ultimo.

XML

Il primo tag della patch è la radice (di solito si chiama <patch>); i suoi figli sono le operazioni, che si applicano in ordine. I nomi di operazioni, tag e attributi non distinguono maiuscole e minuscole.

Operazione Attributi Contenuto Cosa fa
<set> select, optional, unset, e qualsiasi altro attributo Nessuno Cambia o aggiunge quegli attributi negli elementi scelti. unset toglie attributi (separati da spazi o virgole)
<add> select, optional, position Elementi o commenti Li aggiunge. position: end (default), start, before, after
<remove> select, optional Nessuno Toglie gli elementi scelti
<replace> select, optional Elementi o commenti Sostituisce gli elementi scelti con il contenuto
  • select è obbligatorio. Con <set> non puoi impostare un attributo che si chiami select, optional o unset.
  • optional: 1, yes, si, sí o true evitano l'errore se il selettore non trova nulla.
  • <add> e <replace> senza contenuto danno errore.
  • Un selettore senza risultati, o un'operazione sconosciuta, viene saltato con un errore; le altre proseguono. Se la patch non è ben formata, non viene applicata nessuna operazione.
  • Il file con la patch mantiene commenti e virgolette; gli attributi passano su una sola riga.

Selettore

Elemento Sintassi
Passo figlio / discendente /nombre, //nombre
Qualsiasi nome *
Con attributo uguale [@a='v'] o [@a="v"] (non distingue maiuscole e minuscole; capisce &amp; &lt; &gt; &quot; &apos;)
Con attributo [@a]
L'n-esimo [n], da 1: l'n-esimo tra quelli che soddisfano nome e condizioni, dentro ogni padre

Si possono concatenare condizioni ([@a='v'][2]). Non esiste altro (and, contains, text(), ..). Inizia sempre con / o //.

INI

Ogni riga della patch, sotto una [Seccion] (obbligatoria prima di qualsiasi riga):

Riga Cosa fa
Clave = valor Cambia la prima riga con quella chiave nella sezione, oppure la aggiunge in fondo alla sezione. Si scrive come Clave = valor
-Clave Toglie dalla sezione tutte le righe con quella chiave, o quella riga esatta. Errore se non ce n'è nessuna
+Linea Aggiunge una riga singola se non c'è già
[Seccion] Cambia la sezione. Se non esiste nel file, viene creata in fondo
;… o #… Commento. Vale solo su una riga intera

Le chiavi e le sezioni non distinguono maiuscole e minuscole. Un commento a fine riga di una riga della patch non viene tolto.

Script .vs

Le direttive iniziano con @ nella prima colonna; il codice sotto ogni direttiva è ciò che viene inserito.

Direttiva Dove inserisce
@top Dopo la prima riga, se è un commento // (la firma); altrimenti, all'inizio
@bottom In fondo allo script
@before TEXTO Prima della prima riga che contiene TEXTO
@after TEXTO Dopo quella riga
@replace TEXTO Al posto di quella riga. Senza codice sotto, cancella la riga
@end Chiude il blocco; quello che segue fino alla direttiva successiva viene ignorato
  • TEXTO è un pezzo letterale di una riga (distingue maiuscole e minuscole). Si usa la prima riga che lo contiene, e le direttive si applicano in ordine: vedono ciò che hanno inserito le precedenti.
  • Errore (e la direttiva viene saltata): direttiva sconosciuta, @before/@after/@replace senza TEXTO, direttiva senza codice (tranne @replace), TEXTO non trovato.

7. Eventi di script

Guida: Script. File: events\<Evento>.vs. Gira su tutti i PC; con più mod vengono eseguiti tutti.

Evento Quando Firma (prima riga)
OnGameStart All'inizio di una partita, dopo l'avvio degli script di vittoria. Può usare Sleep // void
OnObjectDie Muore un oggetto, prima di elaborarne la morte (la prima volta) // void, Obj victim
OnObjectKill Un colpo uccide un oggetto // void, Obj killer, Obj victim
OnSettlementCaptured Un insediamento cambia proprietario a partita in corso. Giocatori 1-16; 0 = senza proprietario // void, Obj building, int oldPlayer, int newPlayer
OnAttackResolved Un colpo che fa danno, prima di applicarlo // void, Obj attacker, Obj victim, int damage
OnPlayerDefeated Si dichiara sconfitto un giocatore (1-8), una volta per giocatore // void, int player
  • Tranne OnGameStart, vengono eseguiti subito e non possono aspettare.
  • Un evento che scatta dentro se stesso viene interrotto al 4º livello.
  • Se lo script fallisce durante l'esecuzione, il log lo annota fino a 5 volte per script.
  • Si leggono solo questi nomi di evento. I nomi dei parametri li scegli tu.

8. Funzioni Mod_*

Guida: Script. L'API attuale è la 6; entra nel controllo del multigiocatore.

Funzione API
Mod_Log(str text) 1
Mod_LogInt(str text, int value) 1
Mod_IsActive(str id) : bool 1
Mod_ApiVersion() : int 1
Mod_SetInt(str name, int value) 2
Mod_GetInt(str name) : int 2
Mod_AddInt(str name, int delta) : int 2
Mod_HasKey(str name) : bool 2
Mod_AttackDamage() : int 3
Mod_SetAttackDamage(int damage) 3
Mod_HasSpecial(Unit unit, int bit) : bool 4
Mod_SetSpecial(Unit unit, int bit, bool on) 4
Mod_TrueRace(Obj obj) : int 5
Mod_GetOption(str id) : bool 6
Mod_GetOptionValue(str id) : int 6

Costanti di script: l'id di ogni civiltà di mod con la prima maiuscola (valore = il suo index) e l'id di ogni specialità di mod (valore = il suo bit).

9. imperivm-mod.ini

Si trova nella cartella del gioco. Si legge all'avvio.

Sezione Chiave Valore Default Cosa fa
[Debug] LogFiles 0 o 1 0 Il log annota ogni file che apre il gioco e segna quelli che non esistono (VFS: opens … -> does not exist)
[Debug] Dump percorsi separati da virgole, o * vuoto Copia ogni file in mod-dump\<percorso> così come lo legge il gioco (patch e testi delle mod già applicati), la prima volta che lo apre. Nome esatto, senza caratteri jolly tranne * (tutti)
[Debug] DumpAtStartup percorsi separati da virgole vuoto Copia quei file in mod-dump\ all'avvio, senza aspettare che il gioco li apra
[Mods] Override 0 o 1 1 Attiva <gioco>\mod\<percorso> come sostituto dei file
[Mods] Profile nome del profilo, Original o No profile Original Profilo con cui parte il gioco (No profile è «I miei contenuti» nel gestore). Lo cambia il gestore; una modifica si applica al riavvio

10. Limiti

Cosa Limite Dove risulta
Bit delle opzioni di partita 8 tra tutte le opzioni di tutte le mod Codice
Valori di una lista di opzioni da 2 a 16 Codice
id di opzione fino a 32; lettere, numeri, _, - Codice
id di civiltà e di specialità fino a 24; lettere, numeri, _; inizia con una lettera Codice
index di civiltà da 10 a 99 Codice
letter di civiltà 1 carattere Codice
bit di specialità da 36 a 63 Codice
bit in Mod_HasSpecial e Mod_SetSpecial da 0 a 63 (fuori intervallo: false / non fa nulla) Codice
Nome di variabile di mod fino a 64 caratteri Codice
Variabili di mod fino a 1.024; interi a 32 bit Codice
Mod_Log e Mod_LogInt 2.000 righe per sessione Codice
Mod_SetAttackDamage un valore negativo resta a 0 Codice
Errori di script di evento nel log 5 per script Codice
Eventi annidati 4 livelli Codice
Errori di patch per mod si conservano i primi 50 Codice
Dump fino a 1.023 caratteri; DumpAtStartup, 2.047 Codice
<behavior> per classe 8 Script
Immagini, livelli e stati di un .ent.xml 32, 32 e 8 Grafica
idx di <anim> e fotogrammi per animazione da 1 a 28; fino a 64 (2 sono sentinella: 62 righe) Grafica
Direzioni di uno sprite 8 soldati, 12 eroi e animali, 4 navi Grafica
Colori di uno sprite 256; con colore del giocatore, 192 Grafica
Pulsante / ritratto 153 x 51 / 65 x 76 Immagini
BonusDamage, BonusArmor, BonusRange, BonusLevel di una formazione da -1000 a 1000 Formazioni
Nome di tipo di mappa casuale da 2 a 31 caratteri Mappe casuali
--giocatori, --piccolo, --distorsione di crea-mappa-casuale.js da 2 a 8, da 0 a 8, da 0 a 0,5 crea-mappa-casuale.js
--larghezza di crea-modello.js da 0 a 4 Modelli di città

Le guide spiegano come si fa ogni cosa; questo è l'elenco completo. Torna al README.