Vai al contenuto
Locanda

Torna all’Aiuto

Scrivere un file di incantesimi personalizzati

Per pochi incantesimi va bene il modulo. Per molti, scrivi un file e importalo in Impostazioni, scheda Backup: a mano, con uno script o con un assistente IA. Qui trovi tutto ciò che serve al file.

Cos’è il file

Un file JSON nel formato di Locanda con i tuoi incantesimi in customSpells, senza grimori e senza impostazioni: lo stesso tipo di file che salva “Esporta incantesimi personalizzati”.

Contiene al massimo 1000 incantesimi e pesa al massimo 5 MB.

L’importazione è tutto o niente: se un incantesimo non rispetta una regola non viene aggiunto nulla, e l’importazione elenca cosa correggere e dove. Per un incantesimo il cui id è già su questo dispositivo scegli tu se sostituirlo o tenerli entrambi.

Un esempio

Un file completo con un trucchetto, scritto in inglese e in italiano. Copialo come punto di partenza.

{
  "format": "locanda",
  "schemaVersion": 1,
  "exportedAt": "2026-10-25T12:00:00Z",
  "appVersion": "0.0.0",
  "dataVersion": "custom",
  "spellbooks": [],
  "customSpells": [
    {
      "id": "custom:6c49a5ff-2c31-4316-b0ce-0ebd82a9d04d",
      "source": "custom",
      "level": 0,
      "school": "illusion",
      "classes": [
        "bard",
        "sorcerer",
        "wizard"
      ],
      "castingTime": {
        "unit": "action",
        "amount": 1
      },
      "ritual": false,
      "range": {
        "type": "ranged",
        "distance": 30,
        "unit": "feet",
        "area": null
      },
      "components": {
        "v": false,
        "s": true,
        "m": null
      },
      "duration": {
        "type": "timed",
        "amount": 1,
        "unit": "hour"
      },
      "concentration": false,
      "damageTypes": [],
      "savingThrows": [],
      "text": {
        "en": {
          "name": "Lantern Moth",
          "castingCondition": null,
          "material": null,
          "description": "A moth of soft light appears at a point you can see within range. It sheds dim light in a 10-foot radius and follows the path you trace with one finger.",
          "higherLevels": null,
          "cantripUpgrade": "You create one more moth when you reach levels 5, 11 and 17."
        },
        "it": {
          "name": "Falena lanterna",
          "castingCondition": null,
          "material": null,
          "description": "Una falena di luce tenue appare in un punto entro gittata che puoi vedere. Emana luce fioca in un raggio di 3 metri e segue il percorso che tracci con un dito.",
          "higherLevels": null,
          "cantripUpgrade": "Crei una falena in più quando raggiungi il 5°, l'11° e il 17° livello."
        }
      },
      "reference": null,
      "tags": [
        "Homebrew"
      ],
      "createdAt": "2026-10-25T12:00:00Z",
      "updatedAt": "2026-10-25T12:00:00Z"
    }
  ]
}

I campi

Scrivi ogni campo delle tabelle, in qualsiasi ordine. Dove un campo non ha nulla da dire, scrivi null o [] come indica la tabella; non toglierlo mai. I campi che non sono nelle tabelle vengono rifiutati. Gli a capo e le tabulazioni sono ammessi solo nei campi in Markdown.

Il file

CampoCosa contiene
formatSempre "locanda".
schemaVersionSempre 1.
exportedAtQuando è stato creato il file: una data e un’ora in RFC 3339, come 2026-10-25T12:00:00Z.
appVersionLa versione dell’app che ha scritto il file, come 1.0.0. Un file scritto da te può usare 0.0.0.
dataVersionLettere minuscole, cifre, punti e trattini, come custom.
spellbooksSempre []: un file di incantesimi personalizzati non ha grimori.
customSpellsGli incantesimi: da 1 a 1000, ognuno con il proprio id.

Ogni incantesimo

CampoCosa contiene
idcustom: seguito da un nuovo UUID casuale (versione 4, minuscolo), come custom:6c49a5ff-2c31-4316-b0ce-0ebd82a9d04d. Creane uno nuovo per ogni incantesimo: lo stesso id indica lo stesso incantesimo.
sourceSempre "custom".
levelUn numero intero da 0 (un trucchetto) a 9.
schoolUna delle scuole qui sotto.
classesUn elenco delle classi qui sotto, almeno una, ognuna una sola volta, come ["wizard"].
castingTime.unitUna delle unità del tempo di lancio qui sotto.
castingTime.amountQuante azioni, minuti od ore: un numero intero da 1 a 1000. Usa 1 per un’azione, un’azione bonus o una reazione.
ritualtrue o false: si può lanciare come rituale.
range.typeUno dei tipi di gittata qui sotto.
range.distancePer un incantesimo ranged, la distanza: un numero maggiore di 0, fino a 1.000.000. Per ogni altro tipo di gittata, null.
range.unitPer un incantesimo ranged, feet (piedi) o miles (miglia); per ogni altro tipo di gittata, null. Le distanze sono in piedi, mai in metri: le converte l’app.
range.areanull, oppure l’area d’effetto: un oggetto con shape (una delle forme dell’area qui sotto), size (un numero maggiore di 0) e unit (feet o miles).
components.vtrue o false: ha una componente verbale.
components.strue o false: ha una componente somatica.
components.mnull senza componente materiale; altrimenti un oggetto con costGp (il costo in monete d’oro, da 0 a 1.000.000, oppure null) e consumed (true o false). Le parole del materiale vanno in text.
duration.typeUno dei tipi di durata qui sotto.
duration.amountPer una durata timed, un numero intero da 1 a 1000; altrimenti null.
duration.unitPer una durata timed, una delle unità di durata qui sotto; altrimenti null.
concentrationtrue o false: richiede concentrazione.
damageTypesUn elenco dei tipi di danno qui sotto, ognuno una sola volta; [] se nessuno.
savingThrowsUn elenco delle caratteristiche qui sotto con cui l’incantesimo chiede un tiro salvezza, ognuna una sola volta; [] se nessuna.
textLe parole dell’incantesimo per lingua: un oggetto con en (inglese), it (italiano) o entrambi, ognuno con i campi qui sotto. Dove manca una lingua, l’app mostra l’altra. Almeno una lingua deve avere un name.
text.<lang>.nameIl nome dell’incantesimo: una riga da 1 a 100 caratteri, oppure null.
text.<lang>.castingConditionQuando si usa una reazione, o un’altra condizione sul tempo di lancio: una riga da 1 a 500 caratteri, oppure null.
text.<lang>.materialLa componente materiale: una riga da 1 a 500 caratteri, oppure null. Serve in almeno una lingua quando components.m è un oggetto, e solo allora.
text.<lang>.descriptionLa descrizione in Markdown, fino a 20.000 caratteri. Scrivi "" per tenere solo il reference.
text.<lang>.higherLevelsPer un incantesimo di livello 1 o superiore, cosa fa uno slot di livello superiore, in Markdown (da 1 a 20.000 caratteri), oppure null. Sempre null per un trucchetto.
text.<lang>.cantripUpgradePer un trucchetto, come cresce con il livello del personaggio, in Markdown (da 1 a 20.000 caratteri), oppure null. Sempre null per un incantesimo di livello 1 o superiore.
referenceDove si trova il testo completo, come un libro e una pagina: una riga da 1 a 100 caratteri, oppure null.
tagsEtichette tue, come una campagna: al massimo 10, ognuna da 1 a 30 caratteri senza spazi all’inizio o alla fine, nessuna uguale a un’altra ignorando maiuscole e accenti; [] se nessuna. Le etichette sono le stesse in ogni lingua.
createdAtQuando è stato scritto l’incantesimo: una data e un’ora in RFC 3339, come 2026-10-25T12:00:00Z.
updatedAtQuando è cambiato l’ultima volta, nella stessa forma: uguale a createdAt per un incantesimo nuovo.

Valori ammessi

Questi campi accettano solo le chiavi qui sotto, scritte esattamente così, in inglese qualunque sia la lingua del testo. Le parole dopo una chiave sono come Locanda la mostra.

Scuole

Usati in: school

  • abjuration – Abiurazione
  • conjuration – Evocazione
  • divination – Divinazione
  • enchantment – Ammaliamento
  • evocation – Invocazione
  • illusion – Illusione
  • necromancy – Necromanzia
  • transmutation – Trasmutazione

Classi

Usati in: classes

  • bard – Bardo
  • cleric – Chierico
  • druid – Druido
  • paladin – Paladino
  • ranger – Ranger
  • sorcerer – Stregone
  • warlock – Warlock
  • wizard – Mago

Unità del tempo di lancio

Usati in: castingTime.unit

  • action
  • bonus-action
  • reaction
  • minute
  • hour

Tipi di gittata

Usati in: range.type

  • self – Incantatore
  • touch – Contatto
  • ranged – A distanza
  • sight – Vista
  • unlimited – Illimitata
  • special – Speciale

Unità di distanza

Usati in: range.unit, range.area.unit

  • feet
  • miles

Forme dell’area

Usati in: range.area.shape

  • cone – Cono
  • cube – Cubo
  • cylinder – Cilindro
  • emanation – Emanazione
  • line – Linea
  • sphere – Sfera

Tipi di durata

Usati in: duration.type

  • instantaneous – Istantanea
  • timed – Un tempo stabilito
  • until-dispelled – Finché non viene dissolto
  • until-dispelled-or-triggered – Finché non viene dissolto o innescato
  • special – Speciale

Unità di durata

Usati in: duration.unit

  • round – Round
  • minute – Minuti
  • hour – Ore
  • day – Giorni

Tipi di danno

Usati in: damageTypes

  • acid – Acido
  • bludgeoning – Contundente
  • cold – Freddo
  • fire – Fuoco
  • force – Forza
  • lightning – Fulmine
  • necrotic – Necrotico
  • piercing – Perforante
  • poison – Veleno
  • psychic – Psichico
  • radiant – Radioso
  • slashing – Tagliente
  • thunder – Tuono

Caratteristiche dei tiri salvezza

Usati in: savingThrows

  • str – Forza
  • dex – Destrezza
  • con – Costituzione
  • int – Intelligenza
  • wis – Saggezza
  • cha – Carisma

Lingue del testo

Usati in: text

  • en – English
  • it – Italiano

Schemi JSON

Per controllare un file prima di importarlo, o per dare a uno script o a un assistente IA le regole esatte, scarica i tre schemi JSON (draft 2020-12):

Carica tutti e tre nello stesso validatore, poi convalida il file con urn:locanda:schema:export:1: gli schemi si richiamano a vicenda con questi id urn:, non con un indirizzo web. Le parole chiave format sono solo informative, perché un pattern controlla gli stessi campi. Con Ajv, per esempio:

import Ajv2020 from 'ajv/dist/2020.js';

const ajv = new Ajv2020({ allErrors: true, validateFormats: false });
ajv.addSchema([exportSchema, customSpellSchema, spellSchema]);
const valid = ajv.validate('urn:locanda:schema:export:1', file);
console.log(valid ? 'Valid' : ajv.errors);

Alcune regole le controlla solo Locanda durante l’importazione: un nome in almeno una lingua; il testo per i livelli superiori solo sugli incantesimi di livello 1 o superiore, e quello dei trucchetti solo sui trucchetti; il testo del materiale solo con una componente materiale; date di calendario esistenti; nessuna etichetta uguale a un’altra; e ogni id una sola volta nel file.

Un prompt per un assistente IA

Per trasformare i tuoi appunti in un file, dai a un assistente IA questo prompt con allegati i tre schemi e il file di esempio, poi incolla i tuoi appunti dopo il prompt. Controlla ciò che restituisce: gli assistenti sbagliano.

Incollerò degli appunti su incantesimi che ho scritto io per il mio gioco. Trasformali in un unico file di incantesimi personalizzati di Locanda che segua gli schemi JSON allegati (export.schema.json, custom-spell.schema.json e spell.schema.json) e somigli al file di esempio allegato.

Regole:
- Il file è un unico oggetto JSON con "format": "locanda", "schemaVersion": 1, "exportedAt" impostato all’ora attuale in RFC 3339 (UTC), "appVersion": "0.0.0", "dataVersion": "custom", "spellbooks": [] e "customSpells" con un oggetto per incantesimo.
- Dai a ogni incantesimo un nuovo id casuale: "custom:" seguito da un UUID versione 4 in minuscolo.
- Usa solo le chiavi inglesi ammesse dagli schemi (scuole, classi, unità, tipi di gittata, forme dell’area, tipi di danno, caratteristiche), anche se i miei appunti sono in italiano.
- Metti le parole di ogni incantesimo in "text", nella lingua dei miei appunti ("it" per l’italiano, "en" per l’inglese). Scrivi null per ciò che i miei appunti non dicono. Scrivi le descrizioni in Markdown, senza HTML.
- Indica le distanze in piedi: 1,5 metri sono 5 piedi.
- Imposta "createdAt" e "updatedAt" alla stessa ora di "exportedAt", "tags" a [] e "reference" a null, a meno che i miei appunti non li indichino.
- Non inventare incantesimi, regole o testo che non siano nei miei appunti. Se manca o non è chiaro qualcosa che gli schemi richiedono, chiedimelo invece di tirare a indovinare.

Rispondi solo con il file JSON.

I miei appunti:

Prima di importare

  • Ogni incantesimo ha un id nuovo tutto suo (custom: e un UUID appena creato), non uno copiato dall’esempio.
  • Ogni valore dei campi qui sopra è una delle chiavi ammesse, in inglese, anche quando il testo è in italiano.
  • Il file supera un validatore con gli schemi qui sopra. Oppure importalo e basta: Locanda controlla prima tutto il file e, se qualcosa non va, non aggiunge nulla e dice cosa correggere.

Di chi sono gli incantesimi

Metti nel file solo incantesimi che hai scritto tu o che hai il diritto di usare, come le regole della casa del tuo gruppo. Locanda non controlla da dove viene il testo, e il file resta sul tuo dispositivo a meno che tu non lo condivida.