Página 27 de 37

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Dom, 01 Feb 2015, 12:09
por mcklain
Que alguien le eche una mano, que la creación del juego está en su recta final :mrgreen:

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Dom, 01 Feb 2015, 12:24
por alxinho
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

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Dom, 01 Feb 2015, 16:41
por Nightwolf
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

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Dom, 01 Feb 2015, 16:46
por angel
Jejeje, qué buena pinta :-)

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Dom, 01 Feb 2015, 19:19
por alxinho
Éste va a triunfar :adore:

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Dom, 01 Feb 2015, 23:39
por radastan
¡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.

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Lun, 02 Feb 2015, 14:44
por na_th_an
Ya hemos hablado en privado, pero lo pongo en público para el escarnio y esas cosas que riman con uranio y geranio.

$this->bbcode_second_pass_quote('Nightwolf', 'P')retty 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.

$this->bbcode_second_pass_quote('', 'P')or 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:

$this->bbcode_second_pass_code('', '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.

$this->bbcode_second_pass_quote('', 'O')tra 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.

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Lun, 02 Feb 2015, 17:40
por Nightwolf
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.

$this->bbcode_second_pass_code('', '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:

$this->bbcode_second_pass_code('', ' case 11:
copy_sprites (6, sprite_1_a + 144 * 8);
break;')


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

Con ésto:

$this->bbcode_second_pass_code('', 'get_resource (4, sprite_1_a);')

Se reemplazarían los gráficos del prota.

Yo sigo impresionado con los que sabéis... :)

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Lun, 02 Feb 2015, 18:11
por na_th_an
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.

Re: Proyecto Churrero: AVORCHA - Pentacorn Quest

Publicado: Mar, 03 Feb 2015, 10:45
por Metr
Tá tó guapo !

:vahka: :corchoneta: :vahka: