Página 2 de 4

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 10:06
por D_Skywalk
Windows apack.exe:
$this->bbcode_second_pass_code('', '
wine ../utils/apack.exe ../gfx/title.scr build/title.bin
===============================================================================
aPLib example Copyright (c) 1998-2004 by Joergen Ibsen / Jibz
All Rights Reserved

http://www.ibsensoftware.com/
===============================================================================

compressed 6912 -> 1443 bytes (20%) in 0.01 seconds

wine ../utils/apack.exe ../gfx/ending.scr build/ending.bin
===============================================================================
aPLib example Copyright (c) 1998-2004 by Joergen Ibsen / Jibz
All Rights Reserved

http://www.ibsensoftware.com/
===============================================================================

compressed 6912 -> 1217 bytes (17%) in 0.01 seconds
')

Total:
36331 + 24200 = 60531 ( 123 free )


Linux appack elf64:
$this->bbcode_second_pass_code('', 'appack c ../gfx/title.scr build/title.bin
===============================================================================
aPLib example Copyright (c) 1998-2009 by Joergen Ibsen / Jibz
All Rights Reserved

http://www.ibsensoftware.com/
===============================================================================

compressed 6912 -> 1467 bytes (21%) in 0.00 seconds
appack c ../gfx/ending.scr build/ending.bin
===============================================================================
aPLib example Copyright (c) 1998-2009 by Joergen Ibsen / Jibz
All Rights Reserved

http://www.ibsensoftware.com/
===============================================================================

compressed 6912 -> 1241 bytes (17%) in 0.00 seconds
')

Total:
36379 + 24200 = 60579 ( 75 free )


Es casi el doble :|

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 10:24
por D_Skywalk
Ya lo tengo!!
No hay que usar la safe, ahora comprime igual que la de windows. Además he limpiado el código y la he dejado sólo para comprimir como la de windows.

Un Saludo y ahora tengo curiosidad de como quedaría con exomizer :cheer:

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 10:57
por antoniovillena
Vaya currada D_Skywalk, no me esperaba tantos avances en tan poco tiempo.

Veo que no has tenido problema en pasar el .bat a bash, en realidad es mucho más sencillo en bash donde no hay que dar tantas vueltas para obtener la longitud de un archivo o pasar un número a hexadecimal. La utilidad GenTape la porté a Linux en su momento porque había gente interesada, en el script hay que hacer un par de cambio: encerrar las cadendas con comillas simples es comillas dobles y cambiar el caracter de continuación de línea.

$this->bbcode_second_pass_code('', '
./GenTape $FULLNAME.tap \
basic "'$TAPENAME'" 0 compress_tap.bin \
data $GAMENAME.bin.exo.opt
')

Como he dicho antes, GenTape no es necesario porque bin2tap y copy /b (o cat en linux) hacen el mismo trabajo. La única ventaja de GenTape es que lo hace todo de una vez y permite elegir entre tap, tzx ó wav simplemente cambiando la extensión en la llamada.

Respecto a los parámetros de zcc (create-app, etc...) no tengo ni idea, es una copia literal del comp.bat que se distribuye en el código fuente.

En cuanto a tiempo de procesado entre aplib y exomizer, en las pantallas no creo que se note una diferencia apreciable (desde el punto de vista del usuario). Sin embargo en la descompresión del juego completo sí que se notará, a lo mejor exomizer tarda 4 segundos en lugar de los 3 que tarde aplib.

Si comparáis los ratios de compresión, exomizer comprime mejor, aunque no mucho mejor. Independientemente del algoritmo que uséis para la versión final de la Churrera, os recomiendo que apliquéis el filtro RCS, tanto en aplib como en exomizer la diferencia de tamaño es notable.

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 11:04
por D_Skywalk
Domingo, niño pequeño... te levantas pronto :poke:
XDDD

No se a que te refieres a comprimir el programa, el uso que yo le daría en principio es para la pantalla de título de Justin y para la Final.

Y para el juego de halloween me gustaría usarla para comprimir, map, ene y sprites de 3 fases y ... a ver que cabe en 48K :cafe:

Un Saludo :wan:

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 11:05
por antoniovillena
$this->bbcode_second_pass_quote('D_Skywalk', '
')Este ejemplo vale para la pantalla de título por lo que entiendo, no?
Si quisiera comprimir unos sprites y tenerlos en memoria, como debería de hacerlo?


En el .bat lo que he hecho es comprimir la pantalla de carga y el resto del juego, el cual supongo que están todos los datos sin comprimir. Si quisieras tener elementos comprimidos en memoria y descomprimirlos al vuelo durante el juego (no al principio) la cosa sería más compleja. Tendrías que tener la rutina de descompresión siempre en memoria y separar los datos del juego entre comprimidos y no comprimidos. Al comienzo del juego sólo descomprimirías los datos no comprimidos dejando los comprimidos intactos, así cuando llegue el momento (por ejemplo al final del juego) se llamará a la rutina descompresora (con los datos comprimidos de la pantalla de ending).

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 11:12
por D_Skywalk
tenemos la aplib.h en la churrera que la usamos así:
$this->bbcode_second_pass_code('', 'unpack ((unsigned int) (s_title), 16384);')

Ya tenemos en memoria el descompresor de aPPack, sería usar el descompresor del exomizer, no?
Perdonadme que sea tan pez en estas rutinas ASM... no son mi fuerte :ayayay:

Un Saludo y gracias :corchoneta:
Pd: comprimir el código del juego no le veo mayor interés de momento, la pantalla vale, para que salga antes... :?
Ppd: no encuentro el "deexo: include d.asm"

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 11:19
por antoniovillena
$this->bbcode_second_pass_quote('D_Skywalk', 'D')omingo, niño pequeño... te levantas pronto :poke:
XDDD

No se a que te refieres a comprimir el programa, el uso que yo le daría en principio es para la pantalla de título de Justin y para la Final.

Y para el juego de halloween me gustaría usarla para comprimir, map, ene y sprites de 3 fases y ... a ver que cabe en 48K :cafe:

Un Saludo :wan:


Pues fíjate en el TAP que he generado y compáralo con el TAP oficial del juego: ocupa la mitad y el tiempo de carga también es la mitad. Si comprimes sólo la pantalla de título y de final como mucho que te ahorres 6K.

Si hablamos de compresión estática (es lo que he hecho con el TAP) pues el juego ocupa como mucho 48K, lo único que hace la compresión estática es que esos 48K ocupen la mitad y tarde menos en cargar desde cinta. Creo que lo que tú quieres hacer es compresión dinámica, que es tener distintas fases comprimidas almacenadas en memoria para luego descomprimir sólo las que vayas necesitando, y así poder meter más niveles de los que cabrían en 48K. Hacer esto último es muy complicado, para eso te recomiendo un compresor más sencillote come el zx7. Quizás la mejor aproximación sea integrarlo de una forma transparente en el engine, pero esto es tela de complicado. A ver si me explico, por ejemplo en el mapeado actual de la churrera se usan bytes o nibbles (packed). Integrar la compresión en el engine significa crear un algoritmo de compresión LZ77 adhoc, de tal forma que si hay 16 tiles los literales sean de 4 bits, si hay 32 tiles que sean de 5, etc...

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 11:32
por antoniovillena
$this->bbcode_second_pass_quote('D_Skywalk', 't')enemos la aplib.h en la churrera que la usamos así:
$this->bbcode_second_pass_code('', 'unpack ((unsigned int) (s_title), 16384);')

Ya tenemos en memoria el descompresor de aPPack, sería usar el descompresor del exomizer, no?
Perdonadme que sea tan pez en estas rutinas ASM... no son mi fuerte :ayayay:


Claro, lo que dice na_th_an tiene toda su lógica, habría que eligir uno de los dos para la churrera. Esto es así porque la Churrera emplea compresión estática sólo para las pantallas (las de comienzo y la de final).

$this->bbcode_second_pass_quote('D_Skywalk', '
')Un Saludo y gracias :corchoneta:
Pd: comprimir el código del juego no le veo mayor interés de momento, la pantalla vale, para que salga antes... :?
Ppd: no encuentro el "deexo: include d.asm"


Pues lo mismo que la pantalla sale antes el juego sale también antes. :lol:

Ahora en serio, la única razón por la que tiene sentido es porque la Churrera usa compresión dinámica y las pantallas son muy comprensibles (hay mucha redundancia en ellas). Eso quiere decir que todo lo que se compriman dichas pantallas son bytes extras de RAM con los que llenar niveles. Si sólo comprimís pantallas, por el tamaño que tienen apenas se notaría la diferencia entre aplib y exomizer, pero como he dicho antes recomiendo encarecidamente que le apliquéis el filtro RCS (también con aplib), no cuesta nada y os podéis permitir al menos un par de Kb más de RAM para niveles extra en todos los juegos.

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 11:34
por antoniovillena
El d.asm es el descompresor en ensamblador, lo genera la utilidad exoopt al vuelo, y dependiendo de los parámetros que le metamos y de otras cosas más es diferente para cada archivo.

Re: Usar Exomizer en la churrera?

Publicado: Dom, 27 Oct 2013, 11:51
por antoniovillena
Respecto al RCS, hay dos versiones del de-RCS la buffered y la onscreen. Yo he usado la buffered porque es más corta (27 bytes) pero vosotros tendréis que emplear la onscreen (58 bytes) que no requiere memoria adicional. Las otras dos versiones que vienen en el pack son integraciones con el descompresor ZX7. El algoritmo ZX7 sería otra alternativa bastante factible al aplib y al exomizer.