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 - Dozznar

Páginas: [1] 2 3 ... 10
1
Alex64 / Re:Valkyr
« en: Marzo 16, 2024, 13:24:19 »
5.453 puntos por aquí.

En mis primeras partidas deberían haberme dado un bonus especial por esquivar todas las bolas de energía y coger los disparos enemigos.

Gran @Dozznar ¿en algún momento se muestra la tabla de puntajes?
Jajaj. Debería haberlo tenido en cuenta
No, solo queda registrada la mejor puntuación.

2
Desarrollo / Re:TRSE, Turbo Rascal Sintax Error
« en: Marzo 15, 2024, 14:15:31 »
buen dia amigos!. efectivamente hace unos años que utilizo TRSE.
Que contarles.. primeramente que es un IDE completo de programación. Contienen un buen editor gráfico y de sprite, no es el mejor que he visto, pero sirve perfectamente para llevar a cabo la mayoría de los proyectos sin problemas. Soporta compresión y descompresión de archivos, incluye rutinas de carga rápida y tiene soporte para manejar archivos en disco. Seguramente olvido más de la mitad de las funciones que hacen grande al TRSE.
Aquí debo aclarar algo. Si bien posee rutinas gráficas y comandos de alto nivel (Printstring, printdecimal, moveto, plot y demás), la experiencia me dice que a la hora de la programación de un juego o demo, no es tan importante el lenguaje utilizado tanto como el conocimiento interno de cómo funciona la máquina, siempre y en cuanto estemos hablando de compiladores modernos. Bastará un par de programas hechos para darte cuenta que es más fácil, y eficiente, escribir en la memoria gráfica que utilizar la instrucción Print.
La eficiencia del compilador depende de cuan automáticamente hace las cosas y TRSE se encuentra en un punto muy cercano al assembler. Con esto me refiero a que se pueden hacer muchas cosas con TRSE, pero hay que saber que se está haciendo y conocer la máquina en profundidad para sacar el mayor provecho.
Personalmente utilizo TRSE como ayuda en rutinas basicas, al fin y al cabo:
A:=A+1 se compila como INC(A) si solo estamos utilizando variables de 8bit. Un CASE(A) se compila con varios CMP y BNE. Entonces lo importante es saber cuando usar 8bit y cuando variables de 16bit y ubicar el CASE sabiendo que se utiliza BNE en la compilación y este genera error de brach si el salto es mayor de 128 instrucciones. Tampoco voy a multiplicar dos variables de 16bit sin saber que esto conlleva un costo en tiempo y memoria grandes. En definitiva, ya sea assembler o TRSE, es necesario conocer la C64 en profundidad. Una vez compilado el programa nos damos cuenta que las rutinas utilizadas en el código final son las recomendadas en codebase64, eso es genial y por eso lo utilizo. Comparé un programa mío hecho en assembler y en TRSE y eran muy parecidos. Es suficiente para mí. OJO, siempre compruebo el archivo assembler generado luego de la compilación sobre las rutinas críticas. Si funcionan bien, las dejo; si necesito optimizar voy buscando opciones con otras instrucciones del TRSE o simplemente utilizo la función ASM que me permite escribir assembler directamente en el programa.
Es multiplataforma y compila en muchas máquinas retro. Genial, pero otra vez, hay que conocer la máquina destino, sino no haríamos nada más complicado que lo que hacemos en basic.
He trabajado como coordinador de tester en empresas de programación importante así que en estos últimos cuatro años ayudé en el desarrollo del proyecto desde ese lado  y puedo decirles que hace muchos meses que no reporto ningún bug en la compilación y lo considero confiable!. Es un gran compilador!
Bueno les dejo mi lugar  https://mirazulado.itch.io/
Aquí encontrarán un juego y dos demos hechas en TRSE (Submarine Warfare y los dos demos).
No se me ocurre nada más que decir. Les ayudaré en lo que pueda.
Un abrazo desde Argentina!!

¿Qué tal compañero?

Has dado en la clave de la cuestión. Totalmente de acuerdo con todo lo que dices. Es importante el conocimiento de la máquina para sacarle todo el provecho al compilador. También es importante el propio compilador por supuesto. De vez en cuando quizás haya que echarle una mano... Hay operaciones que si el compilador no las interpreta bien puede meter demasiados ciclos añadidos p.ej.

a=5*8 es una multiplicación que bien compilada serían solo 3 ciclos de reloj (3 desplazamientos a la izquierda)

Si el compilador no lo "entiende" es mejor hacer a=5<<3 y así con otras tantas operaciones. Es ir conociéndolo y adaptarse a él para sacarle el mejor rendimiento.

Un saludo!

3
Alex64 / Re:Valkyr
« en: Marzo 15, 2024, 13:58:49 »
Hola gente!

Me habéis pillado en mala semana, pero me parecía mal no jugarlo ya que el gran Alex lo ha propuesto. Muchas gracias por ello!!
Ahí va mi primera partida. 28372

4
Desarrollo / Re:CharPad, editor de chars, tiles y mapas
« en: Marzo 06, 2024, 15:21:07 »
Bien, es lógico que el tema se complique porque no es tampoco fácil de explicar.

Entiendo lo que me dices y es lo que estoy haciendo (al final me salió mientras voy aprendiendo). El caso es que con una pantalla está super claro.

Pero desde CharPad tengo generadas 4 o 5 pantallas de forma consecutivas, asi que luego de la primer linea de datos no tengo la segunda linea de la primer pantalla sino la primer linea de la segunda pantalla ¿se entiende? es como si fuera un mapa para scroll.
Asi que para saltar a la segunda linea debería saber el ancho total del mapa para poder saltear todos esos datos.

Esto ahora lo puedo solucionar generando cada pantalla de forma independiente, sería lo mas simple.

Pero me queda la duda como se hace con las pantallas con scroll.

Bueno, es que yo lo hacía así también. Es decir, no exportaba todo el mapeado, sino pantallas independientes. En el tema del Scroll ya no tengo claro como se hará... En todo caso para hacerlo como tu dices, en el momento que compilas para probar, ya sabes las pantallas que tienes metidas. Antes de compilar modificas el valor correspondiente al número de pantallas que tienes y si añades más, modificas el valor. O estableces un valor máximo, por ejemplo de 40 pantallas y lo mantienes salvo que crezca...no le veo más problema salvo que me pierda algo, que también puede ser (soy un programador sinver)

5
Desarrollo / Re:CharPad, editor de chars, tiles y mapas
« en: Marzo 06, 2024, 15:16:35 »

Por ejemplo para la colisiones con el escenario, ¿usaste la misma función que para el protagonista?

Podría usarse, pero hay que tener en cuenta que los enemigos de randoom solo tienen dirección izquierda/derecha y caída por gravedad. El Protagonista además tiene salto con lo cual hay que tener en cuenta mas cosas...mas puntos de colisión pej.cuando chocas con el techo al saltar. Lo que hice fue crear una segunda función partiendo del código de la primera pero simplificada. Eso aunque es algo más de código, mejora el rendimiento. La rutina de colisión y movimiento se ejecuta en cada ciclo del gameloop y por cada elemento en movimiento. En caso de Randoom 8 veces.... bueno, en Randoom hice una cosa rara. En cada ciclo movía el player y un enemigo... osea Player/enemigo1,  Player/Enemigo2 etc...pero no te lo recomiendo, es mejor hacer las cosas lo mas ortodoxamente posible :-P

6
Desarrollo / Re:CharPad, editor de chars, tiles y mapas
« en: Marzo 06, 2024, 15:03:49 »


¿cómo hiciste para crear esa tabla?
Me imagino que fue a mano en plan, poniendo los valores por código. Pero sé que se puede hacer usando editores, no creo que estén entre las opciones de CharPad.

[/b]

Si, todo por código, por eso digo que es un dolor. Ahí creo que el charpad no ayuda gran cosa. Una manera quizás sencilla, que simplificaría esta tabla podría ser por ejemplo, establecer un caracter invisible con material 5. En cuyo caso situas ese caracter 2 veces en una plataforma (en el extremo derecho y el izquierdo). Al sinver solo le estableces la posición X/Y y la velocidad. Cuando el sinver alcance el Char invisible con material 5 le inviertes la velocidad (multiplicarla por -1) con lo cual giraría al sentido contrario. Cuando alcance el otro extremo hará lo mismo. Evidentemente para hacer esto, la velocidad debe ser una variable entera con signo.

7
Desarrollo / Re:CharPad, editor de chars, tiles y mapas
« en: Marzo 06, 2024, 11:57:04 »
Me encuentro con un problema en esto del mapeado.

Al hacer las pantallas como si fuera un scroll, una detras de la otra, luego para leerlas es un lio porque ¿cómo se cuanto sumar para llegar a la fila siguiente, si no sé el ancho total del mapa?

No sé si se entiende...

Cada pantalla tiene 10 tiles, pero el mapa que tengo con CharPad tiene (supongamos) 6 pantallas.

Si quiero mostrar la primer pantalla empiezo leyendo desde cero pero al llegar a 10 tendría que pasar a la linea de abajo y eso significa sumar el total de todo el mapa para llegar a la primer columna de la segunda linea.

No me parece una buena idea... igual me pregunto cómo lo hacen cuando tienen un mapa con scroll, que tienen que ir metiendo a la pantalla una columna, ¿hay que saber de antemano ese ancho? ¿y si cada nivel tiene un ancho distinto?. Se me ocurren soluciones pero me pregunto si no hay otras opciones.

@Dozznar @jicas

Con el tema del Scroll y tiles la verdad no he trabajado, supongo que del problemas que hablas es para hacer un flip Screen. No acabo de entender muy bien tu problema....

¿Por qué dices que no sabes el ancho? De normal (o por lo menos lo que yo hago) al diseñar pantallas formadas por tiles, es tener unos tiles que encajen con el tamaño de la pantalla. Por ejemplo tiles de 5x5.

Con esto tendrías 8 Tiles horizontales (8x5=40) y 5 verticales (5x5=25) Entonces ya sabes que tienes que poner esos 8 tiles y luego bajar 5 caracteres en la pantalla para poner los siguientes 8.

Los Tiles almacenarán una secuencia consecutiva de 25 caracteres (un vector de caracteres) ej:

Tile1[25]={1,5,6,8,34,12,12,21,34,2,5,45,35,23,53,50,21,12,4,65,45,5,67,4,89}
Tile2[25]={2,8,9,12,26,16,1,1,34,23,5,12,32,25,58,67,2,16,88,99,32,12,6,14,8}

Escribes el Tile1 así: 5 caracteres seguidos en la memoria 0 de pantalla.
                              5 caracteres seguidos en la memoria 0+40 de pantalla.(Osea una fila mas abajo)
                              5 caracteres seguidos en la memoria 0+80 de pantalla.(Osea 2 filas mas abajo)
                              5 caracteres seguidos en la memoria 0+120 de pantalla.(Osea 3 filas mas abajo)
                              5 caracteres seguidos en la memoria 0+160 de pantalla.(Osea 4 filas mas abajo)

Escribes el Tile2 así: 5 caracteres seguidos en la memoria 0+5 de pantalla.
                              5 caracteres seguidos en la memoria 0+45 de pantalla.(Osea una fila mas abajo)
                              5 caracteres seguidos en la memoria 0+85 de pantalla.(Osea 2 filas mas abajo)
                              5 caracteres seguidos en la memoria 0+125 de pantalla.(Osea 3 filas mas abajo)
                              5 caracteres seguidos en la memoria 0+165 de pantalla.(Osea 4 filas mas abajo)

Al terminar el octavo Tile bajas 5 filas de pantalla para escribir el noveno. (Osea en la posición 200. 40*5)

Y así hasta completar todo el mapeado..

El mapa de pantalla que exportas en "bin" con charpad, contiene un set de 40 tiles almacenados consecutivamente en un vector y los guarda de izda a dcha y de arriba a abajo (OPQA de toda la vida).

No sé si te aclaro algo o te lío mas :-P








8
Desarrollo / Re:CharPad, editor de chars, tiles y mapas
« en: Marzo 06, 2024, 10:09:37 »
@Dozznar también me interesa saber cómo hiciste en tus juegos para cada pantalla, enemigos o información especial de la pantalla.

Pues a ver si te lo resumo rápido. Al final es todo una evolución...

Tanto el Bomb run como el fart Escape (los inicios) el sistema de colisión era muy sencillo, usando las prestaciones del VIC. (Colisión sprite/Background en Bomb run y Sprite/Sprite en Fart Escape) Para editar las pantallas en Bomb run que era modo bitmap no usé Charpad. Creo que fue Multipaint. Para el Fart Escape si usé el charpad a un nivel muy básico....

En el Juanje Juega, Seguía con la colisión Sprite/Sprite hardware pero ya fue necesario implementar colisión software con las plataformas. Aquí, tiré del Charpad para establecer los caracteres "colisionables". Lo hice gestionado el tema de los "materiales" que no sé si lo has visto. Chars con material 0 eran aire, material 1 suelo, material 2 escalera etc etc... Luego había que implementar el algoritmo correspondiente para que el sprite detectara estas circunstancias.  La animación del los sinvers era bastante simple pero costosa de "setear", para cada pantalla había una tabla tipo:

Enemigo1--->Posx,Posy,Velocidad,DesplazamientoX,DesplazamientoY, Cambio de sentido aleatorio (si o no) etc...

En Randoom También uso el tema de los materiales. Para los sprites ya uso colisiones por Software y la mayor evolución viene de la animación de los sinvers... debido a lo costoso que era en JJ, quería hacer que tuvieran un movimiento autónomo ( Que detectaran los choques con las plataformas o que cayeran al llegar al borde de la misma) De esta mánera solo hay que situarlos en pantalla y cobran vida..

Y en Valkyr, uso software sprites, aquí el Charpad solo me sirvió para los márcadores, la portada y el diseño de los enemigos que eran Chars.


9
Desarrollo / Re:TRSE, Turbo Rascal Sintax Error
« en: Marzo 04, 2024, 19:35:17 »
Pues por aquí ando también. A ver si desempolvamos viejos libros de Turbo Pascal. Lo dimos un año como asignatura en el grado superior de informática de gestión. Lo recuerdo como muy sencillo de programar (parecido al Basic) pero mas potente por la inclusión de Bibliotecas. No recuerdo si también se usaban punteros

10
Desarrollo / Re:CharPad, editor de chars, tiles y mapas
« en: Marzo 04, 2024, 17:14:33 »
Al Scroll del C64 (Hardware) me gustaría un día dedicarle un directito. Hacer un Scroll Software (al caracter) de una linea de texto es muy sencillo. Cualquier programador experto como usted deducirá el procedimiento. ;-P

El tema es cuando te metes en un Scroll al pixel (Hardware). Aquí el VICII no nos ayuda tanto como nos hubiera gustado. Básicamente (resumiendo), lo único que ofrece es un registro al que le metes un valor del 0 al 7. Este valor simplemente desplaza la pantalla (Toda la pantalla) a la derecha/izquierda o arriba/abajo  el número de pixels que indiquemos en el registro. En un juego, salvo que el área de juego sea toda la pantalla no acaba de ser muy práctico ya que necesitamos meter marcadores seguramente. Tenemos dos opciones:

1.- Poner los marcadores como Sprites (no se ven afectados por el scroll) Es una técnica que queda bastante chula en algunos juegos ya que el "Score" por ejemplo, queda en un overlay sobre el área de juego. El problema es que tenemos el límite de 8 sprites para el juego y los marcadores. Obviamente los juegos que usan esta técnica, multiplexan para saltarse ese límite, lo que implica técnicas de manejo del Raster. Que bueno, tampoco son complicadas, es meterse un poquito más.

2.- Hacer que parte de la pantalla no se vea afectada por el Scroll. Esto también se maneja por medio del raster, interrumpiendo el trazado de la imagen cuando lleguemos a una línea concreta de pantalla.

En ambos casos hay un problemilla añadido. El volcado de los datos de la imagen a la pantalla debe hacerse rápido o si no queda un efecto de "LAG" muy feo. Para solucionarlo se suele usar técnicas de doble buffer de pantalla.
 
De todo esto hay bastante documentacion por aquí https://codebase64.org/doku.php?id=start. (En perfecto Inglés y para ASM)

En el Oscar 64 (ya para "C") hay en la carpeta "samples" código aplicado a ambas técnicas, entre otras cosas..

https://github.com/drmortalwombat/oscar64

Por último en mi "afamado" "Fart Scape" uso la segunda técnica de una manera chapucera pero me funciona. Y creo que también tengo algún ejemplo con código sencillo que estaría dispuesto a compartir si me prometes no reirte al verlo ;-P

11
Desarrollo / Re:CharPad, editor de chars, tiles y mapas
« en: Marzo 04, 2024, 16:44:49 »
Y otra pregunta mas... ¿qué opción usas para exportar los datos?

Yo supongo que lo mejor sería .BIN
Si, siempre se exportan en Bin. Se exporta el set  "Chars", "Map" y "Attrib map. Después en el programa hay que hacer una rutina para cargar los caracteres en la memoria de caracteres. Y luego otra que cargue el Map y lo "colorice".

Es una buena idea usar alguna rutina de compresión, ya que cada pantalla ocupa 1kB. Tengo bastante código en "C" por si quieres echarle un ojo, igual te resulta más accesible que el ASM, aunque en concreto estas rutinas son bastante sencillas de implementar. Básicamente copiar datos de una zona de memoria a otra.

12
Desarrollo / Re:CharPad, editor de chars, tiles y mapas
« en: Marzo 04, 2024, 16:39:27 »
Joe, pues no pensaba que habías usado ese modo Jicas. Nunca me he metido con él porque los 64 caracteres de tope me parecía un poco limitante. Lo cierto es que al margen de este problema es un modo que emula muy bien las prestaciones de color del Spectrum

13
General / Re:Phantomas III The Return of Brok
« en: Febrero 13, 2024, 23:07:23 »
Enhorabuena por este proyecto. Tiene muy buena pinta!

14
Alex64 / Re:Rick Dangerous II
« en: Febrero 08, 2024, 22:14:01 »
Mierda. Me han matado justo cuando he averiguado como salir de ahí. Las duchas heladas, Una de ellas se puede apagar. Hay un pulsador a la derecha un poco más abajo. Lo que pasa es que tras el hielo no se ven. Tras del hielo no se veeee, no se veeee, no se veeeee.

15
Alex64 / Re:Rick Dangerous II
« en: Febrero 08, 2024, 17:50:40 »
Mira que me estáis obligando a forzar la máquina jeje

Páginas: [1] 2 3 ... 10