Fourspriter 2.0

Soporte técnico sobre los lanzamientos de MojonTwins y comentarios sobre los güegos. Ofrecemos soporte técnico con Fourspriter, te ayudamos con ZX Basic o Z88DK, te damos pistas some cómo saltarse un bicho y cosas así.

Moderador: na_th_an

jevilon
Mensajes: 50
Registrado: Lun, 03 Oct 2011, 17:05

Re: Fourspriter 2.0

Mensajepor jevilon » Vie, 01 Feb 2013, 21:31

Mis conocimientos sobre ASM son mas bien... nada no.... nada de nada....
¿Que es eso de la pre-rotacion de sprites? o ¿como uso la animacion para rotarlos?

Por cierto estoy haciendo un jueguecillo y me estoy liando un poco con los bichos ¿Puedo usar tu rutina de bicharracos.bas?
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Fourspriter 2.0

Mensajepor na_th_an » Lun, 04 Feb 2013, 08:25

Puedes usar lo que te de la gana :D

Para mover un sprite pixel a pixel horizontalmente hay que coger el dato y "rotarlo" dentro del los bytes que ocupe, ya que en Spectrum de una vez escribimos 8 pixels. Esta operación es costosa. Para hacer esto el puro BASIC habría que tener esto precalculado.

Lo de rotar con animación es lo que hace el JSW o el MM, que la celda de sprite es de 16x16 pero el sprite parece que es de 8x16. El muñeco "en realidad" solo se mueve de caracter en caracter, pero con la animación el sprite va desplazándose un par de pixels con cada frame. Cuando se completa un paso, el sprite está estirado en los 8x16 derechos o izquierdos del sprite y entonces se mueve un caracter y se vuelve a empezar.

Estoy espeso para explicar esto mejor ahora :lol: Si cargas el JSW puedes ver la animación del sprite en el marcador de vidas. Fíjate como a medida que extienden el paso el sprite "se estira" hacia la derecha. Imaginate que al final, en vez de volver al principio del ciclo simplemente, lo hacen pero avanzando un caracter a la derecha y lo comprenderás.
Como diría Rorshach: "Urm..."
jevilon
Mensajes: 50
Registrado: Lun, 03 Oct 2011, 17:05

Re: Fourspriter 2.0

Mensajepor jevilon » Lun, 04 Feb 2013, 08:44

Muchas gracias :corchoneta: :corchoneta: :corchoneta:

Creo que te he entendido "ferpectamente", lo que no me veo ahora (aun estoy sobadisimo) es si podria implementarlo, aunque molaria mucho para mi güego xD, pero claro mis tiles si son de 16x16... bueno me doy por satisfecho haciendo que se muevan de 8 en 8 (aunque no puedas quedarte en medio de 2 tiles, al menos tiene animación)

Pues nada ahora que tengo tu permiso, a ver si puedo implementar bicharracos.bas (que tendre que modificar concienzudamente creo yo)

Un saludo desde el norte
jevilon
Mensajes: 50
Registrado: Lun, 03 Oct 2011, 17:05

Re: Fourspriter 2.0

Mensajepor jevilon » Jue, 07 Feb 2013, 00:05

Una cosa na_th_an, al intentar compilar mi juego con -O 3 (optimizado para ver si consigo que ocupe menos)
me salta un error:

main.bas:5414: Error: Undefined label '__LABEL__fsp21DataPool'

sin embargo compilando normal, me compila bien...
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Fourspriter 2.0

Mensajepor na_th_an » Jue, 07 Feb 2013, 09:25

El optimizador siempre se carga cosas. Yo dejé de usarlo. De todos modos, repórtaselo a Boriel para que lo arregle :)
Como diría Rorshach: "Urm..."
jevilon
Mensajes: 50
Registrado: Lun, 03 Oct 2011, 17:05

Re: Fourspriter 2.0

Mensajepor jevilon » Jue, 07 Feb 2013, 12:06

Jejeje es que necesito unos ks extras, por eso trato de optimizar, cuantos más ks libres, más pantallas xd

Enviado desde mi MT11i usando Tapatalk 2
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Fourspriter 2.0

Mensajepor na_th_an » Jue, 07 Feb 2013, 13:21

Bueno, si te atreves, podemos intentar hacerlo para 128K. La idea es la siguiente: guardamos el mapa en una página de RAM extra. Así tienes 16Kb para el mapa. Cada vez que necesites una pantalla, hay que sacarla de ahí. Para ello, nos hacemos una función muy sencilla que lo que haga sea poner la RAM del mapa, copiar la pantalla que necesitas a un array o lo que sea de la RAM normal, y volver a colocar la RAM 0 de nuevo. No es complicado, si te atreves grita.
Como diría Rorshach: "Urm..."
jevilon
Mensajes: 50
Registrado: Lun, 03 Oct 2011, 17:05

Re: Fourspriter 2.0

Mensajepor jevilon » Jue, 07 Feb 2013, 18:41

AHHHHHHHHHH

Ademas eso es lo que hago, cargo el codigo a partir de 31000 (podria pasarlo a 32768)
cargo pantallas en 25000
inicia pantalla, lee de memoria, lo mete en matriz p(a,b)

y a jugar hasta la proxima pantalla

me atrevo

Por cierto, creo que ya se por que me falla con el -O 2 al compilar fourspriter....
Al estar metido fsp21DataPool dentro del sub FastCall fsp21DummyContainer (), como no se le llama nunca a ese sub, el compilador lo ignora... por lo tanto supongo que tampoco puede acceder a las etiquetad de dentro :(
Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Fourspriter 2.0

Mensajepor na_th_an » Vie, 08 Feb 2013, 09:01

Um pos no sé, el compilador debería añadirlo por mucho -O2 o -O3 que le pongas, ya que se llama desde ensamblador. Por ahora puedes probar a meter el asm en otra función o algo...

Sobre lo otro, primero hay que tener unas cosas claras:

- Procurar que tanto el array donde vamos a meter la pantalla actual como el código que va a poblar dicho array queden en memoria baja. ¿Cómo hacemos esto? Pues colocándolo lo más al principio de nuestro programa que sea posible. Así seguro que cae por debajo de $C000, o sea, 49152, que es donde empieza la RAM paginable. Esto es necesario porque a partir de 49152 es donde la RAM "cambia" por otra.

- A falta de mejores métodos, "precargar" los datos que necesitas en otra RAM es un poco coñazo. Supuestamente hay que usar un bloque de datos de cinta aparte al de tu programa, que se cargue antes que tu programa y que se mueva a la RAM correcta. Lo suyo es tener todo el mapa hecho para que este proceso sólo tengas que hacerlo dos veces: una vez, para preparar el snapshot sobre el que cargues la cinta cada vez que compiles, para probar, y la otra cuando montes la cinta del juego terminado.

- ¿Qué emulador usas? ¿Cómo estás haciendo y almacenando el mapa ahora?
Como diría Rorshach: "Urm..."
jevilon
Mensajes: 50
Registrado: Lun, 03 Oct 2011, 17:05

Re: Fourspriter 2.0

Mensajepor jevilon » Vie, 08 Feb 2013, 09:44

Sobre lo del -O 3.. lo he solucionado, no se si sera el mejor metodo o no, pero al principio del programa llamo a
$this->bbcode_second_pass_code('', 'fsp21DummyContainer ()')
y así me compila perfectamente (y me ahorra casi 2 k)

Vamos a la chicha... las pantallas las dibujo, primero con mappy, para no perderme y tener una vista "general" pero eso solo me sirve para verlas, no saco codigo ni nada, lo que he hecho es mi propio editor de pantallas en el propio ZX...

Cargo editor de pantallas en 50000 (se puede cambiar), edito las pantallas con el cursor y las teclas poniendo muros, arbolitos, matojos... etc, le digo que tipo de enemigos y cuantos quiero en cada pantalla (con un byte). Como uso menos de 16 tiles diferentes para el escenario, meto 2 tiles en un solo byte (de forma que la pantalla me ocupa 51 bytes, 50 de los tiles y 1 de los enemigos)y lo almaceno en 25000 + pant*51

Salvo el codigo de la pantalla en cinta y cargo el juego, cargo las pantallas, ejecuto y va leyendo de 25000+pant*51, y metiendo en una matriz p(10,10), mas una variable "tipomalos", que luego el propio modulo se encarga de "decodificar"

Asi que no seria problema el usar el metodo que dices de la carga aparte, se puede reubicar tanto el juego como el editor antes (ahora lo tengo en 31000 y el editor en 50000), y las pantallas a partir de 49152

Los emuladores que uso son Spectaculator en windows y Fuse, tanto el linux como en windows

Volver a “Ayuda”

¿Quién está conectado?

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