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 inrequirese quelle inloadAfter, e sotto quelle inloadBefore); poi le mod estetiche vanno sopra i contenuti (mappe, battaglie, conquiste), e i contenuti sopra le mod che cambiano il gameplay; a parità, perid. 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 inrequires,loadAfteroloadBefore, viene mostrato come problema: usane una sola, oppure una patch di compatibilità (una mod che fornisce i file uniti e ha entrambe inloadAfter). 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 suoido il suointernalName.idoindexripetuti: 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 |
idobitripetuti: 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
valuescon 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
idripetuto, 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 chiamatoselect,optionalounset.optional:1,yes,si,síotrueevitano 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 & < > " ') |
| 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/@replacesenzaTEXTO, direttiva senza codice (tranne@replace),TEXTOnon 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.