Página 1 de 3

Proyecto CarWars!

Publicado: Sab, 09 Ene 2016, 11:58
por salvaKantero
Hola Compañeros. He abierto este hilo para exponer algunas dudas que me han surgido haciendo este juego. Comenzó como un pequeño mapa para experimentar todo lo que no hice en "Planeta Rojo", pero al final como era de esperar es probable que se convierta en juego.

Se trata de un proyecto MK2 0.89 en vista genital para 128k con tres niveles tipo COMPRESSED_LEVELS (como en Goku-mal). El prota es un bólido tipo kart que debe superar los tres niveles consiguiendo monedas para comprar armas (un nuevo HITTER en genital), tarjetas de peaje, o dinero para sobornar y superar controles policiales, etc.

La duda viene cuando uso el comando TILE_GET para conseguir las monedas.

$this->bbcode_second_pass_code('', '#define TILE_GET 18 // If defined, player can "get" tile #
#define TILE_GET_FLAG 6 // And this increments flag #
#define TILE_GET_SCRIPT // Run PLAYER_GETS_COIN when player gets tile TILE_GET')

Las monedas vienen impresas ya desde MAPPY, no desde script. El prota se traga las monedas y aumenta el flag, pero cuando regreso a la misma pantalla las monedas reaparecen de nuevo, cosa que no me interesa para este juego.

He localizado el código en playermove.h pero no veo claro si actualiza el mapa o se limita a cambiar el tile de la moneda por el tile cero. Puede ser que no esté implementado en MK2 0.89 ??

$this->bbcode_second_pass_code('', '#ifdef TILE_GET
// Tile get
gpxx = (gpx + 8) >> 4;
gpyy = (gpy + 8) >> 4;
if (qtile (gpxx, gpyy) == TILE_GET) {
gpaux = gpxx + (gpyy << 4) - gpyy;
map_buff [gpaux] = 0;
map_attr [gpaux] = 0;
draw_coloured_tile_gamearea (gpxx, gpyy, 0);
flags [TILE_GET_FLAG] ++;
#ifdef MODE_128K
_AY_PL_SND (5);
#else
peta_el_beeper (4);
#endif

#ifdef TILE_GET_SCRIPT
run_script (2 * MAP_W * MAP_H + 4);
#endif
')
Recuerdo perfectamente que en NINJAJAR o SIR ABABOL 2 las monedas consumidas no volvían a aparecer. Entonces?? El código de estos juegos es diferente? O sí que está implementado y me falta por hacer algo?

Saludosssss

Re: Proyecto CarWars!

Publicado: Lun, 11 Ene 2016, 09:40
por na_th_an
¡Bienvenido!

Sir Ababol no lo podemos tomar como referente porque usa su propio motor. En Ninjajar tampoco tenemos la misma situación pues las monedas se imprimían al vuelo sobre la pantalla por lo que no existía persistencia.

Sin embargo podemos aplicar la solución de Sir Ababol 2 en tu caso: modificar el mapa. Esto solo sería viable si estás usando mapas comprimidos (o sea, si tu juego es multi nivel). Si no es multi nivel, aún podemos guardar una copia comprimida del mapa para restaurarlo antes de cada partida mediante el librarian.

Ahora leo bien y veo que tienes múltiples niveles ¡bien! Entonces no hay problema.

Junto con los cambios a map_attr y a map_buff habría que tocar la estructura que tiene la copia descomprimida del mapa sobre la que se está jugando. La forma de hacerlo depende del formato de tu mapa, ¿estás usando unpacked o packed?

Si miras en la rutina que maneja los bloques destructibles del mapa (breakable-s.h), verás esto:

$this->bbcode_second_pass_code('', '#ifdef UNPACKED_MAP
map [n_pant * 150 + gpaux] = 0;
#else
map_pointer = map + n_pant * 75 + (gpaux >> 1);
*map_pointer = (gpaux & 1) ? ((*map_pointer) & 0xf0) : ((*map_pointer) & 0x0f);
#endif')

Ese código coloca un tile 0, si necesitas otro habría que modificarlo levemente. Creo que con que coloques eso en el trozo de código que has pegado lo tendrías.

Ahora mismo tengo la versión actual 0.90 de MK2 bastante patas arriba (además, el juego no lo toco desde hace meses) pero creo que esta es una opción que debería incluír. ¡Gracias por la idea!

Re: Proyecto CarWars!

Publicado: Lun, 11 Ene 2016, 23:26
por salvaKantero
Fenomenal nathan. Funciona perfectamente (+67 bytes). Así me quedaría el código para la recogida persistente de monedas en config.h y playermove.h...

$this->bbcode_second_pass_code('', '
#define TILE_GET 9 // If defined, player can "get" tile #
#define TILE_GET_FLAG 6 // And this increments flag #
#define TILE_GET_SCRIPT // Run PLAYER_GETS_COIN when player gets tile TILE_GET
#define PERSISTENT_TILE_GET // Only works with compressed levels/128K games.')

$this->bbcode_second_pass_code('', '#ifdef TILE_GET
// Tile get
gpxx = (gpx + 8) >> 4;
gpyy = (gpy + 8) >> 4;
if (qtile (gpxx, gpyy) == TILE_GET) {
gpaux = gpxx + (gpyy << 4) - gpyy;
map_buff [gpaux] = 0;
map_attr [gpaux] = 0;
draw_coloured_tile_gamearea (gpxx, gpyy, 0);
flags [TILE_GET_FLAG] ++;
#ifdef PERSISTENT_TILE_GET
map_pointer = map + n_pant * 75 + (gpaux >> 1);
*map_pointer = (gpaux & 1) ? ((*map_pointer) & 0xf0) : ((*map_pointer) & 0x0f);
#endif
#ifdef MODE_128K
_AY_PL_SND (5);
#else
peta_el_beeper (4);
#endif

#ifdef TILE_GET_SCRIPT
run_script (2 * MAP_W * MAP_H + 4);
#endif
}
#endif')

Gracias por la ayuda!

Re: Proyecto CarWars!

Publicado: Mar, 12 Ene 2016, 10:42
por na_th_an
¡Genial! Me gusta tu estilo :D

Re: Proyecto CarWars!

Publicado: Mar, 12 Ene 2016, 13:45
por angel
He visto alguna cosilla por twitter y tiene muy buena pinta tu proyecto! me recuerda al Motorheart, un churrera de coches que empezamos hace por lo menos 3 años y que al final no hemos terminado :-)

Re: Proyecto CarWars!

Publicado: Mar, 12 Ene 2016, 15:32
por salvaKantero
Ala, pues sí que se parece. No tenía noticias de este juego.
Esperemos que tarde o temprano terminemos los dos. ;)

Re: Proyecto CarWars!

Publicado: Mié, 13 Ene 2016, 13:10
por na_th_an
El Motorheart lleva en "estado mockup" desde que íbamos por la Churrera 2.1, si mal no recuerdo. Hace un año y pico se nos ocurrió meter en MK2 un nuevo motor para poder girar y avanzar usando 16 ángulos (aunque sólo hubiese 8 direcciones para el sprites) y usarlo para relanzar la idea de Motorheart (si mal no recuerdo se nos había ocurrido una hidea para una historia chulísima) pero no sé qué paso. Seguramente nos entraría otra cosa :D

Re: Proyecto CarWars!

Publicado: Jue, 14 Ene 2016, 09:45
por angel
No no, de mockup nada :lol:

Hay demo jugable, con gráficos cambiados :D

El tema es que lleva como 3 años parado :lol:

Re: Proyecto CarWars!

Publicado: Jue, 14 Ene 2016, 11:53
por na_th_an
No lo recordaba :lol:

Sí sé que cuando dijimos el años pasado de rehacerlo con el motor nuevo no llegué a hacer nada, sólo cábalas.

Re: Proyecto CarWars!

Publicado: Dom, 24 Ene 2016, 21:22
por salvaKantero
Tengo otro problemilla. :roll:
Los enemigos perseguidores o de tipo 3 no me hacen caso y en vez de ir a velocidad 1,2 ó 4 van siempre a toda leche. Muy muy rápido. Es curioso porque si pongo tres perseguidores en una misma pantalla, el tercero sí que se mueve a velocidad normal.
He revisado por encima el código de move_pursuers.h pero no lo entiendo muy bien. Alguna idea de por donde puedo ir mirando ???