
Este projeto contém várias ferramentas para aplicativos e jogos clássicos do Mac OS de engenharia reversa.
As ferramentas deste projeto são:
apt-get install zlibg1-dev .)cmake . , então make .Este projeto deve ser construído corretamente em versões suficientemente recentes do MacOS e Linux.
Resource_Dasm é um desmontador para os garfos clássicos do Mac OS. Ele extrai recursos do garfo de recursos de qualquer arquivo e converte muitos formatos clássicos de recursos do Mac OS (imagens, sons, texto etc.) em formatos modernos.
Exemplos:
Exportar todos os recursos de um arquivo específico e convertê -los em formatos modernos (a saída é gravada no diretório <NOMEM> .OUT por padrão): ./resource_dasm files/Tesserae
Exportar todos os recursos de todos os arquivos em uma pasta, escrevendo os arquivos de saída em uma estrutura de pasta paralela no diretório atual: ./resource_dasm "files/Apeiron ƒ/" ./apeiron.out
Exportar um recurso específico de um arquivo específico, nos formatos modernos e originais: ./resource_dasm "files/MacSki 1.7/MacSki Sounds" ./macski.out --target-type=snd --target-id=1023 --save-raw=yes
Exportar os recursos de um aplicativo PowerPC e desmontar seu código: ./resource_dasm "files/Adventures of Billy" ./billy.out ./m68kdasm --pef "files/Adventures of Billy" ./billy.out/dasm.txt
Exportar todos os recursos de um arquivo mohawk: ./resource_dasm files/Riven/Data/a_Data.MHK ./riven_data_a.out --index-format=mohawk
Devido à cópia de arquivos em diferentes tipos de sistemas de arquivos, você pode ter um garfo de recursos de um arquivo no garfo de dados de um arquivo separado. Para exportar recursos desse arquivo: ./resource_dasm "windows/Realmz/Data Files/Portraits.rsf" ./portraits.out --data-fork
Crie um novo arquivo de recursos, com alguns recursos de texto e pluxes: ./resource_dasm --create --add-resource=TEXT:[email protected] --add-resource=TEXT:[email protected] --add-resource=clut:[email protected] output.rsrc
Adicione um recurso a um arquivo de recurso existente: ./resource_dasm file.rsrc --add-resource=TEXT:[email protected] output.rsrc
Exclua um recurso de um arquivo de recurso existente: ./resource_dasm file.rsrc --delete-resource=TEXT:128 output.rsrc
Isso não é tudo o que o Resource_Dasm pode fazer. Execute -o sem argumentos (ou procure print_usage() em src/resource_dasm.cc) para obter uma descrição completa de todas as opções.
Resource_Dasm pode converter estes tipos de recursos:
Type | Output format | Notes
------------------------------------------------------------------------
Text resources
bstr | .txt (one file per string) | *3
card | .txt |
finf | .txt (description of contents) |
FCMT | .txt | *3
FONT | .txt (description) and image (one image per glyph) | *E
lstr | .txt | *3
MACS | .txt | *3
minf | .txt | *3
mstr | .txt | *3
mst# | .txt (one file per string) | *3
NFNT | .txt (description) and image (one image per glyph) | *E
PSAP | .txt |
sfnt | .ttf (TrueType font) |
STR | .txt | *3
STR# | .txt (one file per string) | *3
styl | .rtf | *4
TEXT | .txt | *3
TwCS | .txt (one file per string) |
wstr | .txt |
------------------------------------------------------------------------
Image and color resources
actb | image (24-bit) | *E *8
acur | .txt (list of cursor frame IDs) |
cctb | image (24-bit) | *E *8
cicn | image (32-bit and monochrome) | *E
clut | image (24-bit) | *E *8
crsr | image (32-bit and monochrome) | *E *1
CTBL | image (24-bit) | *E
CURS | image (32-bit) | *E *1
dctb | image (24-bit) | *E *8
fctb | image (24-bit) | *E *8
icl4 | image (24 or 32-bit) and .icns | *E *0
icl8 | image (24 or 32-bit) and .icns | *E *0
icm# | image (32-bit) | *E
icm4 | image (24 or 32-bit) | *E *0
icm8 | image (24 or 32-bit) | *E *0
ICN# | image (32-bit) and .icns | *E
icns | image, .png, .jp2, .txt, .plist, .bin, etc. | *E *9
ICON | image (24-bit) | *E
ics# | image (32-bit) and .icns | *E
ics4 | image (24 or 32-bit) and .icns | *E *0
ics8 | image (24 or 32-bit) and .icns | *E *0
kcs# | image (32-bit) | *E
kcs4 | image (24 or 32-bit) | *E *0
kcs8 | image (24 or 32-bit) | *E *0
PAT | image (24-bit; pattern and 8x8 tiling) | *E
PAT# | image (24-bit; pattern and 8x8 tiling for each pattern) | *E
PICT | image (24-bit) or other format | *E *2
pltt | image (24-bit) | *E *8
ppat | image (24-bit; color, color 8x8, mono, mono 8x8) | *E
ppt# | image (24-bit; 4 images as above for each pattern) | *E
SICN | image (24-bit, one per icon) | *E
wctb | image (24-bit) | *E *8
------------------------------------------------------------------------
Sound and sequence resources
.mod | .mod (ProTracker module) |
ALIS | .txt (description of contents) |
cmid | .midi |
csnd | .wav or .mp3 | *5
ecmi | .midi |
emid | .midi |
esnd | .wav or .mp3 | *5
ESnd | .wav or .mp3 | *5
INST | .json | *6
MADH | .madh (PlayerPRO module) |
MADI | .madi (PlayerPRO module) |
MIDI | .midi |
Midi | .midi |
midi | .midi |
SMSD | .wav | *A
snd | .wav or .mp3 | *5
SONG | .json (smssynth) | *6
SOUN | .wav | *A
Tune | .midi | *7
Ysnd | .wav |
------------------------------------------------------------------------
Code resources
ADBS | .txt (68K assembly) | *C
adio | .txt (68K assembly) | *C
AINI | .txt (68K assembly) | *C
atlk | .txt (68K assembly) | *C
boot | .txt (68K assembly) | *C
CDEF | .txt (68K assembly) | *C
cdek | .txt (PPC32 assembly and header description) |
cdev | .txt (68K assembly) | *C
CDRV | .txt (68K assembly) | *C
cfrg | .txt (description of code fragments) | *D
citt | .txt (68K assembly) | *C
clok | .txt (68K assembly) | *C
cmtb | .txt (68K assembly) | *C
cmu! | .txt (68K assembly) | *C
CODE | .txt (68K assembly or import table description) | *B *C
code | .txt (68K assembly) | *C
dcmp | .txt (68K assembly) | *C
dcod | .txt (PPC32 assembly and header description) |
dem | .txt (68K assembly) | *C
dimg | .txt (68K assembly) | *C
drvr | .txt (68K assembly) | *C
DRVR | .txt (68K assembly) | *C
enet | .txt (68K assembly) | *C
epch | .txt (PPC32 assembly) |
expt | .txt (PPC32 assembly) |
FKEY | .txt (68K assembly) | *C
fovr | .txt (PPC32 assembly and header description) |
gcko | .txt (68K assembly) | *C
gdef | .txt (68K assembly) | *C
GDEF | .txt (68K assembly) | *C
gnld | .txt (68K assembly) | *C
INIT | .txt (68K assembly) | *C
krnl | .txt (PPC32 assembly) |
LDEF | .txt (68K assembly) | *C
lmgr | .txt (68K assembly) | *C
lodr | .txt (68K assembly) | *C
ltlk | .txt (68K assembly) | *C
MBDF | .txt (68K assembly) | *C
MDEF | .txt (68K assembly) | *C
mntr | .txt (68K assembly) | *C
ncmp | .txt (PPC32 assembly and header description) |
ndlc | .txt (PPC32 assembly and header description) |
ndmc | .txt (PPC32 assembly and header description) |
ndrv | .txt (PPC32 assembly and header description) |
nift | .txt (PPC32 assembly and header description) |
nitt | .txt (PPC32 assembly and header description) |
nlib | .txt (PPC32 assembly and header description) |
nsnd | .txt (PPC32 assembly and header description) |
nsrd | .txt (PPC32 assembly) |
ntrb | .txt (PPC32 assembly and header description) |
osl | .txt (68K assembly) | *C
otdr | .txt (68K assembly) | *C
otlm | .txt (68K assembly) | *C
PACK | .txt (68K assembly) | *C
pnll | .txt (68K assembly) | *C
ppct | .txt (PPC32 assembly and header description) |
proc | .txt (68K assembly) | *C
PTCH | .txt (68K assembly) | *C
ptch | .txt (68K assembly) | *C
pthg | .txt (68K or PPC32 assembly and header description) | *C
qtcm | .txt (PPC32 assembly and header description) |
ROvr | .txt (68K assembly) | *C
RSSC | .txt (68K assembly) | *C
scal | .txt (PPC32 assembly and header description) |
scod | .txt (68K assembly) | *C
SERD | .txt (68K assembly) | *C
sfvr | .txt (PPC32 assembly and header description) |
shal | .txt (68K assembly) | *C
sift | .txt (68K assembly) | *C
SMOD | .txt (68K assembly) | *C
snth | .txt (68K assembly) | *C
tdig | .txt (68K assembly) | *C
tokn | .txt (68K assembly) | *C
vdig | .txt (68K or PPC32 assembly and header description) | *C
wart | .txt (68K assembly) | *C
WDEF | .txt (68K assembly) | *C
XCMD | .txt (68K assembly) | *C
XFCN | .txt (68K assembly) | *C
------------------------------------------------------------------------
MacApp resources
68k! | .txt (description of memory config for 680x0) |
CMNU | .txt (description of menu) |
cmnu | .txt (description of menu) |
errs | .txt (description of error ranges) |
mem! | .txt (description of memory config) |
ppc! | .txt (description of memory config for PPC) |
res! | .txt (string list of always resident segments) |
seg! | .txt (string list of segments) |
TxSt | .txt (description of text style) |
------------------------------------------------------------------------
Miscellaneous resources
ALRT | .txt (alert parameters) |
APPL | .txt (description of contents) |
audt | .txt (description of contents) |
BNDL | .txt (description of contents) |
CMDK | .txt (list of keys) |
CNTL | .txt (description of control) |
CTY# | .txt (description of cities) |
dbex | .txt (description of contents) |
DITL | .txt (dialog parameters) |
DLOG | .txt (dialog parameters) |
FBTN | .txt (description of buttons) |
FDIR | .txt (description of contents) |
fld# | .txt (description of folders) |
flst | .txt (description of font family list) |
fmap | .txt (description of finder icon mappings) |
FREF | .txt (description of file references) |
FRSV | .txt (list of font IDs) |
FWID | .txt (font parameters) |
gbly | .txt (description of Gibbly aka. System Enabler) |
GNRL | .txt (description of contents) |
hwin | .txt (description of help window) |
icmt | .txt (icon reference and comment) |
inbb | .txt (description of contents) |
indm | .txt (description of contents) |
infs | .txt (description of contents) |
inpk | .txt (description of contents) |
inra | .txt (description of contents) |
insc | .txt (description of contents) |
itl0 | .txt (international formatting information) |
ITL1 | .txt (short dates flag value) |
itlb | .txt (internationalization parameters) |
itlc | .txt (internationalization parameters) |
itlk | .txt (keyboard mappings) |
KBDN | .txt (keyboard name) |
LAYO | .txt (description of layout) |
mach | .txt (description of contents) |
MBAR | .txt (list of menu IDs) |
mcky | .txt (threshold values) |
MENU | .txt (description of menu) |
mitq | .txt (description of queue sizes) |
nrct | .txt (rectangle boundaries) |
PAPA | .txt (printer parameters) |
PICK | .txt (picker parameters) |
ppcc | .txt (description of contents) |
ppci | .txt (description of contents) |
PRC0 | .txt (description of contents) |
PRC3 | .txt (description of contents) |
pslt | .txt (description of Nubus pseudo-slot lists) |
ptbl | .txt (description of patch table) |
qrsc | .txt (description of queries) |
RECT | .txt (description of the rectangle) |
resf | .txt (list of fonts) |
RMAP | .txt (type mapping and list of ID exceptions) |
ROv# | .txt (list of overridden resource IDs) |
rtt# | .txt (list of database result handlers) |
RVEW | .txt (description of contents) |
scrn | .txt (screen device parameters) |
sect | .txt (description of contents) |
SIGN | .txt (description of contents) |
SIZE | .txt (description of parameters) |
slut | .txt (description of mapping) |
thn# | .txt (description of 'thng' mapping) |
TMPL | .txt (description of format) |
TOOL | .txt (description of contents) |
vers | .txt (version flags and strings) |
WIND | .txt (window parameters) |
Notes:
*0: Produces a 32-bit image if a corresponding monochrome resource exists
(ICN# for icl4/8, icm# for icm4/8, ics# for ics4/8, kcs# for kcs4/8). If
no monochrome resource exists, produces a 24-bit image instead. All
color information in the original resource is reproduced in the output,
even for fully-transparent pixels. If the icon was originally intended
to be used with a nonstandard compositing mode, the colors of fully-
transparent pixels may have been relevant, but most modern image viewers
and editors don't have a way to display this information.
*1: The hotspot coordinates are appended to the output filename. As in *0,
resource_dasm faithfully reproduces the color values of transparent
pixels in the output file, but most modern image editors won't show
these "transparent" pixels.
*2: resource_dasm implements multiple PICT decoders. It will first attempt
to decode the PICT using its internal decoder, which usually produces
correct results but fails on PICTs that contain complex drawing opcodes.
This decoder can handle basic QuickTime images as well (e.g. embedded
JPEGs and PNGs), but can't do any drawing under or over them, or
matte/mask effects. PICTs that contain embedded JPEGs or PNGs will
result in a JPEG or PNG file rather than the format specified by
--image-format (which is BMP by default). If the internal decoder fails,
resource_dasm will fall back to a decoder that uses picttoppm, which is
part of NetPBM. There is a rare failure mode in which picttoppm hangs
forever; resource_dasm gives it 10 seconds to do its job before killing
it and giving up. If picttoppm is not installed, fails to decode the
PICT, or is killed due to a timeout, resource_dasm will prepend the
necessary header and save the data as a PICT file instead.
*3: Text is assumed to use the Mac OS Roman encoding. It is converted to
UTF-8, and line endings (r) are converted to Unix style (n).
*4: Some rare style options may not be translated correctly. styl resources
provide styling information for the TEXT resource with the same ID, so
such a resource must be present to properly decode a styl.
*5: RMF archives can contain snd resources that are actually in MP3 format;
in this case, the exported sound will be a .mp3 file. Otherwise, the
exported sound is an uncompressed WAV file, even if the resource's data
is compressed. resource_dasm can decompress IMA 4:1, MACE 3:1, MACE 6:1,
A-law, and mu-law (ulaw) compression.
*6: JSON files from SoundMusicSys SONG resources can be played with smssynth
(http://www.github.com/fuzziqersoftware/gctools). The JSON file refers
to the instrument sounds and MIDI sequence by filename and does not
include directory names, so if you want to play these, you'll have to
manually put the sounds and MIDI files in the same directory as the JSON
file if you're using --filename-format.
*7: Tune decoding is experimental and will likely produce unplayable MIDIs.
*8: For color table resources, the raw data is always saved even if it is
decoded properly, since the original data contains 16-bit values for
each channel and the output image file has less-precise 8-bit channels.
*9: icns resources are decoded into many different file types depending on
the contents of the resource. For subfields that have split alpha
channels (that is, the transparency data is in a different subfield),
resource_dasm produces an original image and one with transparency
applied. Some icns resources also contain metadata, which is exported as
.bin, .txt, and .plist files, except for the Icon Composer version used
to create the file, which is ignored. If you want the result in Icon
Composer format, use --save-raw=yes and resource_dasm will save it as a
.icns file.
*A: These resources appear to have a fixed format, with a constant sample
rate, sample width and channel count. You may have to adjust these
parameters in the output if it turns out that these are configurable.
*B: The disassembler attempts to find exported functions by parsing the jump
table in the CODE 0 resource, but if this resource is missing or not in
the expected format, it skips this step and does not fail. Generally, if
any "export_X:" labels appear in the disassembly, then export resolution
succeeded and all of the labels should be correct (otherwise they will
all be missing).
*C: Some coprocessor and floating-point opcodes (F-class) are not
implemented and will disassemble with the comment "// unimplemented".
*D: Most PowerPC applications have their executable code in the data fork.
To disassemble it, use m68kdasm (example above).
*E: The output image format can be specified using --image-format. The
default output format is bmp (Windows bitmap); other supported formats
are png and ppm.
Se o Resource_Dasm não converter um recurso ou não souber, ele tentará decodificar o recurso usando o recurso TMPL (modelo) correspondente, se ele existir. Se não houver TMPL apropriado, o TMPL será corrupto ou o TMPL não pode decodificar o recurso, o recurso produzirá os dados brutos do recurso.
A maioria das implementações do decodificador em Resource_Dasm é baseada na engenharia reversa existente e a pata através dos resíduos da documentação antiga; portanto, alguns tipos mais raros de recursos provavelmente ainda não funcionam. No entanto, quero que este projeto seja o mais completo possível; portanto, se você tiver um recurso que acha que deve ser decodível, mas o recurso_dasm não pode decodificá -lo, envie -o para mim (talvez anexando a um problema do GitHub) e tentarei o meu melhor para fazer com que o Resource_Dasm o entenda.
Resource_Dasm descompacte transparentemente os recursos marcados pelo gerente de recursos como compactados.
O esquema de compactação do Gerenciador de Recursos nunca foi oficialmente documentado pela Apple ou tornado público, de modo que a implementação desses descompressores é baseada no reverso reverso Resedit e em outro código clássico do Mac OS. Em resumo, os recursos são descomprimidos executando o código 68K ou POWERPC a partir de um recurso DCMP ou NCMP, que é procurado no tempo de execução na cadeia de arquivos de recursos abertos, como a maioria dos outros recursos. (Na prática, o DCMP/NCMP relevante geralmente está contido no mesmo arquivo que o recurso compactado ou no arquivo do sistema.) Existem dois formatos diferentes de recursos compactados e dois formatos correspondentes de 68K descompressores; Resource_Dasm implementa suporte para ambos os formatos.
Resource_Dasm contém implementações nativas de todos os quatro descompressores incorporados no arquivo do sistema Mac OS. Especificamente:
O Resource_Dasm possui emuladores internos de 68K e PowerPC para executar descompressores não-defensores. Esses emuladores também podem executar os descompressores padrão, incluídos no Resource_Dasm. Status atual dos descompactores emulados:
Pode haver outros descompressores por aí que eu não vi, o que pode não funcionar. Se você vir "Aviso: não descompacte o recurso" ao usar o Resource_Dasm, crie um problema do GitHub e envie o recurso compactado exportado (arquivo .bin) que causou a falha e todos os recursos DCMP e NCMP do mesmo arquivo de origem.
Run sudo make install para copiar os arquivos de cabeçalho e a biblioteca para os caminhos relevantes após a construção. Após a instalação, você pode #include <resource_file/IndexFormats/ResourceFork.hh> (por exemplo) e vincular -se -lresource_file . Não há documentação para esta biblioteca além do que está escrito nos arquivos de cabeçalho.
A biblioteca contém as seguintes funções e classes úteis:
O uso do M68KDasm é bastante direto. Execute m68kdasm --help para uma lista completa de opções.
Atualmente, o M68kdasm pode desmontar esses tipos de dados:
Alguns desses formatos executáveis suportam arquiteturas da CPU que o M68KDASM não suporta; Se encontrar um deles, imprime os segmentos de código como segmentos de dados.
O M68KDASM também pode montar o conjunto PowerPC, X86 e SH-4 em binário bruto. (Não suporta a montagem de texto M68K em binário, mas isso será implementado no futuro.) A sintaxe de entrada esperada para cada arquitetura corresponde à sintaxe de desmontagem; Para PowerPC e SH-4, essa não é a sintaxe padrão usada pela maioria das outras ferramentas.
O M68Kexec é um emulador de CPU e depurador para as arquiteturas Motorola 68000, 32 bits PowerPC e x86. Costumo usá -lo para ajudar a entender o que algum código arcaico está tentando fazer ou para comparar o comportamento do código que transcrevi para uma linguagem moderna com o comportamento do código original. Para casos de uso como este, você geralmente deseja configurar uma ou mais regiões de entrada que contêm os dados com os quais você está testando e uma ou mais regiões de saída para o código emulado para gravar.
Talvez isso seja melhor explicado pelo exemplo. Este comando é usado para executar a função de geração de contexto de criptografia do Phantasy Star Online Blue Burst, para compará -lo com a mesma função implementada no Newserv:
./m68kexec --x86 --trace
--mem=A0000000/2AC43585C46A6366188889BCE3DB88B15C2B3C751DB6757147E7E9390598275CC79547B2E5C00DD145002816B59C067C
--mem=A1000000:1048
--load-pe=files/windows/pso/psobb.exe
--pc=00763FD0
--reg=ecx:A1000000
--push=00000030
--push=A0000000
--push=FFFFFFFF
--breakpoint=FFFFFFFF
As opções --mem configuram as regiões de entrada; A região A0000000 contém a semente de criptografia (bytes 0x30) e a região A1000000 conterá o contexto de criptografia gerado quando a função retornar. A opção --load-pe carrega o código a ser executado e --pc informa ao emulador por onde iniciar. (Por padrão, ele começará no ponto de entrada definido no executável, se houver algum; aqui, queremos chamar uma função específica.) A opção --reg define this ponteiro na função para o espaço que alocamos para ele. As opções --push definem os argumentos e o endereço de retorno da função. Ele retornará ao FFFFFFFF, que não tem memória alocada, mas também definimos um --breakpoint no endereço que interromperá a emulação pouco antes de uma exceção ser lançada.
Como usamos --trace , o emulador imprime o estado dos registros após cada código OPC, para que possamos rastrear seu comportamento e compará -lo com nossa implementação externa da mesma função. Quando a função retorna e aciona o ponto de interrupção, podemos usar r A1000000 1048 no shell para ver os dados que ele gerou e também comparar isso com o resultado da nossa função externa.
Render_bits é útil para responder à pergunta "Esses dados binários de aparência aleatória podem realmente ser uma imagem ou matriz 2D?" Dê um formato de cor e alguns dados binários, e ele produzirá um arquivo BMP em cores que você pode ver com seu visualizador de imagens ou editor de imagem favorita. Você também pode fornecer uma tabela de cores (arquivo .bin produzido pelo Resource_Dasm a partir de um recurso CLUT) se você acha que a entrada é indexada dados de cores. Se a saída parecer lixo, brinque com o formato de largura e cor até descobrir os parâmetros certos.
Execute render_bits sem nenhuma opção para informações de uso.
render_text permite ver como seria o texto real quando renderizado com uma fonte de bitmap (recurso Font/NFNT). Para usá-lo, obtenha um arquivo .bin de um recurso de fonte ou nfnt (por exemplo, com Resource_Dasm-Save-Raw). Em seguida, execute render_text sem argumentos para ver como usá -lo.
Às vezes, no decorrer da engenharia reversa, você acaba com uma imagem que possui o conteúdo e a estrutura certos, mas as cores estão completamente erradas. As chances são de que foi apresentado com a mesa de cores erradas; Para corrigir isso, você pode usar o Substituir_clut para mapear todos os pixels da imagem de um espaço de cores para outro.
Execute substituir_clut sem nenhuma opção para informações de uso.
Alguns jogos armazenam imagens grandes divididas em um conjunto de texturas menores; Assemble_images podem combiná -los programaticamente em uma imagem grande e única novamente. Executar montagem_images sem nenhuma opção para ver como usá -lo.
Dupe_finder encontra recursos duplicados do mesmo tipo em um ou vários arquivos de recursos.
Execute o dupe_finder sem nenhuma opção para informações de uso.
hypercard_dasm stack_file [output_dir] ou apenas hypercard_dasm para ver todas as opçõesicon_dearchiver archive_file [output_dir] descompacta os ícones para arquivos .icns.vrfs_dump VRFS_file [output_dir]Decode_data pode decodificar e descomprimir alguns formatos de codificação personalizados usados por vários jogos. Especificamente:
Game/App/Library | Encoding | CLI option | Notes
-------------------------------------------------------------
DinoPark Tycoon | LZSS | --dinopark | %0
DinoPark Tycoon | RLE | --dinopark |
Flashback | LZSS | --presage | %0
MacSki | COOK | --macski |
MacSki | CO2K | --macski |
MacSki | RUN4 | --macski |
PackBits (compress) | PackBits | --pack-bits |
PackBits (decompress) | PackBits | --unpack-bits |
Pathways Into Darkness | Pathways | --unpack-pathways |
SoundMusicSys | LZSS | --sms | %0
Notes:
%0: Although these are all variants of LZSS (and are indeed very similar to
each other), they are mutually incompatible formats.
Decode_data pode ser usado por conta própria para descomprimir dados ou pode ser usado como um pré -processador externo via Resource_Dasm para descomprimir transparentemente alguns formatos. Por exemplo, para usar o decode_data para os recursos do Macski, você pode executar um comando como resource_dasm --external-preprocessor="./decode_data --macski" input_filename ...
render_sprite pode render vários formatos de sprite de jogo personalizados. Para alguns formatos listados abaixo, você terá que fornecer um recurso de tabela de cores, além do recurso Sprite. Um arquivo .bin produzido pelo Resource_Dasm a partir de um recurso CLUT, PLTT ou CTBL será suficiente; Geralmente, eles podem ser encontrados no mesmo arquivo que os recursos sprite ou no aplicativo de jogo. Execute render_sprite sem argumentos para informações de uso.
Formatos suportados:
Game | Type | CLI option | Need color table | Notes
---------------------------------------------------------------------------
Beyond Dark Castle | PBLK | --PBLK | No |
Beyond Dark Castle | PPCT | --PPCT | No |
Beyond Dark Castle | PSCR | --PSCR-v2 | No |
Blobbo | BTMP | --BTMP | No |
Blobbo | PMP8 | --PMP8 | Yes | $9
BodyScope | Imag | --Imag | Yes | $2 $3
Bonkheads | Sprt | --Sprt | Yes |
Bubble Trouble | btSP | --btSP | Yes |
Dark Castle (color) | DC2 | --DC2 | No | $4
Dark Castle (monochrome) | PPCT | --PPCT | No |
Dark Castle (monochrome) | PSCR | --PSCR-v1 | No |
DinoPark Tycoon | BMap | --BMap | No |
DinoPark Tycoon | XBig | --XBig | No | $2
DinoPark Tycoon | XMap | --XMap | Yes | $2 $7
Dr. Quandary | Imag | --Imag | Sometimes | $1 $2 $3
Factory | 1img | --1img | No |
Factory | 4img | --4img | Yes |
Factory | 8img | --8img | Yes |
Flashback | PPSS | --PPSS | Yes | $2 $8
Fraction Munchers | Imag | --Imag-fm | Sometimes | $1 $2 $3
Greebles | GSIF | --GSIF | Yes |
Harry the Handsome Executive | HrSp | --HrSp | Yes | $9
Lemmings | SHPD | --SHPD-v1 | Sometimes | $0 $1 $2 $5
Marathon | .256 | --.256-m | No | $2
Mario Teaches Typing | Pak | --Pak | Sometimes | $1 $2
Mars Rising | btSP | --btSP | Yes |
Number Munchers | Imag | --Imag-fm | Sometimes | $1 $2 $3
Odell Down Under | Imag | --Imag | Sometimes | $1 $2 $3
Oh No! More Lemmings | SHPD | --SHPD-v2 | Sometimes | $0 $1 $2 $5
Pathways Into Darkness | .256 | --.256-pd | No | $2
Prince of Persia | SHPD | --SHPD-p | Sometimes | $0 $1 $2 $5
Prince of Persia 2 | SHAP | --SHAP | Yes |
SimCity 2000 | SPRT | --SPRT | Yes | $2
SimTower | | | No | $A
Slithereens | SprD | --SprD | Yes | $2
SnapDragon | Imag | --Imag | Sometimes | $1 $2 $3
Spectre | shap | --shap | No | $6
Step On It! | sssf | --sssf | Yes | $2
Super Munchers | Imag | --Imag-fm | Sometimes | $1 $2 $3
Swamp Gas | PPic | --PPic | Sometimes | $0 $2 $3
The Amazon Trail | Imag | --Imag | Sometimes | $2 $3
The Oregon Trail | Imag | --Imag | Sometimes | $1 $2 $3
TheZone | Spri | --Spri | Yes |
Word Munchers | Imag | --Imag-fm | Sometimes | $1 $2 $3
Notes:
$0: render_sprite can't tell from the contents of the resource whether it is
color or monochrome, so it assumes the resource is color if you give a
color table on the command line. If decoding fails with a color table,
try decoding without one (or vice versa).
$1: These games contain some color and some monochrome graphics. It should
be obvious which are which (usually color graphics are in a separate
file), but if not, you can give a clut anyway in these cases and
render_sprite will ignore it if the image is monochrome.
$2: These sprite formats contain multiple images, so render_sprite will
produce multiple image files.
$3: Resources of this type can contain embedded color tables; if you're
rendering a color image that doesn't have a color table, you'll have to
provide one via a command-line option. If the resource (or individual
images therein) contain their own color tables or are monochrome, no
color table is required on the command line, and any provided color
table via the command line will be ignored.
$4: You can get DC2 sprites from the DC Data file with
`resource_dasm --index-format=dc-data "DC Data"`.
$5: The graphics files contain resources that refer to segments of the data
fork in the same file. So, this option expects the original Graphics or
BW Graphics or Persia file (with both data and resource forks present),
not an already-extracted resource.
$6: shap resources contain 3D models and 2D top-down projections of them.
When given a shap resource, render_sprite produces an STL file and an
OBJ file for the 3D model, and an SVG file for the 2D top-down view.
$7: Some XMap resources are stored inside CBag archives. You can extract
them with `resource_dasm --index-format=cbag <CBAG_file.bin>`.
$8: This game has only one clut and it's huge - far longer than the usual
256 entries. It seems PPSS image sets are meant to be rendered with a
subset of this clut, but I haven't been able to figure out (yet) how the
game chooses what subset of it to use.
$9: The game doesn't contain any color tables. You can use a 256-color clut
resource from the Mac OS System file, or use the --default-clut option.
$A: The game stores its sprites in normal PICT resources with an incorrect
type. Use `resource_dasm --copy-handler=PICT:%89%E6%91%9C` to decode
them instead of using render_sprite.
O icon_dearchiver descompacta os ícones em um arquiver de ícone (de Alessandro Levi Montalcini) arquivo para .icns. Execute -o sem opções para informações de uso.
blobbo_render <Blev-file.bin> <PMP8-128.bmp>ferazel_render no diretório com os arquivos de dados ou ferazel_render --help para ver todas as opções (existem muitas!)gamma_zee_render gamma_zee_application levels_filenameharry_render --clut-file=clut.bin , ou apenas harry_render para ver todas as opções (existem muitas!)infotron_render no diretório Info DataFileslemmings_render --clut-file=clut.bin , ou lemmings_render --help para ver todas as opçõesmshines_render world_file [output_directory]lemmings_render como para Lemmings Originais, mas também use a opção --v2realmz_dasm global_data_dir [scenario_dir] out_dir (se o cenario_dir não for fornecido, desmonta os dados compartilhados)