Formato que genera mapcnv

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

Moderador: na_th_an

Avatar de Usuario
na_th_an
Mensajes: 26413
Registrado: Vie, 09 Ene 2009, 12:18

Re: Formato que genera mapcnv

Mensajepor na_th_an » Vie, 10 Jul 2015, 11:57

SP1 y splib2 siguen la misma filosofía. Era más para entender conceptos que para otra cosa.
Como diría Rorshach: "Urm..."
Avatar de Usuario
Javi Perez
Mensajes: 13
Registrado: Lun, 08 Jun 2015, 11:47

Re: Formato que genera mapcnv

Mensajepor Javi Perez » Lun, 13 Jul 2015, 14:02

$this->bbcode_second_pass_quote('na_th_an', 'S')P1 y splib2 siguen la misma filosofía. Era más para entender conceptos que para otra cosa.


Bueno, pues efectivamente pintar fondos es mucho más fácil y eficiente usando tiles asociados a caracteres del charset, que mediante sprites como hacía al principio...lo que se aprende haciendo burradas!

Ahora me encuentro con otro follón, he estado haciendo pruebas y pasa lo siguiente: imaginemos que defino un tile de 32 bytes (2x2 caracteres), y lo exporto desde SevenuP (ordenado por caracteres y filas):
$this->bbcode_second_pass_code('', '
unsigned char tile_bytes_1[32] = {
64, 253, 255, 95, 191, 95, 63, 95,
28, 127, 255, 255, 255, 158, 238, 240,
63, 95, 190, 127, 95, 191, 90, 52,
239, 31, 255, 255, 255, 255, 255, 30 };
')
Entiendo que tengo que asignar cada uno de los 4 caracteres a un carácter del charset. Entonces lo que hago es descomponer el array en cuatro (cuadrícula de 8x8 píxeles):
$this->bbcode_second_pass_code('', '
uchar tile1_0[] = { 64, 253, 255, 95, 191, 95, 63, 95 };
uchar tile1_1[] = { 28, 127, 255, 255, 255, 158, 238, 240 };
uchar tile1_2[] = { 63, 95, 190, 127, 95, 191, 90, 52 };
uchar tile1_3[] = { 239, 31, 255, 255, 255, 255, 255, 30 };
')
Defino a continuación un array de 4 caracteres para este tile:
$this->bbcode_second_pass_code('', '
char char_set_1[4] = { 'a', 'b', 'c', 'd' };
')
Y mapeo cada carácter de ese array a cada uno de los 4 arrays del tile:
$this->bbcode_second_pass_code('', '
sp1_TileEntry(char_set_1[0], tile1_0);
sp1_TileEntry(char_set_1[1], tile1_1);
sp1_TileEntry(char_set_1[2], tile1_2);
sp1_TileEntry(char_set_1[3], tile1_3);
')
Ahora para pintar esos 4 caracteres del tile en la posición (y,x) hago:
$this->bbcode_second_pass_code('', '
sp1_PrintAt(y, x, INK_BLACK | PAPER_WHITE, char_set_1[0]);
sp1_PrintAt(y, x + 1, INK_BLACK | PAPER_WHITE, char_set_1[1]);
sp1_PrintAt(y + 1, x, INK_BLACK | PAPER_WHITE, char_set_1[2]);
sp1_PrintAt(y + 1, x + 1, INK_BLACK | PAPER_WHITE, char_set_1[3]);
')

Sobre este proceso, tengo dos dudas:
1. ¿Existe alguna forma de no duplicar la info del tile? (array de 32 bytes generado por SevenuP, más los 4 sub-arrays para cara uno de los caracteres del tile)
2. Si por ejemplo defino 20 tiles, tendría que crear 20 arrays char_set_N[4], o sea 40 caracteres, supongo del rango imprimible del charset. ¿Tendría que ir cogiendo esos 40 caracteres e ir creando a manualmente esos 20 arrays?