qna_rh
Thread Id: 29812
Thread Name: [Duda] Sobre Scriptin
Buenas gente, andaba editando un script de pokemart cuando de pronto, un codigo salvaje aparece!
la duda en cuestion, es saber para que sirve esto=
]preparemsg 0x81A0BE4 '"Welcome!\pHow may I serve you?"
waitmsg
checkflag 0x74
if 0x1 goto 0x8152FA8
pokemart 0x8152F9C
msgbox 0x81A0C02 MSG_KEEPOPEN '"Please come again!"
release
end
'---------------
#org 0x152FA8
pokemart 0x8152FB8
msgbox 0x81A0C02 MSG_KEEPOPEN '"Please come again!"
release
end
llevandolo al punto preciso, en la parte donde dice "checkflag bla bla if 0x1 goto 0x8152FA8 al revisar el pointer de este codigo, veo esto "#org 0x152FA8"
la dif es que el 8 esta al inicio donde se dirige el pointer, mientras que el receptor no lo tiene...
intente hacer un remake del mismo codigo pero en español, pero no me funciona el "pokemart" sino que se va directo al saludo y la despedida.
Ese 8 exactamente que funcion tiene?
Te sugiero que lo modifiques mediante la Refactorización.
A menudo los offsets originales son cambiados (Y ni idea de por qué), sin embargo, si usas punteros será mucho más fácil.
La refactorización se hace yendo a "Opciones-> Opciones de Descompilación-> Marcar la palomilla "Refactorización", cerrar y volver a abrir el Script.
Espero haberte ayudado.
EDIT: Cosarara ya me corrigió perfectamente, asi que dudo que esto valga la pena xDD
La CPU de la GBA tiene el ROM mapeado en las direcciones a partir de 0x8000000, es decir, el byte 0 del ROM está en 0x8000000, el byte 1 en 0x8000001, el byte 0x800000 en 0x8800000, etc. De este modo, cuando un número lo tiene que leer el juego en ejecución, tiene que llevar ese 0x8 delante.
La directiva #org, en cambio, es para el compilador, y solo puede ser una dirección del ROM (por eso no empieza a partir de 0x8000000).
Aún así, para facilitar las cosas, muy a menudo el compilador te añadirá el mismo esos 0x8000000. Por ejemplo:
#org 0x800000
msgbox 0x123123
callstd 6
end
#org 0x123123
= sup?
Va a convertirse en esto, al compilar:
#org 0x800000
msgbox 0x8123123
callstd 6
end
#org 0x123123
= sup?
Iniciado por MaskedMarowak
Te sugiero que lo modifiques mediante la Refactorización.
A menudo los offsets originales son cambiados (Y ni idea de por qué), sin embargo, si usas punteros será mucho más fácil.
La refactorización se hace yendo a "Opciones-> Opciones de Descompilación-> Marcar la palomilla "Refactorización", cerrar y volver a abrir el Script.
Espero haberte ayudado.
Si en lugar de usar cosas como la refactorización intentaras tener idea de porqué, quizá entenderías mejor lo que haces. Es decir, no digo que esté mal usarla, pero si a alguien que pregunta el porqué de algo le dices que la use y se olvide de ello, nunca va a entender cómo funcionan las cosas.
PD: Además, usas los términos incorrectamente. "@asdf" no es un puntero, es una etiqueta dinámica.
========
Mensaje combinado por doble post
Iniciado por cosarara97
Si en lugar de usar cosas como la refactorización intentaras tener idea de porqué, quizá entenderías mejor lo que haces. Es decir, no digo que esté mal usarla, pero si a alguien que pregunta el porqué de algo le dices que la use y se olvide de ello, nunca va a entender cómo funcionan las cosas.
PD: Además, usas los términos incorrectamente. "@asdf" no es un puntero, es una etiqueta dinámica.
gracias por la correccion y responder a mi pregunta. En este caso, que sugieres que haga para que el code no me lleve directamente a la despedida y el pokemart code si funcione?
Vamos a ver si nos entendemos con el 8. Cuando tú juegas, lo que se hace continuamente es cambiar valores en la memoria ram. Dependiendo de los datos que se generen en la ram pasan cosas (se mueve el mini, aparece una animación, tu pokémon pierde vida tras recibir un ataque...). Pero para que las cosas pasen se tiene que cargar datos de la memoria de lectura del juego, que se carga a partir del offset 0x08000000. Por ejemplo, el mini se mueve pero para eso tiene que cargar un frame que está en el rom. Puesto que el rom se carga en la dirección 0x08000000, el offset 0x1A5485 se cargaría realmente en el offset 0x081A5485. Para que lo veas más fácil, abre el memory viewer de VBA y vete al offset 0x08000000, verás que lo que te encuentras ahí es tu rom.
EDITO: Cosarara se me ha adelantado esta vez... D:
Bueno, como sé que no me he explicado bien, a ver si entre las dos cosas lo entiendes :P
en sintesis si entendi. Es basicamente la direccion directa. (talvez lo malentienda) pero "creo yo" es una manera "mas rapida" o un... punto especifico del offset. si hay otros offset igual, talvez "choquen" y por eso es que se direcciona con ese 8 al inicio. No es algo que uno haga, sino el propio juego al compilarlo.
puedo equivocarme pero es lo que analizo de eso que me cuentan. A los dos, muchas gracias,
PD: ya resolvi lo del pokemart :3
PD: Javi, esa beta que juegas en PSP es un hackrom que hiciste? O.o
SOLUCION:
#dynamic 0x800000
#org @inicio
lock
faceplayer
preparemsg @hi
waitmsg
Pokemart @tienda
msgbox @bye 0x6
release
end
#org @hi
= Bienvenido! Que deseas comprar?
#org @bye
= Vuelva pronto!
#org @tienda
#raw word 0x4
#raw word 0xD
#raw word 0xE
#raw word 0x12
#raw word 0x11
#raw word 0xF
#raw word 0x55
#raw word 0x56
#raw word 0x0
lo unico que hice fue remover esto: checkflag 0x74
if 0x1 goto 0x8152FA8
pokemart 0x8152F9C
msgbox 0x81A0C02 MSG_KEEPOPEN '"Please come again!"
release
end
'---------------
#org 0x152FA8
y agregarle la direccion dinamica a la despedida con un msgbox normal. El unico defecto es si sales de la opcion "buy" dira "its there anything else you may need"? talvez me digan "editor hexadecimal para cambiarlo" xd!
tengo otra duda... aunque es mas bien un problema y no estoy seguro como se resuelve.
sucede que cuando edito a un entrenador (hago el script y toa la rola guapa) me voy a advance map y pongo casilla "entrenador" y cuando pongo en... "rango" que es para que me vea y salga signo de admiracion y me rete, cuando entro al game se congela y se cambia la pantalla a un color.
Alguien me podria decir que estoy haciendo mal en editarlo? No he mirado mucha info respecto a este problema en particular :shy:
PD: Sin embargo, cuando no pongo nada, solo le hablo, la batalla se inicia normal sin problemas.
¿Pero se congela cuando se supone que te ve o directamente cuando entras al mapa?
Además deberías poner el script para echarle un vistazo.
#dynamic 0x800000
#org @inicio
lock
faceplayer
Trainerbattle 0x1 0x0D6 0x0 @texto @loose @clear
msgbox @clear 0x6
applymovement 0x5 @loque
waitmovement 0x5
setflag 0x20D
hidesprite 0x5
release
end
#org @texto
= Soy el cuarto furioso, No ganas mas!
#org @loose
= Me distraje pensando en mi novia. \l(excusas)
#org @clear
= Tengo mejores cosas que hacer\l con mi novia... me largo (excusas)
#org @loque
#raw 0x42
#raw 0x15
#raw 0x42
#raw 0x15
#raw 0x42
#raw 0x15
#raw 0x17
#raw 0x15
#raw 0x15
#raw 0x15
#raw 0x15
#raw 0x15
#raw 0x15
#raw 0x15
#raw 0x15
#raw 0xFE
en cuestion, el problema ocurre cuando se acerca a mi... me ve, camina, se acerca y cuando parece q va a hablarme, se congela la pantalla y se tiñe de lila. Eso solo si pongo un rango de vision. Cuando no esta el rango, todo bien. le hablo, me reta y termina la pelea normal
Claro, eso sólo funciona si pones un trainerbattle de tipo 0. Pero sólo eso, porque si se trata de otros comandos se bloquea. Intentas hacer una cosa que sólo puedes hacer con ASM.