Isshokuta; 20160527

Tengo que pensar en cómo voy a codificar la tira de enemigos, dónde la voy a almacenar, cómo la voy a gestionar, y cómo la voy a programar. Estaría bien que a cada entrada de un nuevo tile del mapa pudiese lanzarse hasta dos enemigos. El problema es que hay bastantes cosas que tengo que codificar, a bote pronto:

  • Si sale por la izquierda o por la derecha [con espacio para otras posibilidades, al menos que salga cayendo desde arriba o desde un hueco en el suelo, ya van 4].
  • [se supone que el personaje siempre saldrá mirando hacia el jugador], pero no estaría de más hacer comprobaciones en los scripts de comportamientos dependiendo del tipo que se haya creado.
  • Velocidad con la que anda. Al menos que pueda ir de 1 en 1 píxels, de 2 en 2, o de 1.5 en 1.5.
  • Gráfico de la parte superior
  • Gráfico de la parte inferior
  • Si sale en el piso de arriba o en el de abajo.
  • Qué IA gestiona…
COSA 			BITS
- aparece por 		2
- velocidad 		2
- piso 			1
- gráfico superior 	4
- gráfico inferior 	4
- IA. 			5, supongo que 32 IAs estarán bien.

Por supuesto no hay que meter todas estas cosas en todas las casillas del mapa. Lo bueno de sólo avanzar es que se pueden almacenar en una lista ordenada sobre la que se mantenga un puntero que avance cuando sea necesario y vaya sacando gente. Esto en teoría debería permitir crear varios enemigos en la misma casilla.

La putada será ver cómo introducir toda esta información de forma cómoda. Hacer un editor para esto es overkill. Al ser valores tan configurables no puedo pintar una tira con mappy. Tengo que darle vueltas a esto mientras hago el resto de cosas que me queda por hacer en el motor de los enemigos.

Por lo pronto voy a crear un script en los que los muñacos tiren un proyectil. Además, tengo que integrar un contador de frames y un contador de avance, y comprobaciones para saltar si el valor es mayor que X.

Revisamos:

OPCODE		COMMAND 	QUE
00x		END 		FIN
01x		IDLE 		Parar
10x		WALK 		Avanzar
40x		TURN 		Darse la vuelta (inmediato)
41x		JUMP 		Saltar (state -> jump)
42		CHANGE 		Cambiar de nivel (state -> go_up o go_down)
50x		FIREUP 		Disparar proyectil por arriba (inmediato)
51x		FIREDOWN 	Disparar proyectil por abajo (inmediato)
52x		HIT 		Hostia (puede que saltando)
60x		RESET_FC	Resets frame counter
7Xx		WALKSP X 	Walk speed 1, 2, 3. (3 = 1.5!)

CEx		GOTO 		Goto {next byte}

CF		WASTE 		No hacer nada

DXx		P_CLOSER_THAN 	Jugador a menos de X*32 (acercándose)
EXx		P_FURTHER_THAN 	Jugador a más de X*32 (alejándose) 

F0x		P_SAME_LEVEL 	Jugador en mi nivel
F2x		P_FRONT	 	Jugador frente a mí
F4x		P_HIT_RANGE 	Jugador cerca para hostial
F5x		P_CROUCHED 	Jugador agachado
F6x		P_JUMPING 	Jugador saltando
F7x		P_HITTING 	Jugador golpeando
F8x		FRAMES N	Han pasado N segundos (next byte)
F9x		ADVANCED X 	Se ha avanzado X pixels (next byte)
FFx		IDLE 		Yo estoy idle

~~

Voy a meter un comando que establece la velocidad para que los muñacos puedan cambiar de velocidad en su comportamiento, así que eso lo puedo ir quitando de la tira. Todos se crean con 1, en principio.

Tengo que montar otra animación para disparar agachado, y quitar la de agachado sin más, que no se usa.

~~

Me queda (de lo gordo y básico)

– Meter proyectiles horizontales.
– Cambiar de nivel.
– Meter que se caiga en los agujeros / de un nivel a otro.

~~~~

Ya caen al saltar. Veamos si puedo hacer que caigan al andar. Baratamente.

. . . ¡Hecho!

~~~

Con esto, puedo plantearme el cambio de nivel, ¿no? — Parece que el cambio de nivel ya funciona perfectamente.

Meto los proyectiles y le doy una vuelta a optimizar esto en espacio, que ya me estoy colando.

Necesito meter un IF ON_FLOOR! es muy importante… Copio de nuevo:

OPCODE		COMMAND 	QUE
00x		END 		FIN
01x		IDLE 		Parar
10x		WALK 		Avanzar
40x		TURN 		Darse la vuelta (inmediato)
41x		JUMP 		Saltar (state -> jump)
42x		CHANGE 		Cambiar de nivel (state -> go_up o go_down)
50x		FIREUP 		Disparar proyectil por arriba (inmediato)
51x		FIREDOWN 	Disparar proyectil por abajo (inmediato)
52x		HIT 		Hostia (puede que saltando)
60x		RESET_FC	Resets frame counter
7Xx		WALKSP X 	Walk speed 1, 2, 3. (3 = 1.5!)

CEx		GOTO 		Goto {next byte}

CF		WASTE 		No hacer nada

DXx		P_CLOSER_THAN 	Jugador a menos de X*32 (acercándose)
EXx		P_FURTHER_THAN 	Jugador a más de X*32 (alejándose)

F0x		P_SAME_LEVEL 	Jugador en mi nivel
F2x		P_FRONT	 	Jugador frente a mí
F4x		P_HIT_RANGE 	Jugador cerca para hostial
F5x		P_CROUCHED 	Jugador agachado
F6x		P_JUMPING 	Jugador saltando
F7x		P_HITTING 	Jugador golpeando
F8x		FRAMES N	Han pasado N segundos (next byte)
F9x		ADVANCED X 	Se ha avanzado X pixels (next byte)
FA 		ON_FLOOR 	Estamos en el suelo (ni cayendo, ni saltando)
FFx		IDLE 		Yo estoy idle

Coño, se me olvidaba el estado chuck norris de patada voladora. Tengo que pegarle un tiento, porque además supongo que me complicará el tema, así que mejor lo pongo en la cola de resolver en primer lugar. Sigo aplazando los proyectiles, total…

Pero en breve me voy a casa a cumé. Luego si eso, si me quedan ganas, que esto quema mucho.

Lo que me quema de la leche, a priori, es que colocar los enemigos en el escenario va a ser una pequeña pesadilla. Espero llegar con ganas a la parte en la que hago los niveles, porque si no, esto se va al carajo. Pero no puede irse, porque esta dale franada merece entrar en el concurso de nesdev y hacer bonito.

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