martes, 26 de febrero de 2013

Compresión Arc+Precomp+Srep

Un pequeño manual elaborado por mí para aplicar esta compresión y tratar de reducir el juego.



Antes de proceder tenemos que ver la estructura del juego y su posible compresión.
Precomp comprime mejor binarios, datos, dll pero no videos y archivos ya comprimidos (pak por ejemplo)
Hay juegos que están ya comprimidos y apenas se comprimirán nada, como por ejemplo Call of Duty que contiene casi todos los archivos en Pak.
Yo suelo coger unos archivos 2 o 3 y pruebo con las  tres compresiones posibles, freearc solo, srep y precomp a ver cual comprime mejor, generalmente sobretodo en juegos modernos solo con la compresión srep será suficiente, es la que suelo aplicar yo para ahorrar tiempo , si en la prueba de compresión el precomp comprime bastante mas pues se puede alternar entonces a comprimir con precomp los datos y con el srep los vídeos.
Una vez vista la estructura me creare un subdirectorio llamado “G”.
Creamos otra carpeta con los siguientes archivos (se pueden bajar desde mi blog)

ARC.EXE
ARC.INI
SREP.EXE  (v.3.0)
PRECOMP.EXE  (v.0.4.2)
PACKJPG_DLL.DLL
ZLIB1.DLL

Pongamos que tenemos un juego:




Aquí se podría probar la compresión de un archivo data.bin pero como pesan demasiado si no quereis perder tiempo le aplicáis la compresión srep.

Comenzamos la compresión por bloques:
Yo suelo probar por bloques de mas o menos dos gigas de datos, por lo que en la carpeta “G” crearía la carpeta “DATOS” y dentro copiaría el 1º archivo “DATA1.BIN” que ocupa ya 2 GB.


Aplicamos la compresión:

Si usamos SREP solo:

arc a -ep1 -r -w.\ .\Disk\Data1.bin -msrep+lzma:a1:mfbt4:d256m:fb128:mc1000:lc8 "d:\g\*"

Con esto creamos el comprimido (se llama data1.bin también) en la carpeta “Disk” en la carpeta donde tengas el ARC.

Ejemplo:


Si utilizados PRECOMP+DELTA+SREP

arc a -ep1 -ed -r -w.\ .\Disk\Data1.bin -mprecomp:t-nf:zl98:d0+srep+exe+delta+lzma:a1:mfbt4:d256m:fb128:mc1000:lc8 "d:\g\*"

Ahora miramos el resultado del archive comprimido, si pesa 600 o 700 o 800 MB se puede incluir  mas datos a la siguiente compresión.  Procesemos asi con todos los archivos de la carpeta datos cambiando en la línea de comandos el Data1.bin por Data2.bin y así sucesivamente:

arc a -ep1 -r -w.\ .\Disk\Data2.bin -msrep+lzma:a1:mfbt4:d256m:fb128:mc1000:lc8 "d:\g\*"
arc a -ep1 -r -w.\ .\Disk\Data3.bin -msrep+lzma:a1:mfbt4:d256m:fb128:mc1000:lc8 "d:\g\*"


Luego procedemos a copiar a “G” la carpeta video, esta como sus archivos pesan poco se puede copiar ya la carpeta y los archivos en la raiz que queden para comprimirlos todos.
A pesar de que contienen algunos binarios hay unos archivos de video por lo que recomiendo solo SREP (ahorraras mucho tiempo y la compresión será parecida al PRECOMP).
Ahora que ya tememos todo comprimido supongamos que ha quedado el resultado:




Vamos al script :

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Con esta línea descomprimirá hasta el Data3.bin que es el ultimo del disco 1.
if not ShowChangeDiskWindow ('Inserta el disco 2 con el archivo Data4.bin.', ExpandConstant('{src}'),'data4.bin') then break;
Con esto  si no encuentra el Data4.bin preguntara donde encontrarlo, por lo que insertamos el Disco 2 y lo seleccionamos.
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Y con esta seguirá extrayenso el resto, Data5 y Data6.
En resumen:
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
         // CAMBIO DISCO
 if not ShowChangeDiskWindow ('Inserta el disco 2 con el archivo Data4.bin.', ExpandConstant('{src}'),'data4.bin') then break; 
 if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

A tener en cuenta:
Muchas veces no merece la pena usar la Precomp o Srep, simplemente con Freearc nos vale.
Me gusta más Srep que Precomp a no ser que la diferencia de compresión sea mucha, en la mayoría de juegos con Srep es suficiente ya que comprimirá igual que Precomp.
Se puede alternar la compresión pero si quieres ahorrar tiempo comprime todos los datos con Srep o solo con Arc.
Precomp además de tardar mucho tiempo puede consumir mucho espacio en los temporales del disco duro además de demorarse más en la instalación que Srep.

Podeis bajar el script aqui

10 comentarios :

  1. hola!!! estoy intentando entender todo esto, creo q lo hiciste para gente q tiene mucha idea. Pude deducir como hacer para q comprima, pero ya no se que hacer con eso del "script", como se lo hace? con que se ejecuta? Te agradeceria q me ayudaras. muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola, si, tienes razón es para gente ya avanzada, el manual es para poder descomprimir los archivos con el programa Inno Setup, el script es un script preparado para la descompresión de los archivos con opción a cambio de disco ya que los que había no funcionaba bien la opción. Es un Script de ejemplo que puedes aplicar a los juegos que tu quieras, tienes muchos script hechos (casi todos de paginas rusas) pero ten en cuenta que para la descompresión de los archivos requiere un script con modulo "isdone".
      Ya se que al principio parece complicado pero poco a poco se va entendiendo.

      Eliminar
  2. Hola! aaahhh ahora entiendo! el tema es q no se como se hace un instalador para ponerle ese script. D todas formas te cuento que quería hacer entrar el jeugo Aliens Colonial Marines, con su ultimo Update, en 1 dvd5. Desgraciadamente había logrado llegar a los 4.64gb, y con tu tutorial lo hice llegar a 4.60Gb. Ya no se como mas comprimirlo!! Hay versiones en torrent de 4.31 o 4.35 pero en Ruso o Inglés. Mi versión iba a ser enespañol. Si sabes alguna otra forma de comprimir mas... me avisa jajaja. MUCHAS GRACIAS.

    ResponderEliminar
  3. Hay muchos juegos que no son apenas comprimibles puede ser el caso, los repack que comentas posiblemente le han suprimido algún archivo de idioma y reducido la calidad de video que es lo que suelen hacer adicionalmente para reducir aún mas el juego, si solo lo quieres en Español trata de localizar los archivos de idiomas y elimina los que no sean de español.
    En cuanto al script ya te comente que necesitas el modulo isdone para descomprimir los archivos y llevan código en Delphi por lo que si estas empezando seria complicado por lo que te recomendaría uno ya hecho y personalizarlo para tu juego.
    Tienes una comunidad de Inno en Taringa a la que yo pertenezco y que en ocasiones suelen poner ellos sus scripts.

    http://www.taringa.net/comunidades/innorepacks/

    Necesitas registrarte para ingresar.

    ResponderEliminar
  4. Muy muchas gracias!!! de verdad! voy a hechar un vistazo. Si, los repack de los torrent le sacan lo demás idiomas, pero no recomprimen los videos, bajé uno y los comparé. El tema es que yo tbn borré los otros idiomas. No se como hacen, pero comprimen mas de lo que yo puedo hacer. No queda otra, ahora estoy recomprimiendo un poquito los videos BIK del juego, hasta dnd no se note disminución de calidad. Muchas gracias x contestar.

    ResponderEliminar
  5. hola amigo muchas gracias por el manual pero quería pedirte el favor de si puedes volver a subir el script ya que al bajarlo no deja descomprimirlo dice falla de compresión muchas gracias de antemano

    ResponderEliminar
  6. Prueba con 7zip o con la última versión de WinRar.

    ResponderEliminar
  7. si era eso actualizar el WinRar muchas gracias por todo

    ResponderEliminar
  8. No se si vas a responder, pero por las dudas pregunto. tengo un par de juegos de unos 15-40Gb que tienen 1 solo archivo .Bin o a lo mucho 2. pero por obvias razones no se puede grabar en ninguna clase de dvd. quería saber si es posible dividir este bin en mas archivos .bin para poder grabarlos en dvd5. Lo que no quiero hacer es recomprimirlo y crear un autoextraible para depués antes de instalar tener que pasar por el paso de primero descomprimir. Es decir quiero dividirlo en dvd5 y que se instale directamente sin paso previo de descompreción y montado de la imagen.

    ResponderEliminar
    Respuestas
    1. Hola, claro que respondo solo que aveces tardo en entrar a mi blog, por lo que entiendo tienes un archivo muy grande, lo malo de este método es que ARC no da la posibilidad de cortar el archivo comprimido, trata de comprimir el archivo para ver si al menos te queda menor a 4,5GB si no puedes probar con el UltraARC - http://koalacuatro.blogspot.com/2015/05/ultraarc-for-inno-setup.html.

      Para instalalarlo puedes usar los scrip que hay en este blog u otro que quieras, no es necesario hacerlo SFX.

      Eliminar