qna_rh
Thread Id: 28952
Thread Name: ¿Uso de flags?
Bueno, hice un script donde hago checkflags, movimientos etc. etc. Me quedo así
'---------------
#org 0xE3D22B
checkflag 0x6A6C
if 0x1 call 0xE3D22C
call 0xE3D22D
end
'---------------
#org 0xE3D22C
release
end
'---------------
#org 0xE3D22D
lock
playsong 0x12E 0x33
applymovement 0x1 0xE3D22E
pause 0x40
msgbox 0xE3D22F MSG_FACE '"Oh, [player]...! Our neighbor, PRO..."
setflag 0x862
setflag 0x130
setflag 0xD8
fanfare 0x13E
setflag 0x6A6C
msgbox 0xE3D230 MSG_FACE '"Oh, [player]...! Our neighbor, PRO..."
msgbox 0xE3D231 MSG_FACE '"Oh, [player]...! Our neighbor, PRO..."
special 0x9D
msgbox 0xE3D232 MSG_FACE '"Oh, [player]...! Our neighbor, PRO..."
applymovement 0x1 0xE3D233
'---------
' Strings
'---------
#org 0xE3D22F
= ¡Ah,[player]...!\pNuestro vecino, el Profesor Elm,\nte estaba buscando.\lDijo que quería que le hicieras un\lfavor.\l¡Ah!¡Casi se me olvida! Ya han\ltraído tu Pokénav del taller.\l¡Aquí tienes!
#org 0xE3D230
= [player] recibió Pokénav
#org 0xE3D231
= El Pokémon Navigator o sólo\nPokénav.\lEs básico si quieres ser un buen\lentrenador.\l¡Ah! Falta la hora.\l¡No olvides ponerlo!\l¿Qué hora es?\l
#org 0xE3D232
= Vuelve a casa para cambiar de hora\nel reloj.\lSupongo que debes saber manejar el\ltelefono ¿Verdad?\l¿Recuerdas que hay que encender\le Pokénav y elegir el telefono?\lLos números están en la memoria.\lElige el nombre que quieras\l¿No te parece estupendo?
'-----------
' Movements
'-----------
#org 0xE3D22E
#raw 0x2 'Face Left
#raw 0x56 'Exclamation Mark (!)
#raw 0x9 'Step Up (Normal)
#raw 0xFE 'End of Movements
#org 0xE3D233
#raw 0x8 'Step Down (Normal)
#raw 0x1 'Face Right
#raw 0xFE 'End of Movements
pero luego de compilarlo con XSE y abrir de nuevo el script, este queda así
'---------------
#org 0xE3D22B
checkflag 0x6A6C
end
alguien puede decirme que estoy haciendo mal :(
porque lo que estas compilando es la primera parte, intenta con esto (no pondre los textos)
Bueno, gracias pero ahora el script se volvió así
'---------------
#org 0xE3D22B
checkflag 0x26C
end
Ehm... ¿Con los checkflag no se ponía "goto" en vez de "call"?
Si me confundo que me digan :D
Iniciado por Yo tampoco.
Ehm... ¿Con los checkflag no se ponía "goto" en vez de "call"?
Si me confundo que me digan :D
Eso depende de la funcion, en este script esta muy bien hecho para que funcione asi.
Goto te hace ir a un pointer, pero no vuelves
con Call vas a ese pointer y al terminarlo con un return, vuelves al punto donde estabas antes.
El unico fallo que veo es que usas un checkflag 0x6000 y las flags no son esas!!
Iniciado por Comisión anti flags erróneas de Javi y Sayer
Las flags que deben ser utilizadas para evitar errores son las siguientes:
Desde la 0x200 hasta la 0x29F
Desde la 0x500 hasta la 0x79F
Desde la 0x1000 hasta la 0x109F
Gracias por su ayuda, pero mi script sigue volviendose en esto
'---------------
#org 0xE3D22B
checkflag 0x26C
end
Iniciado por Mr Game Dan
Gracias por su ayuda, pero mi script sigue volviendose en esto
'---------------
#org 0xE3D22B
checkflag 0x26C
end
Probaste tu script original pero con las flags que te indiqué?
¿que Rom base usas?
¿porque un offset taaan lejano?
Bueno, yo utilizo el rom de pokémon esmeralda en español, para hacer un remake de Pokémon Oro
Rom Name: POKEMON EMER
Rom Type: BPE
Rom Language: S
Rom version: 1.0
Primero debes saber que cuando haces uso del comando "call" este se cierra con un "return" no con un "end" ya que al ser una llamada a un pointer el script debe regresar a su pocision original, osea asi
'---------------
#org 0xE3D22B
checkflag 0x6A6C
if 0x1 call 0xE3D22C
call 0xE3D22D
end
'---------------
#org 0xE3D22C
release
return
Aunque mas creo que es por direcciones erroneas, mira que el primer call es a 0xE3D22C cuyo script pesa 2 bytes (release y end/return) y el otro esta a 1 byte, osea en 0xE3D22D, prueba ponerlo en 0xE3D22F o superior.
'---------------
#org 0xE3D22B
'---------------
#org 0xE3D22C
'---------------
#org 0xE3D22D
Gente, nadie lo ve? (Bueno, ahora Franco se ha adelantado)
A ver, estás sobreescribiendo lo de una parte el script con lo de otra. Cambia todos esos offsets absoultos por etiquetas dinámicas, o aprende a dejar algo de margen entre las cosas.
Prueba usando #dynamic, quedaria mas o menos asi
'---------------
#dynamic 0xE3D22B
#org @start1
checkflag 0x200
if 0x1 goto @start2
goto @start3
end
'---------------
#org @start2
release
end
'---------------
#org @start3
lock
playsong 0x12E 0x33
applymovement 0x1 0xE3D22E
pause 0x40
msgbox 0xE3D22F MSG_FACE '"Oh, [player]...! Our neighbor,
PRO..."
setflag 0x862
setflag 0x130
setflag 0xD8
fanfare 0x13E
setflag 0x6A6C
msgbox 0xE3D230 MSG_FACE '"Oh, [player]...! Our neighbor,
PRO..."
msgbox 0xE3D231 MSG_FACE '"Oh, [player]...! Our neighbor,
PRO..."
special 0x9D
msgbox 0xE3D232 MSG_FACE '"Oh, [player]...! Our neighbor,
PRO..."
applymovement 0x1 0xE3D233
No tiene logica que uses call porque te hara regresar al script principal y se ejecutara estando activada o desactivada la flag
Mas o menos asi, me falto el start3, pero si no quieres usar el #dynamic deberias calcular el peso de cada subscript y sumarselo a la direccion principal, aunque si no eres pro en esto no lo recomiendo