Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Zub

Páginas: 1 ... 4 5 [6] 7 8 ... 10
76
Desarrollo / Re:Mapas en c64 con scroll
« en: Mayo 04, 2017, 16:21:37 »
Um, pero esa fila inicial a pintar, sólo hay que calcularla 1 vez por cada refresco, no es que quite demasiado trabajo...Lo que no me queda tan claro es si en fila[mapx], lo que hay es un índice al tile (1 byte), o un puntero al tile (2 bytes)
Ten en cuenta que tienes que acceder a 40 filas en cada frame. Puedes calcular la dirección de la primera y luego ir sumando 40 bytes e ir actualizando los 2 bytes del puntero. Es muy fácil, pero son calculillos que se hacen 40 veces por frame. Si precalculas, gastas 256 bytes de buffer para los punteros (128 filas) pero te ahorras rastertime en cada frame. Es simplemente una optimización para ensamblador.

No estoy fijando el tamaño del tile.El tamaño podría ser cualquiera.(8x8,4x4,5x5).Uso 5x5 como referencia porque cubre toda la pantalla.
Yo no veo, por ahora, ventaja en que el tamaño del tile sea múltiplo de 2.Igual lo veo después.
A nivel conceptual no lo hay. Yo lo decía por la implementación en ensamblador, el ser un numero potencia de 2 te facilita la vida. Pero igual hay una forma elegante de hacerlo con 5 tambien.

Sobre la COLORRAM, la ventaja que da tener 1 color por tile, es muy muy poca, incluso con el método de cadaver.Me explico:
Con un scroll de 2 pixeles, hay que repintar 1 de cada 4 frames.En el frame que hay que repintar, y usando el metodo de cadaver, lo que hay que recalcular es sólo la nueva fila o columna, o ambas, que entran en pantalla.Del resto, se hace shift, por lo que da lo mismo si se hace shift de colores individuales, o bloques de color.
Es decir, que la limitación de 1 color por tile, permite que un proceso que afecta a , como máximo, (40+24)/40*25 = 0.06 (6%) de los caracteres, en 1 de cada 4 frames, sea más rápido..
El usar 1 color por tile, hace más rápido el primer pintado completo de pantalla.A partir de ahi,si haces shifting, no estás ganando demasiado.

No te acabo de seguir. Si tengo un color único por tile, efectivamente me ahorro escribir en los extremos 1 de cada 4 frames. Pero es que además al hacer el shifting solo hace tocar una columna de cada cuatro...

Quiero decir si tengo 3 tiles de diferentes colores (12 chars) y hago shift a la derecha:

RRRRGGGGBBBB

RRRGGGGBBBBY

Solo tengo que tocar 3 chars, no?


Si, por otro lado, el cálculo de colores se almacena en un doble buffer, del cual luego copias a memoria de color (que es lo que quisiera probar), da lo mismo: lo que ralentiza es el cálculo del doble buffer,y ni siquiera eso, porque los offsets a la memoria de  color de tiles, son los mismos que los offsets a los caracteres de tiles, asi que no se hacen más cálculos.Esto también es así en el método de cadaver: a la vez que se calcula qué caracteres nuevos hay en pantalla, con los mismos offsets (dividido entre 2), tienes el color de esos caracteres.
Yo esa parte la hice diferente... precalculo la fila o columna nueva de color en un array, y luego cuando estoy off-screen copio del array a la zona correspondiente de COLORRAM.

Sobre si usa mucha memoria...Puede usar la mitad de memoria que los tiles (2 colores por byte), más 1K de doble buffer.En el mismo metodo de cadaver, donde hay 192 tiles de 4x4, usaria 3072 bytes de memoria de caracteres, y la mitad (1536 bytes) para memoria de color...No me parece tanto para lo que se gana..
Tienes razón. Yo creo que es más una cuestión de rastertime, como te decía si consigues que te calcule todo bien a 25 hz (double buffer) te puede quedar una chulada. Por supuesto hay juegos que tienen tiles de 2x2, y queda super colorista. Si no tienes cálculos complejos (multiplexer, etc) y te cabe en el raster, genial.

77
Desarrollo / Re:Mapas en c64 con scroll
« en: Mayo 04, 2017, 07:23:46 »
Dices que precalculas la dirección de cada fila del mapa...Con qué objetivo?
Hay dos bytes mapx y mapy que te indican en qué posición del mapa estás (la esquina superior izquierda de la pantalla como referencia). Mirando mapy, ya sabes que filas están visibles. Como tienes un puntero a cada fila, basta con acceder a  fila[mapx], fila[mapx+1]...fila[mapx+39] para pintar una línea de tiles entera en la pantalla.

Una pregunta, por qué has elegido tiles de 5x5? Si el tamaño es múltiplo de 2,4 o 8 entonces se simplifica mucho la lógica de como acceder a cada char dentro del tile. Lo habitual es usar 4x4, y algunos juegos usan 2x2. Como te decía, si tienes un bloque cuadrado (ejemplo 4x4) y sabes en qué posición mapx-mapy estás dentro del mapa, sabes en qué offset estás dentro del tile de referencia y es relativamente sencillo apañar la rutina para que lea los chars correctos. Con 5x5 al ser asimétrico y no múltiplo de 4 no sé muy bien cómo lo haría en esamblador...

A no ser que tengas mucha memoria libre y si no es una limitación gráfica importante (depende mucho del tipo de juego) yo pondría un color por tile. De ese modo, al hacer scroll sólo tienes que cambiar la COLORRAM al cambiar de un tile a otro. Es decir si son tiles de 5x5, sólo habría que rellenar nuevo color en el extremo de la pantalla tras scrollear 5 chars enteros. Obviamente si tienes un color por char queda infinitamente más atractivo pero usas mucha memoria y la actualización de scroll te lleva más tiempo de raster.

En cualquier caso si lo consigues implementar te quedaría una chulada. La clave está en que consigas optimizar mucho la rutina de scroll, sobre todo si por el tipo de juego va a haber scroll frecuente, entonces es código que se ejecutará cada frame y necesitarás que no te ocupe demasiado rastertime.




Yo no precalculo eso.Seguramente me he explicado mal.
Para mí, el mapa se almacena como memoria contigua de MAPCOLSxMAPROWS bytes.El byte contiene el id del tile que hay en esa posicion. Si hay 128x128 tiles, son 16Kb de mapa (descomprimido).
Los tiles se almacenan como memoria contigua de 256*(TILEW*TILEH) bytes.En el caso de tiles de 5x5, esto  son 6400 bytes.

Ahora, dada una posicion de pantalla, hay que:
 - 1) Calcular qué tiles hay que dibujar, según el mapa.Calcular el offset en la memoria de tiles, para esos tiles.
 - 2) Para cada tile, ir copiando de la memoria de tiles a la memoria de pantalla, cuando sea necesario hacer scroll.

El paso 1, hay que ejecutarlo cada vez que el primer tile a pintar, cambie.Es decir, cada vez que el jugador recorra 1 tile completo.Con un tile de tamaño 5x5, el numero de tiles que hay que pintar en una pantalla de 40x25 son 8x5=40 tiles, (en realidad, normalmente seran 9x6 = 54 tiles).Son esos punteros los que yo precalculo.

El paso 2, hay que ejecutarlo cada vez que el jugador recorra 1 caracter completo.Pero los punteros no han cambiado, sólo cambia el offset dentro de los tiles desde donde hay que empezar a pintar.

Por otro lado, si se quisiera tener color por cada caracter de cada tile, el cálculo sería idéntico, con un coste de otros 6400 (o 3200) bytes.

Aunque no se puede hacer doble buffer de la memoria de color, sí que se puede dejar 1Kb donde "construir" el siguiente mapa de color, de forma que a la hora de mostrarlo, sólo haya que copiar de una direccion a otra, sin tener que hacer cálculos a la vez.

El calcular que tiles son visibles por un lado, y pintarlos por otro, permite dividir el trabajo entre frames, además de que ese buffer de tiles "activos" se puede usar para, por ejemplo, activar código a ejecutar  (animaciones, trampas) asociados a tiles.

Aún no lo he pasado a ensamblador para ver cuántos ciclos requiere, pero el bucle de pintado (el que se tiene que ejecutar en el paso 2) es ahora mucho más simple.

78
Desarrollo / Re:Mapas en c64 con scroll
« en: Mayo 03, 2017, 13:04:07 »
Por supuesto, se puede y en función del tipo de juego se debería optimizar. En mi caso sólo cambié la forma en la que se actualiza la COLORRAM, y centré mis esfuerzos en otras cosas. ¿Qué pegas le has visto?

Yo también precalculo la dirección de cada fila del mapa. Supongo que se podría optimizar para que ocupe menos (el mapa no lo tengo comprimido) pero complicaría un poco la lógica del "scroll logic", no?

79
Desarrollo / Re:Programando Eye of the Gods
« en: Mayo 02, 2017, 23:23:17 »
Yo uso el sistema de Lasse Orni (Cadaver) con tiles de 4x4 chars. El mapa es un rectángulo de tiles, asumiendo que no hay más de 256 diferentes implica 1 byte por tile. Cada pantalla por tanto son unas 50 tiles (50 bytes). La verdad que no me he planteado comprimir el mapa, quizás se podría conseguir una ganancia importante si el mapa es muy grande. Para codificar qué objetos van en una pantalla, puede usarse el propio identificador de tile (si un objeto va implícito en ella). En caso contrario, bastaría con codificar las coordenadas para ubicar cada objeto en el mapa (2 bytes te dan precisión a nivel de tile).

Lo que si he visto es tener comprimidos los sprites. Se guardan en una zona de memoria compactados, y cuando se va a pintar uno, se descomprime y se copia on-the-fly a la posición donde el VIC lo "vea". El Samurai Warrior (Usagi Yojimbo) hace esto.


80
Desarrollo / Re:Mapas en c64 con scroll
« en: Mayo 02, 2017, 23:14:20 »
Hola,

Yo te recomiendo que analices en profundidad el siguiente artículo:

https://cadaver.github.io/rants/scroll.html

Básicamente cubre todo lo que necesitas saber. De hecho, Cadaver ofrece el código fuente de sus juegos donde puedes directamente ver como lo implementa. Yo usé como base el scroller del juego BOHF para mi proyecto. Si algo, funciona para qué cambiar?

El esquema que utiliza en sus juegos es de tiles de 4x4, con 1 color por tile. El mapa es un rectángulo de tiles (1 byte por tile, puedes hacer mapas muy grandes). Hay que hacer double buffer usando dos Screens (salvo que tu juego tenga scroll a 50Hz y te de tiempo a hacer todo en un frame). La COLOR RAM hay que actualizarla fuera de frame (antes de que se pinte la nueva Screen). Sus rutinas permiten scroll multidireccional.


81
Existe el cacharro este:

http://www.ebay.com/itm/TOM2-Adapter-USB-Mouse-Joystick-for-AMIGA-ATARI-ST-TT-Commodore-64-128-/172007029169

QUe han mencionado en Lemon pero no tengo ni idea de si funciona bien, y lo más importante si es seguro para el C64 aunque creo que sí.

82
General / Re:Mazinger C64
« en: Abril 24, 2017, 07:17:53 »
Buenas a todos, efectivamente Errazking y yo estamos a tope para intentar enseñaros algo muy pronto. La idea es centrar los esfuerzos en el primer nivel. Espero conseguir pronto que sea jugable y un desafío a la vez, y que me podéis dar vuestro feedback. Lo cierto es que esto se estaba dilatando ya mucho en el tiempo y es necesario centrar el tiro y concretar algo, aunque posiblemente muchas cosillas se quedarán en el aire en esta primera versión..

Ahora que han anunciado una nueva peli de Mazinger Z para este año, que menos que tener antes una beta de su port C64 hispánico!


83
Off-topic / Re:VERGÜENZA
« en: Marzo 12, 2017, 22:10:08 »
Yo creo que tienes bastante razón, pero con matices.

Que hay mucho postureo en España sobre cualquier tema es harto conocido y el C64 no va a ser excepción. Vamos que ahora está de moda lo retro y hay listos a patadas, pero yo recuerdo a finales de los 90 que me sentía la voz que clamaba en el desierto...

Sin embargo te aseguro que hay commodoreros "silenciosos" por ahí en España. Yo mismo que juego todas las semanas y llevo metidas chorrocientas horas a intentar acabar algún día el Mazinger.. Confieso que no he comprado el Bear, sí lo probé y me resultó simpático y muy profesional aunque no desplegué pirotecnia como con Soulless. Pero fíjate que sí compré el Moonspire que parece que ha pasado ms desapercibido...

84
General / Re:Let's Compare (videos con versiones de juegos)
« en: Marzo 04, 2017, 01:01:09 »
En C64 hay muchos juegos de coches lamentables, sin embargo la cosa cambió a partir de Buggy Boy y los de Chris Butler que hizo un motor pseudo-3D muy efectivo. Así de primeras:

- Buggy Boy
- Turbo Out Run
- Turbo Charge
- Out Run Europa

Me parecen todos cojonudos.

85
General / Re:Let's Compare (videos con versiones de juegos)
« en: Febrero 06, 2017, 11:01:14 »
Y viendo el vídeo, sin duda la versión de c64 es la mejor de 8 bits con diferencia. Mucha diferencia. Incluso con Master System (normalmente las conversiones de arcade son mucho mejores en esta máquina).

86
General / Re:Let's Compare (videos con versiones de juegos)
« en: Febrero 06, 2017, 10:50:50 »
Yo compré la cinta Erbe de Thunder Blade.

Técnicamente se trata de una virguería de Chris Butler, que supongo reutilizó el "engine" de Space Harrier. El cual supongo fue usado luego también en Power Drift y Turbocharge. Estamos hablando del estado del arte en lo que respecta a juego pseudo-3D en el c64, imposible hacerlo mejor.

A mi modo de ver es una inmejorable conversión. La única pega que siempre tuve que la cinta sufría el síndrome "pasas a la segunda fase, carga, mueres enseguida, rebobina y carga la primera parte" que cortaba absolutamente el rollo. No tenía "continues" y por tanto no había equilibrio "jugar vs cargar". Una pena.

¿Tú copia era un freeze? ¿Cómo cargaba los siguientes niveles?

87
General / Re:Mazinger C64
« en: Febrero 01, 2017, 16:06:00 »
Compañeros, esto no debe sino servirnos de acicate y motivación extra:

https://www.youtube.com/watch?v=qhIvxq4cXvU

88
General / Re:Mazinger C64
« en: Enero 26, 2017, 13:59:18 »
Hostia qué chulada de demo!!!

Mi única salvedad es que la imagen original de la que han partido es del Mazinger Impacto (remake de 2009) y no una original setentera. Pero esto es una puntualización totalmente friki innecesaria.

Os comento los brutos mecánicos actualmente soportados en el juego:

- Garada k7
- Doublas M2
- Demos F3
- Jinray S1
- Baras K9
- Brutus M3 está work in progress. No sé si me cabrá o dará tiempo...

He estado ocupado implementando los rayos que se disparan en diagonal. Ha resultado ser un puto infierno hacer las colisiones bien. Además he querido que los rayos puedan atravesar el borde superior.

Pronto, muy pronto videos, videos, videos y un prg para enredar


89
General / Re:Mazinger C64
« en: Enero 15, 2017, 11:50:26 »
Esta Errazking ultimando unos gráficos. En cuanto los libere pongo un vídeo. Prometido!

90
General / Re:Mazinger C64
« en: Enero 15, 2017, 02:42:18 »
Compañeros, sabed que esto sigue. 2017 es el año.. Ahora o nunca

Se trata de beat'em up mezclado con shoot'em up horizontal.

"Es negro pero al tiempo no es negro. Es americano puro. El tiempo no es negro puro, no, no, no es Michael Jack... No, no es negro. Es negro blanco. Filipino. Jim Andris y una mezcla de jamaicol".

Páginas: 1 ... 4 5 [6] 7 8 ... 10