Página 1 de 5

Mi make.bat

Publicado: Jue, 14 Nov 2013, 13:53
por antoniovillena
Este es el make.bat que considero óptimo después de bastantes cambios con respecto al original.
  • No se hacen cambios de directorio. Se ejecuta en /dev y se generan ahí la mayoría de los archivos.
  • Cambio el algoritmo compresor appack por el ZX7+RCS
  • Funciona con los archivos TMX de Tiled en lugar de con los MAP de Mappy
  • Empleo utilidades de conversión propias
  • Para mayor rapidez no lo hace todo del tirón. Si escribo "make" sólo compila y genera la versión normal del TAP. Si escribo "make script", compila además el script. Si escribo "make color" te reduce el número de colores de los PNGs. Si escribo "make pant" te comprime las pantallas. Si escribo "make mapa" te actualiza los mapas y gráficos. Finalmente si escribo "make prod" te genera en lugar del TAP normal, versiones comprimidas en formato TAP, TZX y WAV.
  • No hace falta ejecutar setenv.bat, lo hace automáticamente al comienzo.
  • He puesto como variable local "nombre" para no tener que editar todo el make.bat en cada nuevo juego.

Espero que os sirva, o al menos rescatéis ideas para incorporarlas al vuestro.

$this->bbcode_second_pass_code('', '
@echo off
SETLOCAL
call c:\z88dk10\setenv.bat
rem Cambia "dogmole" por el nombre de tu güego y pantallas por el número de pantallas.
set nombre=Dogmole
set pantallas=24
if "%1"=="script" (
echo ### COMPILANDO SCRIPT ###
..\utils\msc %nombre%.spt msc.h %pantallas%
)
if "%1"=="color" (
echo -------------------------------------------------------------------------------
echo ### AJUSTANDO COLORES ###
..\utils\PosterizeZX ..\gfx\title.png ..\gfx\title.png
..\utils\PosterizeZX ..\gfx\ending.png ..\gfx\ending.png
..\utils\PosterizeZX ..\gfx\loading.png ..\gfx\loading.png
..\utils\PosterizeZX ..\gfx\work.png ..\gfx\work.png
)
if "%1"=="pant" (
echo -------------------------------------------------------------------------------
echo ### COMPRIMIENDO PANTALLAS ###
..\utils\Png2Rcs ..\gfx\title.png ..\gfx\title.rcs
..\utils\Png2Rcs ..\gfx\ending.png ..\gfx\ending.rcs
..\utils\Png2Rcs ..\gfx\loading.png ..\gfx\loading.rcs
if exist title.bin del title.bin
if exist ending.bin del ending.bin
if exist loading.bin del loading.bin
if exist loading.scr del loading.scr
..\utils\rcs -d ..\gfx\loading.rcs loading.scr
..\utils\zx7 ..\gfx\title.rcs title.bin
..\utils\zx7 ..\gfx\ending.rcs ending.bin
..\utils\zx7 ..\gfx\loading.rcs loading.bin
)
if "%1"=="mapa" (
echo -------------------------------------------------------------------------------
echo ### GENERANDO MAPA Y GRAFICOS ###
..\utils\TmxCompress ..\map\mapa.tmx mapa_comprimido.bin
..\utils\GfxCnv ..\gfx\chars.png ..\gfx\work.png ..\gfx\spriteset.png tileset.h sprites.h
..\utils\TmxCnv ..\map\mapa.tmx mapa.h enems.h
)
echo -------------------------------------------------------------------------------
echo ### COMPILANDO GUEGO ###
zcc +zx -vn %nombre%.c -o %nombre%.bin -lndos -lsplib2 -zorg=24200
echo -------------------------------------------------------------------------------
echo ### CONSTRUYENDO CINTA ###
if "%1"=="prod" (
if exist %nombre%.zx7 del %nombre%.zx7
..\utils\zx7 %nombre%.bin %nombre%.zx7
for /f %%i in (%nombre%.zx7) do echo define COMP_SIZE %%~zi > define.asm
call :generatape tap
call :generatape tzx
call :generatape wav
) else (
..\utils\Bas2Bin loader.bas
..\utils\GenTape %nombre%.tap ^
basic '%nombre%' 10 loader.bin ^
hdata 'SCREEN' 4000 loading.scr ^
hdata 'DZX7' 5d44 dzx7.bin ^
hdata 'GUEGO' 5e88 %nombre%.bin
)
echo -------------------------------------------------------------------------------
echo ### DONE ###
goto :eof

:generatape
..\utils\SjAsmPlus asmloader.asm
..\utils\GenTape %nombre%.%1 ^
basic '%nombre%' 0 asmloader.bin ^
data %nombre%.zx7
goto :eof
')

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 14:20
por son_link
Dame unos minutos y lo paso a BASH, o incluso quizás estaría bien un makefile.

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 15:27
por antoniovillena
$this->bbcode_second_pass_quote('son_link', 'D')ame unos minutos y lo paso a BASH, o incluso quizás estaría bien un makefile.


Gracias

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 15:28
por son_link
¿Podrías decirme que hace esta linea?
$this->bbcode_second_pass_code('', 'for /f %%i in (%nombre%.zx7) do echo define COMP_SIZE %%~zi > define.asm')

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 15:33
por antoniovillena
Calcula el tamaño del archivo %nombre%.zx7 y genera un archivo llamado DEFINE.ASM con esta línea:

$this->bbcode_second_pass_code('', '

define COMP_SIZE [tamaño]

')

Donde [tamaño] es el número calculado antes. Ten en cuenta que define debe tener un espacio antes, sino el ensamblador lo confunde con una etiqueta.

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 15:42
por antoniovillena
En este zip pongo 4 archivos auxiliares:
  • asmloader.asm. Es el cargador en código máquina para la versión de cinta comprimida.
  • loader.bas. Es el cargador BASIC, casi el mismo que el que viene en la Churrera.
  • dzx7.bin. Es el binario con el descompresor RCS+ZX7 que se ubica en $5d44.
  • dzx7_smartRCS. Es el código fuente que genera el binario anterior.

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 15:45
por antoniovillena
Un pequeño cambio en el make.bat para no ensamblar 3 veces el mismo archivo, aplicar la reducción de colores también en chars.png y sprites.png y cambiar los nombres de los archivos de imágenes: creo que queda más claro chars.png, tiles.png y sprites.png

$this->bbcode_second_pass_code('', '
@echo off
SETLOCAL
call c:\z88dk10\setenv.bat
rem Cambia "dogmole" por el nombre de tu güego y pantallas por el número de pantallas.
set nombre=Dogmole
set pantallas=24
if "%1"=="script" (
echo ### COMPILANDO SCRIPT ###
..\utils\msc %nombre%.spt msc.h %pantallas%
)
if "%1"=="color" (
echo -------------------------------------------------------------------------------
echo ### AJUSTANDO COLORES ###
..\utils\PosterizeZX ..\gfx\title.png ..\gfx\title.png
..\utils\PosterizeZX ..\gfx\ending.png ..\gfx\ending.png
..\utils\PosterizeZX ..\gfx\loading.png ..\gfx\loading.png
..\utils\PosterizeZX ..\gfx\chars.png ..\gfx\chars.png
..\utils\PosterizeZX ..\gfx\tiles.png ..\gfx\tiles.png
..\utils\PosterizeZX ..\gfx\sprites.png ..\gfx\sprites.png
)
if "%1"=="pant" (
echo -------------------------------------------------------------------------------
echo ### COMPRIMIENDO PANTALLAS ###
..\utils\Png2Rcs ..\gfx\title.png ..\gfx\title.rcs
..\utils\Png2Rcs ..\gfx\ending.png ..\gfx\ending.rcs
..\utils\Png2Rcs ..\gfx\loading.png ..\gfx\loading.rcs
if exist title.bin del title.bin
if exist ending.bin del ending.bin
if exist loading.bin del loading.bin
if exist loading.scr del loading.scr
..\utils\rcs -d ..\gfx\loading.rcs loading.scr
..\utils\zx7 ..\gfx\title.rcs title.bin
..\utils\zx7 ..\gfx\ending.rcs ending.bin
..\utils\zx7 ..\gfx\loading.rcs loading.bin
)
if "%1"=="mapa" (
echo -------------------------------------------------------------------------------
echo ### GENERANDO MAPA Y GRAFICOS ###
..\utils\TmxCompress ..\map\mapa.tmx mapa_comprimido.bin
..\utils\GfxCnv ..\gfx\chars.png ..\gfx\tiles.png ..\gfx\sprites.png tileset.h sprites.h
..\utils\TmxCnv ..\map\mapa.tmx mapa.h enems.h
)
echo -------------------------------------------------------------------------------
echo ### COMPILANDO GUEGO ###
zcc +zx -vn %nombre%.c -o %nombre%.bin -lndos -lsplib2 -zorg=24200
echo -------------------------------------------------------------------------------
echo ### CONSTRUYENDO CINTA ###
if "%1"=="prod" (
if exist %nombre%.zx7 del %nombre%.zx7
..\utils\zx7 %nombre%.bin %nombre%.zx7
for /f %%i in (%nombre%.zx7) do echo define COMP_SIZE %%~zi > define.asm
..\utils\SjAsmPlus asmloader.asm
call :generatape tap
call :generatape tzx
call :generatape wav
) else (
..\utils\Bas2Bin loader.bas
..\utils\GenTape %nombre%.tap ^
basic '%nombre%' 10 loader.bin ^
hdata 'SCREEN' 4000 loading.scr ^
hdata 'DZX7' 5d44 dzx7.bin ^
hdata 'GUEGO' 5e88 %nombre%.bin
)
echo -------------------------------------------------------------------------------
echo ### DONE ###
goto :eof

:generatape
..\utils\GenTape %nombre%.%1 ^
basic '%nombre%' 0 asmloader.bin ^
data %nombre%.zx7
goto :eof
')

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 18:21
por son_link
Pues termine la versión BASH
$this->bbcode_second_pass_code('', '
# Cambia "dogmole" por el nombre de tu güego y pantallas por el número de pantallas.
nombre=sami
pantallas=24

function script {
echo -e "\e[32Compilando script\e[0m"
wine ../scripts/msc.exe ../scripts/$name.spt msc.h $PANTALLAS
}

function color {
echo -e "\e[32Ajustando colores\e[0m"
../utils/posterizezx ../gfx/title.png ../gfx/title.png
../utils/posterizezx ../gfx/ending.png ../gfx/ending.png
../utils/posterizezx ../gfx/loading.png ../gfx/loading.png
../utils/posterizezx ../gfx/work.png ../gfx/work.png
}

function pantalla {
echo -e "\e[32mComprimiendo las pantallas\e[0m"
../utils/png2rcs ../gfx/title.png ../gfx/title.rcs
../utils/png2rcs ../gfx/ending.png ../gfx/ending.rcs
../utils/png2rcs ../gfx/loading.png ../gfx/loading.rcs
rm title.bin ending.bin loading.bin loading.scr
../utils/rcs -d ../gfx/loading.rcs loading.scr
../utils/zx7 ../gfx/title.rcs title.bin
../utils/zx7 ../gfx/ending.rcs ending.bin
../utils/zx7 ../gfx/loading.rcs loading.bin
}

function mapa {
echo -e "\e[32mGenerando mapa y graficos\e[0m"
../utils/tmxcompress ../map/samitroid.tmx mapa_comprimido.bin
../utils/gfxcnv ../gfx/chars.png ../gfx/work.png ../gfx/spriteset.png tileset.h sprites.h
../utils/tmxcnv ../map/samitroid.tmx mapa.h enems.h
}

function compilar {
zcc +zx -vn $nombre.c -o $nombre.bin -lndos -lsplib2 -zorg=24200
}

function juego {
../utils/bas2bin loader.bas
../utils/gentape $nombre.tap \
basic "'$nombre'" 10 loader.bin \
hdata "'SCREEN'" 4000 loading.scr \
hdata "'DZX7'" 5d44 dzx7.bin \
hdata "'GUEGO'" 5e88 $nombre.bin
}

function generate {
../utils/sjasmplus asmloader.asm
../utils/gentape $nombre.tap \
basic "'$nombre'" 0 asmloader.bin \
data $nombre.zx7
}

function prod {
echo -e "\e[32mComprimiendo el juego\e[0m"
rm $nombre.zx7
../utils/zx7 $nombre.bin $nombre.zx7
filesize=$(du -b $nombre.zx7 | cut -d ' ' -f1)
echo " define COMP_SIZE $filesize" > define.asm
}

function ayuda {
echo "Compilador de la Churrera"
echo '(c) 2013 Alfonso Saavedra "Son Link"'
echo 'Script original por Antonio Villena'
echo "Compila tu juego o prepara algunos de las partes"
echo " "
echo "Opciones:"
echo "-h, --help muestra esta ayuda"
echo "-c, --color comprueba los colores de las imágenes"
echo "-s, --script compila el scripting"
echo "-m, --mapa Prepara el mapeado del juego"
echo "-j, --juego, sin parametros compila el juego."
echo "-pr, --produced Compila el juego en una versión comprimida"
exit 0
}

if [ $# == 1 ]; then
case "$1" in
-s|--script)
script
;;
-c|--color)
color
;;
-p|--pantalla)
pantalla
;;

-m|--mapa)
mapa
;;
-pr|--produced)
compilar
prod
generate
;;
-j|--juego)
compilar
juego
;;
*)
ayuda
;;
esac
else
if [ $# == 0 ]; then
compilar
juego
else
ayuda
fi
fi
')

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 19:04
por antoniovillena
Guay que currada! En la versión Linux además de quedar el código mucho más claro se permiten varios parámetros simultáneos. Me encanta, qué pena que no use mucho Linux.

Re: Mi make.bat

Publicado: Jue, 14 Nov 2013, 19:08
por antoniovillena
Por cierto hay una cosa muy útil que es poner el nombre del fichero generado como última línea del script. Al menos en Windows lo que hace es abrirte el TAP con el programa que tengas asociado por defecto, en mi caso es Spectaculator. Y le tengo metida la ROM de Reset&Play así que no tengo ni que teclear LOAD"", lo único que hago es pulsar F7 y ya carga el juego.

Si queréis puedo hacer que en lugar de un TAP se genere un Snapshot equivalente a la hora de depurar, la carga sería un pelín más rápida.