{
  "schema": "imperivm-format-article/v1",
  "language": "it",
  "scope": "Imperivm HD",
  "status": "partial",
  "slug": "pak",
  "title": "PAK · pacchetti di risorse",
  "summary": "Contenitore di risorse con un'intestazione di 40 byte e una directory i cui nomi condividono prefissi tra le voci.",
  "sections": [
    {
      "id": "purpose",
      "title": "A cosa serve",
      "paragraphs": [
        "Un file .pak raggruppa file di risorse. Qui l'estensione indica il contenitore HMMSYS PackFile di Imperivm; altri giochi usano formati diversi con la stessa estensione PAK.",
        "La firma completa occupa 18 byte: il testo HMMSYS PackFile seguito da un a capo, dal byte 26 e da un byte zero. Identifica il contenitore prima di interpretarne la directory."
      ]
    },
    {
      "id": "header",
      "title": "Intestazione",
      "table": {
        "columns": [
          "Posizione in byte",
          "Dimensione",
          "Contenuto"
        ],
        "rows": [
          [
            "0",
            "18 byte",
            "Firma HMMSYS PackFile e i suoi tre byte finali"
          ],
          [
            "18",
            "14 byte",
            "Area il cui significato completo non è documentato qui"
          ],
          [
            "32",
            "uint32 LE",
            "Numero di voci"
          ],
          [
            "36",
            "uint32 LE",
            "Lunghezza della directory in byte"
          ],
          [
            "40",
            "Variabile",
            "Inizio della directory"
          ]
        ]
      },
      "paragraphs": [
        "LE significa little-endian. Le posizioni di questa tabella sono offset all'interno del file, contati da zero."
      ]
    },
    {
      "id": "directory",
      "title": "Voci della directory",
      "list": [
        "TotalLen: un byte con la lunghezza totale del nome.",
        "PrefixLen: un byte con la lunghezza del prefisso condiviso con il nome precedente.",
        "Suffix: TotalLen − PrefixLen byte con la parte restante del nome.",
        "Offset: intero little-endian a 32 bit con la posizione assoluta dei dati della voce nel file PAK.",
        "Size: intero little-endian a 32 bit con la dimensione della voce."
      ],
      "paragraphs": [
        "Ricostruisci il nome con il prefisso indicato del nome precedente seguito dal suffisso attuale. Non sommare a Offset il campo in posizione 36: quel campo misura la directory e gli offset delle voci sono assoluti."
      ]
    },
    {
      "id": "workflow",
      "title": "Quando ispezioni o estrai",
      "list": [
        "Controlla la firma e che l'intestazione sia completa.",
        "Convalida lunghezze e posizioni prima di leggere ogni voce; non accettare un prefisso più lungo del nome precedente.",
        "Controlla che Offset e Size descrivano un intervallo interno al file.",
        "In estrazione, conserva la gerarchia relativa e rifiuta percorsi assoluti o risalite con .. fuori dalla cartella di destinazione."
      ]
    },
    {
      "id": "limits",
      "title": "Limiti noti",
      "paragraphs": [
        "Questa scheda descrive l'intestazione, la forma della directory e l'interpretazione attuale dei suoi offset. Non è una specifica completa del comportamento con file danneggiati né di ogni possibile variante.",
        "L'area tra la fine della directory e la prima voce non è caratterizzata qui. Non è documentata nemmeno una procedura completa di reimpacchettamento compatibile con il gioco."
      ]
    }
  ]
}