Proyecto Churrero: AVORCHA - Pentacorn Quest 128K- RELEASED!

For all things Churrera. ¿Estás haciendo un juego? ¿quieres proponer un cambio? ¿tienes alguna duda? ¡Cuéntanoslo!

Moderador: na_th_an

Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor Nightwolf » Mar, 03 Feb 2015, 19:19

Más cositas: Estos son los controles:

Código: Seleccionar todo

      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
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor na_th_an » Mié, 04 Feb 2015, 11:01

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).
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor Nightwolf » Mié, 04 Feb 2015, 11:14

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?
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor Nightwolf » Mié, 04 Feb 2015, 20:53

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... :__(
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor na_th_an » Jue, 05 Feb 2015, 00:06

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.
Como diría Rorshach: "Urm..."
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor na_th_an » Jue, 05 Feb 2015, 00:15

Nightwolf escribió: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... :__(


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.
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor Nightwolf » Jue, 05 Feb 2015, 00:44

Código: Seleccionar todo

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:

Código: Seleccionar todo

      // 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:

Código: Seleccionar todo

      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)
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor na_th_an » Jue, 05 Feb 2015, 07:27

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:

Código: Seleccionar todo

#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
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor Nightwolf » Jue, 05 Feb 2015, 11:19

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
Avatar de Usuario
na_th_an
Mensajes: 26412
Registrado: Vie, 09 Ene 2009, 12:18

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor na_th_an » Jue, 05 Feb 2015, 11:30

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.
Como diría Rorshach: "Urm..."

Volver a “La Churrera”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados