![Muy Feliz :D](./images/smilies/icon_e_biggrin.gif)
Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Moderador: na_th_an
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Pues a ver qué nos cuenta el murciano ![Muy Feliz :D](./images/smilies/icon_e_biggrin.gif)
![Muy Feliz :D](./images/smilies/icon_e_biggrin.gif)
Como diría Rorshach: "Urm..."
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Menos mal que estoy con los últimos tiles y con el mapa... porque me viene de perlas esa churrera especial.
![YMCA :ymca:](./images/smilies/451498thump404386village.gif)
![YMCA :ymca:](./images/smilies/451498thump404386village.gif)
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Y además te vendrá bien leer la explicación que voy a poner de cómo he montado el juego a partir de la versión pelada
Por cierto, he tenido que hacer poquísimos cambios a la 3.99.3.
Voy a hacer una cosa: voy a subir el juego funcionando con las explicaciones, y luego ya subo la 3.99.3b y eso.
![Sonrisa :)](./images/smilies/icon_e_smile.gif)
Voy a hacer una cosa: voy a subir el juego funcionando con las explicaciones, y luego ya subo la 3.99.3b y eso.
Como diría Rorshach: "Urm..."
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Al amigo murciano no tengo el placer de conocerlo. Pero las cosas que he leído de el por la red, no solo hablan de lo bien que se curra las músicas, si no de su calidad humana.
Si hace falta apelaré a esta última para que me eshe un cablesito con las musiquillas
Mientas se termina de cocinar la nueva shurrera del compañero nathan, voy a ver si termino de ir recortando flecos, que tengo muchos frentes abiertos.
Uno de ellos es terminar el set gráfico, y para ello tengo algunas cuestiones.
1-Los tiles animados por lo que leo, se han de componer de solo dos frames de animación. ¿se puede aumentar a 3 para hacerlo más fluido? si no, con dos voy que chuto. Primero los dibujaré al final y en números pares y luego ya os preguntaré como implementarlos en el juego, que hice una prueba y no lo conseguí![Razz :P](./images/smilies/icon_razz.gif)
2-¿a esos tiles animados, en el config.h se le pueden dar propiedades "matantes" como a los pinchos?
Que pasada poder contar con el respaldo de gente experimentada como vosotros. Si no fijo que esto no lo conseguía ni "pa trás"
Si hace falta apelaré a esta última para que me eshe un cablesito con las musiquillas
![Riendo :lol:](./images/smilies/icon_lol.gif)
Mientas se termina de cocinar la nueva shurrera del compañero nathan, voy a ver si termino de ir recortando flecos, que tengo muchos frentes abiertos.
Uno de ellos es terminar el set gráfico, y para ello tengo algunas cuestiones.
1-Los tiles animados por lo que leo, se han de componer de solo dos frames de animación. ¿se puede aumentar a 3 para hacerlo más fluido? si no, con dos voy que chuto. Primero los dibujaré al final y en números pares y luego ya os preguntaré como implementarlos en el juego, que hice una prueba y no lo conseguí
![Razz :P](./images/smilies/icon_razz.gif)
2-¿a esos tiles animados, en el config.h se le pueden dar propiedades "matantes" como a los pinchos?
Que pasada poder contar con el respaldo de gente experimentada como vosotros. Si no fijo que esto no lo conseguía ni "pa trás"
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Aquí la carpeta completa de desarrollo. La cinta está en /dev
He usado tres músicas de Maritrini para menú/ingame/final para tener algo sobre lo que trabajar.
He usado tres músicas de Maritrini para menú/ingame/final para tener algo sobre lo que trabajar.
- Adjuntos
-
dogmole-128k--20140116a.zip
- (1.35 MiB) Descargado 483 veces
Como diría Rorshach: "Urm..."
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Y ahora una explicación sobre lo que he hecho para montarlo. Se parece bastante a lo que pone en whatsnew.txt.
Binarios
Muevo los archivos comprimidos con las pantallas fijas a /bin. En esta carpeta es donde se preparan los binarios que luego se ponen en las páginas de RAM extra de los modelos de 128K. Los juegos de 128K usan un sistema que hemos llamado el "bibliotecario", que se encarga de colocar todos tus binarios en ram extra y asignarles un numerico. Luego, usando ese numerico, los puedes descomprimir donde tú quieras. El primer paso es coger todos los binarios y ponerlos en /bin.
Es necesario que, aunque no lo usemos, haya un marco.bin, así que lo creo en /bin como un archivo vacío. Esto es para que los tres primeros "recursos" del bibliotecario siempre sean las tres pantallas y tengan siempre los números 0, 1 y 2. Esto es una exigencia de la churrera. El tema está preparado para que podamos meter más cosas, pero las tres primeras cosas de la RAM extra siempre deben ser las tres pantallas comprimidas.
Por ejemplo, en Windows, botón derecho->nuevo archivo de texto, y luego le ponemos de nombre marco.bin. Así creamos un marco.bin vacío (de 0 bytes, vaya) en /bin.
Ahora edito /bin/list.txt y compruebo que aparecen, en este orden, los tres archivos binarios de nuestro almacén de cosas:
$this->bbcode_second_pass_code('', 'title.bin
marco.bin
ending.bin')
El archivo list.txt es donde el bibliotecario mira qué binarios tiene que empaquetar y catalogar. En nuestro juego sólo tenemos ahí las tres pantallas comprimidas. En Goku Mal, por ejemplo, ahí iban los cinco niveles y todas las pantallas fijas de las intros.
Cargador BASIC y make.bat
Nuestro juego ahora tendrá dos bloques más de datos: uno que irá en RAM1 y que tendrá el player y la música, y otro que irá en RAM3 con los archivos comprimidos. Además, habrá que incluir en el cargador el código que carga los nuevos bloques y los mueve a sus ubicaciones definitivas en la RAM extendida. Por tanto, tengo que modificar loader.bas y make.bat. En la carpeta /spare de la Churrera 3.99.3 están los que usé en Goku Mal, y me he basado en ellos. Lo primero que hace loader.bas después de cargar la pantalla es cargar un bloque "reubica" que es el que moverá los datos extra a la RAM extra y que habrá que generar a partir de reubica.asm en nuestro make.bat
loader.bas
$this->bbcode_second_pass_code('', '10 BORDER NOT PI:PAPER NOT PI:INK NOT PI:CLEAR VAL"24199":LET a=VAL"25000":LET b=a+VAL"2":LOAD""SCREEN$:POKE VAL"23739",CODE"o":LOAD""CODE:LOAD""CODE:POKE a,VAL"1":RANDOMIZE USR b:LOAD""CODE:POKE a,VAL"3":RANDOMIZE USR b:LOAD""CODE:RANDOMIZE USR VAL"24200"')
make.bat
$this->bbcode_second_pass_code('', '@echo off
echo ### COMPILANDO SCRIPT ###
cd ..\script
msc dogmole.spt msc.h 24
copy *.h ..\dev
cd ..\dev
echo -------------------------------------------------------------------------------
echo ### GENERANDO BINARIOS ###
echo * Building reubica
..\utils\pasmo reubica.asm reubica.bin
echo * Building RAM3 AND RAM4 AND RAM6
cd ..\bin
librarian.exe
copy RAM3.bin ..\dev\ram3.bin
copy librarian.h ..\dev
echo -------------------------------------------------------------------------------
echo ### COMPILANDO WYZ PLAYER ###
cd ..\mus
..\utils\pasmo WYZproPlay47aZX.ASM ram1.bin
copy ram1.bin ..\dev
cd ..\dev
echo -------------------------------------------------------------------------------
echo ### COMPILANDO GUEGO ###
zcc +zx -vn dogmole.c -o dogmole.bin -lsplib2 -zorg=24200
echo -------------------------------------------------------------------------------
echo ### CONSTRUYENDO CINTA ###
..\utils\bas2tap -a10 -sLOADER loader.bas loader.tap
..\utils\bin2tap -o reubica.tap -a 25000 reubica.bin
..\utils\bin2tap -o ram1.tap -a 32768 ram1.bin
..\utils\bin2tap -o ram3.tap -a 32768 ram3.bin
..\utils\bin2tap -o screen.tap -a 16384 loading.bin
..\utils\bin2tap -o main.tap -a 24200 dogmole.bin
copy /b loader.tap + screen.tap + reubica.tap + ram1.tap + ram3.tap + main.tap dogmole.tap
echo -------------------------------------------------------------------------------
echo ### LIMPIANDO ###
del loader.tap
del screen.tap
del main.tap
del reubica.tap
del ram1.bin
del ram3.bin
del ram1.tap
del ram3.tap
del dogmole.bin
del zcc_opt.def
echo -------------------------------------------------------------------------------
echo ### DONE ###')
Esto es lo que hace nuestro make.bat
$this->bbcode_list('1')Compila el script y copia sus archivos en /dev Ensambla reubica.asm en reubica.bin Ejecuta "librarian" en /bin, que leerá list.txt y creará nuestro binario para poner en RAM3, además de un librarian.h con la lista de recursos. Luego se copia librarian.h y ram3.bin en /dev Ensambla el player de WYZ con las canciones y genera ram1.bin. Luego copia ram1.bin en /dev Compila el güego. Crea una cinta con el cargador, la pantalla, reubica.bin, ram1 y ram3, y el juego. Hace limpieza de cacafuti.
El player y las músicas
Usamos el player que hizo WYZ, que toca músicas que se pueden componer con el tracker que hizo Augusto Ruiz. Este tracker exporta instrumentos como archivos .asm y canciones como archivos .mus. Necesitamos un archivo de instrumentos global para todas las canciones, por lo que todas las canciones habrá que crearlas usando los mismos instrumentos.
Así, para probar, he cogido tres canciones del Maritrini 1 (también de Augusto Ruiz) y sus instrumentos y los he puesto en /mus. Estos son los archivos:
Edito WYZproPlay47aZX.ASM, que es el player, y me voy al final, para activarle tres canciones e incluir mis archivos. El final del archivo queda así:
$this->bbcode_second_pass_code('', '...
;; INCLUIR LOS DATOS DE LA MUSICA (PATTERNS/EFFECTS)
INCLUDE "instrumentos.asm"
SONG_0: INCBIN "menu.mus"
SONG_1: INCBIN "level1.mus"
SONG_2: INCBIN "gameending.mus"
;; INCLUIR LOS EFECTOS DE SONIDO:
INCLUDE "efectos.asm"
TABLA_SONG: DW SONG_0, SONG_1, SONG_2
TABLA_EFECTOS: DW EFECTO0, EFECTO1, EFECTO2, EFECTO3, EFECTO4, EFECTO5, EFECTO6, EFECTO7, EFECTO8
;; NADA A PARTIR DE AQUI!!!
BUFFERS_CANALES:
DB 0
')
Cambios en el motor
Ya casi lo tenemos. Ahora hay que hacer unas mínimas adaptaciones en el código del motor.
En primer lugar, para que funcione el güego con RAM extra de los modelos de 128K hay que mover la pila a un sitio seguro, porque por defecto se ubica justo en el sitio donde se colocan las páginas de RAM extra y se arma el pifostio padre. Lo que hacemos es moverla justo debajo del binario del juego. Editamos dogmole.c y, arriba del todo, nos aseguramos de que quede así:
$this->bbcode_second_pass_code('', '#pragma output STACKPTR=24099')
Ahora hay que poner las llamadas para que suene la música en el momento apropiado. Nosotros tenemos tres: título, ingame, y final. Abrimos mainloop.h y colocamos las llamadas pertinentes:
linea 163: wyz_play_music (0); música de título
linea 272 y 696: wyz_play_music (1); que es nuestra canción.
linea 854: wyz_play_music (2); canción del final.
Tal y como estaba, el código del Ramiro usaba el beeper para hacer ruido mientras salía el texto, y eso ya no nos vale porque no estamos incluyendo el código del beeper para ahorrar memoria (ya que la música y el sonido es ahora por el chip AY y eso está en RAM1). En extern.h, por lo tanto, cambiamos la llamada que hay a peta_el_beeper por wyz_play_sound.
Y, por último, lo más importante: en config.h, activo MODE_128K
No he probado lo del extern con los textos, ahora lo haré, pero debería funcionar.
Binarios
Muevo los archivos comprimidos con las pantallas fijas a /bin. En esta carpeta es donde se preparan los binarios que luego se ponen en las páginas de RAM extra de los modelos de 128K. Los juegos de 128K usan un sistema que hemos llamado el "bibliotecario", que se encarga de colocar todos tus binarios en ram extra y asignarles un numerico. Luego, usando ese numerico, los puedes descomprimir donde tú quieras. El primer paso es coger todos los binarios y ponerlos en /bin.
- ending.bin
- loading.bin
Es necesario que, aunque no lo usemos, haya un marco.bin, así que lo creo en /bin como un archivo vacío. Esto es para que los tres primeros "recursos" del bibliotecario siempre sean las tres pantallas y tengan siempre los números 0, 1 y 2. Esto es una exigencia de la churrera. El tema está preparado para que podamos meter más cosas, pero las tres primeras cosas de la RAM extra siempre deben ser las tres pantallas comprimidas.
Por ejemplo, en Windows, botón derecho->nuevo archivo de texto, y luego le ponemos de nombre marco.bin. Así creamos un marco.bin vacío (de 0 bytes, vaya) en /bin.
Ahora edito /bin/list.txt y compruebo que aparecen, en este orden, los tres archivos binarios de nuestro almacén de cosas:
$this->bbcode_second_pass_code('', 'title.bin
marco.bin
ending.bin')
El archivo list.txt es donde el bibliotecario mira qué binarios tiene que empaquetar y catalogar. En nuestro juego sólo tenemos ahí las tres pantallas comprimidas. En Goku Mal, por ejemplo, ahí iban los cinco niveles y todas las pantallas fijas de las intros.
Cargador BASIC y make.bat
Nuestro juego ahora tendrá dos bloques más de datos: uno que irá en RAM1 y que tendrá el player y la música, y otro que irá en RAM3 con los archivos comprimidos. Además, habrá que incluir en el cargador el código que carga los nuevos bloques y los mueve a sus ubicaciones definitivas en la RAM extendida. Por tanto, tengo que modificar loader.bas y make.bat. En la carpeta /spare de la Churrera 3.99.3 están los que usé en Goku Mal, y me he basado en ellos. Lo primero que hace loader.bas después de cargar la pantalla es cargar un bloque "reubica" que es el que moverá los datos extra a la RAM extra y que habrá que generar a partir de reubica.asm en nuestro make.bat
loader.bas
$this->bbcode_second_pass_code('', '10 BORDER NOT PI:PAPER NOT PI:INK NOT PI:CLEAR VAL"24199":LET a=VAL"25000":LET b=a+VAL"2":LOAD""SCREEN$:POKE VAL"23739",CODE"o":LOAD""CODE:LOAD""CODE:POKE a,VAL"1":RANDOMIZE USR b:LOAD""CODE:POKE a,VAL"3":RANDOMIZE USR b:LOAD""CODE:RANDOMIZE USR VAL"24200"')
make.bat
$this->bbcode_second_pass_code('', '@echo off
echo ### COMPILANDO SCRIPT ###
cd ..\script
msc dogmole.spt msc.h 24
copy *.h ..\dev
cd ..\dev
echo -------------------------------------------------------------------------------
echo ### GENERANDO BINARIOS ###
echo * Building reubica
..\utils\pasmo reubica.asm reubica.bin
echo * Building RAM3 AND RAM4 AND RAM6
cd ..\bin
librarian.exe
copy RAM3.bin ..\dev\ram3.bin
copy librarian.h ..\dev
echo -------------------------------------------------------------------------------
echo ### COMPILANDO WYZ PLAYER ###
cd ..\mus
..\utils\pasmo WYZproPlay47aZX.ASM ram1.bin
copy ram1.bin ..\dev
cd ..\dev
echo -------------------------------------------------------------------------------
echo ### COMPILANDO GUEGO ###
zcc +zx -vn dogmole.c -o dogmole.bin -lsplib2 -zorg=24200
echo -------------------------------------------------------------------------------
echo ### CONSTRUYENDO CINTA ###
..\utils\bas2tap -a10 -sLOADER loader.bas loader.tap
..\utils\bin2tap -o reubica.tap -a 25000 reubica.bin
..\utils\bin2tap -o ram1.tap -a 32768 ram1.bin
..\utils\bin2tap -o ram3.tap -a 32768 ram3.bin
..\utils\bin2tap -o screen.tap -a 16384 loading.bin
..\utils\bin2tap -o main.tap -a 24200 dogmole.bin
copy /b loader.tap + screen.tap + reubica.tap + ram1.tap + ram3.tap + main.tap dogmole.tap
echo -------------------------------------------------------------------------------
echo ### LIMPIANDO ###
del loader.tap
del screen.tap
del main.tap
del reubica.tap
del ram1.bin
del ram3.bin
del ram1.tap
del ram3.tap
del dogmole.bin
del zcc_opt.def
echo -------------------------------------------------------------------------------
echo ### DONE ###')
Esto es lo que hace nuestro make.bat
$this->bbcode_list('1')
El player y las músicas
Usamos el player que hizo WYZ, que toca músicas que se pueden componer con el tracker que hizo Augusto Ruiz. Este tracker exporta instrumentos como archivos .asm y canciones como archivos .mus. Necesitamos un archivo de instrumentos global para todas las canciones, por lo que todas las canciones habrá que crearlas usando los mismos instrumentos.
Así, para probar, he cogido tres canciones del Maritrini 1 (también de Augusto Ruiz) y sus instrumentos y los he puesto en /mus. Estos son los archivos:
- instrumentos.asm
- menu.mus
- level1.mus
- gameending.mus
Edito WYZproPlay47aZX.ASM, que es el player, y me voy al final, para activarle tres canciones e incluir mis archivos. El final del archivo queda así:
$this->bbcode_second_pass_code('', '...
;; INCLUIR LOS DATOS DE LA MUSICA (PATTERNS/EFFECTS)
INCLUDE "instrumentos.asm"
SONG_0: INCBIN "menu.mus"
SONG_1: INCBIN "level1.mus"
SONG_2: INCBIN "gameending.mus"
;; INCLUIR LOS EFECTOS DE SONIDO:
INCLUDE "efectos.asm"
TABLA_SONG: DW SONG_0, SONG_1, SONG_2
TABLA_EFECTOS: DW EFECTO0, EFECTO1, EFECTO2, EFECTO3, EFECTO4, EFECTO5, EFECTO6, EFECTO7, EFECTO8
;; NADA A PARTIR DE AQUI!!!
BUFFERS_CANALES:
DB 0
')
Cambios en el motor
Ya casi lo tenemos. Ahora hay que hacer unas mínimas adaptaciones en el código del motor.
En primer lugar, para que funcione el güego con RAM extra de los modelos de 128K hay que mover la pila a un sitio seguro, porque por defecto se ubica justo en el sitio donde se colocan las páginas de RAM extra y se arma el pifostio padre. Lo que hacemos es moverla justo debajo del binario del juego. Editamos dogmole.c y, arriba del todo, nos aseguramos de que quede así:
$this->bbcode_second_pass_code('', '#pragma output STACKPTR=24099')
Ahora hay que poner las llamadas para que suene la música en el momento apropiado. Nosotros tenemos tres: título, ingame, y final. Abrimos mainloop.h y colocamos las llamadas pertinentes:
linea 163: wyz_play_music (0); música de título
linea 272 y 696: wyz_play_music (1); que es nuestra canción.
linea 854: wyz_play_music (2); canción del final.
Tal y como estaba, el código del Ramiro usaba el beeper para hacer ruido mientras salía el texto, y eso ya no nos vale porque no estamos incluyendo el código del beeper para ahorrar memoria (ya que la música y el sonido es ahora por el chip AY y eso está en RAM1). En extern.h, por lo tanto, cambiamos la llamada que hay a peta_el_beeper por wyz_play_sound.
Y, por último, lo más importante: en config.h, activo MODE_128K
No he probado lo del extern con los textos, ahora lo haré, pero debería funcionar.
Como diría Rorshach: "Urm..."
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Otras cosas:
- Ahora mismo hay alrededor de 6Kb libres para script y textos.
- Los tiles animados fue algo que hice para Radastán y por tanto se ajustaba a su proyecto. Tú estás usando un tileset de 16 tiles, y los tiles animados necesiten uno de 48. Además, están incluidos en el tileset, y no sé si tendrías sitio.
Como diría Rorshach: "Urm..."
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Y para terminar: ahora tengo que salir, pero en cuanto pueda subo a la web la 3.99.3b con estas modificaciones para que quien quiera pueda hacerse una versión 128K de su juego con musiquita de forma fácil.
Como diría Rorshach: "Urm..."
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Ole! ese Nathan!
Pues nada, pasaremos de animaciones en los tiles. Pensaba que se podría hacer ya que usaba 48 tiles, aunque fuera insertándolos mediante script.
Una cosa que me he dado cuenta, y que en la versión de 48k el juego hacía de una carencia una virtud, y es que cuando Dogmole saltaba sobre un enemigo, se veía durante un segundo el tile de la "explosión" (que yo he cambiado) y luego caía el prota al suelo.
Así daba más sensación de que desaparecía como en los enemigos de juegos como Supermario Bros.
Ahora lo hace tan rápido que ni se ve el tile de la explosión, y el prota cae tan seguido que más que parecer que salta sobre el enemigo, lo esté recogiendo como si fuese un power-up XD.
No se si me he explicado bien.![Razz :P](./images/smilies/icon_razz.gif)
Se puede "ralentizar" ese instante de alguna forma?
![Image](http://i.imgur.com/TKmnhFZ.png)
![Image](http://i.imgur.com/IUBqehI.png)
Pues nada, pasaremos de animaciones en los tiles. Pensaba que se podría hacer ya que usaba 48 tiles, aunque fuera insertándolos mediante script.
Una cosa que me he dado cuenta, y que en la versión de 48k el juego hacía de una carencia una virtud, y es que cuando Dogmole saltaba sobre un enemigo, se veía durante un segundo el tile de la "explosión" (que yo he cambiado) y luego caía el prota al suelo.
Así daba más sensación de que desaparecía como en los enemigos de juegos como Supermario Bros.
Ahora lo hace tan rápido que ni se ve el tile de la explosión, y el prota cae tan seguido que más que parecer que salta sobre el enemigo, lo esté recogiendo como si fuese un power-up XD.
No se si me he explicado bien.
![Razz :P](./images/smilies/icon_razz.gif)
Se puede "ralentizar" ese instante de alguna forma?
![Image](http://i.imgur.com/TKmnhFZ.png)
![Image](http://i.imgur.com/IUBqehI.png)
Re: Dogmole Tuppowski - Las Nuevas Aventuras (o casi...)
Sí, ya lo he visto. Es que es el primer juego de 128K con pisotones
Veré qué se me ocurre.
Mientras tanto, he actualizado la página de la churrera con la nueva versión http://www.mojontwins.com/juegos_mojonos/la-churrera/
Lo de los tiles animados, es que tal y como estaba diseñado la detección de cuáles tiene que animar se hace mirando el mapa, pero le daré una vuelta para encontrar una solución más flexible.
![Riendo :lol:](./images/smilies/icon_lol.gif)
Mientras tanto, he actualizado la página de la churrera con la nueva versión http://www.mojontwins.com/juegos_mojonos/la-churrera/
Lo de los tiles animados, es que tal y como estaba diseñado la detección de cuáles tiene que animar se hace mirando el mapa, pero le daré una vuelta para encontrar una solución más flexible.
Como diría Rorshach: "Urm..."
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados