Commodore manía

Commodore 64 => Desarrollo => CC65 => Mensaje iniciado por: josepzin en Mayo 20, 2010, 15:21:17

Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 20, 2010, 15:21:17
Como ya he comentado por ahi, mi intencion es crear una libreria basica para juegos, como la Fourspriter  (http://www.mojontwins.com/2009/10/01/nueva-version-de-fourspriter-1-0/)de los mojones, basandome en el funcionamiento de la z88dk / SP1 (http://www.z88dk.org/wiki/doku.php) de Spectrum

Esto es todavia mas una idea que algo concreto, pero por algo se empieza! Asi que usando el codigo de Dr.Fred y sus sprites ya he comenzado a hacer cosas.

Para empezar, creo que seria necesario tener las siguientes librerias:
- input (http://z88dk.cvs.sourceforge.net/z88dk/z88dk/include/input.h?view=markup): para gestionar los joystick de cada puerto y el teclado
- sprite: para controlar los sprites
- tiles: para dibujar los fondos

Y luego mas adelante algunas mas:
- interrupt: para gestionar interrupciones
- sound: musica y fx
-  etc...

Por mi parte, en el corto plazo me veo capacitado para afrontar las tres primeras: input,sprites y tiles, obviamente algo basico...

Y concretando, ya he comenzado la input.h, que adjunto el codigo.

Hay 3 aviones, uno se controla con el joystick 1, otro con el joystick 2 y el tercero con el teclado (falta terminar el codigo de lectura del teclado)
La libreria input.h esta copiada directamete de z88dk, por lo que el codigo tiene mucho texto solo como referencia, que ya habra que limpiar...

Descargar ejemplo: http://dl.dropbox.com/u/546470/c64/eightspriter/input.7z (http://dl.dropbox.com/u/546470/c64/eightspriter/input.7z)

Yo creo que este proyecto me viene un poco grande, asi que cualquier aporte sera beneficioso para todos. Si hubiera mas de uno (yo) interesado en hacer esto, habria que determinar primero las funciones necesarios (ya tenemos la guia de Wood y tambien de los mojones), asi podemos repartirnos un poco el trabajo y avanzar por separado. Luego llegara el momento de optimizar las funciones o pasarlas a ASM, pero al menos la estructura basica estara hecha.



Listado de funciones de eightspriter.h:
Lectura del joystick:
- in_Joy1: hecho
- in_Joy2: hecho

Cambios de modos graficos:
- bitmap_mode: hecho
- text_mode: hecho

Tipos de modos graficos y colores:
- hires_mode: hecho
- multicolor_mode: hecho
- ecm_mode: hecho
- set_border: hecho
- set_background: hecho
- set_multicolor1: hecho
- set_multicolor2: hecho
- set_multicolor3: hecho

Estoy definiendo la nombres de las funciones que controlaran los sprites, seguramente me basare en el listado de Woodmaster.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 20, 2010, 20:29:03
Eso esta muy bien. Enhorabuena josepzin.

¿Falta alguna rutinilla para generar números aleatorios o ya existe en alguna libreria de cc65?
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 20, 2010, 20:39:22
A ver si de todo esto sale algo interesante :)

Wood: no tengo idea si ya tiene algo para numeros aleatorios... quizas Carlos lo sepa, que lleva mas tiempo.

Lo que sí necesitaria es un codigo para leer la/las tecla presionada, no termino de aclararme...
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 20, 2010, 21:11:51
Cita de: "josepzin"
A ver si de todo esto sale algo interesante :)

Wood: no tengo idea si ya tiene algo para numeros aleatorios... quizas Carlos lo sepa, que lleva mas tiempo.

Lo que sí necesitaria es un codigo para leer la/las tecla presionada, no termino de aclararme...


Tienes que poner en $dc00 linea de teclas del teclado que quieres averiguar después mira el valor en $dc01.

tienes que hacer esto 8 veces para averiguar todas las teclas. Por eso es que no se usa mucho el teclado en C64, come demasiado tiempo y ademas hay un problema en que no se puede leer ciertas teclas cuando precionadas al mismo tiempo.


Port B - $DC01
+-----+-----+-----+-----+-----+-----+-----+-----+
|Bit 7|Bit 6|Bit 5|Bit 4|Bit 3|Bit 2|Bit 1|Bit 0|
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Bit 7| R/S |  Q  |  C= |SPACE|  2  | CTRL|A_LFT|  1  |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Bit 6|  /  | A_UP|  =  | S_R | HOME|  ;  |  *  |POUND|
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Bit 5|  ,  |  @  |  :  |  .  |  -  |  L  |  P  |  +  |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Bit 4|  N  |  O  |  K  |  M  |  0  |  J  |  I  |  9  |
Port A +-----+-----+-----+-----+-----+-----+-----+-----+-----+
$DC00  |Bit 3|  V  |  U  |  H  |  B  |  8  |  G  |  Y  |  7  |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Bit 2|  X  |  T  |  F  |  C  |  6  |  D  |  R  |  5  |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Bit 1| S_L |  E  |  S  |  Z  |  4  |  A  |  W  |  3  |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|Bit 0|C_U/D|  F5 |  F3 |  F1 |  F7 |C_L/R|  CR | DEL |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+

C_L/R = Cursor left/right  ;  C_U/D = Cursor up/down
S_L = Shift, left  ;  S_R = Shift, right  ;  R/S = RUN/STOP
A_UP = Arrow up    ;  A_LFT = Arrow left
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 20, 2010, 21:25:38
De algo me sonaba que el tema era puñetero! :D

Gracias, a ver que puedo hacer.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 20, 2010, 21:34:56
Copio del otro hilo:

Librerías que hay para 8bits (Spectrum y Amstrad)

cpcrslib, CPC Amstrad: http://www.amstrad.es/programacion/c (http://www.amstrad.es/programacion/c) Varios juegos desarrollados

splib2, Spectrum: http://www.speccy.org/foro/viewtopic.php?f=6&p=20774 (http://www.speccy.org/foro/viewtopic.php?f=6&p=20774) Varios juegos desarrollados, esta discontinuada y la nueva version es SP1

SP1, Spectrum: http://www.z88dk.org/wiki/doku.php (http://www.z88dk.org/wiki/doku.php) Continuacion de la splib2, aunque no sé si hay juegos españoles que la usan.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 20, 2010, 21:35:51
Funciones de Wood:


[code]
void init_irq(void);
void bitmap_mode(void);
void tile_mode(void);
void hires_mode(void);
void multicolor_mode(void);
void __fastcall__ set_vicBank(unsigned char bank);
void __fastcall__ set_bitmapPos(unsigned char pos);
void __fastcall__ set_charmemPos(unsigned char pos);
void __fastcall__ set_screenPos(unsigned char pos);
void __fastcall__ set_background(unsigned char cor);
void __fastcall__ set_border(unsigned char cor);
void __fastcall__ set_multicolor1(unsigned char cor);
void __fastcall__ set_multicolor2(unsigned char cor);
void __fastcall__ c64_PrintTile(unsigned char x, unsigned char y, unsigned char TileNum);
void __fastcall__ c64_CreateSpr(struct sprite *);
void __fastcall__ c64_SprMc(unsigned char mc1, unsigned char mc2);
void __fastcall__ c64_SprOnOff (struct sprite *);
void __fastcall__ c64_OnOff (struct sprite *);
void c64_SprEnable (struct sprite *);
void c64_SprColor (struct sprite *);
void c64_SprXexpand (struct sprite *);
void c64_SprYexpand (struct sprite *);
void c64_SprPattern (struct sprite *);
void c64_SprMcm (struct sprite *);
void __fastcall__ c64_MoveSpr(struct sprite *spr);[/quote]
Título: Libreria Eightspriter para juegos C64
Publicado por: Dr.Fred en Mayo 20, 2010, 21:48:15
En Stdlib.h de c, de toda la vida está la función rand(), para que genere números aleatorios se suele usar como semilla los milisegundos del SO.

Un consejo... empezad ya a usar funciones, que ese main empieza a crecer y a hacer daño a los ojos y vamos a terminar con un spaghetti code del que no se va a empapar ni Cristo.

Por lo demás... me parece más aparatoso tener que usar esas funciones que lo que ya estaba en mi ejemplo, que eran 2 lineas y un array para manejar el joystick, y no se si es peor el remedio que la enfermedad. Aunque quizá esto sea más portable.

Buen trabajo de todas maneras. Os deseo suerte.
Título: Libreria Eightspriter para juegos C64
Publicado por: Dr.Fred en Mayo 20, 2010, 22:02:25
Por cierto, que en cc65 teneis joystick.h. Lo digo por si puede servir de ayuda.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 21, 2010, 15:43:38
Cita de: "Dr.Fred"
En Stdlib.h de c, de toda la vida está la función rand(), para que genere números aleatorios se suele usar como semilla los milisegundos del SO.

Gracias por el aviso, he encontrado la documentacion de esa libreria:
http://www.cc65.org/doc/funcref-38.html (http://www.cc65.org/doc/funcref-38.html)


Cita de: "Dr.Fred"

Un consejo... empezad ya a usar funciones, que ese main empieza a crecer y a hacer daño a los ojos y vamos a terminar con un spaghetti code del que no se va a empapar ni Cristo.

Cristo quizas no, pero Chuck Norris si!! :D :D
Igual tambien empezare a ordenar ese "ejemplo.c"

Cita de: "Dr.Fred"

Por lo demás... me parece más aparatoso tener que usar esas funciones que lo que ya estaba en mi ejemplo, que eran 2 lineas y un array para manejar el joystick, y no se si es peor el remedio que la enfermedad. Aunque quizá esto sea más portable.

El uso de tu ejemplo es indiscutiblemente mas optimizado, pero si te fijas, con estas funciones se puede usar exactamente igual ya que al fin y al cabo lo que devuelve la funcion es el valor de  $DC01/2, luego con ese valor se puede indexar una tabla y mover el sprite (como lo habias hecho tu), o hacer los IFs y meter mas acciones al mover el joystick.


Voy a ir poniendo un listado de las funciones (en el primer comentario de este hilo), y el estado de cada una, a medida que vaya definiendo cosas.

Aunque estoy "verde", de a poco ire agregando cosas, mientras tanto las sugerencias/ayudas seran siempre bienvenidas.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 21, 2010, 22:02:45
Cita de: "Rulas_International"
Animo Jose!!!

Gracias! Lo mismo para tu juego!
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 22, 2010, 20:40:55
Wood, podrias decirme que hacen tus funciones? Voy a poner lo que yo creo.

bitmap_mode: activar el modo grafico
tile_mode: que hace??
hires_mode: activar el modo hires
multicolor_mode: activa el modo multicolor
set_background: color del fondo de la pantalla
set_border: color del borde de la pantalla
set_multicolor1: asignar color 1 de multicolor
set_multicolor2: asignar color 1 de multicolor
c64_PrintTile: me imagino que sera para poner un tile
c64_CreateSpr: crear un sprite
c64_SprMc: que hace??
c64_SprOnOff: por el nombre, desactiva un sprite.
c64_OnOff: que hace??
c64_SprEnable: : tambien activa / desactiva un sprite??
c64_SprColor: color del sprite
c64_SprXexpand: expandir en X
c64_SprYexpand: expandir en Y
c64_SprPattern: que hace??
c64_SprMcm: que hace??
c64_MoveSpr: mover un sprite, La SP1 tiene funciones especificas para mover de forma absoluta, relativa, pixel. Como se comporta esta?

Estas funciones mas o menos sospecho lo que hacen, pero tengo que refrescar conocimientos... cuando lo haga preguntare.
void init_irq:
set_vicBank:
set_bitmapPos
set_charmemPos
set_screenPos
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 22, 2010, 21:45:09
bitmap_mode: activar el modo grafico
tile_mode: que hace??
Eso es modo texto.

hires_mode: activar el modo hires
multicolor_mode: activa el modo multicolor
set_background: color del fondo de la pantalla
set_border: color del borde de la pantalla
set_multicolor1: asignar color 1 de multicolor
set_multicolor2: asignar color 1 de multicolor
c64_PrintTile: me imagino que sera para poner un tile
exacto coloca uno char en la pantalla, pero no pinta color.

c64_CreateSpr: crear un sprite
c64_SprMc: que hace??
selecciona multicolor 1 y 2 para sprites

c64_SprOnOff: por el nombre, desactiva un sprite.
es un switch que permite activar/desactivar el sprite (llamando alternadamente la funccion)
c64_OnOff: que hace??
esta ya no existe
c64_SprEnable: : tambien activa / desactiva un sprite??
solo activa el sprite
c64_SprColor: color del sprite
c64_SprXexpand: expandir en X
c64_SprYexpand: expandir en Y
c64_SprPattern: que hace??
Es el puntero a los datos gfx del sprite
c64_SprMcm: que hace??
activa el modo multicolor para el sprite en cuestion
c64_MoveSpr: mover un sprite, La SP1 tiene funciones especificas para mover de forma absoluta, relativa, pixel. Como se comporta esta?
Solo mueve de forma absoluta

hoy he creado mas una funccion que pinta un tile de 8x8 pixeles(un char) en modo bitmap, incluyendo los colores.

Aqui esta una pantalla usando esa funccion:

(http://www.mundoimg.com/imagenes/capturas/233787_mundoimg_sanmes_teste.png) (http://www.mundoimg.com)
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 23, 2010, 09:48:46
Gracias por las explicaciones.

Sobre los tiles, segun recuerdo habias comentado que el Nanako usaba tiles en modo bitmap, verdad?

Supongo que a la hora de hacer una funcion que pinte tiles habria que distinguir entre tiles graficos y de caracter.
Algo en plan PutBitmapTile, PutCharTile....
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 23, 2010, 14:40:32
Esta mañana he programado la rutina para pintar tiles 16x16 en Bitmap:

(http://www.mundoimg.com/imagenes/capturas/233875_mundoimg_sanmes_teste2.png) (http://www.mundoimg.com)
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 23, 2010, 16:45:25
Que bueno :)
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 23, 2010, 18:21:30
He ido optimizando las librerias de mover sprites de Dr.Fred, para que no haga multiplicaciones ni nada que ocupe muchos ciclos, parece que dio resultado porque ahora todo se mueve demasiado rapido !!

?Hay alguna manera de hacer que todo vaya a una velocidad aceptable? Me suena a sincronizar con el barrido... puede ser?
Título: Libreria Eightspriter para juegos C64
Publicado por: Bieno en Mayo 23, 2010, 19:32:09
Que buenos que sois....
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 23, 2010, 21:43:13
De momento la Librería permite:

- Usar sprites;
- Usar modo texto en hires como en modo mixto
- Usar modo bitmap tanto en hires como multicolor
- Leer el Joystick
- Pintar caracteres en modo texto como bitmap
- Pintar tiles de 2x2 caracteres en ambos modos
- Obtener números aleatorios entre 0 e 255
- Elegir banco de memoria del VIC
- Elegir donde poner la pantalla en memoria(tanto texto como bitmap)
- Elegir donde poner screenram (atributos) en memoria en caso de bitmap.
- Elegir donde poner el set de caracteres en memoria
- definir los colores de border, paper, multicolor1, multicolor2, color del sprite, colores multicolor1 y 2 para sprites
-
Lo del sonido es fácil, mismo que sea para sfx, se usa un sid y llamase cada sonido como si fuera una música. Es lo que hago en nanako.

¿Mas alguna idea para funcciones?

Nota: la rutina de movimiento de sprites solo usa coordenadas absolutas. Alguno problema con esto?


[code]
void init_irq(void);
void bitmap_mode(void);
void tile_mode(void);
void hires_mode(void);
void multicolor_mode(void);
unsigned char randomize(void);
void le_joystic(void);
void __fastcall__ set_vicBank(unsigned char bank);
void __fastcall__ set_bitmapPos(unsigned char pos);
void __fastcall__ set_charmemPos(unsigned char pos);
void __fastcall__ set_screenPos(unsigned char pos);
void __fastcall__ set_background(unsigned char cor);
void __fastcall__ set_border(unsigned char cor);
void __fastcall__ set_multicolor1(unsigned char cor);
void __fastcall__ set_multicolor2(unsigned char cor);
void __fastcall__ setCharsPointersLo(unsigned int *);
void __fastcall__ setCharsPointersHi(unsigned int *);
void __fastcall__ setTiles16x16PointersLo(unsigned int *);
void __fastcall__ setTiles16x16PointersHi(unsigned int *);
void __fastcall__ createSpr(struct sprite *);
void __fastcall__ sprMc(unsigned char mc1, unsigned char mc2);
void __fastcall__ sprOnOff (struct sprite *);
void __fastcall__ sprEnable (struct sprite *);
void __fastcall__ sprColor (struct sprite *);
void __fastcall__ sprXexpand (struct sprite *);
void __fastcall__ sprYexpand (struct sprite *);
void __fastcall__ sprPattern (struct sprite *);
void __fastcall__ sprMcm (struct sprite *);
void __fastcall__ moveSpr(struct sprite *spr);
void __fastcall__ paintTile(unsigned char color, unsigned char x, unsigned char y, unsigned char tileNum);
void __fastcall__ paintTile16x16(unsigned char y ,unsigned char x,unsigned char tileNum);
void __fastcall__ paintTileBMP(unsigned char color3, unsigned char color1and2,unsigned char x, unsigned char y, unsigned char charNum);
void __fastcall__ paintTileBMP16x16(unsigned char x, unsigned char y, unsigned char tileNum);[/quote]
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 23, 2010, 21:57:49
Aqui tenes el codigo del programa que ha producido la pantalla que he postado antes:
[code]
#include "c64lib1.3.h"


extern unsigned int pCharsLo, pCharsHi,pTiles16x16Lo,pTiles16x16Hi;


void main(void){

unsigned int n;
char i,j,c;

   c=0;

   set_border(BLACK);
   set_background(BLACK);
   bitmap_mode();
   set_vicBank(VIC_BANK1);
   set_bitmapPos(BITMAP_POS0);
   hires_mode();
   set_screenPos(SCREEN_POS8);
      

   setCharsPointersLo(&pCharsLo);
   setCharsPointersHi(&pCharsHi);
   setTiles16x16PointersLo(&pTiles16x16Lo);
   setTiles16x16PointersHi(&pTiles16x16Hi);


   for(n=0; n<1000;n++)
      (*(unsigned char*) (0x6000+n)) = 0;



   for(i=0; i<=38; i=i+2)
   {
      paintTileBMP16x16(i,0,1);   
      paintTileBMP16x16(i,22,1);
   }

   j=0;

   for(i=2; i<=20;i=i+2)
   {
      paintTileBMP16x16(j,i,0);   
      j=j+2;
   }
   
   for(i=26; i<=34; i=i+2)
   {
      paintTileBMP16x16(i,10,2);   
   }
   

   Loop:
   
   goto Loop;
   
}[/quote]
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 23, 2010, 21:59:02
Depués pongo aqui código de los chars y tiles. He decidido cambiar algo.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 23, 2010, 23:02:36
Wood: genial!!! Esto avanza :)
Título: Libreria Eightspriter para juegos C64
Publicado por: Dr.Fred en Mayo 24, 2010, 11:40:50
Cita de: "josepzin"
He ido optimizando las librerias de mover sprites de Dr.Fred, para que no haga multiplicaciones ni nada que ocupe muchos ciclos, parece que dio resultado porque ahora todo se mueve demasiado rapido !!

?Hay alguna manera de hacer que todo vaya a una velocidad aceptable? Me suena a sincronizar con el barrido... puede ser?

Puedes usar temporalmente la librería SLEEP en el bucle de juego, aunque seguro que no es lo más adecuado, te valdrá mientras sigues desarrollando.

Por curiosidad, ¿Cómo lo has hecho al final?
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 24, 2010, 11:52:51
Cita de: "Dr.Fred"
Puedes usar temporalmente la librería SLEEP en el bucle de juego, aunque seguro que no es lo más adecuado, te valdrá mientras sigues desarrollando.

He visto el sleep en tu código, voy a probarlo.


Cita de: "Dr.Fred"
Por curiosidad, ¿Cómo lo has hecho al final?

Sobre todo, reemplazando las multiplicaciones que hay en el MueveSprite.

En un rato copio el código asi ves las modificaciones. He intentado hacer el codigo lo mas parecido a como seria en Assembler, asi luego es mas facil convertirlo (y acelerarlo)

Por cierto, hice una wiki para ir anotando las funciones que llevo, ya voy a poner el enlace.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 24, 2010, 12:57:16
Cita de: "Dr.Fred"
Por curiosidad, ¿Cómo lo has hecho al final?


Tu funcion:
[code]void mueveSprite(int x, int y,int numSprite)
{
   int potencia=1, i=0, vc=4096*13, xm;

   //bucle para hallar la potencia (Sprite)
   for (i=1; i<=numSprite; i++)    
   {
      potencia *= 2;
   }

   if(numSprite==0)
      potencia=1;


   //Usamos el registro para la x mayor de 255
   if (x>=256)
   {
      //x=x-256;
      POKE(vc+16,PEEK(vc+16)|potencia);
   }
   if (x<256)
   {
      //POKE(vc+16,PEEK(vc+16));
      xm=255-potencia;
      POKE(vc+16,PEEK(vc+16)&xm);
   }

   POKE(vc+2*numSprite,x);
   POKE(vc+2*numSprite+1,y);
}
[/quote]


Y la misma optimizada:
[code]void MoveSprAbs(unsigned char sprite, int x, int y)
{
   unsigned short int offset, tmp;   
   unsigned char bit9 = 0x1;
   
      // Desplazar hasta el sprite a modificar
      bit9 = bit9 << sprite;
      
      tmp = PEEK(0xD010);
      if (x>256)
      {
         tmp = tmp | bit9;
      }
      else
      {
         bit9 = ~ bit9;
         tmp = tmp & bit9;
      }
      POKE(0xD010,  tmp);
         
      offset = sprite * 2; // FIXME eliminar esta multiplicacion
      POKE(0xD000 + offset, x);
      POKE(0xD000 + offset + 1, y);
}
[/quote]

La unica que me queda por optimizar es la multiplicacion del final, creo supongo con una tablita de datos se puede arreglar.
Los desplazamientos <<, OR y AND no tardan nada, en cambio las multiplicaciones tengo entendido que son "carisimas" para el 6502, que no tiene instrucciones para hacerlas.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 24, 2010, 13:19:19
josepzin,

La coordenada Y no passa de 255 por eso puedes usar unsigned char.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 24, 2010, 13:24:50
Cita de: "Wood"
josepzin,
La coordenada Y no passa de 255 por eso puedes usar unsigned char.


No pasa de 255, pero puede ser negativo... ¿no? Quizás se pueda definir como short int...?
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 24, 2010, 14:12:18
Cita de: "josepzin"
Cita de: "Wood"
josepzin,
La coordenada Y no passa de 255 por eso puedes usar unsigned char.


No pasa de 255, pero puede ser negativo... ¿no? Quizás se pueda definir como short int...?


Ah vale, no sabia que intecionabas usar numeros negativos.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 24, 2010, 14:54:58
Cita de: "Wood"
Ah vale, no sabia que intecionabas usar numeros negativos.

Sería lo lógico ¿no? Si quiero que el sprite se vaya por la parte de arriba de la pantalla debería poder poner números negativos, lo mismo para el lateral izquierdo.
Título: Libreria Eightspriter para juegos C64
Publicado por: Dr.Fred en Mayo 24, 2010, 15:09:07
Tiene mucha mejor pinta. A ver si salgo del curro y puedo probarla.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 24, 2010, 15:19:23
Cita de: "josepzin"
Cita de: "Wood"
Ah vale, no sabia que intecionabas usar numeros negativos.

Sería lo lógico ¿no? Si quiero que el sprite se vaya por la parte de arriba de la pantalla debería poder poner números negativos, lo mismo para el lateral izquierdo.


Pues yo uso de 0 a 255. Parte de esas coordenadas estan bajo el borde. no necesito de coordenadas negativas para que salga de la area visible.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 24, 2010, 15:48:14
Cita de: "Wood"
Pues yo uso de 0 a 255. Parte de esas coordenadas estan bajo el borde. no necesito de coordenadas negativas para que salga de la area visible.

Ostrassss... tienes razon! He dado por supuesto que el 0,0 de las coordenadas de los sprites era en la zona superior izquierda de la zona visible!!!

Ahora mismo lo cambio a unsigned char

?Como se puede agregar codigo assembler dentro de codigo C??

He probado con estas
[code]__asm   
...
__endasm;[/quote]


Pero el CC65 no las reconoce.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 24, 2010, 17:43:25
Cita de: "josepzin"
Cita de: "Wood"
Pues yo uso de 0 a 255. Parte de esas coordenadas estan bajo el borde. no necesito de coordenadas negativas para que salga de la area visible.

Ostrassss... tienes razon! He dado por supuesto que el 0,0 de las coordenadas de los sprites era en la zona superior izquierda de la zona visible!!!

Ahora mismo lo cambio a unsigned char

?Como se puede agregar codigo assembler dentro de codigo C??

He probado con estas
[code]__asm   
...
__endasm;



Pero el CC65 no las reconoce.[/quote]

Tienes que poner linea a linea asi: asm ("codigo");

Ejemplo:

asm ("lda #$03");
asm ("sta $d000");
.
.
.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 24, 2010, 18:01:06
Gracias, ya lo probaré, aunque parece pensado para poner poquito codigo...

¿O quizas se puede hacer esto?
asm ("lda #$03
sta $d000
...
..
sta $d000
...

");
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 26, 2010, 15:50:04
Una pregunta sobre C, estoy obteniendo el mensaje "Error: Too many local variables"... ?Que significa? Que he llenado la memoria para almacenar variables???
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 26, 2010, 19:16:14
Cita de: "josepzin"
Una pregunta sobre C, estoy obteniendo el mensaje "Error: Too many local variables"... ?Que significa? Que he llenado la memoria para almacenar variables???


Uff, nunca me ha sucedido eso... hmmm
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 26, 2010, 19:28:28
Da una mirada a cuanto te comen las variables locales, el limite es 256 bytes.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 27, 2010, 08:16:42
256 bytes... pero si eso es nada?!??! :D :D

Me imagino que para usar mas memoria tengo que acceder directamente a la memoria, verdad? A ver si encuentro algun ejemplo de como hacerlo.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 27, 2010, 16:24:48
Misterio resuelto, en lugar de crear una variable hay que crear un puntero, !Estoy entrando en el mundo de los punteros de C!! :D

Wood, he probado el ejemplo de tu libreria, aunque muestra unos tiles en pantalla, me da error en estas lineas:
[code]   setCharsPointersLo(&pCharsLo);
   setCharsPointersHi(&pCharsHi);
   setTiles16x16PointersLo(&pTiles16x16Lo);
   setTiles16x16PointersHi(&pTiles16x16Hi);[/quote]
Mas o menos el mismo Unresolved external "_pCharsHi" referenced in...
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Mayo 27, 2010, 19:50:50
es punteros tienen que indican donde estan los dados de los chars y de las tiles, y los tienes que pasar al la libreria con

void __fastcall__ setCharsPointersLo(unsigned int *);
void __fastcall__ setCharsPointersHi(unsigned int *);
void __fastcall__ setTiles16x16PointersLo(unsigned int *);
void __fastcall__ setTiles16x16PointersHi(unsigned int *);

conforme necesario.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Mayo 30, 2010, 16:46:12
Sigo por aqui.

Llegado a este punto, veo que no tengo idea como incluir datos de sprites, chars o lo que sea dentro de un programa, me refiero a datos importados desde alguna aplicacion y desde un archivo independiente.

Asi que me he estado dedicando a aprender como funciona eso, me costo un poco pero creo que mas o menos ya lo tengo.

He visto varios ejemplos publicados por esta web http://www.microarcade.net/c64/c64demos.html (http://www.microarcade.net/c64/c64demos.html) concretamente el del Walker (mueve un personaje no sprite sobre un fondo, muy interesante) que me han sido de mucha utilidad, ademas el make.bat tambien me fue de mucha utilidad.
Creo que voy a hacer un minitutorial sobre este proceso de aprendizaje que estoy haciendo, porque seguramente para los que ya estan metidos en el tema resulta muy obvio, pero yo que no tocaba un .BAT desde hace AL MENOS 10 anios, no resulta nada obvio. Y eso sin hablar de la parte de C, CC65 y cosas del C64. Voy a hacer el tutorial que me hubiera gustado encontrar a mi :D

Y mientras aprendo sigo avanzando con mi EightSpriter, de a poco, porque tengo que asimilar mas conocimientos a medida que avanzo.

Tengo pendiente probar la lib de Wood, pero antes tengo que terminar de aprender algunos conceptos del direccionamiento del VIC, sus bancos y donde almacena las definiciones de los graficos.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 03, 2010, 08:49:00
Experimentando con el ECM mode... que cosas que tiene el VIC!!
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 04, 2010, 09:59:15
Me alegro que avances  :D , por cierto he visto que en computeremuzone ya se te ha ofrecido un grafista y todo.

Tienes algún proyecto entre manos? me refiero más allá de la propia librería, algo que programar con ella una vez la termines...
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 04, 2010, 10:20:35
Voy avanzando de a poco, "descubriendo" como funcionan los modos gráficos, tiene tela el tema de los colores de los UDG, que si el bit no se que entonces el caracter esta en hires, que si el bitnosecuanto entonces es el color ECM pero solo 4 colores... dios... :D

Pero todo me sirve para ir tomando agilidad.

Sobre proyecto, no, no tengo nada en mente, en todo caso, cuando esté un poco mas ágil con todo esto, quizas me atreva a portar alguno de los juegos mojones, que al estar libres los gráficos, mapas, tiles facilita mucho. Por ejemplo el Uwol me parece un lindo juego, con pantallas independientes y ademas teniendo los códigos fuentes de guia/base para portar o usar comop referencia... pero me adelanto a los hechos, me queda un buen camino todavía...
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Junio 07, 2010, 19:54:11
Cita de: "josepzin"
Voy avanzando de a poco, "descubriendo" como funcionan los modos gráficos, tiene tela el tema de los colores de los UDG, que si el bit no se que entonces el caracter esta en hires, que si el bitnosecuanto entonces es el color ECM pero solo 4 colores... dios... :D

Pero todo me sirve para ir tomando agilidad.

Sobre proyecto, no, no tengo nada en mente, en todo caso, cuando esté un poco mas ágil con todo esto, quizas me atreva a portar alguno de los juegos mojones, que al estar libres los gráficos, mapas, tiles facilita mucho. Por ejemplo el Uwol me parece un lindo juego, con pantallas independientes y ademas teniendo los códigos fuentes de guia/base para portar o usar comop referencia... pero me adelanto a los hechos, me queda un buen camino todavía...


Es verdad ese modo ECM es muy interesante, yo he empezado un juego en ese modo pero despues lo pasé a bitmap multicolor porque me han dicho que se parecia mucho a spectrum los graficos en modo ECM. Pero en ese modo solo se pueden usar 64 characteres diferentes, ya que los 256 son divididos por 4 para los 4 colores de fondo extra.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 08, 2010, 09:43:27
Yo creo que los modos de caracteres se pueden aprovechar mas cuando se puede dividir la pantalla en varias "franjas" horizontales, asi se puede usar mas colores y caracteres en la pantalla.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Junio 08, 2010, 11:43:27
Cita de: "josepzin"
Yo creo que los modos de caracteres se pueden aprovechar mas cuando se puede dividir la pantalla en varias "franjas" horizontales, asi se puede usar mas colores y caracteres en la pantalla.


Exacto, en ese juego que he mencionado arriba yo tenia dos franjas porque 64 chars no era suficiente. Pero no te olvides que cada vez que creas una franja necesitas otro juego de caracteres que son de 2K cada uno.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 08, 2010, 11:47:48
Cierto, y la memoria vuela rapido...

Supongo que poner los tiles en modo grafico resulta ser la forma mejor, aunque tambien supongo que cuando tienes un scroll es mucho mas lento y ahi entonces conviene usar caracteres.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Junio 08, 2010, 12:26:22
Cita de: "josepzin"
Cierto, y la memoria vuela rapido...

Supongo que poner los tiles en modo grafico resulta ser la forma mejor, aunque tambien supongo que cuando tienes un scroll es mucho mas lento y ahi entonces conviene usar caracteres.


Para scroll lo mejor es modo tiles claro. Pero uno buen ejemplo de juego con scroll en modo bitmap es Stormlord.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 09, 2010, 08:34:25
Los punteros empiezan a obedecerme.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 17, 2010, 16:39:13
En estos tiempos que caen tener exceso de trabajo es de agradecer, pero odio no poder dedicar mas tiempo a este proyecto...

Cuando puedo pensar en el tema no hago mas que darle vueltas en la cabeza, que ganitas de ir haciendo cosas!! Pero cuanto que me falta por aprender todavía!, al menos hice lo que vengo posponiendo desde hace años: EMPEZAR.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 19, 2010, 10:58:28
Woodmaster: ¿Qué editor de chars/mapas usas?

He probado uno muy simple pero que me parece muy practico y ademas ni hace falta instalar, se llama CharPad : http://noname.c64.org/csdb/release/?id=26959 (http://noname.c64.org/csdb/release/?id=26959)
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 20, 2010, 16:36:02
El CharPad tambien sirve para crear tiles y mapas.

He visto este otro: CartographPC (http://www.arkanixlabs.com/cartographpc.php)

Parece que hay gente que critica el CharPad por tener un formato propio, o algo asi... http://noname.c64.org/csdb/forums/?roomid=11&topicid=34794&firstpost=12 (http://noname.c64.org/csdb/forums/?roomid=11&topicid=34794&firstpost=12)

Tengo que revisar esta lista:
OpenTUME - Could well be use for C64 purposes.
Tiled - Java-based map editor.
Mappy - Nice multi-platform Amigalike map-editor.
TileStudio - Completely programmable output.
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 21, 2010, 09:12:27
Cita de: "josepzin"
Woodmaster: ¿Qué editor de chars/mapas usas?

He probado uno muy simple pero que me parece muy practico y ademas ni hace falta instalar, se llama CharPad : http://noname.c64.org/csdb/release/?id=26959 (http://noname.c64.org/csdb/release/?id=26959)


El CharPad también lo uso yo para crear los juegos de caracteres, hay otro que también se usa bastante que se llama Cuneiform: http://lysergia.net/c64/cuneiform/ (http://lysergia.net/c64/cuneiform/)

El CharPad está bien para crear los caracteres pero no me gusta para crear los mapas, es muy engorroso y te obliga a usar tiles (de tamaño fijo además) y le hecho en falta demasiadas cosas pero por ahora no he encontrado nada que se adapte a lo que ando buscando.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Junio 22, 2010, 18:46:45
Cita de: "josepzin"
Woodmaster: ¿Qué editor de chars/mapas usas?

He probado uno muy simple pero que me parece muy practico y ademas ni hace falta instalar, se llama CharPad : http://noname.c64.org/csdb/release/?id=26959 (http://noname.c64.org/csdb/release/?id=26959)


Yo uso el charpad pero solo para chars.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 22, 2010, 22:25:43
El CharPad me parece bastante interesante, aunque le veo 2 pegas:
- la ventana de trabajo es muy pequenia y no se puede ampliar.
- pero sobre todo, no se puede crear tiles con otros tamanios. Si no fuera por este detalle lo veo un editor muy valido.

El Carthograph esta interesante tambien, aunque ese parece que directamente no trabaja con tiles, solo pinta caracteres.

El Cuneiform no esta mal, aunque parece ser solo para editar caracteres.

Lo ideal seria un editor de tiles que permita crear tiles de distintos tamanios y luego crear el mapa con esos tiles. Creo que esta es la manera de funcionar de muchos juegos modernos, no teniendo una grilla fija para el mapa de tiles...

De todos modos, creo que me conformare con el CharPad e intentare hacer pruebas con los datos generados por ese...

Gracias a ambos!

PD: Carlos, estabas perdido!
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 22, 2010, 22:32:40
Los Mojones hicieron un minitutorial para usar el Mappy: http://www.mojontwins.com/2010/05/09/tutorial-usar-mappy-para-hacer-mapas/ (http://www.mojontwins.com/2010/05/09/tutorial-usar-mappy-para-hacer-mapas/)

Habra que probarlo.
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 22, 2010, 23:09:09
Para mi el mayor problema del CharPad son los tiles, y no sólo me refiero a no poder definir el tamaño de los mismos (que esto ya es bastante limitación) sino también a que no admite la posibilidad de NO usar tiles.

Aunque los tiles son muy útiles en ciertos juegos, pero hay otros en los que no son lo más adecuado y lo ideal es diseñar los mapas directamente a partir del juego de caracteres (en plan CartographPC vamos...).

Si el CharPad tuviese la posibilidad de dimensionar el tamaño de los tiles y de elegir si usar tiles o no además de alguna otra cosilla sería un editor excelente para todo tipo de juegos.

Alguien se anima a hacer un editor que sea el nuevo referente para el diseño de caracteres y mapas para C64??   :oops:  :wink:
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 22, 2010, 23:55:19
Cita de: "Carlos"
Para mi el mayor problema del CharPad son los tiles, y no sólo me refiero a no poder definir el tamaño de los mismos (que esto ya es bastante limitación) sino también a que no admite la posibilidad de NO usar tiles.

Aunque los tiles son muy útiles en ciertos juegos, pero hay otros en los que no son lo más adecuado y lo ideal es diseñar los mapas directamente a partir del juego de caracteres (en plan CartographPC vamos...).

Si el CharPad tuviese la posibilidad de dimensionar el tamaño de los tiles y de elegir si usar tiles o no además de alguna otra cosilla sería un editor excelente para todo tipo de juegos.

En realidad el problema se centra en no poder redimensionar los tiles, porque si no necesitas tiles puedes trabajar con Cartograph, y cuando necesitas tiles usar CharPad, en cambio ahora la opcion de CharPad es solo para caracteres o cuando los tiles son de 4x4.


Cita de: "Carlos"
Alguien se anima a hacer un editor que sea el nuevo referente para el diseño de caracteres y mapas para C64??   :oops:  :wink:

¿¿has visto el editor de mapas que hicieron los mojones para el Uwol???
Esta MUY bien, y es "inteligente" :)
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 22, 2010, 23:57:09
A ver quien le envia un mensaje al autor para pedirle el tema de los tiles :P

Stewart Wilson  > http://noname.c64.org/csdb/scener/?id=12431 (http://noname.c64.org/csdb/scener/?id=12431)
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 22, 2010, 23:57:49
Por cierto, el SpritePad esta bien ¿no?
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 23, 2010, 00:48:46
Uopsss... el Cartograph no soporta charsets multicolor :(
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 23, 2010, 08:18:55
Cita de: "josepzin"
En realidad el problema se centra en no poder redimensionar los tiles, porque si no necesitas tiles puedes trabajar con Cartograph, y cuando necesitas tiles usar CharPad, en cambio ahora la opcion de CharPad es solo para caracteres o cuando los tiles son de 4x4.


Creo que ya sabes la respuesta a esto, el problema es que el Cartograph sólo soporta caracteres en hires (no soporta caracteres multicolor) por lo que o tu mapa solo usa ese tipo de caracteres o sino el Cartograph no es una opción válida.

Si el Cartograph soportara ambos tipos de caracteres si se podría hacer lo que propones: usar el CharPad para los juegos que necesiten tiles y el Cartograph para los que no.


Cita de: "josepzin"
¿¿has visto el editor de mapas que hicieron los mojones para el Uwol???
Esta MUY bien, y es "inteligente" :)


Te refieres al Mappy? o es algún otro, si es así no lo conozco...


Cita de: "josepzin"
A ver quien le envia un mensaje al autor para pedirle el tema de los tiles

Stewart Wilson > http://noname.c64.org/csdb/scener/?id=12431 (http://noname.c64.org/csdb/scener/?id=12431)


Tanto el SpritePad como el CharPad que son del mismo autor tienen varios años, hace algún tiempo le mandé un correo preguntándole no me acuerdo que duda y nunca me respondió... si alguien se lo manda espero que tenga más suerte que yo.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 23, 2010, 08:32:32
Cita de: "Carlos"
Cita de: "josepzin"
¿¿has visto el editor de mapas que hicieron los mojones para el Uwol???
Esta MUY bien, y es "inteligente" :)


Te refieres al Mappy? o es algún otro, si es así no lo conozco...

No, no es el Mappy, es uno que viene junto con los fuentes. Esta hecho a medida para el Uwol, supongo que sirve para cualquier proyecto con esas caracteristicas (pantalla a pantalla). Es un lujo ver el trabajo que hicieron... Dale una mirada.

Cita de: "Carlos"

Cita de: "josepzin"
A ver quien le envia un mensaje al autor para pedirle el tema de los tiles

Stewart Wilson > http://noname.c64.org/csdb/scener/?id=12431 (http://noname.c64.org/csdb/scener/?id=12431)


Tanto el SpritePad como el CharPad que son del mismo autor tienen varios años, hace algún tiempo le mandé un correo preguntándole no me acuerdo que duda y nunca me respondió... si alguien se lo manda espero que tenga más suerte que yo.

Si al menos se liberaran los fuentes de estas aplicaciones, siempre podría tomarlo alguien... una pena.

Habrá que ir tirando aprovechando lo que da uno y otro.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 23, 2010, 09:28:33
Estoy dandole vueltas a la forma de guardar los tiles, para organizar la informacion del caracter y el mapa de color del tile... Como lo haceis vosotros??
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 23, 2010, 09:30:18
Cita de: "josepzin"
No, no es el Mappy, es uno que viene junto con los fuentes. Esta hecho a medida para el Uwol, supongo que sirve para cualquier proyecto con esas caracteristicas (pantalla a pantalla). Es un lujo ver el trabajo que hicieron... Dale una mirada.


Lo intentaré buscar pero siendo un editor pensado para Spectrum/MSX dudo que se adapte a las particularidades del C64...

Lo ideal sería hacer un nuevo editor que cumpla con los requerimientos que buscamos, en mas de una ocasión me he planteado hacerlo pero hace tiempo que no programo profesionalmente más allá de algunos scripts en java, perl y poco mas... imagino que alguien que tenga un poco de práctica en .NET o similares no le resultaría demasiado complicado llevarlo a cabo.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Junio 23, 2010, 19:57:47
Mirad este, esta muy bueno: http://www.mapeditor.org/ (http://www.mapeditor.org/)
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 23, 2010, 20:26:43
Carlos, el editor del Uwol está hecho especificamente para ese juego (aunque supongo que ellos lo adaptarán para otros juegos tipo pasapantallas), pero está MUY BIEN hecho, se pueden poner enemigos, plataformas, objetos, establecer los caminos de los enemigos, etc.

Lo curioso también es la manera de generar el mapa, creo que no generan una matriz de tiles sino que almacenan las plataformas de una manera mucho mas "inteligente".

Sólo por curiosidad vale la pena mirarlo.

Wood: tiene buena pinta ese, habrá que probarlo.
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 23, 2010, 20:46:27
Cita de: "Wood"
Mirad este, esta muy bueno: http://www.mapeditor.org/ (http://www.mapeditor.org/)


Le he echado un vistazo pero tiene el mismo problema que el Mappy y similares y es que unicamente es un editor de mapas (y no de tiles), es decir, te deja diseñar mapas a partir de tiles pero las tiles o caracteres tienen que estar prediseñadas y cargarlas desde algún fichero de imagen (bmp, ...). Si cada vez que queremos modificar una tile tenemos que usar el Paint o lo que sea y volver a cargarlo me parece un coñazo...

Yo lo que busco es un editor que integre tanto el diseño de caracteres (que a fin de cuentas son tiles de 8x8 pixels) con el editor de mapas.
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Junio 25, 2010, 11:35:35
Cita de: "Carlos"
Cita de: "Wood"
Mirad este, esta muy bueno: http://www.mapeditor.org/ (http://www.mapeditor.org/)


Le he echado un vistazo pero tiene el mismo problema que el Mappy y similares y es que unicamente es un editor de mapas (y no de tiles), es decir, te deja diseñar mapas a partir de tiles pero las tiles o caracteres tienen que estar prediseñadas y cargarlas desde algún fichero de imagen (bmp, ...). Si cada vez que queremos modificar una tile tenemos que usar el Paint o lo que sea y volver a cargarlo me parece un coñazo...

Yo lo que busco es un editor que integre tanto el diseño de caracteres (que a fin de cuentas son tiles de 8x8 pixels) con el editor de mapas.


Sip el mapeador usa imagenes no tiles. Conozco a un tio que lo usa para sus juegos de spectrum, y me ha dicho que el editor es muy configurable, salen los datos como quieres que salgan. Pero hay que usar otro editor para los tiles y bloques, esto es solo para mapas.
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 25, 2010, 12:03:14
Citar
Sip el mapeador usa imagenes no tiles. Conozco a un tio que lo usa para sus juegos de spectrum, y me ha dicho que el editor es muy configurable, salen los datos como quieres que salgan. Pero hay que usar otro editor para los tiles y bloques, esto es solo para mapas.


Realmente a mi ese me parece un método demasiado farragoso...

No sé cómo lo hace otra gente pero en mi caso el diseño de cada tile o carácter va ligado al diseño del mapa, me refiero a que yo no diseño todo mi juego de caracteres y cuando lo tengo terminado me pongo a construir el mapa sino que a medida que voy diseñando cada carácter/tile lo voy 'probando' en el mapa para ver cómo queda y sino está bien pues modifico el carácter y vuelvo a comprobar el resultado.

De ésta manera lo más cómodo es tener integrado en el mismo programa el editor de caracteres/tiles y el editor del mapa para poder hacer un cambio en el carácter y comprobar 'en tiempo real' cómo se modifica el mapa (es como funciona el CharPad).

Si hay que diseñar los tiles desde un programa externo y salvarlos en formato imagen, cada vez que necesito hacer un pequeño cambio en un tile supone un montón de pasos que enlentecen de sobremanera el desarrollo.

Me sorprende bastante que no exista ningún programa que trabaje de esta forma, los dos que más se le acercan son el CharPad (que tiene la limitacion de no poder variar el tamaño de los tiles) y el CartographPC (que sólo soporta el diseño de caracteres en hires). Juntando ambos tendríamos el editor de mapas y caracteres perfecto  :wink:
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 25, 2010, 12:12:50
Carlos, entiendo eso que dices, ya que tener todo integrado (como el CharPad) seria lo mas comodo, pero a falta de "la herramienta definitiva" estos mapeadores sirven para ir saliendo del paso.

Supongo que si uno tuviera todos los tiles definidos, luego hacer el mapa es mas facil, el problema es a la hora de ir creando los tiles y probando como queda cada caracter.

Una posible solucion "parche" seria crear los tiles y bloques usando el CharPad, asi se puede hacer pruebas en el momento, incluso simulando distintos tamaños combinando los bloques y el mapa...

Y una vez terminados los tiles pasar a algun mapeador de los buenos...
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 25, 2010, 12:21:56
O como me comentaste: crear un mapeador a nuestra medida... :p
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Junio 25, 2010, 12:22:35
Hay una manera que a veces uso, es usar uno editor de pantallas c64 y crear los char uno a uno y voy montando los tiles abajo para ver como quedan, apunto en uno editor de texto los tiles por exemplo uno tile de 2x2, apunto .byte 1,2,3,4. Depues cuando tenga los tiles terminados grabo la pantalla. Asi tengo los chars definidos por lineas, basta grabar la parte bitmap de la pantalla y voilá tengo el char set listo. y en mi fichero texto tengo la indicacion de los tiles. No es tan mal como parece. Pero claro necesitamos uno programa pc que haga todo esto sin andar con tantas cosas. A ver si tengo tiempo para un dia programar uno editor. Hoy dia uso mas el charpad. Pero quando me pasan graficos en formato pc bmp, png o jpeg la primera opcion es mas rapida porque el paso de ese formato a c64 despues basta ordenar los graficos.
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 25, 2010, 13:16:51
Cita de: "josepzin"
O como me comentaste: crear un mapeador a nuestra medida... :p


Ya que ha salido el tema creo que sería la opción ideal además de un proyecto interesante y no demasiado complicado (al menos para tener una versión básica).

En el foro imagino que somos varios los que programamos y pienso que no sería demasiado difícil llevarlo a cabo. Como dicho editor entiendo que sería para PC se necesitaría alguien con conocimientos en algún lenguaje moderno que permita el desarrollo visual de aplicaciones Windows en plan .NET o similares.

El problema es que yo hace bastante que no programo para Windows mas allá de algún script java o perl pero ninguna aplicación gráfica. Lo último que sabía manejar era el Borland Builder C++ 5.0 y por lo que he visto no tiene ningún componente para poder crear 'grids' para gráficos o algo parecido, si lo tuviera creo que no tardaría mas de una semana en tener preparada una versión funcional del editor de mapas/caracteres.

Si alguien se anima a colaborar que lo diga, yo me podría encargar de diseñar el interface, el formato binario de los ficheros para guardar los caracteres y el mapa, ... e incluso desarrollar el código necesario para guardar y cargar los mapas y caracteres pero necesitaría que alguien se encargara de hacer la parte 'gráfica' del cacharro...

Alguien se anima?????   :roll:  :roll:  :roll:  :roll:
Título: Libreria Eightspriter para juegos C64
Publicado por: Iapetus en Junio 25, 2010, 13:40:10
Yo sé programar en c++ y java, mas el ultimo por mis estudios en universidad, pero C# no sera dificil certamente. incluso visual basic es suficiente, ahora es muy pontente con objectos y todo.

Sabes cual es el problema:.............. TIEMPO
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 25, 2010, 14:00:31
Cita de: "Wood"
Yo sé programar en c++ y java, mas el ultimo por mis estudios en universidad, pero C# no sera dificil certamente. incluso visual basic es suficiente, ahora es muy pontente con objectos y todo.

Sabes cual es el problema:.............. TIEMPO


Cualquiera de esos lenguajes que comentas incluso Visual Basic .NET sería de sobra para hacer un programa de este tipo, lo importante es que proporcione los componentes visuales para que se pueda desarrollar de forma rápida y fácil los grids gráficos y demás... cierto es que el problema es el tiempo pero no estamos hablando de hacer un juego para C64 con todo lo que eso conlleva sino una tool para hacernos los desarrollos posteriores más fáciles.

Yo he hecho diferentes herramientas tanto para proyectos personales míos como para temas de trabajo y normalmente las suelo hacer en un par de días o una semana como mucho, lo que ocurre que en este caso no domino los componentes necesarios para poder 'pixelar' los caracteres y por eso no me he lanzado a hacerla yo solo, sino fuera por eso la tendría preparada en unos días seguro.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 25, 2010, 14:25:15
La parte de pixelar y editar caracteres es "relativamente" facil, el problema es todo lo demas...
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 25, 2010, 14:52:48
Igual yo podría intentar hacer algo en Flash, asi sería multiplataforma.
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Junio 25, 2010, 14:55:05
Cita de: "josepzin"
La parte de pixelar y editar caracteres es "relativamente" facil, el problema es todo lo demas...


Pues si ese es el problema, yo me encargo de hacer el resto...  :wink:

Como lo veo yo, el programa en una primera versión lo más simple posible pero funcional debería tener lo siguiente:

- Parte 1: una parte (por ejemplo en una pestaña del formulario) donde se puedan diseñar caracteres mediante una rejilla de 8x8 (para caracteres hires) o de 4x8 (para caracteres multicolor) hasta un máximo de 256.

- Parte 2: (en otra pestaña del formulario) donde habría una grid de 40x25 que represente la pantalla y donde se podría 'pintar' o rellenar las celdas de esa grid con los caracteres diseñados en la parte 1. En esta misma parte se pondría la paleta de colores del C64 para poder 'colorear' los caracteres de la grid.

Después simplemente habría que guardar el resultado en ficheros binarios en formato raw: 2K para los 256 caracteres + 1000 bytes para el contenido de la grid de 40x25 + 1000 bytes para el contenido de color de dicha grid = 4048 bytes. Con esto y sumando 3 bytes adicionales (para el color de background y los dos multicolor en caso necesario) tendríamos un fichero de 4051 bytes que guarda toda la información necesaria (charset + charmap + colormap).

El resto ya es ir 'puliendo' el programa e ir introduciendo más funcionalidades como la posibilidad de usar tiles, crear un formato comprimido de los ficheros, ...

El problema para mi como ya he dicho es toda la parte visual, se necesitan componentes que permitan 'pixelar' los caracteres y que después al pinchar en una celda de la grid de pantalla (40x25) te pinte automáticamente el carácter seleccionado y cosas así...
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 25, 2010, 16:24:31
Menudo baile que estás proponiendo... :D

A ver si alguien que controle VB o alguno de esos lenguajes de alto nivel puede aportar algo, por mi parte prefiero no comprometerme (por ahora), que ya demasiadas cosas tengo en la cabeza :/

En todo caso, dentro de mis conocimientos, voy a mirar un Flash antiguo que creo recordar hice una especie de grilla para editar graficos, a ver si se puede recuperar, y quizas hacer algo a partir de alli... pero no me quiero comprometer a nada nuevo!!!!! :D
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Junio 25, 2010, 18:10:32
Estuve tonteando un rato con el Flash y recuperando cosas del baúl de los recuerdos... creo que podría hacer algo "usable" relativamente rápido.

Me quedan un par de cosas por probar para estar seguro que se puede hacer.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Julio 04, 2010, 16:48:03
Cita de: "Carlos"

- Parte 1: una parte (por ejemplo en una pestaña del formulario) donde se puedan diseñar caracteres mediante una rejilla de 8x8 (para caracteres hires) o de 4x8 (para caracteres multicolor) hasta un máximo de 256.

- Parte 2: (en otra pestaña del formulario) donde habría una grid de 40x25 que represente la pantalla y donde se podría 'pintar' o rellenar las celdas de esa grid con los caracteres diseñados en la parte 1. En esta misma parte se pondría la paleta de colores del C64 para poder 'colorear' los caracteres de la grid.

Llevo una semana sin respiro en el trabajo y la próxima creo que va por el mismo camino, pero algunos momentos he podido dedicar al editor.

El punto 1 está bastante resuelto, el editor de caracteres funciona, se puede cambiar de modo hires a multicolor, pintar en distintos colores y poco mas.

El punto 2, el editor de tiles, ya muestra una grilla de 40x25 (el tamaño puede variar) y se puede pintar caracteres con distintos colores.

Pero va como una carreta... tengo que optimizar a lo bestia ya que el Flash tiene sus "peculiaridades puñeteras", al menos va tomando forma...
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Julio 05, 2010, 08:37:01
Estoy deseando echarle un vistazo a ese editor...  :D
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Julio 10, 2010, 13:26:17
Ya estoy maldiciendo la hora en que decidí hacer esto :D :D

También maldiciendo a Flash, a lo complicado que es hacer ciertas cosas y a mi falta de práctica en POO, todo sea dicho.

Lo que llevo hecho es mortalmente lento, aunque algo se puede optimizar, pero me temo que no mucho más...
Dependiendo del tamaño del bloque tile (ahora estoy con uno de 40x20) y de la cantidad de veces que esté pintado el caracter que estoy editando, es leeentooo, aunque dependiendo de eso mismo a muchas otras veces no va lento y es usable.

La verdad es que ahora mismo me encantaría saber algo de C para hacer esta misma aplicación con más rendimiento...

Otro tema es que esta semana no tuve casi ni tiempo de respirar, asi que poco pude hacer, pero detenido no está. Parece que la próxima será mas aliviada :)

Como adelantos: al pintar un char en el tile map se puede elegir el modo de pintura:
- Char: pinta el caracter seleccionado (mantiene el color del tile)
- Color: pinta el color seleccionado en el selector del tile editor. Mantiene el caracter.
- Char + CharColor: pinta el char seleccionado + el color del char asignado en el editor de caracteres
- Char + TileColor: pinta el char selecc. + el color seleccionado en el tile edit.

Y para que se vea que no soy un magufo :D aqui va una captura
(http://img715.imageshack.us/img715/5491/captura1e.th.png) (http://img715.imageshack.us/i/captura1e.png/)

Si al final esto queda funcional le agregaré las opciones habituales para desplazar, invertir y copiar chars.
Título: Libreria Eightspriter para juegos C64
Publicado por: Carlos en Julio 30, 2010, 17:39:15
he estado 3 semanas de vacaciones en India y bastante desconectado en lo que a Internet se refiere por eso no habia podido contestar hasta ahora.

Por el pantallazo a mi me tiene bastante buena pinta.. sería posible 'testear' alguna version on-line??
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Agosto 04, 2010, 18:49:22
¡¡¡3 semanas en India!??!?! Increíble... mi hermana estuvo también hace poco en esa zona y las fotos son alucinantes, un viaje en el tiempo (no solo el espacio)

Tengo que ponerme al día con este tema, yo pensaba que agosto sería un mes tranquilo pero ni modo, saturacion extrema de trabajo... ya perdí la cuenta de todo lo que tengo que entregar en septiembre :(

De todos modos intentaré preparar una versión online para que la puedas probar, ya que aunque tiene muchas carencias es funcional
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Agosto 15, 2010, 17:57:12
He tenido que reinstalar los programas asi que he aprovechdo para ir documentando todo el proceso, a ver si lo hago "mas bonito" y lo cuelgo como tutorial de "Instalando un entorno de desarrollo de programacion C para C64 en Windows"
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Agosto 23, 2010, 14:05:11
El domingo, gracias a la "paz playera" de Los Alcázares y a mi IBM X40 pude terminar el tutorial de "iniciación", así que en breve lo publicaré en mi web.

También estuve revisando la librería EightSpriter, a ver qué está faltando para poder publicar una versión con algunas opciones mínimas... a ver si otro le dedico un buen rato.
Título: Libreria Eightspriter para juegos C64
Publicado por: josepzin en Agosto 23, 2010, 17:34:15
Finalmente he publicado el tutorial de iniciación C para C64: http://www.foros.net/viewtopic.php?p=2318&mforum=Commodoremania (http://www.foros.net/viewtopic.php?p=2318&mforum=Commodoremania)