Imperivm Resurrected

Riferimento dell'SDK

Un elenco di consultazione di tutto ciò che una mod può dichiarare. Per imparare come farlo, vedi le guide collegate in ogni tabella.

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

1. Struttura della mod

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

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

Percorso nella mod Cosa fa Gameplay
mod.json Il manifesto della mod. Vedi la sezione 2 No
data\… File nuovi, o file che sostituiscono quelli del gioco, allo stesso percorso Sì
scenarios\, adventures\, conquests\ Mappe, avventure e conquiste Sì
units\, buildings\, mapobjects\ Sostituiscono quelli del gioco. Contano .xml e .pass (impronte); .rle e il resto no Solo .xml e .pass
visuals\ Effetti e proiettili Solo .xml
packs\*.bfhp Mappe (casuali, insediamenti…) Sì
packs\*.pak Pack montati insieme a quelli del gioco Dipende dal contenuto
randommap\, randommapsettlements\ Forme delle mappe casuali e modelli di città (Tipi di mappa casuale, Modelli di città e villaggio) Sì
patches\<path> Patch del file del gioco a quel percorso. Solo .xml, .ini e .vs. Vedi la sezione 6 Dipende dal percorso che modifica
civs\<id>.json Civiltà. Sezione 3 Sì
specials\*.json Specialità delle unità. Sezione 4 Sì
options\*.json Opzioni di partita. Sezione 5 Sì
events\<Event>.vs Script degli eventi. Sezione 7 Sì
loc\<language>.loc.xml, loc\<language>\*.loc.xml Testi aggiunti a quelli del gioco (Lingue) No
local\<language>\<path> File che il gioco vede come currentlang\<path>, solo con quella lingua No
local\<language>.pak Pack di lingua (anche <language>_something.pak). Viene montato solo quello della lingua del gioco Dipende dal contenuto
hidden.txt File del gioco che la mod nasconde, uno per riga; quelli dopo [language] sono nascosti solo con quella lingua. Per le vecchie mod che eliminavano file sostituendo i pack del gioco; lo scrive shrink-mod.js Sì, se nasconde file di gameplay
rle.mmp.tail La grafica della mod: ciò che cambia o aggiunge nel rle.mmp del gioco, e va dopo di esso, con l'impronta del rle.mmp del gioco per cui è stato creato. Lo scrive shrink-mod.js. Solo un pack attivo può averlo No
movies\… Filmati (PlayMovie): vengono cercati prima nei pack attivi, in ordine di caricamento No
gameres\… Immagini sciolte dell'interfaccia (Immagini) No
Qualsiasi altro percorso File sciolto con lo stesso percorso del 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 viene caricata.
  • Un'estensione sconosciuta e non vietata è ammessa e non viene mai eseguita.
  • Se due mod forniscono lo stesso file, un file sciolto batte uno dentro un .pak; tra due file sciolti, o due dentro file .pak, vince quello che viene prima nell'ordine di caricamento. L'ordine lo calcola il gioco, nessuno lo sceglie: prima ciò che chiedono le mod (una mod va sopra quelle che servono in requires e quelle in loadAfter, e sotto quelle in loadBefore); poi le mod estetiche vanno sopra i contenuti (mappe, battaglie, conquiste), e i contenuti sopra le mod che cambiano il gameplay; a parità, per id. Le stesse mod danno lo stesso ordine su ogni computer. Nella scheda di ogni mod, il gestore dei contenuti elenca i file che condivide con altre mod attive e quale copia di ciascuno viene usata. Se due mod attive sostituiscono gli stessi file di gameplay e nessuna nomina l'altra in requires, loadAfter o loadBefore, viene mostrato come problema: usane una sola, oppure una patch di compatibilità (una mod che fornisce i file uniti e ha entrambe in loadAfter). Quando tutti i file che condividono sono estetici (texture, suoni, interfaccia), il giocatore può scegliere i file di quale mod usare; 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 potrebbe modificare anche un'altra mod, è meglio una patch (sezione 6): le patch si sommano invece di sostituire il file.

Cartella di prova <game>\mod\ (non serve nessuna mod; batte tutte le mod):

Percorso Cosa fa
mod\<path> Sostituisce il file del gioco a quel percorso (se [Mods] Override=1)
mod\patches\<path>, mod\loc\<language>.loc.xml, mod\events\<Event>.vs, mod\civs\*.json, mod\specials\*.json Come in una mod. options\ non viene letto da qui
mod\_cache\ Generata dal gioco (testi uniti, file con le patch applicate). Non toccarla

2. mod.json

Campo Tipo Predefinito Cosa fa
id testo nome della cartella, in minuscolo con - L'identificatore della mod
name testo, o oggetto per lingua nome della cartella Nome nel gestore dei contenuti
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 oggetti {"id", "version"} vuoto Mod di cui ha bisogno. version accetta >=, <=, >, <, =, *, o un numero (uguale)
incompatibleWith elenco di id vuoto Mod con cui non può essere attivata
loadAfter elenco di id vuoto La tua mod va sopra quelle: vincono i suoi file, le sue patch e i suoi testi
loadBefore elenco di id vuoto La tua mod va sotto quelle
category testo vuoto Categoria di GameBanana (Pubblicare su GameBanana)
tags elenco di testi vuoto Tag di GameBanana, Title: value: altre categorie (Type), giocatori (Players) e lingua (Language). Vedi Pubblicare su GameBanana
sources oggetto nessuno url (o page), gamebanana o gamebananaSound (numero, dalla sezione Mods o Sounds) e tags (elenco, aggiunti a quelli sopra)
language oggetto, elenco di oggetti o testo nessuno code, name e base (english per impostazione predefinita). Un semplice testo = solo il codice. Vedi Lingue
commands oggetto nessuno {"<orders file without extension>": {"name": text or object per language}}. Vedi Tasti

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

Alias inglesi che il gioco legge anche: name, description, license, redistributable, language (con code, name).

3. civs\<id>.json

Guida: Civiltà.

Campo Tipo Predefinito Obbligatorio Cosa fa
id testo nome del file No Lettere, numeri e _; inizia con una lettera; fino a 24. Salvato in minuscolo. Negli script è la costante come la scrivi, con la prima lettera maiuscola (Dacia, RomeImperial)
index intero 10-99 - Sì Il 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 stanza
letter una lettera quella della base No Prefisso per classi e ordini
template testo vuoto No Prefisso dei tuoi modelli di città e villaggio
internalName testo quello della base No Nome che il gioco usa per cercare i file dell'interfaccia. Valido anche in race= se non è quello della base
folder testo quello della base No Nome nei testi di selezione
random booleano true No Incluso nel sorteggio casuale delle civiltà
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, un'IA riceve solo civiltà che ce l'hanno
ownAi booleano false No Con ai: la mod fornisce tutti gli script dell'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 restituisce la base e Mod_PlayerCiv quella scelta. Con questo campo, ai è true se non lo imposti tu
replacesBase booleano false No La base non compare nella stanza: questa civiltà prende il suo posto e la sua quota del sorteggio casuale
  • race="<id>" nelle <properties> di una classe usa la civiltà tramite il suo id o il suo internalName.
  • id o index ripetuti: vince quello della mod che viene prima; gli altri vengono ignorati con un avviso.
  • Alias inglesi: index, name, letter, template, internalName, folder, random, biome, ai, ownAi.

4. specials\*.json

Guida: Specialità delle unità.

Campo Tipo Predefinito Obbligatorio Cosa fa
id testo - Sì Lettere, numeri e _; inizia con una lettera; fino a 24. Non può essere una specialità delle unità del gioco. È la costante dello 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 letta; non viene usata
  • id o bit ripetuti: vince 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 inglesi: name, description, icon.

5. options\<id>.json

Guida: Opzioni di partita.

Campo Tipo Predefinito Cosa fa
id testo nome del file Lettere, numeri, _ e -; fino a 32. Salvato in minuscolo. È ciò che usano Mod_GetOption e Mod_GetOptionValue
name testo, o oggetto per lingua l'id Testo nella stanza
description testo, o oggetto per lingua vuoto Il testo di aiuto della riga
values elenco da 2 a 16 nessuno (= interruttore) Ogni valore: un testo, oppure {"id", "nombre"}. Il primo è 0
default booleano, numero o testo false / 0 Interruttore: true/false. Elenco: il 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 voci fa ignorare l'intera opzione.
  • Bit: interruttore 1; elenco di 2 valori 1; di 3-4, 2; di 5-8, 3; di 9-16, 4. Vengono assegnati in ordine alfabetico di id.
  • Con un id ripetuto, vince quello della mod che viene prima.
  • Alias inglesi: name, description, values, default.

6. Patch

Guida: Patch. Una patch va in patches\<path of the game file>. Solo .xml, .ini e .vs. Ordine: dall'ultima mod nell'ordine di caricamento alla prima, quindi la prima ha l'ultima parola; mod\patches per ultima.

XML

Il primo tag della patch è la radice (di solito chiamata <patch>); i suoi figli sono le operazioni, applicate 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 sugli elementi selezionati. unset rimuove attributi (separati da spazi o virgole)
<add> select, optional, position Elementi o commenti Li aggiunge. position: end (predefinito), start, before, after
<remove> select, optional Nessuno Rimuove gli elementi selezionati
<replace> select, optional Elementi o commenti Sostituisce gli elementi selezionati con il contenuto
  • select è obbligatorio. Non puoi usare <set> per impostare un attributo chiamato 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 un 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 applicata conserva commenti e virgolette; gli attributi vengono riportati su una sola riga.

Selettore

Elemento Sintassi
Passo figlio / discendente /nombre, //nombre
Qualsiasi nome *
Con attributo uguale a [@a='v'] o [@a="v"] (senza distinzione tra maiuscole e minuscole; riconosce &amp; &lt; &gt; &quot; &apos;)
Con attributo [@a]
L'n-esimo [n], da 1: l'n-esimo tra quelli che corrispondono a nome e condizioni, all'interno di ciascun genitore

Puoi concatenare le condizioni ([@a='v'][2]). Non esiste nient'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 alla fine della sezione. Viene scritta come Clave = valor
-Clave Rimuove tutte le righe con quella chiave dalla sezione, oppure quella riga esatta. Errore se non ce ne sono
+Linea Aggiunge una riga autonoma se non c'è già
[Seccion] Cambia sezione. Se non esiste nel file, viene creata alla fine
;… o #… Commento. Valido solo su una riga intera

Chiavi e sezioni non distinguono maiuscole e minuscole. Un commento alla fine di una riga della patch non viene eliminato.

Script .vs

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

Direttiva Dove inserisce
@top Dopo la prima riga se è un commento // (la firma); altrimenti all'inizio
@bottom Alla fine dello 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, elimina la riga
@end Chiude il blocco; tutto ciò che segue fino alla direttiva successiva viene ignorato
  • TEXTO è un frammento 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 degli script

Guida: Script. File: events\<Event>.vs. Viene eseguito su ogni PC; con più mod, vengono eseguite tutte.

Evento Quando Firma (prima riga)
OnGameStart All'inizio di una partita, dopo l'avvio degli script di vittoria. Può usare Sleep // void
OnObjectDie Un oggetto muore, prima che la sua morte venga elaborata (la prima volta) // void, Obj victim
OnObjectKill Un colpo uccide un oggetto // void, Obj killer, Obj victim
OnSettlementCaptured Un insediamento cambia proprietario mentre la partita è in corso. Giocatori 1-16; 0 = nessun proprietario // void, Obj building, int oldPlayer, int newPlayer
OnAttackResolved Un colpo che infligge danno, prima che venga applicato // void, Obj attacker, Obj victim, int damage
OnPlayerDefeated Un giocatore (1-8) viene dichiarato sconfitto, una volta per giocatore // void, int player
  • Tranne OnGameStart, vengono eseguiti subito e non possono attendere.
  • Un evento che si attiva dentro se stesso viene interrotto al quarto livello.
  • Se lo script fallisce durante l'esecuzione, il log lo registra fino a 5 volte per script.
  • Vengono letti solo questi nomi di evento. I nomi dei parametri li scegli tu.

8. Funzioni Mod_*

Guida: Script. L'API attuale è la 6; fa parte del 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 degli script: l'id di ogni civiltà della mod con la prima lettera maiuscola (valore = il suo index) e l'id di ogni specialità delle unità della mod (valore = il suo bit).

9. imperivm-mod.ini

Si trova nella cartella del gioco. Viene letto all'avvio.

Sezione Chiave Valore Predefinito Cosa fa
[Debug] LogFiles 0 o 1 0 Il log registra ogni file che il gioco apre 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\<path> esattamente come lo legge il gioco (patch e testi delle mod già applicati), la prima volta che lo apre. Nome esatto, nessun carattere 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 Abilita <game>\mod\<path> come sostituzione di 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 dei contenuti; la modifica si applica al riavvio

10. Limiti

Cosa Limite Fonte
Bit delle opzioni di partita 8 in totale tra tutte le opzioni di tutte le mod Codice
Valori in un elenco di opzione Da 2 a 16 Codice
id di un'opzione Fino a 32; lettere, numeri, _, - Codice
id di civiltà e specialità delle unità Fino a 24; lettere, numeri, _; inizia con una lettera Codice
index della civiltà Da 10 a 99 Codice
letter della civiltà 1 carattere Codice
bit della specialità delle unità 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 una variabile della mod Fino a 64 caratteri Codice
Variabili della 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 viene portato a 0 Codice
Errori degli script degli eventi nel log 5 per script Codice
Eventi annidati 4 livelli Codice
Errori di patch per mod Vengono conservati i primi 50 Codice
Dump Fino a 1.023 caratteri; DumpAtStartup, 2.047 Codice
<behavior> per classe 8 Script
Immagini, livelli e stati in un .ent.xml 32, 32 e 8 Grafica
idx di <anim> e frame per animazione Da 1 a 28; fino a 64 (2 sono sentinelle: 62 righe) Grafica
Direzioni degli sprite 8 soldati, 12 eroi e animali, 4 navi Grafica
Colori degli sprite 256; con il colore del giocatore, 192 Grafica
Pulsante / ritratto 153 x 51 / 65 x 76 Immagini
BonusDamage, BonusArmor, BonusRange, BonusLevel della formazione Da -1000 a 1000 Formazioni
Nome del tipo di mappa casuale Da 2 a 31 caratteri Tipi di mappa casuale
--players, --small, --distortion di create-random-map.js Da 2 a 8, da 0 a 8, da 0 a 0.5 create-random-map.js
--width di create-template.js Da 0 a 4 Modelli di città e villaggio

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