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

Avatar de Usuario
mcklain
Mensajes: 1
Registrado: Dom, 01 Feb 2015, 12:03

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor mcklain » Dom, 01 Feb 2015, 12:09

Que alguien le eche una mano, que la creación del juego está en su recta final :mrgreen:
Avatar de Usuario
alxinho
Mensajes: 98
Registrado: Dom, 02 Feb 2014, 12:36

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor alxinho » Dom, 01 Feb 2015, 12:24

Buenas!

No me había enterado de este proyecto, decir que me encanta el estilo gráfico, una pasada de verdad! :o

Con ganas de catarlo :D
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor Nightwolf » Dom, 01 Feb 2015, 16:41

Bueno y como primicia galáctica gracias al buen hacer Hark0, sacrificando su salud... ¡El video de un Spectrum real corriendo Pentacorn Quest!

https://www.youtube.com/watch?v=l6AADCb ... e=youtu.be
Avatar de Usuario
angel
Mensajes: 23212
Registrado: Vie, 09 Ene 2009, 13:04
Ubicación: Torreznolandia
Contactar:

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor angel » Dom, 01 Feb 2015, 16:46

Jejeje, qué buena pinta :-)
(_\_) (_|_) (_/_) (_|_) ILLO KE HEHEHEHEHEHEEEHEHEHEH!

¡Activa tu rainbow pechónico!
Avatar de Usuario
alxinho
Mensajes: 98
Registrado: Dom, 02 Feb 2014, 12:36

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor alxinho » Dom, 01 Feb 2015, 19:19

Éste va a triunfar :adore:
Avatar de Usuario
radastan
Mensajes: 692
Registrado: Vie, 20 Ago 2010, 12:54
Contactar:

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor radastan » Dom, 01 Feb 2015, 23:39

¡Buf! se ve tremendamente bien, con detallitos que le separa del resto de juegos elaborados con la churrera, y con una jugabilidad de las molonas.

Ansioso de ponerle las zarpas encima.
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 » Lun, 02 Feb 2015, 14:44

Ya hemos hablado en privado, pero lo pongo en público para el escarnio y esas cosas que riman con uranio y geranio.

Nightwolf escribió:Pretty please... ¿Habría alguna forma sencilla de que esto pueda hacerse sin que cause la interrupción de la música? Es que sería una pena tener que o bien quitar los bichos adicionales, o tener que sufrir con el parón en la música :____________________(

Según he estado asesorándome con Syx (al cual agradezco un montón toda su ayuda) solo bastaría quitar el DI/EI de la función y poner un halt en vez del DI de página en la descompresión y dejar fuera de eso la descompresión en si, pero solo conseguimos cuelgues y más cuelgues :___(


Es un problema conocido, lamentado, y, de ser posible, oculto con subterfugios. Explico por qué ocurre y por qué no se puede arreglar.

El Spectrum es jodido e implementa las interrupciones muy mal. Es asín. En realidad no es sólo el Spectrum, sino los periféricos, que no se aclaran y joden el bus y tu programa muere si tienes cosas raras enchufadas.

Total, que para arreglar el tema los dales fran se inventaron un método que consiste en una tabla de 257 valores y una dirección de salto en un punto fijo de la memoria. Mediante un misterioso e interesante proceso que no toca explicar aquí, cuando ocurre una interrupción, con este método, se salta al sitio correcto.

En el Spectrum, la ULA lanza una interrupción cada 20 ms, o sea, una vez por "frame" de TV (50Hz en PAL). Usando el truco de los dales fran, lo que hacemos es saltar a la rutina que toca la música. Esta rutina se encarga de ver si hay una nota nueva que tocar, y en cuyo caso se lo dice a la AY y luego sale.

Mientras estén las interrupciones activadas, la música suena. Se desactivan las interrupciones, y entonces no hay nadie que se encargue de actualizar el AY, por lo que la última nota se queda sonando hasta nuevo aviso.

El problema es que la tabla de los valores y la dirección de salto que idearon los dales fran está justo al final de RAM0.

¿Qué pasa cuando descomprimes nuevos enemigos? Pues que el librarian pagina RAMx (la 3, en tu caso, creo), se trae las cosas, y luego vuelve a poner RAM0. Paginar significa que el último cacho de 16K de RAM de repente "es otro". La CPU ni se entera de esto, ojo. O sea, paginar es, en cualquier caso, timar a la CPU como a un chino.

Si las interrupciones están activadas durante este proceso, y coincide que ocurre una interrupción en medio de la descompresión - l'horreur! el Spectrum busca su tabla y encuentra... pues otra cosa. Y salta adónde sabe dios. O sea, que tienes un cuelgue.

Por que la opción teórica sería poner los sprites de los enemigos descomprimidos en memoria (según se ve, hay memoria de sobra) y así copiarlos directamente encima, con lo que se evitaría la interrupción de la descompresión (LD HL,origen LD DE,destino LD BC,longitud LDIR).


Como te expliqué en privado, se desactiva las interrupciones por el paginado, y no por la descompresión. O sea, igual ibas a tener que desactivarlas con el método de copia directa. Eso sí: seguro que copiar alrededor de 2K de datos dura mucho menos tiempo que la descompresión - incluso, si pones un "HALT" justo antes, es posible que de tiempo dentro del frame actual y no haya tirón:

Código: Seleccionar todo

halt
di

; Ponemos la RAM3:
ld b, 3
call SetRAMBank

; copiamos
ld hl, dirección_de_los_bichos
ld de, _sprite_0_a
ld bc, lo_que_sea
ldir

; Ponemos la RAM0:
ld b, 0
Call

; encendemos
ei


Podéis tirar por ahí. Es muy probable que se minimice muchísimo el efecto del tirón.

Otra duda dudosa... ¿Se podría actualizar el motor actual por el más rápido del Sir Ababol2 (Joer qué juegaco, como mola el espadazo) reemplazando las funciones de pintado? ¿Cuáles serían? (Porque ponerse ahora a cambiarlo todo boaf, aparte de que el Abobol2 no tiene scripts...) Es que... ¡es increíble lo bien que se mueve con los 3 bichos! Y el pobre Pentacorn se muere :____( Supongo que sería incrustar __FASTCALL__ move_enems...


Creo que es más fácil que cojáis MK2 y adaptéis el juego. MK2 es código nuevo pero está estructurado igual que la Churrera. Os valdría todo, incluso los extern, el script. Todo. Es un trabajo, pero sí, iría bastante más rápido.

Sir Ababol 2 es un motor custom que empezó siendo un fork de la Churrera 4.0 (en 2012). El año pasado le cambiamos el motor de movimiento por el que lleva MK2 (Ninjajar/Leovigildo).

Ponerse a cambiar el motor a estas alturas del cuento es un bajón - pero es lo más rápido. Sir Ababol2 Engine / MK2 usan otras variables globales y otras estructuras y la adaptación, me temo, sería más costosa que coger MK2 pelado (la última versión está en la carga del final de Leovigildo) y montarle el juego con los recursos que ya tenéis.

Otra cosa que no es mentira: Sir Ababol 2 tiene muy pocas pantallas con 3 enemigos. Es cierto que Sir Ababol2, Ninjajar! o Leovigildo van mucho más desahogaos que los juegos de la Churrera (además, MK2 ocupa menos memoria), pero tampoco esperes una maravilla.
Como diría Rorshach: "Urm..."
Nightwolf
Mensajes: 215
Registrado: Sab, 15 Oct 2011, 11:24

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor Nightwolf » Lun, 02 Feb 2015, 17:40

Muchas gracias Na_th_an por toda tu información. ¡Ha sido muy útil!

¡Tengo buenas noticias! Syx ha preparado esta función para reemplazar los gráficos de los enemigos, éstos serán sin descomprimir (vamos no usar los apack, usar directamente los binarios generados por sp2bin2.exe)... ¡y no interrumpe la música! Con lo que se puede hacer un cambio en cada pantalla de los enemigos cuando te salga del pepe.

Código: Seleccionar todo

void copy_sprites (unsigned char n, unsigned int address, unsigned int destination) {
    ram_address [0] = address;
    ram_page [0] = n;
    ram_destination [0] = destination;

    #asm
        halt
        di
        ld a, (_ram_page)
        ld b, a
        call SetRAMBank
       
        ld hl, (_ram_address)
        ld de, (_ram_destination)
        ld bc, 1152
        ldir

        ld b, 0
        call SetRAMBank
        ei
    #endasm
}


Luego, ésto podéis llamar a esta función mediante script con el comando extern, en este ejemplo 11, y dentro de extern.h:

Código: Seleccionar todo

      case 11:
            copy_sprites (6, sprite_1_a + 144 * 8);
            break;



En el ejemplo, reemplaza los gráficos de los enemigos.

Con ésto:

Código: Seleccionar todo

get_resource (4, sprite_1_a);


Se reemplazarían los gráficos del prota.

Yo sigo impresionado con los que sabéis... :)
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 » Lun, 02 Feb 2015, 18:11

Jodó, me alegro :)

Claro, lo que ocurre es que la copia dura menos de un frame. Entonces da tiempo a que se copie, se vuelva a poner ROM0 y se vuelvan a habilitar las interrupciones antes de que sea el momento de ejecutar la siguiente nota. Y nadie se cosca :D

Enhorabuena.
Como diría Rorshach: "Urm..."
Metr
Mensajes: 9
Registrado: Lun, 18 Oct 2010, 01:49

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Mensajepor Metr » Mar, 03 Feb 2015, 10:45

Tá tó guapo !

:vahka: :corchoneta: :vahka:

Volver a “La Churrera”

¿Quién está conectado?

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