Registrarse

[Decomp-GBA] Pantalla bloqueada

Estado
Cerrado para nuevas respuestas.

ivaantxo

Usuario de oro
Hola, tengo el siguiente problema: Al realizar cualquier movimiento, funciona la animación, hace el daño/efecto que corresponda, pero al momento del mensaje de que el movimiento se ha realizado ("Torchic usó Ascuas") la pantalla se queda congelada. ¿Alguien tiene idea de qué puede estar pasando? Gracias
 

Lunos

Enfrentando a La Organización
Miembro insignia
Hola, tengo el siguiente problema: Al realizar cualquier movimiento, funciona la animación, hace el daño/efecto que corresponda, pero al momento del mensaje de que el movimiento se ha realizado ("Torchic usó Ascuas") la pantalla se queda congelada. ¿Alguien tiene idea de qué puede estar pasando? Gracias
No, ninguna. Y más dificil es intentar averiguar el por qué cuando no te has molestado ni en presentar un contexto, pese a que tú eres quien pide ayuda.
No existen las bolas de cristal, aquí nadie puede leer la mente de las personas, y mucho menos con la internet de por medio.
Si quieres recibir ayuda, tendrás que presentar detalles. Más especificamente, tendrás que comentar que cambios hiciste exactamente.

La primera posibilidad que se me viene a la cabeza y la más obvia, es que cometiste un error en el BattleScript de tu movimiento (todos los movimientos deben de tener un BattleScript enlazado en gBattleScriptsForMoveEffects, incluso si no le has dado un efecto unico a tu movimiento y lo tienes usando EFFECT_HIT), pero como dije, es dificil decir algo con certeza sin saber que cambios hiciste exactamente.
 

ivaantxo

Usuario de oro
Si quieres recibir ayuda, tendrás que presentar detalles. Más especificamente, tendrás que comentar que cambios hiciste exactamente.
Contexto: la pantalla se queda bloqueada al realizar cualquier movimiento, pero sólo al realizar movimientos: ni al entrar en mochila, ni al entrar en la visualización de equipo ni al huir. Lo que sí veo extraño es que, por ejemplo, si lanzo una Poké Ball, se realiza la animación correctamente y el mensaje se ejecuta también, pero cuando el oponente hace el movimiento, la pantalla se vuelve a quedar bloqueada. Me acaba de pasar en una batalla contra un Surskit que después de lanzarle una Poké Ball y no capturarlo, me ha hecho Burbuja a Torchic, la animación y el mensaje se ha ejecutado, incluso el de “¡Es muy efectivo!”, pero ahí se ha vuelto a quedar la pantalla congelada. Eso me hace pensar que el problema está en el “salto de turno”.

He realizado muchos cambios, pero la mayoría son cambios gráficos, o de stats/habilidades a Pokémon, o de las modificaciones simples de Pokecommunity, así que es difícil postearlos todos por aquí. De todos modos, este es mi repositorio en github: https://github.com/ivanmartinezl/pokeemerald-expansion

En cualquier caso, gracias por molestarte en contestar.
 

Lunos

Enfrentando a La Organización
Miembro insignia
Contexto: la pantalla se queda bloqueada al realizar cualquier movimiento, pero sólo al realizar movimientos: ni al entrar en mochila, ni al entrar en la visualización de equipo ni al huir. Lo que sí veo extraño es que, por ejemplo, si lanzo una Poké Ball, se realiza la animación correctamente y el mensaje se ejecuta también, pero cuando el oponente hace el movimiento, la pantalla se vuelve a quedar bloqueada. Me acaba de pasar en una batalla contra un Surskit que después de lanzarle una Poké Ball y no capturarlo, me ha hecho Burbuja a Torchic, la animación y el mensaje se ha ejecutado, incluso el de “¡Es muy efectivo!”, pero ahí se ha vuelto a quedar la pantalla congelada. Eso me hace pensar que el problema está en el “salto de turno”.

He realizado muchos cambios, pero la mayoría son cambios gráficos, o de stats/habilidades a Pokémon, o de las modificaciones simples de Pokecommunity, así que es difícil postearlos todos por aquí. De todos modos, este es mi repositorio en github: https://github.com/ivanmartinezl/pokeemerald-expansion

En cualquier caso, gracias por molestarte en contestar.
Me estoy dando un paseito por tu src/battle_util.c y tu src/battle_script_commands.c, pero a grandes rasgos no veo nada que me llame la atención.

Si veo que modificaste un huevo de habilidades y efectos de movimiento, en ciertos casos de un modo incorrecto.
El valor que le diste a la variable statId de algunas habilidades en el case ABILITYEFFECT_ABSORBING de AbilityBattleEffects no es valido.
Tiene pinta de que lo que intentaste hacer es asignar 2 stats distintos a la variable local statId para que las habilidades en cuestión afectaran a ambos stats, pero la manera en la que lo estás haciendo no es correcta.
De por sí, el doble ampersand unicamente se usa en comparaciones dentro de un condicional if.
Eso no se relaciona con el bug que te está congelando el juego, pero.

Empecé a saltar para atras de commit en commit, y encontré la ultima en la que el sistema de batalla funciona correctamente, por lo menos.
Es esta. A partir de la siguiente, pasa lo que pasa y se congela el juego despues de que un Pokémon usa un movimiento.
Algo en esa segunda commit está causando estragos.
 
Última edición:

ivaantxo

Usuario de oro
Vale, creo que acabo de solucionarlo. Olvidé quitar la definición de MOVEEND_DANCER de include/battle_script_commands, y parece que eso hacía que, al finalizar cada movimiento, buscara el caso y, al no encontrarlo, no pudiera avanzar. Muchas gracias por tu atención, Lunos.
PD: ¿Este error se solucionaría cambiando el doble ampersand por uno simple, o requiere de alguna operación más compleja?
El valor que le diste a la variable statId de algunas habilidades en el case ABILITYEFFECT_ABSORBING de AbilityBattleEffects no es valido.
Tiene pinta de que lo que intentaste hacer es asignar 2 stats distintos a la variable local statId para que las habilidades en cuestión afectaran a ambos stats, pero la manera en la que lo estás haciendo no es correcta.
 

Lunos

Enfrentando a La Organización
Miembro insignia
PD: ¿Este error se solucionaría cambiando el doble ampersand por uno simple, o requiere de alguna operación más compleja?
Requiere un poco más de trabajo, sí.

A la hora de darle valor a una variable, el ampersand individual compara el primer bit de 2 valores distintos, y si el valor de esos 2 bits es 1, le da a la variable ese mismo valor; 1 (Fuente), lo cual no te serviria de nada en esta situación.
 
Estado
Cerrado para nuevas respuestas.
Arriba