Una petición para la churrera y una pregunta loca

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:

Una petición para la churrera y una pregunta loca

Mensajepor radastan » Vie, 03 Ene 2014, 11:50

La petición: poder saltar en los juegos con vista genital. Bastaría un circulito de sombra para saber la posición x/y del personaje. Es que me lo he imaginado y molaría un montón, con la ventaja que es fácil de implementar (no es algo descabellado) y encima sería posible saltar los enemigos. No se deberían atravesar los bloques obstáculo de ninguna forma (para simplificar).

La pregunta loca: ¿es posible usar la vista lateral y genital al mismo tiempo? es decir, que en unas pantallas sea lateral y en otras genital. Eso, o por niveles.

Y ya puestos ¿Cómo se hacen niveles en vista genital? es decir, que pueda tener varias fases y que se pueda uno mover entre ellas con puertas u otra forma.
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Una petición para la churrera y una pregunta loca

Mensajepor na_th_an » Vie, 03 Ene 2014, 12:07

1.- No es inmediato, pero podría intentarse. Habría que hacer algunos cambios en las colisiones y en el render.
2.- Actualmente, no. El código que se compila es diferente dependiendo de qué elijamos, de otra manera habría que tener dos motores a la vez en memoria. La principal diferencia entre un modo y otro es el tratamiento del eje vertical, por lo que modificando el código y cambiando #defines por un if que seleccione un comportamiento u otro para el eje vertical (controlado por teclas para la vista genital, o saltos y gravedad para la vista lateral) podría lograrse. Ocuparía más, pero sería posible.
3.- Ahora mismo no se puede saltar arbitrariamente de nivel en nivel. Tengo pendiente añadir un "WARP_TO_LEVEL" al lenguaje de scripting para poder hacerlo, pero todavía no está. Ahora mismo sólo hay un WARP_TO n, x, y que te mueve a la pantalla n, en la posición (x, y) (se usa en Cadaverion, por ejemplo), pero dentro del mismo nivel.

Con la versión 3.99.3 que está colgada en la web de la churrera puedes hacer juegos de varios niveles en 128K como Goku Mal, pero nada te obliga a que sean de plataformas, puedes hacerlos de vista genital. El truco es reservar N pantallas en RAM y que los niveles sean, como máximo, de ese tamaño. Cada nivel se descomprime de la RAM extra en el espacio normal en RAM baja. Puedes cambiar tiles y sprites para cada nivel si quieres, y usar mapas PACKED o UNPACKED como te de la gana. El problema es que el cambio de un nivel a otro no está nada fino y hay que hacerlo a mano (como en Goku Mal, ver el código en mainloop.h; el cambio de nivel está marcado y comentado).

Ahora mismo la documentación es bastante parca porque no tengo rato, pero en whatsnew.txt hay una breve introducción a cómo se construye un juego de 128K y cualquier cosa me la puedes comentar.

En la versión 3.99.4, que es la que tengo en desarrollo y para la cual he cambiado medio motor ya, es mucho más fácil hacer cualquiera de las cosas que pides, pero aún le falta mucho para salir. El motor está mejor ordenado y estos cambios serían más fáciles de atacar, pero aún está desmontao y con cosas fallando.
Como diría Rorshach: "Urm..."
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: Una petición para la churrera y una pregunta loca

Mensajepor radastan » Vie, 03 Ene 2014, 16:13

Vale, dime que estimas que falta para la 3.99.4. Es para liarme a modificar la 3.99.3 o quedarme quieto mientras planteo mapa y gráficos.

Lo imprescindible, ahora mismo, sería el saltar en vista genital, ya que la falta de salto entre niveles puedo solventarla saltando entre zonas de mapa separadas y usando cambio de nivel llegados a un punto.

La siguiente evolución es plantear diferentes alturas en el mapa, lo cual podemos hacerlo por tipo de tile o por un segundo mapa con las alturas (bastaría uno con cuatro alturas, que con dos bits por tile ya se cubre). Os puede sonar a locura, pero es que tengo en mente un par de juegos con ese requerimiento.
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Una petición para la churrera y una pregunta loca

Mensajepor na_th_an » Vie, 03 Ene 2014, 16:34

Pues mucho, porque no me estoy dedicando a hacer la 3.99.4, sino que estamos montando un juego que está resultando ser tan ambicioso que me ha hecho reescribir (sin exagerar) medio motor... Y esta tarde me toca rehacer el compilador de scripts para que soporte varios niveles comprimidos en la RAM extra, lo cual me está empezando a dar ya dolor de cabeza, porque escribir compiladores es "super chupi"...

Tal y como está puedes hacer un salto de fases de forma manual sin demasiados despeinados. Por ejemplo, se me ocurre que puedes usar un flag del script para almacenar un valor, y luego ejecutar un "WIN GAME" en el script, que hace que la variable "script_result" se ponga a 1 y se salga del bucle del juego principal.

Lo que puedes hacer es, justo al salir del bloque de juego principal a partir de la linea 833 de mainloop.h, usar el estado de ese flag para ir al nivel que quieras.

Por ejemplo, imaginate que quieres saltar al nivel 2 en la pantalla 4, posición (x, y) = (5, 5). Yo guardaría todos esos valores en flags desde el script y ejecutaría WIN:

$this->bbcode_second_pass_code('', 'SET FLAG 1 = 2
SET FLAG 2 = 4
SET FLAG 3 = 5
SET FLAG 4 = 5
WIN')

Y luego modificaría mainloop.h (linea 833 en adelante), que en principio lo único que hace es avanzar el nivel:

$this->bbcode_second_pass_code('', '#ifdef COMPRESSED_LEVELS
if (success) {
level ++;
if (level == MAX_LEVELS) {
game_ending ();
mlplaying = 0;
}
}')

para que tomase en cuenta estos valores, así:

$this->bbcode_second_pass_code('', '#ifdef COMPRESSED_LEVELS
if (success) {
level = flags [1];
n_pant = flags [2];
player.x = flags [3] << 10;
player.y = flags [4] << 10;
if (level == 99) {
game_ending ();
mlplaying = 0;
}
}')

Así, cuando quieras que sea el final del juego, sólo tienes que poner 99 como número del nuevo nivel.

Además habría que modificar la carga del nivel. En el mismo archivo se llama a prepare_level que asigna la posición inicial en el nivel que se carga dependiendo de los valores que hemos definido nosotros en la cabecera del nivel (ver whatsnew.txt). Lo que tendríamos que hacer es no establecer esos valores si el nivel no es el nivel 0 (el primero), para que se respetasen los que hemos puesto nosotros a mano. Para eso habría que modificar engine.h y dejar prepare_level (linea 51) así:

$this->bbcode_second_pass_code('', '#ifdef COMPRESSED_LEVELS
#ifdef MODE_128K
void prepare_level (unsigned char level) {
get_resource (levels [level].resource, (unsigned int) (level_data));
if (level == 0) {
n_pant = level_data.scr_ini;
player.x = level_data->ini_x << 10;
player.y = level_data->ini_y << 10;
}
}')

Creo que con este par de modificaciones sencillas se podría saltar sin problemas de un nivel a otro, pero no tengo forma de probarlo.
Como diría Rorshach: "Urm..."
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: Una petición para la churrera y una pregunta loca

Mensajepor radastan » Vie, 03 Ene 2014, 18:23

Está visto que todos tenemos en mente "un gran proyecto". :lol:

Pues nada cogeré a 3.99.3 y empezaré a meterle modificaciones como un loco, porque... que sería de un juego de Dr. Who sin viajes en el tiempo y situaciones únicas.
Avatar de Usuario
angel
Mensajes: 23212
Registrado: Vie, 09 Ene 2009, 13:04
Ubicación: Torreznolandia
Contactar:

Re: Una petición para la churrera y una pregunta loca

Mensajepor angel » Vie, 03 Ene 2014, 18:29

$this->bbcode_second_pass_quote('radastan', 'E')stá visto que todos tenemos en mente "un gran proyecto". :lol:

Pues nada cogeré a 3.99.3 y empezaré a meterle modificaciones como un loco, porque... que sería de un juego de Dr. Who sin viajes en el tiempo y situaciones únicas.


Este que estamos haciendo va a ser la polla. Y no digo más :porro:
(_\_) (_|_) (_/_) (_|_) ILLO KE HEHEHEHEHEHEEEHEHEHEH!

¡Activa tu rainbow pechónico!