Re: FASE (Fucking Awesome Spectrum Engine)
Publicado: Jue, 19 Jun 2014, 04:12
por antoniovillena
Ya está. Creo que ya sé cual es tu error. No te lo puedo confirmar al 100% porque no tengo linux a mano para compilarlo pero estoy casi seguro.
Aquí haces un casting:
$this->bbcode_second_pass_code('', '
print_value(3,10, (int) getattr(tmpx, tmpy));
')
La macro getattr hace lo siguiente:
$this->bbcode_second_pass_code('', '
#define getattr(x,y) map_attr[x + (y << 4) - y]
')
El array tiles se declara así:
$this->bbcode_second_pass_code('', '
unsigned char *tiles= 0x5b40;
')
Al parsear la macro pasa algo como esto:
$this->bbcode_second_pass_code('', '
print_value(3,10, (int) tiles[tmpx+tmpy*15]);
')
O sea que estas pasando a entero de 2 bytes (en otra arquitectura serían 4) un array de unsigned char (un byte).
De todas formas, te he creado un main.c (con el game.tap) modificado desde lo que hay ahora mismo el repositorio que muestra el número de tile por donde está pasando el personaje, te puedes guiar por dicho código.
Por cierto he reorganizado los directorios según tu esquema y compila en windows. Si tienes tiempo pruébalo a ver si lo hace también en Linux.
Re: FASE (Fucking Awesome Spectrum Engine)
Publicado: Jue, 19 Jun 2014, 09:51
por D_Skywalk
$this->bbcode_second_pass_quote('antoniovillena', 'A')l parsear la macro pasa algo como esto:
$this->bbcode_second_pass_code('', '
print_value(3,10, (int) tiles[tmpx+tmpy*15]);
')
Y que problema hay de pasar un
unsigned char a entero?
Además esa función como ya ha pasado el "tiempo/frame" funciona, donde no funciona es en el prepare_screen que hay un bucle que se llena de basura (línea ~399). Lo que está en player_handler es para comprobar si attr tiene los datos buenos, sólo tienes que descomentar gettile y ver que se imprime perfecto, al contrario del getattr que veras que tiene ceros (forzados) y basura (ver bucle).
Y supongo que será mas cosa de la hora, espero que hayas descansado... Pero mezclas tiles con map_attr, son dos arrays diferentes.
Con forzar un valor en map_attr (como hago con el 0), veras que se muestran perfectamente. El problema es cuando quieres simplemente asignar el valor que tiene el array de tiles, entonces sólo hay basurilla
Y sin esto pues no puedo hacer un sencillo mapa de durezas tipo churrera