CPCtelera, desarrollar juegos para Amstrad de forma sencilla

Programando el Amstrad en BASIC, C, etc.
corpiano
Me voy lanzando
Me voy lanzando
Mensajes: 88
Registrado: Dom 26 Oct , 2014 10:38 am

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor corpiano » Jue 06 Ago , 2015 8:49 am

Hola.

Todavía no he probado la cpctelera y hablo sin conocimiento, pero a bote pronto me vienen a la cabeza 2 preguntas:

1. En el vídeo de ejemplo se puede ver como un fondo más o menos "cuadrado" en tiempo de diseño se "aplasta" al ejecutar el juego en modo 0. ¿Se puede utilizar alguna herramienta como Sprot o RGAS que permita trabajar diseñando imágenes directamente en modo 0?

2. Ya tuve quebraderos de cabeza utilizando la librería CPCRSLIB para mover un sprite de izquierda a derecha con precisión de 1 pixel en modo 0. En los ejemplos de la cpctelera que he visto parece que la precisión del movimiento en modo 0 es de 1 byte (2 pixels). ¿Estoy en lo cierto o me equivoco?


Estaría genial que una charla de un certamen retro se centrara en la creación de un videojuego en vivo y en directo para CPC utilizando la cpctelera. Ese día probablemente llegará, pero por favor, pido encarecidamente que ese día algún alma caritativa tenga una webcam o similar para que podamos verlo desde casa (y rebobinar las veces necesarias).

Un saludo muy fuerte desde málaga!!!

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor ronaldo » Jue 06 Ago , 2015 1:29 pm

Buenas preguntas, @corpiano :). Te contesto:
  • CPCtelera incluye las últimas versiones de RGAS e Img2CPC como herramientas de diseño. Con ambas puedes crear imágenes para cualquier modo, incluyendo modo 0, por supuesto. De hecho, en esta versión puedes crear imagenes con Gimp o Photoshop y pasarlas a tiles / sprites de forma automatizada con cpct_img2tileset. También puedes crear mapas de tiles con Tiled, exportarlos a CSV y utilizarlos directamente en tú código.
  • La versión actual de CPCtelera no tiene soporte directo (a nivel de API) para sprites con precisión al pixel, aunque está en la lista de tareas para próximas versiones. Sin embargo, tienes un ejemplo de cómo puedes implementarlo en C incluido en la carpeta examples/advanced/move1pixel. Este ejemplo está incluído en la última actualización del github y va a estar incluido en la bugfix release que voy a sacar hoy :).
Aquí tienes un vídeo que muestra el ejemplo que te digo en movimiento:


Muy probablemente haremos un taller de programación de videojuegos con CPCtelera este año en Retroconsolas Alicante. Conforme se acerque la fecha lo iremos anunciando. Por supuesto, trataremos de grabarlo y transmitirlo en Videostreaming en directo, como el año pasado :).

De todas formas, mientras tanto, te animo a descargártela y probar. Tienes toda la documentación online y viene con un montón de ejemplos de código. Además, aquí siempre estamos para echarte una mano con lo que necesites ;).

corpiano
Me voy lanzando
Me voy lanzando
Mensajes: 88
Registrado: Dom 26 Oct , 2014 10:38 am

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor corpiano » Jue 06 Ago , 2015 1:47 pm

Hola.

Gracias por tus respuestas. En el ejemplo de precisión de 1 pixel veo que el quid de la cuestión está en la función shiftSprite. A nivel de C yo también utilicé hace tiempo una función de rotación dinámica de sprites para CPCRSLIB (de hecho, está implementada en el ejemplo http://amstrad.es/forum/download/file.php?id=2988). Supongo que la mía está menos optimizada pero básicamente el concepto de rotación de sprites es el mismo.

Respecto a la librería, no la voy a usar por ahora. El tiempo que tengo disponible está totalmente dedicado a un juego que tengo que entregar antes de final de Octubre.

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor ronaldo » Jue 06 Ago , 2015 2:03 pm

Sí, así es. El quid de la cuestión es mover los bytes de los sprites para ocupar las posiciones impares. Se puede hacer de formas más o menos optimizadas, pero la tarea es esa. En última instancia puedes tener 2 copias del sprite: una en posición par y otra en posición impar. Ocupa mucha memoria, pero sería lo más rápido. Realmente la tuya no tiene porqué estar más o menos optimizada: hacerlo en C sin esforzarse mucho es bastante lento de por sí (comparado con una buena rutina optimizada en ensamblador) :).

Sin problema :). CPCtelera está ahí para cuando cada cual quiera y le apetezca. Como curiosidad, hay gente usandola como sistema de build, sin utilizar lo que es propiamente la librería. Incluso una persona está usando CPCRSLib como librería y CPCtelera como sistema de compilación :D.

Si en un futuro la pruebas, pásate y nos cuentas las dudas, ideas y sugerencias que te vengan, que siempre será muy útil :D.

Suerte con tu juego. A ver si este año consigues un resultado igual o mejor que el año pasado en el CPCRetroDev :)

KaosOverride
Keeper of The Forum
Keeper of The Forum
Mensajes: 712
Registrado: Vie 27 Feb , 2009 12:21 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor KaosOverride » Vie 07 Ago , 2015 12:58 am

Chachi, he logrado lanzar el Img2CPC.exe y el RGAS.exe que estan hechos en .NET gracias a MONO en la raspberry

He tenido que instalar todo esto de MONO

sudo apt-get install mono-runtime libmono2.0-cil libmono-winforms2.0-cil mono-vbnc
--------
Carpeta publica [url=https://mega.nz/#F!W5IyhbLa!51JpgZqvyx6j__v12Pr9QA]MEGA Amstrad[/url]
Carpeta proyecto [url=https://github.com/KaosOverride]GitHub[/url]

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor ronaldo » Dom 09 Ago , 2015 5:57 pm

Gracias a Augusto Ruiz acabamos de sacar la release 1.2.2 de CPCtelera integrando una nueva versión de Img2CPC reescrita entera en C++, y que corre código nativo en todas las plataformas (incluída la Raspberry Pi). Se puede seguir utilizando cómodamente a través del script cpct_img2tileset :).

Espero que os guste! :D

KaosOverride
Keeper of The Forum
Keeper of The Forum
Mensajes: 712
Registrado: Vie 27 Feb , 2009 12:21 pm

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor KaosOverride » Lun 10 Ago , 2015 9:31 am

Mola, asi menos peso para MONO, Ya solo falta el RGAS :D
--------
Carpeta publica [url=https://mega.nz/#F!W5IyhbLa!51JpgZqvyx6j__v12Pr9QA]MEGA Amstrad[/url]
Carpeta proyecto [url=https://github.com/KaosOverride]GitHub[/url]

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor ronaldo » Lun 10 Ago , 2015 10:46 am

Ese estará más complicado que lo veas en nativo. De todas formas, es mucho más cómodo en Raspberry hacer gráficos con gimp en 1 fichero y convertirlos de un plumazo con cpct_img2tileset

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

#CPCtelera 1.2.3 release crítica de corrección de bugs

Mensajepor ronaldo » Vie 14 Ago , 2015 5:27 pm

Acabamos de sacar la release 1.2.3 de CPCtelera. Esta es una release crítica y os recomiendo encarecidamente actualizar. Detalles:
El motivo principal es que hemos descubierto otra reproducción del bug de optimización de llamadas de cola de SDCC, que sucede con funciones que utilizan convención __z88dk_callee y parámetros impares en número de bytes. Cuando el bug sucede, el programa retorna a puntos aleatorios, por lo la máquina se cuelga o reinicia.

Hace unas semanas ya corregimos y corregimos una primera primera ocurrencia de este bug, en todas las funciones __z88dk_callee con parámetros. La release 1.2 de CPCtelera ya incluía un fix para este bug.

Para esta segunda ocurrencia del bug, contamos con un fix oficial de los desarrolladores de SDCC, que podéis encontrar en su repositorio en el commit 9293 (del pasado 10 de agosto). El fix oficial cubre ambos casos y también corrige otro bug encontrado sobre desplazamientos variables a la izquierda. Hemos importando esta solución y la versión de SDCC incluída en CPCtelera ya cuenta con ella.

Nota importante para usuarios de SDCC:
Si usáis SDCC sin CPCtelera, os recomendamos encarecidamente que os bajéis el último snapshot disponible y NO utilicéis la release 3.5.0. Estos bugs que han corregido son bastante complicados de detectar y pueden costaros muchas horas de desarrollo. Es preferible estar actualizado.

Otros detalles:
Para quienes queráis testear, en los últimos commits del repositorio hemos incluído la conversión automática de ficheros binarios a arrays de C. Esto hace que todos los ficheros .bin puestos en src/ se conviertan automáticamente y compilen junto con el proyecto, pudiendo hacer uso inmediato de ellos en vuestros programas.

Esta funcionalidad ha salido del debate reciente en este hilo. Gracias a @na_th_an y @Artaburu por plantear las dudas y aportar las ideas que han llevado a esta funcionalidad :D.
Última edición por ronaldo el Vie 14 Ago , 2015 7:45 pm, editado 1 vez en total.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor Artaburu » Vie 14 Ago , 2015 6:53 pm

Muchas gracias por el soplo, bajando versión corregida.

Lo que no tenía ni idea es lo del callee de z88dk, es nuevo en SDCC? Lo había visto el otro día mientras miraba la CPCTelera pero se me olvidó comentarte.
Salu2,
Arta

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor ronaldo » Vie 14 Ago , 2015 7:18 pm

Sí, SDCC 3.5.0 incluyó __z88dk_callee y __z88dk_fastcall como nuevas convenciones de llamada. Es parte de su esfuerzo de integración con Z88DK.

Las dos convenciones de llamada son muy útiles para la mejora del rendimiento en general. He cambiado la mayoría de las rutinas de CPCtelera a una de las 2 convenciones de llamada ganando ciclos y bytes de memoria (si echas un ojo a los commits previos a la 1.2. podrás ver los cambios). Os recomiendo mucho que les echéis un ojo porque merecen la pena.

Lo que sucede, claro, es que no lo han testeado demasiado. Nada más cambiar a __z88dk_callee apareció el bug de las llamadas de cola (tail jumping). Es una optimización que hace el compilador sustituyendo código como este:

Código: Seleccionar todo

mifuncion:
....
call otrafuncion
ret
por este,

Código: Seleccionar todo

mifuncion:
...
jp otrafuncion
De modo que 'otrafuncion' vuelve directamente al quien llamó a 'mifuncion' aprovechando la dirección de retorno que está ya en la pila. Esto funciona siempre que 'otrafuncion' no tenga parámetros, pero esto último no lo tuvieron en cuenta en SDCC 3.5.0. Por eso, en SDCC 3.5.0, esta optimización hace cascar al programa: 'otrafuncion' espera que los primeros 2 bytes de la pila sean la dirección de retorno, pero se encuentra un parámetro en su lugar, haciendo que todo explote.

Este bug puede no aparecer nunca, si no se da la casualidad de llamar a una función __z88dk_callee como última acción dentro de otra función. Por eso, se ve que no lo tenían muy probado.

En el último snapshot esto está bien corregido. Hasta ahora lo hemos arreglado con un par de parches prácticos, pero ya tenemos un fix bueno.

Avatar de Usuario
Artaburu
Trasteador
Trasteador
Mensajes: 8419
Registrado: Vie 07 Oct , 2005 6:18 pm
Ubicación: En tu pantalla

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor Artaburu » Vie 14 Ago , 2015 7:27 pm

Estupendo porque yo lo echaba de menos de z88dk, pasar un parámetro en HL en lugar de en la pila.
Como bien dices, se ahorran muchos bytes y ciclos y en alguna función puede suponer hasta más trabajo buscar el parámetro que hacer la acción.
Salu2,
Arta

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor ronaldo » Vie 14 Ago , 2015 7:50 pm

Sin duda, lo de pasar un parámetro en HL (o L o DE:HL, según el tamaño) es una bendición en muchos casos. El __z88dk_callee también es muy buena opción en general y, por lo que he visto en código, es habitual en Z88DK.

La opción genérica de introducir los parámetros en la pila, esperar que la función deje la pila en el mismo estado, y retirarlos al volver, me parece muy mala en cuanto a rendimiento en general, por lo menos en el Z80. Es muy standard, eso sí, pero cuando hablamos de rendimiento es un poco dolorosa.

Avatar de Usuario
MiguelSky
Lord of Short Time
Lord of Short Time
Mensajes: 6969
Registrado: Sab 08 Oct , 2005 2:02 am
Contactar:

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor MiguelSky » Sab 15 Ago , 2015 5:01 am

Vaya, al intentar instalar la versión nueva:
device/lib/ds400/Makefile
config.status: error: cannot find input file: `src/z80/Makefile.in'
!!ERROR!!: SDCC was not adequately configured for some reason.
Makefile:42: fallo en las instrucciones para el objetivo

Avatar de Usuario
ronaldo
Forum Addict
Forum Addict
Mensajes: 358
Registrado: Sab 14 Sep , 2013 9:31 pm
Ubicación: Alicante
Contactar:

Re: CPCtelera, desarrollar juegos para Amstrad de forma senc

Mensajepor ronaldo » Sab 15 Ago , 2015 8:19 am

@MiguelSky: Estoy haciendo pruebas de instalación y, por el momento, no puedo reproducir el problema. He probado a instalar la release 1.2.3 y la última versión del repositorio limpias en Linux y Windows XP/Cygwin y me compilan perfectamente.

Dame algún dato más: ¿Es la 1.2.3 descargada en zip o es del repositorio? ¿La instalas ejecutando el setup.sh? ¿Actualizas reinstalando de 0 o sobre una versión que tenías ya instalada? ¿En qué sistema operativo? Si es Windows/Cygwin, ¿Cygwin 32 o 64? ¿Hace mucho que tienes instalado Cygwin? ¿Has probado a actualizarlo? ¿Si instalas la 1.2 o la 1.2.2 te pasa lo mismo?

Ahora mismo no tengo idea de qué puede estar provocando el fallo concretamente. El fallo que te da es como si el configure de la instalación de SDCC no hubiera funcionado bien, y no hubiera creado el Makefile.in que se usa después para compilar. El tema es que no puedo reproducir el fallo :cry: .


¿Quién está conectado?

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


La Comunidad Española
ESP Soft, juegos para tu CPC Foro de Amstrad CPC Todos los juegos para CPC en un CD Web dedicada al Amstrad CPC (utilidades) Información útil para el CPC (talleres) Selección de juegos de Amstrad CPC Mundo CPC Pree Play then any Key CPC Basic