Nightmare on Halloween

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

Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Nightmare on Halloween

Mensajepor radastan » Mar, 22 Oct 2013, 23:48

Bueno, el tileset está casi terminado, me quedan 13 tiles por completar de los 48, pero aquí tenéis un pequeño adelante de cómo está quedando y un buen ejemplo del motivo de usar el tileset ampliado.

Y es que 48 tiles ya es otra cosa, las pantallas lucen muchísimo más y me puedo permitir vilguerías como escenarios de fondo (las montañas, la Luna, etc).

Por cierto, el título también es definitivo, al igual que el marcador. Si, llevarás a un esqueleto en busca de su último testamento y voluntad, cuyas páginas se han diseminado por Transilvania.
Adjuntos
test2.png
La casita de la bruja Piruja.
test2.png (2.91 KiB) Visto 7658 veces
test.png
La cosa está que arde.
test.png (2.98 KiB) Visto 7664 veces
Avatar de Usuario
son_link
Mensajes: 467
Registrado: Mar, 01 Oct 2013, 11:49
Ubicación: Atlantis, Galaxia Pegaso
Contactar:

Re: Nightmare on Halloween

Mensajepor son_link » Mié, 23 Oct 2013, 00:09

Tiene buena pinta el juego :mrgreen:
LOAD TAPE ERROR
Image
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Nightmare on Halloween

Mensajepor na_th_an » Mié, 23 Oct 2013, 07:50

Sí que mola, sí. Me gusta mucho el ambientillo :)
Como diría Rorshach: "Urm..."
Avatar de Usuario
D_Skywalk
Mensajes: 352
Registrado: Mar, 01 Oct 2013, 13:36

Re: Nightmare on Halloween

Mensajepor D_Skywalk » Mié, 23 Oct 2013, 11:07

El mío si me da tiempo es de una niñita que se ve atrapada en halloween en una casa encantada!

Me gustaría probar eso de la paginación, hay algún juego que lo use y que me valga de ejemplo?
Mi idea es que cada planta, tenga variaciones en el tileset. Estoy probando con vista genital, pero sino volveré a la normal ;)

Otra pregunta es si sería muy complejo hacer que al pasar el juego cargue la pantalla final, en lugar de tener que meter el ending... y si no lo que haré es que el final se monte con un tileset...

Un Saludo chicos! :)
David Skywalker
Weblog: http://david.dantoine.org
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: Nightmare on Halloween

Mensajepor radastan » Mié, 23 Oct 2013, 11:14

Chato, emplea el tileset extendido, que son 48 tiles y eso da de sobra para un juego de plataformas como ves.

Ni paginación ni gaitas.

Otra cosa es que uses más de 24 pantallas, entonces lo mismo te quedas corto de memoria.
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Nightmare on Halloween

Mensajepor na_th_an » Mié, 23 Oct 2013, 11:37

$this->bbcode_second_pass_quote('D_Skywalk', 'E')l mío si me da tiempo es de una niñita que se ve atrapada en halloween en una casa encantada!

Me gustaría probar eso de la paginación, hay algún juego que lo use y que me valga de ejemplo?
Mi idea es que cada planta, tenga variaciones en el tileset. Estoy probando con vista genital, pero sino volveré a la normal ;)

Otra pregunta es si sería muy complejo hacer que al pasar el juego cargue la pantalla final, en lugar de tener que meter el ending... y si no lo que haré es que el final se monte con un tileset...

Un Saludo chicos! :)


Adaptar el motor tal cual para poder usar paginación y copiar nuevos datos sobre los que hay es sencillo si sabes cómo funciona la paginación (básicamente, sigues teniendo 48K, pero los últimos 16K los puedes "cambiar" por otra página; en principio está la 0, pero puedes poner cualquiera de las otras siete - el problema es que todo splib2 funciona justo en la página 0, por lo que hay que paginar, copiar, y volver a colocar la 0 antes de seguir).

El tema es tener en alguna página de RAM extra los datos extra que necesites y, cuando los vayas a usar, paginar la RAM extra, copiar los datos al buffer de RAM baja (por ejemplo, los 2304 bytes del tileset desde $C000 hasta la dirección de "tileset"), y luego volver a paginar RAM 0 para que el juego pueda seguir funcionando.

Esto es: la RAM extra funciona como un almacén. Se pueden meter mapas, tiles, sprites, o incluso pantallas comprimidas. Se puede almacenar todo comprimido si se modifica la función unpack para que pueda descomprimir desde otras páginas de RAM (siguiendo el mismo método: paginar RAM n, descomprimir (el destino tiene que estar en RAM baja), paginar RAM 0).

Ahora mismo estamos trabajando en un güego que usa la RAM extra para almacenar niveles completos comprimidos (o sea: tileset + spriteset + mapa + enemigos + hotspots). Para ello hemos hecho las adaptaciones necesarias para que esto sea fácil de hacer, y hemos escrito una aplicación conversora que se encarga de convertir todo el material (mapa.map, enems.ene, work.png, font.png, y sprites.png, junto con datos de cabecera) a un binario listo para comprimir y meter en una página de RAM. El tema funciona guay: en config.h defines MAP_W y MAP_H para que te den un tamaño de mapa digamos "máximo", y luego cada nivel puede tener las dimensiones que se quiera siempre que no exceda el número de pantallas MAP_W * MAP_H. El script es común para todas las fases, pero puedes detectar en qué fase estás con un IF LEVEL=n. Además sustituye beeper.h y music.h por el replayer de WYZ para tocar música y efectos por AY, que también va en su propia página de RAM, liberando aún más espacio.

El problema es que ahora mismo está "feo" y hasta que no lo ponga bonico no podré sacar una nueva versión de la Churrera con esto para que se pueda usar. En cuanto lo tenga probado, requeteprobado, maqueado, y lo suficientemente automatizado, lo sacaré.

Mientras tanto, todo el proceso se basa en dos funciones muy sencillas. La primera coloca la página que le pases en el registro "b". La segunda, es el unpack adaptado para descomprimir desde otras páginas de RAM... Todo muy sencillo. Con algo de maña...

Esto hay que colocarlo bien visible en algún lugar del código. Al principio mejor, para que caiga en RAM baja (por debajo de $C000):

$this->bbcode_second_pass_code('', 'void SetRAMBank(void) {
#asm
.SetRAMBank
ld a, ($5b5c)
and f8h
or b
ld bc, $7ffd
ld ($5b5c), a
out (C), a
#endasm
}')

Y luego tenemos que añadir esta nueva función a aplib.h, que permite especificar la página de donde hay que copiar:

$this->bbcode_second_pass_code('', '
extern unsigned char ram_page [];

#asm
._ram_page
defb 0
#endasm
void unpack_RAMn (unsigned char n, unsigned int address, unsigned int destination) {
ram_address [0] = address;
ram_page [0] = n;
ram_destination [0] = destination;

#asm
di
ld a, (_ram_page)
ld b, a
call SetRAMBank

ld hl, (_ram_address)
ld de, (_ram_destination)
call depack

ld b, 0
call SetRAMBank
ei
#endasm
}
')

Así, si por ejemplo tenemos un tileset de 2304 bytes comprimido en RAM 3, a partir del principio de la página (o sea, en $C000), podremos sustituir en un momento dado el tileset que se está usando por el nuevo con un sencillo:

$this->bbcode_second_pass_code('', 'unpack_RAMn (3, 0xc000, (unsigned int) (tileset));')

El tema coñazo es hacerse la cinta que cargue los binarios necesarios en las páginas de RAM extra correctas... Y es aquí donde estoy trabajando para automatizar bien el proceso.
Como diría Rorshach: "Urm..."