Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: laghengar on June 05, 2013, 01:04:24 AM

Title: Errores Mnemonic
Post by: laghengar on June 05, 2013, 01:04:24 AM
Holas, me podríais contar, aunque sea un poquillo, de que va el :

ERROR: Runtime error in PROC_RUEDA(65539) - Mnemonic 0xAD0 not implemented

Me salta en el códico cuando uso cos() o sin(), he hecho varias pruebas hasta dar con que el código sólo corre cuando elimino estás funciones.

Las uso así, no le veo a la línea nada de raro, así que no se que pasa.                 x=coche4ruedas[n_coche]._id.x+(cos(angulocoche)*x0);

Con la línea así no hay problema.                                                                            x=coche4ruedas[n_coche]._id.x+x0;

En un principio pense que pisaba algo de memoria, pero para nada me lo parece, la x es la variable local del proceso.
Luego que tal vez alguna incompatibilidad entre operaciones float y byte (byte x0), pero al cambiarlo y poniendo int x0 me ocurre lo mismo.
Title: Re:Errores Mnemonic
Post by: SplinterGU on June 05, 2013, 01:50:45 AM
ya me fijo que puede ser... gracias!
Title: Re:Errores Mnemonic
Post by: SplinterGU on June 05, 2013, 01:56:37 AM
podes poner todos los tipos de cada variable?
Title: Re:Errores Mnemonic
Post by: Erkosone on June 05, 2013, 05:14:01 AM
Curioso bug si.. haber si se descubre la causa, sin y cos con de las imprescindibles.
Title: Re:Errores Mnemonic
Post by: laghengar on June 05, 2013, 09:50:45 AM
Quote from: SplinterGU on June 05, 2013, 01:56:37 AM
podes poner todos los tipos de cada variable?

Te comento ahora sin problema :)

global
struct coche4ruedas[0]

    struct rueda[3]
        byte x0,y0;     //centro de gravedad de la rueda
        int _id;            //identificador de la rueda
    end

    byte x0,y0;         //centro de gravedad del coche
    int _id;                //identificador del coche
end

process proc_rueda(byte n_coche,byte x0,byte y0)
private

int angulocoche;

begin
    angulocoche=coche4ruedas[n_coche]._id.angle;
    x=coche4ruedas[n_coche]._id.x+(cos(angulocoche)*x0);
    y=coche4ruedas[n_coche]._id.y+(sin(angulocoche)*y0);
....
end
Title: Re:Errores Mnemonic
Post by: SplinterGU on June 05, 2013, 12:22:12 PM
lo revisare, se que significa el opcode, pero me extraña que se genere eso.

supongo que estas con la ultima version, cierto?

gracias.
Title: Re:Errores Mnemonic
Post by: laghengar on June 05, 2013, 02:43:15 PM
Versión 21 de Noviembre de 2012, supongo que es la última. Por cierto, estoy usando la IDE de bennupack que viene el notepad++ adaptado, no se si tendrá algo que ver, aunque creo que no.
Title: Re:Errores Mnemonic
Post by: laghengar on May 01, 2014, 11:53:32 AM
Soy el único que tiene este problema :( ?

He estado haciendo diferentes pruebas y he visto que solo falla cuando haces una operación con arrays. Curiosamente con una variable, que pertenece a un proceso, no falla.
UHHHHHHHHHHHHHHHLALAAAAAAAAAA. Tenía el array como un conjunto de bytes, al cambiarlo a integer ya no me salta el error ¿?
Title: Re:Errores Mnemonic
Post by: Drumpi on May 09, 2014, 11:53:45 AM
Por curiosidad ¿qué módulo matemático estás usando? ¿mod_math o mod_mathi?
Es posible que tengas problemas por usar mod_math, cuyas funciones trigonométricas usan floats. Mod_mathi funciona como se hacía antes, con enteros. A ver si es un bug de conversión de datos.
Sólo por probar.
Title: Re:Errores Mnemonic
Post by: laghengar on May 09, 2014, 07:49:08 PM
Si, uso el mod_math, no conozco el mathi XD. Pues tiene toda la pinta, desde que me di cuenta de que cambiando los datos por los que opera por integer, ya no salta ese error.
Title: Re:Errores Mnemonic
Post by: SplinterGU on May 09, 2014, 09:28:49 PM
me podes mandar el programita por mail, asi lo reviso en algun momento? me olvide completamente de esto... disculpas.
Title: Re:Errores Mnemonic
Post by: laghengar on May 10, 2014, 03:29:27 PM
No tengo tu correo Splinter  :-[ . Dejo el código aquí, ok?


import "mod_grproc"
import "mod_key"
import "mod_map"
import "mod_math"
import "mod_proc"
import "mod_say"
import "mod_video"

GLOBAL
int       fpg_sprites;
struct  coche4ruedas[0]
    struct   rueda[3]
        byte x0,y0;
        int    _id;
    end
    byte x0,y0; //centro de gravedad
    int _id;
end

BEGIN
set_mode(640,480,32,MODE_FULLSCREEN);
set_fps(60,0);

fpg_sprites=load_fpg("FPG\sprites.fpg");
coche4ruedas[0]._id=proc_coche(0,320,240);

repeat
    frame;

until(key(_esc))
let_me_alone();
exit("",0);
END

/////////////////////
PROCESS proc_coche(byte n,x,y);

BEGIN
file=fpg_sprites;
graph=1;

coche4ruedas[0].rueda[0].x0=12;
coche4ruedas[0].rueda[0].y0=0;
coche4ruedas[0].rueda[1].x0=12;
coche4ruedas[0].rueda[1].y0=30;
coche4ruedas[0].rueda[2].x0=37;
coche4ruedas[0].rueda[2].y0=0;
coche4ruedas[0].rueda[3].x0=37;
coche4ruedas[0].rueda[3].y0=30;
coche4ruedas[0].x0=25;
coche4ruedas[0].y0=15;
angle=45000;
say("Se ha rellenado la estructura del primer coche");

frame;
crearuedas(4,0);//numero de ruedas a crear, numero del coche al que crear las ruedas

loop
    frame;
end
END
////////////////////////
FUNCTION crearuedas(byte numruedasacrear,byte numcocheaponerruedas)

PRIVATE
byte turno;
begin

for(turno=0;turno<numruedasacrear;turno++)
    coche4ruedas[numcocheaponerruedas].rueda[turno]._id=proc_rueda(numcocheaponerruedas,coche4ruedas[numcocheaponerruedas].rueda[turno].x0,coche4ruedas[numcocheaponerruedas].rueda[turno].y0);
end
END

////////////////////////////////
PROCESS proc_rueda(byte n_coche,byte x0,byte y0)
PRIVATE
angulocoche;
begin
file=fpg_sprites;
graph=2;
say("Se crea el proceso de la rueda");

loop
    angulocoche=coche4ruedas[n_coche]._id.angle;
    say(angulocoche);
    say("Ángulo del coche tomado");
    x=coche4ruedas[n_coche]._id.x+(cos(angulocoche)*x0);
    say("x calculada");
    y=coche4ruedas[n_coche]._id.y+(sin(angulocoche)*y0);
    say("se calculan las coordenadas de la rueda");
    frame;
end
END
Title: Re:Errores Mnemonic
Post by: SplinterGU on May 11, 2014, 03:07:26 AM
el problema no esta en la estructura, sino en los parametros de la funcion... no estaba soportado pasar de byte a float (necesario para la multiplicacion con COS y SIN).

este codigo tambien falla


import "mod_math";
import "mod_say";

local
float x, y;
byte z;

BEGIN
    z = 255;
    x = 10.0 * z;
    say(x);
END


ya lo solucione, ahora lo commiteo, pero no puedo generar binarios, tengo roto el entorno por culpa de la libpng, hasta no solucionar (genericamente) el tema de la deteccion no puedo generar binarios, si quieres generarlos tu, adelante.

sino, reemplaza los bytes por int en los parametros de la funcion y ahi funcionara.
Title: Re:Errores Mnemonic
Post by: laghengar on May 11, 2014, 10:54:08 AM
Perfecto, así haré. De lo demás no se de qué me hablas :(, me centraré en utilizar int y listo.