Página 28 de 37

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Mar, 03 Feb 2015, 19:19
por Nightwolf
Más cositas: Estos son los controles:
$this->bbcode_second_pass_code('', '
ACCIÓN TECLA JOYSTICK
Izquierda O ←
Derecha P →
Saltar ESPACIO FUEGO
Seleccionar Q ↑
Usar A ↓
')

Espero que con Joystick se juegue bien (solo puedo probar con un mando de Ps3 a través del emu)

Edit: Vale, funciona cambiando la tecla z, con if ((gpit & sp_UP) == 0) :)

Una pregunta, ¿cómo podría comprimir el script? ¿Ganaría mucha más memoria libre?

En Ninjajar, aparece esta utildad, supongo que por ahí irán los tiros...
..\utils\msc3.exe ninjajar.spt 21 rampage

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Mié, 04 Feb 2015, 11:01
por na_th_an
Me temo que no es tan sencillo.

msc3 es el compilador de scripts de MK2. Los scripts son iguales, pero el código generado que los interpreta no. msc3 permite, entre otras cosas, colocar los scripts en la RAM extra (que no comprimirlos) - el problema es que el código del intérprete msc.h que genera no es compatible con la churrera.

Una de las cosas que tiene MK2 es que, para ahorrar espacio y velocidad, hace el código mucho más ilegible - eliminamos las estructuras y usamos variables globales a pelo (en vez de tener player con player.x, player.y, etc... tenemos variables individuales px, py...) además de introducir más funciones y atajos. Como el código del intérprete de scripts que genera msc contiene referencias a todos estos datos, no funcionará con la churrera.

¿Es posible modificar msc3.exe y hacer una especie de híbrido que sea capaz de crear scripts e intérpretes que funcionen en la RAM extra pero que sean compatibles con la churrera? Por supuesto, pero habría que modificar profundamente la parte de msc3 que genera el código y cambiar las referencias a las variables de MK2 por referencias a las variables de la Churrera. Sería una tarea tediosa.

msc.bas y msc3.bas se parecen mucho en la parte de generación de código. Con uno y otro frente por frente, se podría, con paciencia, cambiar el código generado por msc3.bas para cada comando y comprobación por el que genera msc.bas.

Si alguien se anima, no tiene más que decirlo y pego por aquí el código fuente de msc.bas y msc3.bas (que, sinceramente, no sé si va en algún paquete).

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Mié, 04 Feb 2015, 11:14
por Nightwolf
Ah vaya. Bueno, entonces lo mejor ya sería empezar un nuevo proyecto con una versión posterior de la churrera. También molaría un ejemplo sencillo con las diversas opciones tipo multinivel, scripts compilados, etc, que cuando miro el Ninjajar... ¡no sé por donde empiezar! XD Quise cambiar el gráfico del protagonista y solo con eso, me salían ya todos los sprites negros requemaos XD

Pero vamos, según estuve leyendo, lo mejor es trincar el Leovigildo y empezar con él alguna otra cosa, ¿no? ¿Es por donde se continuará el desarrollo?

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Mié, 04 Feb 2015, 20:53
por Nightwolf
Otra pregunta... ¿Cómo puedo borrar la pantalla, pero que se quede el marcador desde el menú? Porque con cortina() se borra toda la pantalla, blackout también :S Puedo borrar pintando espacios, pero eso es una burrada de memoria... :__(

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Jue, 05 Feb 2015, 00:06
por na_th_an
MK2 es nuestro framework actual para Spectrum, es el que seguiremos evolucionando. Cuando nos pusimos con Ninjajar! nos dimos cuenta de que la churrera no nos daba para meterlo todo... Nos pusimos a optimizar y a optimizar y a cambiar rutinas. La rutina de movimiento del personaje es completamente diferente, es más rápida y ocupa muchísimo menos, por ponerte un ejemplo. Al final cambiamos tanto que dejó de ser compatible. Aunque se use de la misma manera, es otro monstruito.

Ninjajar! es un juego demasiado tocho para tomar contacto - y además no tiene la última versión de MK2. Como bien has dicho, Leovigildo es el punto de partida, tiene la versión más moderna y que trae más cosas. De hecho, cada carga de Leovigildo está hecha con una versión nueva de MK2, de forma que la versión más moderna la tienes en la cuarta carga.

Lo más chungo que tiene hacer un juego para 128K es que tienes que pensar qué necesitas manejar en tu gestor de niveles. Por ejemplo, Ninjajar! tiene un gestor de niveles relativamente complejo y por eso es buen punto de partida. Permite combinar cualquier tileset con cualquier spriteset con cualquier mapa con cualquier música con cualquier script - permite incluso reaprovechar el mismo mapa y script en varios niveles, como ocurre con las tiendas, que en realidad están todas en el mismo mapa. A veces esto no es necesario - te vale con que cada nivel tenga su mapa fijo asociado a unos gráficos fijos.

MK2 para 128K es menos amigable que la vieja Churrera, pero siendo experimentados desarrollador churrero como sois vosotros no debería suponeros ningún problema la adaptación, ya que la organización es exactamente la misma. Verás muchas cosas que te suenan de sobra en config.h (y muchas cosas nuevas).

Otra razón que nos hizo despedirnos de la Churrera y empezar MK2 era la necesidad de que las ampliaciones y modificaciones custom fuesen más sencillas. Con MK2 es mucho más fácil, por ejemplo, meter código para un comportamiento de enemigo especial, o un motor de movimiento totalmente nuevo. De hecho, si miras bien los fuentes de Leovigildo (carga final) verás como puedes hacer, si quieres, un juego de Phantomas o un Abu Simbel sólo tocando un par de directivas :)

Por ponerte un ejemplo de las bondades de MK2 - mira Sir Ababol DX. Cuando pillamos los recursos de Sir Ababol para probar cómo se movería en MK2 sobraba tanta memoria que pudimos meterle poder matar a enemigos tras coger un objeto, 20 pantallas más, un motor de movimiento extra, y un cambio de tileset... todo en 48K. El Sir Ababol original, elaborado con la Churrera 1.0, apenas cabía en los 48K.

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Jue, 05 Feb 2015, 00:15
por na_th_an
$this->bbcode_second_pass_quote('Nightwolf', 'O')tra pregunta... ¿Cómo puedo borrar la pantalla, pero que se quede el marcador desde el menú? Porque con cortina() se borra toda la pantalla, blackout también :S Puedo borrar pintando espacios, pero eso es una burrada de memoria... :__(


Busca una función "blackout_gamearea" o algo así. Creo que Goku Mal la llevaba. Si no, ya te la buscaré :lol: También puedes usar, si te mola, la rutina que aparece como "EXTERN 0" en Ninjajar! o Leovigildo.

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Jue, 05 Feb 2015, 00:44
por Nightwolf
$this->bbcode_second_pass_code('', 'Gracias Na_th_an.

He visto este código, que ocupa na y menos, pero claro, lo limpia todo (del blackout())

#asm
ld hl, 22528
ld (hl), 0
push hl
pop de
inc de
ld bc, 767
ldir
#endasm

')

Luego está el extern que comentas:

$this->bbcode_second_pass_code('', ' // Cortina
saca_a_todo_el_mundo_de_aqui (0);
for (exti = 0; exti < 10; exti ++) {
for (extx = exti; extx < 30 - exti; extx ++) {
sp_PrintAtInv (VIEWPORT_Y + exti, VIEWPORT_X + extx, 71, 0);
sp_PrintAtInv (VIEWPORT_Y + 19 - exti, VIEWPORT_X + extx, 71, 0);
if (extx < 19 - exti) {
sp_PrintAtInv (VIEWPORT_Y + extx, VIEWPORT_X + exti, 71, 0);
sp_PrintAtInv (VIEWPORT_Y + extx, VIEWPORT_X + 29 - exti, 71, 0);
}
}
#asm
halt
#endasm
sp_UpdateNow ();
}
return;
}')

Pero ahí se usan más variables y no sé cómo andará eso de ocupar espacio, más que como está actualmente:

$this->bbcode_second_pass_code('', ' print_str (13, 12, 7, " ");
print_str (13, 13, 7, " ");

print_str (15, 14, 7, " ");
print_str (15, 15, 7, " ");')

(Que lo que hacen es borrar las dos últimas opciones)

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Jue, 05 Feb 2015, 07:27
por na_th_an
El código del EXTERN 0 hace un efecto de caja muy chulo y, claro, ocupa más.

Este es el blackout_area. Está en printer.h, pero no se estará incluyendo en tu binario porque está tras un #define que tú no tienes activado. Como solo lo usaba para las pantallas de "NIVEL XX", sólo se activa para juegos de varios niveles. Quita el #ifdef del principio y el #endif del final alrededor de esta función en printer.h y podrás usarla:

$this->bbcode_second_pass_code('', '#ifdef COMPRESSED_LEVELS
void blackout_area (void) {
// blackens gameplay area for LEVEL XX display
asm_int [0] = 22528 + 32 * VIEWPORT_Y + VIEWPORT_X;
#asm
ld hl, _asm_int
ld a, (hl)
ld e, a
inc hl
ld a, (hl)
ld d, a

ld b, 20
.bal1
push bc
push de
pop hl
ld (hl), 0
inc de
ld bc, 29
ldir
inc de
inc de
pop bc
djnz bal1
#endasm
}
#endif')

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Jue, 05 Feb 2015, 11:19
por Nightwolf
Genial. ¡Gracias!. Sí que ahorra :P ¿Como podría modificar para que fuese una parte específica de la pantalla? En realidad me gustaría borrar la opcion 2 y 3 del menú. No sé si se podría hacer manipulando los valores. :S

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Jue, 05 Feb 2015, 11:30
por na_th_an
La función está pensada para borrar todo el recuadro. Si sólo queres borrar dos lineas, lo mejor es que te crees una variable (global) con los espacios y utilices print_str para imprimirla en los sitios adecuados.