PongPong; 20160209

Más cosas que se me han ocurrido para añadir:

  • Tiles arenas-movedizas que te hacen hundir lentamente.
  • Tortilla. Todos los juegos deberían traer tortilla.

Otra cosa que me he dado cuenta: he obtenido un feature gratis: puedo hacer nuevos tilesets usando cualquiera de los 48 tiles arbitrariamente siempre que respete los behs – o bien, puedo añadir una abstracción y tener varios arrays de behs e ir cambiándolos empleando un puntero. De hecho, voy a hacer esa mini modificación para poder usarla del tirón en cuanto lo necesite.

Esto viene guay porque en la tercera tira de tiles tengo muchos vacíos que podría emplear para dar más variedad a las fases que quedan, y no repetir simplemente los tilesets 0 y 1 alternativamente cambiando paletas.

Voy al lío, son tres cambios mierder.

~~

De hecho, voy a crear de una santa vez una estructura que contenga los tiestos de cada nivel, y así cambiar de nivel es más fácil.

~~

Tema de los tiles que te hunden: nunca lo he hecho. Tal y como lo veo, hay que meterlo como caso especial dentro de la colisión vertical cuando vy > 0. En ese caso, detectar “& 2” (por ejemplo). En este caso, lo suyo sería establecer vy a un valor fijo, pequeño, de forma que invalide el incremento de G que se hace en cada frame. Esto hará descender al muñeco de forma efectiva poco a poco, y permitirá por ejemplo poner tiras de estos tiles que terminen en el vacío (lo que viene bien para que el muñeco se muera, vaya).

~

Hecho, pero no lo puedo probar. Los tiles conveyor son algo más complejos porque tengo que introducir un valor más en las comprobaciones de colisión, pero no es nada del otro mundo. Los tiles resbalosos implican detectar ppossee más un atributo de tile, y en ese caso utilizar unos valores alternativos PLAYER_AX_SLIP y PLAYER_RX_SLIP. Hagámoslo bien…

La detección la añado tras el ppossee:

	cy1 = cy2 = (pry + 16) >> 4;
	cm_two_points ();
	ppossee = ((at1 & 12) || (at2 & 12));
	pslip = (ppossee && ((at1 & 16) || (at2 & 16)));

Y luego modifico la ecuación del movimiento…

	if (pad & PAD_LEFT) {
		pfacing = PFACING_LEFT;
		if (pvx > -PLAYER_VX_MAX) pvx -= (pslip ? PLAYER_AX_SLIP : PLAYER_AX);
	} else if (pad & PAD_RIGHT) {
		pfacing = PFACING_RIGHT;
		if (pvx < PLAYER_VX_MAX) pvx += (pslip ? PLAYER_AX_SLIP : PLAYER_AX); 	} else { 		if (pvx > 0) {
			pvx -= (pslip ? PLAYER_RX_SLIP : PLAYER_RX); if (pvx < 0) pvx = 0;
		} else if (pvx < 0) { 			pvx += (pslip ? PLAYER_RX_SLIP : PLAYER_RX); if (pvx > 0) pvx = 0;
		}
	}

~

Los conveyors por lo pronto los dejo para luego. Demasiadas cosas hechas y sin probar (tengo que hacer gráficos, montar algo de fase, mierdas así). Los conveyors funcionan sobre la misma base que las plataformas móviles (bueno, digamos que para meter los conveyors hay que meter cierto enganche en la rutina del player que luego aprovechan las plataformas móviles). Viendo que las plataformas móviles no son más que generalizaciones de los enemigos de trayectoria lineal, puede que sea barato. Aunque ya me estoy flipando mucho.

Llegará el punto en el que sólo pueda evitar las pérdidas de frame mediante diseño de niveles, pero eso no es algo que me pase sólo a mí ;*)

Por cierto, tengo que hacer que no se pueda saltar con el culo sobre las cuchillas.

~

Sobre lo que decía antes de que, de gratis, podía componer tilesets custom de 16 tiles, tiene su explicación: para acelerar el scroller, en lugar de calcular en qué patrón empieza el metatile que tengo que pintar según el valor de 0 a 15 que he extraído del mapa, utilizo una tabla lookup con los valores ya calculados: en un principio el valor N de esta tabla era (16+N)*4, el primer patrón del metatile N del set de 48. Pero nada me impide usar números arbitrarios, sin seguir la secuencia. Así puedo mezclar tiles de diferentes sets y hacer uno nuevo.

En el set 1 repetía algunos tiles del set 0: el tile vacío, las plataformas, el tile de las olitas del mar… en total 5 tiles repetidos. Este tema me ha permitido reutilizar en el set 1 directamente los del set 0, con lo que tengo 5 tiles más para dar más vidilla a las fases 2 y 3.

Este motor es cada vez mejor. Las posibilidades crecen exponencialmente. Me encanta cuando me salen setas. Porque yo esto no lo había planeado. Sólo quería un lookup table para acelerar el scroll… ¡Y ahora me permite todo esto!

Ojal: A la hora de diseñar una fase con el tileset nuevo, tengo que importar en mappy el tileset nuevo y nada más. Va a ser un poco infierno (cambiar de tileset para editar cada piso del mapa) pero bueno, tampoco es la primera vez.

O NO – sólo tengo que hacerme un tileset con todas tiras, que me acabo de acordar que el conversor de mapa graba el valor del “tile & 15”, o sea, que da igual de la tira que sea generará el valor correcto 0..15. Bien.

~~

Fase del hielo, lista de tiles para hacer el tileset.

00,40,41,30,21,05,22,23,08,09,26,27,28,16,14,31

~~

He comprobado que el apaño para los tilesets customs que obtuve “de regalo” funciona genial. La estructura para cambiar de fase fácilmente, también.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s