Mi make.bat

Chit chat general. Habla con los MojonTwins y con los amigos de los MojonTwins. Reza a Vah-ka. Delinque. Aviso: está PROHIBIDO tirarse peos fuerte. Si les cortas el pescuezo, vale.

Moderador: na_th_an

antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Mi make.bat

Mensajepor antoniovillena » Jue, 14 Nov 2013, 13:53

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.

Código: Seleccionar todo

@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
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: Mi make.bat

Mensajepor son_link » Jue, 14 Nov 2013, 14:20

Dame unos minutos y lo paso a BASH, o incluso quizás estaría bien un makefile.
LOAD TAPE ERROR
Imagen
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Mi make.bat

Mensajepor antoniovillena » Jue, 14 Nov 2013, 15:27

son_link escribió:Dame unos minutos y lo paso a BASH, o incluso quizás estaría bien un makefile.


Gracias
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: Mi make.bat

Mensajepor son_link » Jue, 14 Nov 2013, 15:28

¿Podrías decirme que hace esta linea?

Código: Seleccionar todo

for /f %%i in (%nombre%.zx7) do echo  define COMP_SIZE %%~zi > define.asm
LOAD TAPE ERROR
Imagen
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Mi make.bat

Mensajepor antoniovillena » Jue, 14 Nov 2013, 15:33

Calcula el tamaño del archivo %nombre%.zx7 y genera un archivo llamado DEFINE.ASM con esta línea:

Código: Seleccionar todo


 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.
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Mi make.bat

Mensajepor antoniovillena » Jue, 14 Nov 2013, 15:42

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.
Adjuntos
archivos_make.zip
(1.97 KiB) Descargado 110 veces
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Mi make.bat

Mensajepor antoniovillena » Jue, 14 Nov 2013, 15:45

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

Código: Seleccionar todo

@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
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: Mi make.bat

Mensajepor son_link » Jue, 14 Nov 2013, 18:21

Pues termine la versión BASH

Código: Seleccionar todo

# 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
LOAD TAPE ERROR
Imagen
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Mi make.bat

Mensajepor antoniovillena » Jue, 14 Nov 2013, 19:04

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.
antoniovillena
Mensajes: 494
Registrado: Jue, 24 Oct 2013, 15:52

Re: Mi make.bat

Mensajepor antoniovillena » Jue, 14 Nov 2013, 19:08

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.

Volver a “General”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado