En el juego que estoy haciendo para Wii tengo un ataque que son 3 bombas simultaneas que persiguen al enemigo, cada una a uno distinto en el caso de que haya mas de uno ese momento.
Para hacerlo, basicamente le paso un parametro al proceso bomba con un nº, bomba(1), bomba(2) y bomba(3)
En el momento en que la bomba elige enemigo hago:
for(num; num>0; num--)
i=get_id(type enem);
end
Ya que se supone que en cada llamada a get_id sin que haya un frame de por medio te devuelve un proceso distinto del tipo indicado, de modo que bomba(1) hara una llamada a get_id y bomba(3) llamara 3 veces y se quedara con el 3er enemigo de la lista...
Bueno, pues en Pc funciona perfecto, 3 enemigos en pantalla, suelto las 3 bombas y se van cada una a por uno con una coordinacion y eficiencia dignas del Equipo A...
Pero en Wii no! Mismo código, pero se van todas a por el mismo si o si :-[
He probado en Wii sin el for, haciendo una llamada simple a ver si sonaba la flauta, pero nada...Ideas? :-\
no me parece que lo que te pasa este relacionado con get_id... el codigo es generico, dudo que haya cambios en la version wii.
Pues por algun motivo el comportamiento es diferente usando el mismo código en Pc y Wii :-\
si fuera un rand lo entenderia, al menos que internamente esa funcion utilice movidas relacionadas con el procesador..
Yo entendería que sucediese por distinto orden de ejecución de procesos, pero dices que usas un bucle, así que no debería ser por eso. No sé si el cambio de proceso que llama a get_id reinicia su cuenta o no, según cuentas en PC sí es así, así que ni idea, lo siento.
a menos que en la version monolitica no implemente los llamados a los callback de reset adecuadamente, no los llame o los llame mas de lo debido.
Pásame el código, momia.
Para quien le pueda interesar, Josebita me lo ha resuelto, era porque la variable num era un byte, que dan problemas en wii, cambiandolo a int ya funciona bien :)
Sí, cualquier tipo de dato de tamaño inferior 4 (el tamaño del int) da problemas. El workaround es cambiar los tipos de dato a int.
Eso y el hecho de que los dcbs deben compilarse en la Wii son los dos únicos bugs de endianess que me quedan por resolver y que no tengo claro por dónde coger... A ver si cuando acabe exámenes me puedo poner con ello, pero no sé si seré capaz de arreglarlos.
Curioso, a ver si podemos recolectar todas las diferencias en un txt que acompañe la distro de Wii.
Todo esto está comentado en varios sitios, pero es verdad que sería buena idea ponerlo en un fichero que acompañara la release. Me lo apunto para la próxima. ¡Gracias!
joseba no recuerdo si probaste el ejemplo de los endian para ver que output daba.
Creo que recuerdo haberlo probado pero no recuerdo qué paso... Voy a estar bastante ocupado estos días pero podríamos probar algo que se te ocurra en un momento.
¿Entonces eso puede estar afectándome también a mi? no recuerdo si he llegado a usar datos tipo byte o word (seguramente dentro de alguna estructura, pero siempre intentando que haya alineamiento a 4). Tendré que mirarlo, pero si no consigo resolverlo en las próximas 24 horas, no podré presentar el juego al concurso, es imposible que en menos de 20 días pueda hacer algo medianamente decente tal como está el proyecto ahora.
Por cierto hablando de diferencias entre ports, pues tambien me estoy llevando una sorpresa, en este caso estoy teniendo un 'Segment Fault' en un determinado punto de mi nuevo juego (en mis ultimos cambios) y sólo en la Caanoo, en PC y WIZ no esta ocurriendo! A ver si mañana pongo un log para saber exactamente en que punto ocurre...
import "mod_say";
private
int lala = 12345678h;
byte * p;
int * p1;
begin
p = &lala;
p1 = p[0]; say(p1);
p1 = p[1]; say(p1);
p1 = p[2]; say(p1);
p1 = p[3]; say(p1);
end
alguien puede probar esto en wii? no se si se puede capturar la salida del say, pero como sea, necesito saber que salida da esto.
Yo no creo que pueda hoy, a ver si mañana. Si alguien quiere probarlo antes, la salida del say debería ir a un fichero de texto en el mismo directorio, aunque no es seguro... Gracias por echarle un ojo.
A mi me sale 34, 56 y 78, con una ristra de ceros delante (5 o 6 ceros, no me da tiempo a contarlos), en plan consola de comandos.
Sí, sólo tres números, he buscado a ver si había números ocultos en la parte superior de la pantalla, pero no he visto nada más.
Por otro lado, mi pseudo-juego no tiene ningún problema con los datos byte (sólo los usaba en un array), así que el problema viene por otro lado :(
y el 12?
Lo dicho, ni idea, a mi no me sale, no se si a alguien más le ha pasado. Es como si el primer say no hiciese la salida. Mañana si quieres hago la prueba añadiendo un say extra inicial, a ver si así se ve el primer dato.
Al menos sabemos que el resto se ve bien.