Página 13 de 37

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 16 Mar 2014, 14:44
por Nightwolf
Subo el Goku, la diferencia que hay es todos los mapas son el mapa de mi juego (los 5 XD) y que he comentado la parte de la intro.

¿Puede ser algo relacionado con esto del gokumal.c? No sé qué hacen esos valores y/o cuales habría que poner (el Gokumal tiene un valor ligeramente diferente para acomodar los 4 disparos, quizás sea ésto?

// Para 128K descomenta la 24099 y comenta la otra
//#pragma output STACKPTR=24099
//#pragma output STACKPTR=61952
#pragma output STACKPTR=24299
//#define AD_FREE 60655
#define AD_FREE 60500
// MAX BINARY SIZE = 35655 (make @ 25000) or 36155 (make @ 24500)

Y luego en el main loop:

// splib2 initialization
sp_Initialize (7, 0);
sp_Border (BLACK);
sp_AddMemory(0, 56, 14, AD_FREE);
/*
sp_AddMemory(0, 60, 14, AD_FREE); ---> Esto es lo que usa el mainloop del Goku Mal


Lo que fui haciendo es modificar los valores de los archivos de /dev en la Churrera3.99.3c, y luego copiar esos archivos revisados a la carpeta del Goku.

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Dom, 16 Mar 2014, 14:53
por na_th_an
Antes de poder mirar nada (ahora mismo no puedo), he visto esto:

$this->bbcode_second_pass_code('', '#pragma output STACKPTR=24299')

Esto es donde empieza la pila, que crece hacia abajo. En los juegos para 128K la estamos colocando justo debajo del binario. Asegúrate que tu binario y la pila no colisionan. Si tu binario compila en 24200, por ejemplo (y como está por defecto, si mal no recuerdo) la pila debería colocarse en 24199.

Luego busco un rato y lo miro más detenidamente :)

Lo otro no creo que sea. 56 es el número de bloques necesarios para 4 sprites en pantalla más 3 disparos de 8x8, y si reservas más lo único que pasa es que tu binario no puede crecer tanto. Los bloques se reservan a partir de la posición ADD_FREE, por eso está un poco más baja de lo normal en goku mal, porque hacían falta cuatro bloques extra para el cuarto disparo.

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 17 Mar 2014, 08:17
por na_th_an
Ya está, era tema de configuración de memoria.

1.- En los juegos de 128K, hay que colocar la pila fuera de la parte que se pagina. Por eso no vale el mismo valor que usamos en 48K (que está al final de la memoria, en un espacio reservado para ella). Si tu binario principal compila en 24200, como es el caso, tienes que colocarla justo debajo, en 24199:

$this->bbcode_second_pass_code('', '#pragma output STACKPTR=24199')

2.- Luego está el espacio de memoria que reservamos para los sprites. Cada sprite ocupa 1 + el número de caracteres que el sprite puede ocupar en pantalla. Esto significa que un sprite de 16x16, que puede llegar a ocupar 9 caracteres (un cuadrado 3x3, si no está alineado) necesita 10 bloques, y uno de 8x8 necesita 5 bloques. En la configuración habitual de la churrera, necesitamos espacio para 4 sprites de 16x16 y 3 sprites de 8x8, o sea, 4*10+3*5 = 55 bloques. Yo estaba reservando 56 por alguna razón que ahora mismo he olvidado XD. Además, hay que hacer sitio para esos bloques en una zona de la memoria que no esté ocupada.

Cada bloque para sprites ocupa 14 bytes. Si quieres 4 disparos, necesitarás 4*10 + 4*5 = 60 bloques, que ocuparán 60*14=840 bytes. La directiva AD_FREE simplemente le dice al sistema dónde estás reservando los 840 bytes de espacio que necesitan tus 60 bloques.

splib2, el motor gráfico, ocupa casi toda la memoria a partir de 61440. En la Churrera siempre reservamos el espacio que necesitamos justo debajo. Si vas a usar 4 disparos, tendrás que mover AD_FREE justo por debajo haciendo sitio, o sea, tendrás que poner AD_FREE en 61440 - 840 = 60600. Probablemente en Goku Mal esté más abajo por alguna cosa que cambié durante el desarrollo. Ahora no me acuerdo.

En definitiva, tienes que ajustar todas estas cosas. Primero, en el archivo principal:

$this->bbcode_second_pass_code('', '#define AD_FREE 60600')

Y luego, en mainloop.h

$this->bbcode_second_pass_code('', 'sp_AddMemory(0, 60, 14, AD_FREE);')

Con esas tres cosas bien puestas, el juego funciona correctamente :)

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 17 Mar 2014, 11:12
por Nightwolf
Muchísimas gracias Nathan :) En serio, te lo agradezco un montón. Para mí es un follón lo de la memoria, tengo que estudiarlo para enteder por qué se hace qué cosa (ya estoy mirando el código fuente y entendiendo cómo va)

¡Qué ganas de probar el multinivel con el inventario de objetos! :ymca:

Algo que podría ser super útil, a ver si se podría implementar fácilmente.

1) Tener diferenciado los gráficos del sprite del protagonista a los del enemigo.
2) Poder cambiar el recurso de enemigos/protagnista al vuelo.

Más o menos como veo como funciona la churrera, ésto creo que es muy posible. ¿Qué ventaja? ¿Quién no querría un Ghosts and Goblins, donde el personaje se quede en pelotas jeje. Y mejor aún, así tendríamos de una manera rápida y eficaz, muchos más enemigos diferentes (al menos gráficamente).

Y el tileset de mapas. Tenemos un mapa, y hay un botón que nos permite viajar al pasado. Luego cambiamos el tileset gráfico del mapa por otro diferente, teniendo el mismo mapa, pero habiendo "pasado" de época. Sería genial no, ¡lo siguiente!

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 17 Mar 2014, 11:58
por na_th_an
Sabiendo que la dirección de primer sprite está en el puntero sprite_1_a y que cada frame de un sprite ocupa 144 bytes ((8 bytes de gráfico + 8 bytes de máscara) * 9 bloques), puedes calcular donde empieza uno u otro frame y sustituir a partir de ahí y los que quieras. No hace falta tocar nada del motor.

También se puede hacer lo otro.

Usando EXTERN puedes hacer lo que te de la gana ;)

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 17 Mar 2014, 12:20
por Nightwolf
Ah claro. Usando extern, se podría hacer una funcion que sea: extern 1, y carga el set gráfico 1, extern 2, que lo haga con el 2... Qué guay :) Lo único es que... ¡cómo demonios se hace algo así! ;) ¡Un curso avanzadillo para manosear bien el código ya! :D

Pero lo que decía era dividir los gráficos de enemigos y prota, para hacer más modular el motor. ¿No sería más mojono todavía ;)?

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 17 Mar 2014, 12:33
por na_th_an
Pero es que no es necesario ;)

Para tocar cosas a este nivel vas a tener que tocar código C a pelo sí o sí, y vas a tener que usar tus propios binarios en memoria extra.

En la próxima versión de la churrera, en la carpeta utils, hay conversores nuevos pensados para producir archivos binarios directamente importables por el librarian. Entre ellos, por ejemplo, hay un conversor de spritesets a archivos binarios (sp2bin.exe) listos para comprimir, cargar en el librarian y luego descomprimir donde tú quieras. Como no sé cuando podremos sacar la nueva versión (antes hay que terminar Ninjajar! y luego ver que el modo 48K funciona, que lo hemos reescrito prácticamente todo), te pongo aquí un paquete esos conversores.

Para lo que tú quieres hacer, sólo tendrías que coger ese binario, dividirlo por la mitad, y grabar al personaje por un lado (primera mitad) y los enemigos por otro (segunda mitad). Esto hay varias formas de hacerlo, pero por ejemplo lo puedes hacer con un editor hexadecimal o escribiendo un sencillo script en cualquier lenguaje.

Luego sólo tendrías que coger ambos binarios, comprimirlos, y añadirlos con el librarian por separado. Una vez cargados en tu juego, llamando a get_resource (N, sprite_1_a) descomprimirías al protagonista, y con get_resource (M, sprite_1_a + 8*144) descomprimirías a los enemigos, con N y M el número de recurso que te asigna el librarian (los puedes mirar editando librarian.h una vez ejecutado). Esto lo puedes hacer mediante EXTERN.

No hay que olvidar que mi proyecto no es el motor, sino los juegos que hacemos con él. El motor hace lo que necesitamos que haga, salvo adiciones como el tema de los items que me pareció muy interesante porque era sencillo de implementar y porque nos iba a venir muy bien a muche gente (además de que lo tenía medio pensado).

Cosas como las que tú quieres hacer se pueden lograr muy fácilmente con las herramientas que ya hay. Yo te puedo orientar, pero no puedo escribir un capítulo del tutorial para enseñar lenguaje C :-D Aparte de que tengo un churumbel a punto de llegar y mi tiempo libre tiende a cero con una velocidad vertigionsa.

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 17 Mar 2014, 12:48
por Jarlaxe
Ese Nathan! No sabía yo eso del xurumbel. Enhorabuena champion!

Venga chicos, estrujemos todo lo que podamos al bueno de Nath, que luego no va a tener tiempo ni de pestañear! :lol:

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 17 Mar 2014, 12:53
por Nightwolf
Jojo, vas a tener un mini-Na_th_an!?? Norawena!!! Joer, eso habrá que celebrarlo con una buena caja de Ojaldres Saladetes!!!! :__D

¡Muchas felicidades!

Re: Proyecto Churrero: AVORCHA - Dudas y sugerencias

Publicado: Lun, 17 Mar 2014, 12:55
por na_th_an
:lol: :lol: :lol: :lol:
Sí, me estoy reproduciendo. Poco a poco podré dominar el mundo XD

En serio, tengo muy poco rato. Me gustaría ponerme con todas estas cosas, pero es que no doy. Tenía pendiente un capítulo con introducciones y orientaciones para cambiar las músicas, el modo 128K, usar el librarian, explicar los Items, y más miserias... Pero no encuentro un rato.