Reform: un decompilatore per Z-Code
di Roberto Grassi
Reform è un decompilatore — scritto da Ben Rudiak-Gould — per i file della Z-Machine; esso produce file di testo con una sintassi molto simile al codice sorgente di Inform. Supporta tutti i formati della Z-Machine (compresi quelli della versione 6 della Infocom) e può anche decompilare la porzione esclusivamente testuale dei file BLORB.
Vederlo all’opera è molto semplice.
Scaricatelo dal sito del programmatore (esistono le versioni per Windows e Linux1): http://www.darkweb.com/~benrg/if-decompilers/ e decomprimete il file zip2.
Nel caso più semplice di utilizzo non dovrete far altro che eseguire, a linea di comando:
reform storyfile.z5 > output-file
Ad esempio, usando il file .z5 di Little Falls ( Alessandro, perdonami!
)
reform LittleFalls.z5 > LittleFalls.txt
Estratti del file:
PORZIONE INIZIALE
! "LittleFalls.z5", 155648 bytes
! Z-machine version 5, release 1, serial 050527
!
! Decompiled by Reform release 6, serial 040226
! Grammar
Verb 'origlia' 'osserva' 'spia'
* -> LookIn
;
Verb 'calcia'
* noun -> Kick
;
Verb 'slega'
* noun -> Slega
;
Verb 'esplora' 'indaga' 'investiga' 'perlustra' 'perquisis'
* noun -> Search
;
PORZIONE CENTRALE
.label55537;
if (global49 == 1[?]) {
! no code
} else {
if (global46 & 2) {
routine54736(2 * (local2 + global50));
}
if (local9 == 3[Routine?]) {
local13 = 0;
local10 = 0;
.label55575;
if (local10 < global49) {
local13 = local13 + local5->(local10 + local6);
++local10;
jump label55575;
}
routine53616(local13);
print ” “;
global239 = local7.list_together;
print (string) global239;
if (global46 & 8 ) {
print ” (”;
}
if (global46 & 2) {
print “:^”;
}
}
local13 = global46;
if (local9 ~= 3[Routine?]) {
global51 = 1[?];
global76 = local7;
global77 = local2 + global50;
if (routine51272(local7,25[Menu?]) == 1[?]) {
jump label55738;
}
}
PORZIONE FINALE
! 114312 (0x1be88): "La porta principale @`e chiusa. Sembra stata cambiata
da poco. @`E come nuova."
! 114368 (0x1bec0): "Mmm... La porta dell'ingresso @`e socchiusa. ~Strano~,
pensi. ~Un istante fa sembrava chiusa.~^"
! 114444 (0x1bf0c): "La porta principale @`e socchiusa.^"
! 114472 (0x1bf28): "Provi con una spallata, ma la porta @`e blindata.
^Ti rendi conto subito che @`e pressoch@'e impossibile sfondarla.^"
! 114556 (0x1bf7c): "Ti avvicini alla porta, inserendo le chiavi nella
serratura, ma prima che tu riesca a chiudere la porta, senti
una fitta sulla testa."
! 114648 (0x1bfd8): "^Qualcuno ti ha colpito con il calcio di una pistola.
Cadi pesantemente a terra."
! 114708 (0x1c014): "^Una donna torreggia sopra di te con la tua Beretta
in pugno.^"
! 114756 (0x1c044): "Una camera interna. Sembra uno studio."
! 114784 (0x1c060): "^@`E elegantemente arredato con un grande scrittoio
e una libreria. Una finestra consente di vedere all'esterno. "
! 114864 (0x1c0b0): "^L'uscita @`e verso est, al salone.^"
! 114892 (0x1c0cc): "L'unica direzione in cui puoi muoverti @`e a est
(verso l'ingresso). Oppure fuori dalla finestra... Ma non
riusciresti a passare attraverso le inferriate."
! 115004 (0x1c13c): ", collega lo studio con l'ingresso.^"
In sostanza, Reform può essere utile per andare ad analizzare un sorgente di un file per motivi di studio ed è senza dubbio uno dei migliori decompilatori per file Z-Code.
1 Per scrivere questo articolo ho usato la versione per Windows.
2 Nella distribuzione trovate un ottimo file reform.html che potrete usare come guida.
