Skip to content
Vii edited this page Mar 11, 2022 · 3 revisions

Unpak es una herramienta que permite examinar y extraer el contenido de archivos PAK y STP, usados en los juegos creados con DIV y los instaladores, respectivamente.

Los archivos PAK contienen los recursos de un juego y acompañan al ejecutable de éste cuando seleccionamos la opción Empaquetar archivos al generar el instalador.

Los archivos STP contienen todos los archivos de un juego (incluido EXE, PAK, DIV32RUN.DLL y todo lo demás), tienen extensión numerada (.001, .002…) y acompañan al INSTALL.EXE cuando generamos el instalador del juego. Cuando creamos el instalador en una carpeta del disco duro, sólo se generará un volumen (con extensión .001), pero si lo creamos en una unidad de diskette, generará múltiples volúmenes, uno por diskette.

Cómo usar unpak

Unpak es un programa de consola disponible para MS-DOS, Win32 y Linux32. El formato de la línea de comandos es:

unpak [opciones] FICHERO [PATRÓN…]

Donde:

  • FICHERO es el fichero PAK o STP que queremos extraer. Si se trata de un STP multi-volumen, podemos indicar cualquiera de ellos, siempre que los demás volúmenes se encuentren en el mismo directorio.
  • PATRÓN es un patrón de fichero que opcionalmente puede usar comodines (*, ? y []) con el que podemos seleccionar qué ficheros extraer o listar. Podemos indicar múltiples patrones; si un fichero no coincide con ninguno de ellos será excluido.

Las opciones que podemos indicar se listan en la siguiente tabla. Siguiendo la tradición de los programas tipo UNIX, pueden combinarse (por ejemplo: -vsu en vez de -v -s -u) y se puede usar -- para indicar al programa que deje de leer opciones por si queremos indicar un FICHERO o un PATRÓN que empiece con el carácter -.

Opción Descripción
-l Lista el contenido del fichero (si no se indica, Unpak extraerá el contenido).
-d DIR Indica al programa un directorio donde extraer el contenido del fichero. Por defecto se extraerá todo en el directorio actual.
-s Crea subdirectorios al igual que haría DIV cuando seleccionamos la opción Crear subdirectorios en el generador de instalaciones. Cada fichero se extraerá en un subdirectorio llamado como su extensión, salvo en el caso de los ficheros EXE, DLL y PAK.
-u No convierte los nombres de fichero a minúsculas. Por defecto, Unpak convertirá todos los nombres de fichero a minúsculas antes de extraerlos. Esto es para facilitar su manejo en sistemas sensibles a mayúsculas/minúsculas, como Linux. Con la opción -u podemos desactivar este comportamiento.
-k Continúa procesando el fichero incluso si se encuentran errores. Esta opción sólo se recomienda si queremos recuperar el contenido de un PAK/STP dañado o incompleto. Debemos tener en cuenta que habrá ficheros que no se consigan extraer y eso podría hacer que el juego extraído no funcione.
-b No elimina ficheros extraídos parcialmente o con errores. Esta opción se suele usar con -k para tratar de recuperar toda la información posible de un PAK/STP dañado o incompleto.
-v Muestra información adicional. Unpak mostrará toda la información posible en cada paso de la operación.
-h Muestra la ayuda del programa.

Ejemplos y casos de uso

Listar el contenido de un fichero

Simplemente usando la opción -l podemos ver el contenido de cualquier PAK/STP. Nos mostrará cada fichero acompañado de su tamaño descomprimido, tamaño comprimido y razón de compresión.

> unpak -l blastup.pak
DIV Unpak  Copyright (C) 2022 Vii
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Uncomp.size  Comp.size  Ratio Name
----------- ---------- ------ ----------------
      26127       6127  23.5% opciones.fnt
       7432       1644  22.1% marcador.fnt
      37286       5107  13.7% juego.fnt
     107347      20926  19.5% creditos.fnt
       6816       5978  87.7% faser.pcm
       5046       3259  64.6% laser.pcm
      14641       8124  55.5% disparo2.pcm
      27223      14436  53.0% explosio.pcm
       4354       4201  96.5% ding.pcm
       5955       3014  50.6% buiu.pcm
      26286      17310  65.9% fx1.pcm
      12124       6349  52.4% cosa_a.pcm
     917726     228430  24.9% juego.fpg
     308616      88162  28.6% titulo.fpg
     308616     143152  46.4% creditos.fpg
----------- ---------- ------ ----------------
    1815595     556219  30.6% 15 file(s) total

Desempaquetar un juego

Podemos desempaquetar un PAK, opcionalmente usando la opción -s para crear subdirectorios, y luego incluso eliminar el PAK para convertir un juego empaquetado en desempaquetado. El juego seguirá funcionando correctamente.

> unpak -s blastup.pak
DIV Unpak  Copyright (C) 2022 Vii
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Extracting: opciones.fnt
Extracting: marcador.fnt
Extracting: juego.fnt
Extracting: creditos.fnt
Extracting: faser.pcm
Extracting: laser.pcm
Extracting: disparo2.pcm
Extracting: explosio.pcm
Extracting: ding.pcm
Extracting: buiu.pcm
Extracting: fx1.pcm
Extracting: cosa_a.pcm
Extracting: juego.fpg
Extracting: titulo.fpg
Extracting: creditos.fpg
15 file(s) extracted

> del blastup.pak

Instalar un juego

Unpak puede usarse como un instalador alternativo para los juegos. Con la opción -d podemos indicar la carpeta destino para la instalación (si no existe, Unpak la creará), y opcionalmente usar -s para crear subcarpetas. Si se trata de un instalador multi-volumen, hay que recordar primero copiar todos los volúmenes en la misma carpeta para que Unpak pueda encontrarlos.

C:\TMP>dir
 El volumen de la unidad C es C_DRIVE
 El número de serie del volumen es: 9C5A-FDC0

 Directorio de C:\TMP

01/03/2022  15:51    <DIR>          .
01/03/2022  15:51    <DIR>          ..
24/02/2022  20:15         1.474.560 ALIEN.001
24/02/2022  20:15         1.474.560 ALIEN.002
24/02/2022  20:15         1.474.560 ALIEN.003
24/02/2022  20:16           634.839 ALIEN.004
24/02/2022  20:15           493.072 INSTALL.EXE
               5 archivos      5.551.591 bytes
               2 dirs  316.893.990.912 bytes libres

C:\TMP>unpak -sd C:\JUEGOS\ALIEN ALIEN.001
DIV Unpak  Copyright (C) 2022 Vii
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Extracting: alien.exe
Extracting: div32run.dll
Extracting: intro.fli
Extracting: suprimer.fpg
Extracting: aliend.fnt
Extracting: alien.fpg
Extracting: alienm.fnt
Extracting: aliens.fnt
Extracting: alienj.fnt
Extracting: alienc.fnt
Extracting: laser6.pcm
Extracting: esco_at1.pcm
Extracting: golpe20.pcm
Extracting: alien.pcm
Extracting: bip.pcm
Extracting: explosio.pcm
Extracting: explosi8.pcm
Extracting: motor.pcm
Extracting: creditos.fpg
19 file(s) extracted

C:\TMP>dir C:\JUEGOS\ALIEN
 El volumen de la unidad C es C_DRIVE
 El número de serie del volumen es: 9C5A-FDC0

 Directorio de C:\JUEGOS\ALIEN

01/03/2022  15:54    <DIR>          .
01/03/2022  15:54    <DIR>          ..
01/03/2022  15:54             6.476 alien.exe
01/03/2022  15:54           318.466 div32run.dll
01/03/2022  15:54    <DIR>          fli
01/03/2022  15:54    <DIR>          fpg
01/03/2022  15:54    <DIR>          fnt
01/03/2022  15:54    <DIR>          pcm
               2 archivos        324.942 bytes
               6 dirs     258.088.960 bytes libres

Usar patrones para filtrar qué archivos extraer

En ocasiones nos puede convenir extraer un solo archivo o, por ejemplo, sólo los archivos con una determinada extensión. Unpak nos permite especificar patrones para filtrar qué archivos se extraen y cuáles se excluyen.

Por ejemplo, si sólo nos interesan los archivos FPG:

C:\TMP>unpak ALIEN.001 *.fpg
DIV Unpak  Copyright (C) 2022 Vii
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Extracting: suprimer.fpg
Extracting: alien.fpg
Extracting: creditos.fpg
3 file(s) extracted

Esta característica también funciona al listar el contenido de un fichero con la opción -l. Unpak nos indicará cuántos archivos fueron excluidos del listado:

C:\TMP>unpak -l ALIEN.001 *.fnt intro.fli
DIV Unpak  Copyright (C) 2022 Vii
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Uncomp.size  Comp.size  Ratio Name
----------- ---------- ------ ----------------
    6535806    3609335  55.2% intro.fli
       8260       1686  20.4% aliend.fnt
     115653      13828  12.0% alienm.fnt
       7432       1834  24.7% aliens.fnt
      28761       5241  18.2% alienj.fnt
     111211      13751  12.4% alienc.fnt
----------- ---------- ------ ----------------
    6807123    3645675  53.6% 6 file(s) total (13 excluded)

Recuperar datos de un fichero dañado

Normalmente Unpak interrumpirá la operación en el momento en que encuentre datos inconsistentes. Pero si estamos intentando recuperar los datos de un fichero dañado, nos interesa que Unpak continúe para extraer todos los ficheros que sea posible. Para esto usaremos la opción -k. Si queremos conservar los ficheros parcialmente extraídos, añadiremos -b. Unpak mostrará una advertencia siempre que los datos extraídos estén posiblemente corruptos.

C:\TMP>unpak -kb -d recovery ALIEN.001
DIV Unpak  Copyright (C) 2022 Vii
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Extracting: alien.exe
Extracting: div32run.dll
Extracting: intro.fli
Extracting: suprimer.fpg
WARNING: suprimer.fpg: invalid data
WARNING: Skipping file suprimer.fpg
WARNING: Keeping partially extracted file recovery\suprimer.fpg
Extracting: aliend.fnt
Extracting: alien.fpg
Extracting: alienm.fnt
Extracting: aliens.fnt
Extracting: alienj.fnt
Extracting: alienc.fnt
Extracting: laser6.pcm
Extracting: esco_at1.pcm
Extracting: golpe20.pcm
Extracting: alien.pcm
Extracting: bip.pcm
Extracting: explosio.pcm
Extracting: explosi8.pcm
Extracting: motor.pcm
Extracting: creditos.fpg
18 file(s) extracted. WARNING: 1 failed

C:\TMP>dir recovery
 El volumen de la unidad C es C_DRIVE
 El número de serie del volumen es: 9C5A-FDC0

 Directorio de C:\TMP\recovery

01/03/2022  16:11    <DIR>          .
01/03/2022  16:11    <DIR>          ..
01/03/2022  16:11             6.476 alien.exe
01/03/2022  16:11         1.906.496 alien.fpg
01/03/2022  16:11            16.140 alien.pcm
01/03/2022  16:11           111.211 alienc.fnt
01/03/2022  16:11             8.260 aliend.fnt
01/03/2022  16:11            28.761 alienj.fnt
01/03/2022  16:11           115.653 alienm.fnt
01/03/2022  16:11             7.432 aliens.fnt
01/03/2022  16:11               530 bip.pcm
01/03/2022  16:11           308.616 creditos.fpg
01/03/2022  16:11           318.466 div32run.dll
01/03/2022  16:11            20.025 esco_at1.pcm
01/03/2022  16:11            30.901 explosi8.pcm
01/03/2022  16:11            16.335 explosio.pcm
01/03/2022  16:11            10.624 golpe20.pcm
01/03/2022  16:11         6.535.806 intro.fli
01/03/2022  16:11             5.822 laser6.pcm
01/03/2022  16:11             4.034 motor.pcm
01/03/2022  16:11           451.402 suprimer.fpg    <<<-- Este fichero originalmente pesaba 530 KB, pero ha sido extraído parcialmente
              19 archivos      9.902.990 bytes
               2 dirs  316.880.531.456 bytes libres

Recuperar datos de una instalación multi-volumen a la que le faltan volúmenes

Hay que tener en cuenta que el primer volumen (con extensión .001) siempre es necesario, ya que es el que contiene la lista de ficheros almacenados en el paquete. Unpak siempre intentará acceder al primer volumen y, en caso de no encontrarlo, interrumpirá toda operación.

Si el volumen o volúmenes faltantes son los últimos, podemos usar Unpak normalmente y, aunque obviamente dará error cuando intente acceder al primer volumen inexistente, habrá extraído todos los datos posibles. Además, si hemos indicado la opción -b, dejará en el disco el último archivo extraído aunque sólo sea parcialmente.

Si el volumen o volúmenes faltantes son intermedios, hay algo que podemos hacer para intentar recuperar todos los datos posibles. Podemos copiar un volumen anterior con la extensión del volumen que falta y usar la opción -k (y, si nos interesa, -b). Unpak, naturalmente, mostrará un error cuando se encuentre datos que no corresponden con lo que espera, pero seguirá adelante y, si le es posible, extraerá los datos de los volúmenes siguientes.

En el siguiente ejemplo tenemos un juego en 4 volúmenes, del cual hemos perdido el número 3:

C:\TMP>dir
 El volumen de la unidad C es C_DRIVE
 El número de serie del volumen es: 9C5A-FDC0

 Directorio de C:\TMP

01/03/2022  16:26    <DIR>          .
01/03/2022  16:26    <DIR>          ..
24/02/2022  20:15         1.474.560 ALIEN.001
24/02/2022  20:15         1.474.560 ALIEN.002
24/02/2022  20:16           634.839 ALIEN.004    <<<--- ¡Nos falta el 003!
24/02/2022  20:15           493.072 INSTALL.EXE
               4 archivos      4.077.031 bytes
               2 dirs  316.891.947.008 bytes libres

Normalmente Unpak extraería lo posible de ALIEN.001 y ALIEN.002, pero se interrumpiría al intentar acceder a ALIEN.003, ya que no existe (incluso indicando -k, puesto que Unpak no tiene forma de saber si hay más volúmenes después del 3). Así que hacemos una copia de ALIEN.002 para sustituir a ALIEN.003:

C:\TMP>copy ALIEN.002 ALIEN.003
        1 archivo(s) copiado(s).

C:\TMP>dir
 El volumen de la unidad C es C_DRIVE
 El número de serie del volumen es: 9C5A-FDC0

 Directorio de C:\TMP

01/03/2022  16:29    <DIR>          .
01/03/2022  16:29    <DIR>          ..
24/02/2022  20:15         1.474.560 ALIEN.001
24/02/2022  20:15         1.474.560 ALIEN.002
24/02/2022  20:15         1.474.560 ALIEN.003    <<<--- Volumen "sustituto". No tiene datos válidos pero nos será útil
24/02/2022  20:16           634.839 ALIEN.004
24/02/2022  20:15           493.072 INSTALL.EXE
               5 archivos      5.551.591 bytes
               2 dirs  316.890.472.448 bytes libres

Ahora podemos usar Unpak con las opciones -kb para extraer todo lo posible de los volúmenes 1, 2 y 4:

C:\TMP>unpak -kb -d recovery ALIEN.001
DIV Unpak  Copyright (C) 2022 Vii
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Extracting: alien.exe
Extracting: div32run.dll
Extracting: intro.fli
Extracting: suprimer.fpg
WARNING: suprimer.fpg: invalid data
WARNING: Skipping file suprimer.fpg
WARNING: Keeping partially extracted file recovery\suprimer.fpg
Extracting: aliend.fnt
WARNING: aliend.fnt: invalid data
WARNING: Skipping file aliend.fnt
WARNING: Keeping partially extracted file recovery\aliend.fnt
Extracting: alien.fpg
WARNING: alien.fpg: invalid data
WARNING: Skipping file alien.fpg
WARNING: Keeping partially extracted file recovery\alien.fpg
Extracting: alienm.fnt
Extracting: aliens.fnt
Extracting: alienj.fnt
Extracting: alienc.fnt
Extracting: laser6.pcm
Extracting: esco_at1.pcm
Extracting: golpe20.pcm
Extracting: alien.pcm
Extracting: bip.pcm
Extracting: explosio.pcm
Extracting: explosi8.pcm
Extracting: motor.pcm
Extracting: creditos.fpg
16 file(s) extracted. WARNING: 3 failed

C:\TMP>dir recovery
 El volumen de la unidad C es C_DRIVE
 El número de serie del volumen es: 9C5A-FDC0

 Directorio de C:\TMP\recovery

01/03/2022  16:32    <DIR>          .
01/03/2022  16:32    <DIR>          ..
01/03/2022  16:32             6.476 alien.exe
01/03/2022  16:32                 0 alien.fpg      <<<--- ¡Archivo incompleto!
01/03/2022  16:32            16.140 alien.pcm
01/03/2022  16:32           111.211 alienc.fnt
01/03/2022  16:32                 0 aliend.fnt     <<<--- ¡Archivo incompleto!
01/03/2022  16:32            28.761 alienj.fnt
01/03/2022  16:32           115.653 alienm.fnt
01/03/2022  16:32             7.432 aliens.fnt
01/03/2022  16:32               530 bip.pcm
01/03/2022  16:32           308.616 creditos.fpg
01/03/2022  16:32           318.466 div32run.dll
01/03/2022  16:32            20.025 esco_at1.pcm
01/03/2022  16:32            30.901 explosi8.pcm
01/03/2022  16:32            16.335 explosio.pcm
01/03/2022  16:32            10.624 golpe20.pcm
01/03/2022  16:32         6.439.181 intro.fli
01/03/2022  16:32             5.822 laser6.pcm
01/03/2022  16:32             4.034 motor.pcm
01/03/2022  16:32                 0 suprimer.fpg   <<<--- ¡Archivo incompleto!
              19 archivos      7.440.207 bytes
               2 dirs  316.883.001.344 bytes libres