Registrarse

[RH - Scripting] Duda sobre scripting

Estado
Cerrado para nuevas respuestas.
es posible modificar una script que ya esta metida en el juego y en el caso de que sea posible como se hace.

Para que se entirnda mejor pondre un ejemplo quiero cojer la script de un NPC random y cambiar lo que te dice, se que esto se hace facil pero la cosa es si es posible y como, lo necesito con el fin de aplicarlo a otros casos mas complejos
 

Rubire4

Usuario mítico
es posible modificar una script que ya esta metida en el juego y en el caso de que sea posible como se hace.

Para que se entirnda mejor pondre un ejemplo quiero cojer la script de un NPC random y cambiar lo que te dice, se que esto se hace facil pero la cosa es si es posible y como, lo necesito con el fin de aplicarlo a otros casos mas complejos
Si el script ocupa menos o los mismo bytes que el anterior script pones al principio del todo: #org 0xOffset dónde está insertado el script.

Si ocupa más bytes debes poner en cambio: #dynamic 0xNuevo offset.

Si eres nuevo en el ROM Hacking y no controlas mucho es recomendable que hagas esto último para asegurarte de no romper la ROM.
 
Si el script ocupa menos o los mismo bytes que el anterior script pones al principio del todo: #org 0xOffset dónde está insertado el script.

Si ocupa más bytes debes poner en cambio: #dynamic 0xNuevo offset.

Si eres nuevo en el ROM Hacking y no controlas mucho es recomendable que hagas esto último para asegurarte de no romper la ROM.
no he entendido que tengo que hacer osea le pongo lo de dinamic y eso y luego que??
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
no he entendido que tengo que hacer osea le pongo lo de dinamic y eso y luego que??
Lo que se suele poner al principio de todos los script es est:

Código:
#dynamic 0x800000
Sirve para encontrar espacios vacíos a partir de ese offset.

Por qué 0x800000, por el simple hecho de que a partir de ese offset es evidente que hay espacio vacío, y no hay peligro de sobreescribir nada. Resumiendo, pon en el scrpit #dynamic 0x800000
 
Lo que se suele poner al principio de todos los script es est:

Código:
#dynamic 0x800000
Sirve para encontrar espacios vacíos a partir de ese offset.

Por qué 0x800000, por el simple hecho de que a partir de ese offset es evidente que hay espacio vacío, y no hay peligro de sobreescribir nada. Resumiendo, pon en el scrpit #dynamic 0x800000
si pero una vez pongo eso cambio lo que necesito pero al salir vuelve a estar igual
 
cuando le doy a compilar me sale una pantalla en la que pone guardar, limpiar y la script pero rara. que tengo que hacer a partir de hay??

osea lo que ago es poner lo que tu me has dicho arriba, luego cambio lo que neccesito y luego le doy a compilar pero al hacerlo no me sale ningun otro offset
 

Rubire4

Usuario mítico
cuando le doy a compilar me sale una pantalla en la que pone guardar, limpiar y la script pero rara. que tengo que hacer a partir de hay??

osea lo que ago es poner lo que tu me has dicho arriba, luego cambio lo que neccesito y luego le doy a compilar pero al hacerlo no me sale ningun otro offset
Pones el #Dynamic 0x800000 al principio del todo, haces tus cambios y compilas. Te debe salir una pantalla así:


Le das a copiar y lo pegas en el offset del overworld.
En caso de que te salga únicamente lo de arriba y no te sale el apartado de "direcciones dinámicas" (es decir, los offsets y el botón copiar) es que no has puesto el dynamic y únicamente estás sobreescribiendo datos.
 
bien eso ya me sale pero al asignarle el offset al NPC no detecta los cambios que he echo
simplemente me pone la script base sin modificar
 
Última edición:

Rubire4

Usuario mítico
@Kazemaru004 Y creo que es muy obvio, pero en estos casos nunca se sabe.
Tienes que darle a Guardar Mapa en el Advance Map. Sino es como no hacer nada.
 
QUE os parece si mando la script??

'---------------
#org 0x153462
call 0x81A7224
end

'---------------
#org 0x1A7224
checkflag 0x801
if 0x1 goto 0x81A76C0
copyvar 0x8007 LASTTALKED
lock
faceplayer
preparemsg 0x81A788E '"Hola. Éste es el COLISEO del CLUB\..."
waitmsg
multichoice 0x11 0x6 0x11 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if 0x1 goto 0x81A7270
compare 0x8000 0x1
if 0x1 goto 0x81A7697
compare 0x8000 0x2
if 0x1 goto 0x81A735B
compare 0x8000 0x7F
if 0x1 goto 0x81A7697
call 0x81A2AD0
compare LASTRESULT 0x0
if 0x1 goto 0x81A7697
call 0x81A736D
compare 0x8004 0x0
if 0x1 goto 0x81A7697
preparemsg 0x81A7C91 '"Espera un momento.\n(...) Botón B:..."
waitmsg
special 0x1C
waitstate
compare LASTRESULT 0x1
if 0x1 goto 0x81A72DC
compare LASTRESULT 0x2
if 0x1 goto 0x81A767F
compare LASTRESULT 0x3
if 0x1 goto 0x81A768B
compare LASTRESULT 0x4
if 0x1 goto 0x81A73E6
compare LASTRESULT 0x5
if 0x1 goto 0x81A7697
compare LASTRESULT 0x6
if 0x1 goto 0x81A7673
special 0x0
special 0x27
special 0x14B
copyvar 0x4087 0x8004
preparemsg2 0x81A7DBF '"Adelante."
waitmsg
setmaptile 0x5 0x3 0x202 0x0
special 0x8E
pause 0x3C
applymovement LASTTALKED 0x81A76D4
waitmovement 0x0
closeonkeypress
applymovement MOVE_PLAYER 0x81A76D9
waitmovement 0x0
setdooropened 0x5 0x1
doorchange
applymovement MOVE_PLAYER 0x81A76DD
waitmovement 0x0
spriteinvisible 0xFF 0x0 0x0
setdoorclosed 0x5 0x1
doorchange
release
compare 0x8004 0x5
if 0x1 goto 0x81A734B
special 0x1
warp 0x19 0x18 0xFF 0x6 0x8
special 0x2
waitstate
end

'---------------
#org 0x1A76C0
msgbox 0x81A4776 MSG_FACE '"Lo siento mucho, el COLISEO\nestá ..."
end

'---------------
#org 0x1A7270
call 0x81A2AD0
compare LASTRESULT 0x0
if 0x1 goto 0x81A7697
call 0x81A736D
compare 0x8004 0x0
if 0x1 goto 0x81A7697
preparemsg 0x81A7C91 '"Espera un momento.\n(...) Botón B:..."
waitmsg
special 0x1C
waitstate
compare LASTRESULT 0x1
if 0x1 goto 0x81A72DC
compare LASTRESULT 0x2
if 0x1 goto 0x81A767F
compare LASTRESULT 0x3
if 0x1 goto 0x81A768B
compare LASTRESULT 0x4
if 0x1 goto 0x81A73E6
compare LASTRESULT 0x5
if 0x1 goto 0x81A7697
compare LASTRESULT 0x6
if 0x1 goto 0x81A7673
special 0x0
special 0x27
special 0x14B
copyvar 0x4087 0x8004
preparemsg2 0x81A7DBF '"Adelante."
waitmsg
setmaptile 0x5 0x3 0x202 0x0
special 0x8E
pause 0x3C
applymovement LASTTALKED 0x81A76D4
waitmovement 0x0
closeonkeypress
applymovement MOVE_PLAYER 0x81A76D9
waitmovement 0x0
setdooropened 0x5 0x1
doorchange
applymovement MOVE_PLAYER 0x81A76DD
waitmovement 0x0
spriteinvisible 0xFF 0x0 0x0
setdoorclosed 0x5 0x1
doorchange
release
compare 0x8004 0x5
if 0x1 goto 0x81A734B
special 0x1
warp 0x19 0x18 0xFF 0x6 0x8
special 0x2
waitstate
end

'---------------
#org 0x1A7697
special 0x1F
preparemsg 0x81A7F27 '" uelve cuando quieras."
waitmsg
waitkeypress
release
end

'---------------
#org 0x1A735B
preparemsg 0x81A7A13 '"Hay tres modos de combate por\ncon..."
waitmsg
waitkeypress
preparemsg 0x81A7BB4 '"¿Quieres luchar?"
waitmsg
goto 0x81A723A

'---------------
#org 0x1A2AD0
special 0x5D
waitstate
return

'---------------
#org 0x1A736D
preparemsg 0x81A7BC5 '"¿Qué modo de combate quieres?"
waitmsg
multichoice 0x0 0x0 0x12 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if 0x1 goto 0x81A73E0
compare 0x8000 0x1
if 0x1 goto 0x81A73C0
compare 0x8000 0x2
if 0x1 goto 0x81A73BA
compare 0x8000 0x3
if 0x1 goto 0x81A73B4
compare 0x8000 0x7F
if 0x1 goto 0x81A73B4
setvar 0x8004 0x0
return

'---------------
#org 0x1A72DC
special 0x0
special 0x27
special 0x14B
copyvar 0x4087 0x8004
preparemsg2 0x81A7DBF '"Adelante."
waitmsg
setmaptile 0x5 0x3 0x202 0x0
special 0x8E
pause 0x3C
applymovement LASTTALKED 0x81A76D4
waitmovement 0x0
closeonkeypress
applymovement MOVE_PLAYER 0x81A76D9
waitmovement 0x0
setdooropened 0x5 0x1
doorchange
applymovement MOVE_PLAYER 0x81A76DD
waitmovement 0x0
spriteinvisible 0xFF 0x0 0x0
setdoorclosed 0x5 0x1
doorchange
release
compare 0x8004 0x5
if 0x1 goto 0x81A734B
special 0x1
warp 0x19 0x18 0xFF 0x6 0x8
special 0x2
waitstate
end

'---------------
#org 0x1A767F
special 0x1F
preparemsg 0x81A7DC9 '"Uno de los jugadores no está listo..."
waitmsg
waitkeypress
release
end

'---------------
#org 0x1A768B
special 0x1F
preparemsg 0x81A7EE3 '"Los demás jugadores parecen haber\..."
waitmsg
waitkeypress
release
end

'---------------
#org 0x1A73E6
copyvar 0x8000 0x8004
compare 0x8000 0x1
if 0x1 goto 0x81A742F
compare 0x8000 0x2
if 0x1 goto 0x81A7420
compare 0x8000 0x5
if 0x1 goto 0x81A7411
goto 0x81A76AB

'---------------
#org 0x1A7673
special 0x1F
preparemsg 0x81A7E2A '"Error de conexión...\nComprueba el..."
waitmsg
waitkeypress
release
end

'---------------
#org 0x1A734B
special 0x1
warp 0x19 0x1B 0xFF 0x5 0x8
special 0x2
waitstate
end

'---------------
#org 0x1A723A
multichoice 0x11 0x6 0x11 0x0
copyvar 0x8000 LASTRESULT
compare 0x8000 0x0
if 0x1 goto 0x81A7270
compare 0x8000 0x1
if 0x1 goto 0x81A7697
compare 0x8000 0x2
if 0x1 goto 0x81A735B
compare 0x8000 0x7F
if 0x1 goto 0x81A7697
call 0x81A2AD0
compare LASTRESULT 0x0
if 0x1 goto 0x81A7697
call 0x81A736D
compare 0x8004 0x0
if 0x1 goto 0x81A7697
preparemsg 0x81A7C91 '"Espera un momento.\n(...) Botón B:..."
waitmsg
special 0x1C
waitstate
compare LASTRESULT 0x1
if 0x1 goto 0x81A72DC
compare LASTRESULT 0x2
if 0x1 goto 0x81A767F
compare LASTRESULT 0x3
if 0x1 goto 0x81A768B
compare LASTRESULT 0x4
if 0x1 goto 0x81A73E6
compare LASTRESULT 0x5
if 0x1 goto 0x81A7697
compare LASTRESULT 0x6
if 0x1 goto 0x81A7673
special 0x0
special 0x27
special 0x14B
copyvar 0x4087 0x8004
preparemsg2 0x81A7DBF '"Adelante."
waitmsg
setmaptile 0x5 0x3 0x202 0x0
special 0x8E
pause 0x3C
applymovement LASTTALKED 0x81A76D4
waitmovement 0x0
closeonkeypress
applymovement MOVE_PLAYER 0x81A76D9
waitmovement 0x0
setdooropened 0x5 0x1
doorchange
applymovement MOVE_PLAYER 0x81A76DD
waitmovement 0x0
spriteinvisible 0xFF 0x0 0x0
setdoorclosed 0x5 0x1
doorchange
release
compare 0x8004 0x5
if 0x1 goto 0x81A734B
special 0x1
warp 0x19 0x18 0xFF 0x6 0x8
special 0x2
waitstate
end

'---------------
#org 0x1A73E0
setvar 0x8004 0x1
return

'---------------
#org 0x1A73C0
special 0x3D
compare LASTRESULT 0x0
if 0x5 goto 0x81A73D4
setvar 0x8004 0x2
return

'---------------
#org 0x1A73BA
setvar 0x8004 0x5
return

'---------------
#org 0x1A73B4
setvar 0x8004 0x0
return

'---------------
#org 0x1A742F
special 0x1F
preparemsg 0x81A7F65 '" o se puede jugar al modo de comba..."
waitmsg
waitkeypress
goto 0x81A743E

'---------------
#org 0x1A7420
special 0x1F
preparemsg 0x81A7FA7 '"No se puede jugar al modo de comba..."
waitmsg
waitkeypress
goto 0x81A743E

'---------------
#org 0x1A7411
special 0x1F
preparemsg 0x81A7FE4 '"Se necesitan cuatro jugadores para..."
waitmsg
waitkeypress
goto 0x81A743E

'---------------
#org 0x1A76AB
special 0x1F
preparemsg 0x81A7F3E '"El número de jugadores no es corre..."
waitmsg
waitkeypress
release
end

'---------------
#org 0x1A73D4
preparemsg 0x81A7BE3 '"Para un COMBATE DOBLE, necesitas\n..."
waitmsg
waitkeypress
goto 0x81A736D

'---------------
#org 0x1A743E
special 0x1F
preparemsg 0x81A8025 '"Confirma el número de jugadores y\..."
waitmsg
waitkeypress
release
end


'---------
' Strings
'---------
#org 0x1A788E
= Hola. Éste es el COLISEO del CLUB\ndel CABLE POKéMON.\pAquí puedes luchar contra tus amigos.\p¿Quieres combatir?

#org 0x1A7C91
= Espera un momento.\n(...) Botón B: cancelar

#org 0x1A7DBF
= Adelante.

#org 0x1A4776
= Lo siento mucho, el COLISEO\nestá de obras.

#org 0x1A7F27
= uelve cuando quieras.

#org 0x1A7A13
= Hay tres modos de combate por\nconexión.\pEl COMBATE INDIVIDUAL es para dos\nENTRENADORES con uno o más\lPOKéMON cada uno.\pCada ENTRENADOR puede usar un\nPOKéMON cada vez.\pEl COMBATE DOBLE es para dos\nENTRENADORES con dos o más\lPOKéMON cada uno.\pCada ENTRENADOR usará dos\nPOKéMON cada vez.\pEl COMBATE MULTIJUGADOR es para\ncuatro ENTRENADORES con uno o más\lPOKéMON cada uno.\pCada ENTRENADOR puede usar un\nPOKéMON cada vez.

#org 0x1A7BB4
= ¿Quieres luchar?

#org 0x1A7BC5
= ¿Qué modo de combate quieres?

#org 0x1A7DC9
= Uno de los jugadores no está listo\npara realizar la conexión.\pVuelve cuando todos estéis listos.

#org 0x1A7EE3
= Los demás jugadores parecen haber\nseleccionado opciones diferentes.

#org 0x1A7E2A
= Error de conexión...\nComprueba el cable Game Link, apaga\lla consola y vuelve a encenderla.

#org 0x1A7F65
= o se puede jugar al modo de combate\nINDIVIDUAL con [buffer1] jugadores.

#org 0x1A7FA7
= No se puede jugar al modo de combate\nDOBLE con [buffer1] jugadores.

#org 0x1A7FE4
= Se necesitan cuatro jugadores para\njugar a este modo de combate.

#org 0x1A7F3E
= El número de jugadores no es correcto.

#org 0x1A7BE3
= Para un COMBATE DOBLE, necesitas\ntener al menos dos POKéMON.

#org 0x1A8025
= Confirma el número de jugadores y\nvuelve a empezar.


'-----------
' Movements
'-----------
#org 0x1A76D4
#raw 0x3 'Face Right
#raw 0xFE 'End of Movements

#org 0x1A76D9
#raw 0xB 'Step Right (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0xFE 'End of Movements

#org 0x1A76DD
#raw 0x9 'Step Up (Normal)
#raw 0xFE 'End of Movements



Lo que quiero cambiar es lo amarillo por otra localizacion en concreto cilla raiz pero me da igual cual
 

Rubire4

Usuario mítico
@Kazemaru004 tendrías que haber puesto otro color, que el amarillo se ve fatal sobre fondo blanco xd

Para cambiar el warp a Villa raíz es muy fácil:
warp 0x(banco) 0x(mapa) 0xFF 0x(eje x) 0x(eje y)
En este caso:
warp 0x0 0x9 0xFF 0x(eje x) 0x(eje y)

Pon al principio del script del todo (la primera línea) #dynamic 0x800000, y cambia los #org 0xoffset por un #org @LoQueQuierasPonerAqui
 

Laquin

Usuario mítico
QUE os parece si mando la script??

'---------------
#org 0x153462
call 0x81A7224
end

etc.



Lo que quiero cambiar es lo amarillo por otra localizacion en concreto cilla raiz pero me da igual cual
Si solo quieres cambar eso, simplemente usa esto que te ha puesto @Rubire4:
Código:
warp 0x(banco) 0x(mapa) 0xFF 0x(eje x) 0x(eje y)
Luego, compílalo. No hace falta que hagas lo del #dynamic 0x800000; como el script nuevo ocupa el mimo espacio que el viejo, no corres ningún riesgo de sobreescribir ningún dato.
 
Última edición por un moderador:
Nada aun haciendo todo lo que me decis no puedo hacerlo. las demas partes del script si que las puedo editar pero eso en concreto no
supongo que estara preparado para que nadie lo cambie pero joder menuda mierda
 

Laquin

Usuario mítico
Nada aun haciendo todo lo que me decis no puedo hacerlo. las demas partes del script si que las puedo editar pero eso en concreto no
supongo que estara preparado para que nadie lo cambie pero joder menuda mierda
¿A qué te refieres con que no te deja editar? ¿Te da algún mensaje de error? Porque no lo entiendo; simplemente es cambiar esa línea y darle al botón de los engranajes, no tiene más. Y, que yo sepa, no hay ningún tipo de protección especial para ese script en concreto.
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
No queria usar este método pero bueno, vas a tener que editarlo hexadecimalmente. En el script hay tres warps, que son los siguientes, estoy hablando de la chica de la derecha del todo de la planta superior del Centro Pokemon de Ciudad Verde:

warp3 0x0 0x1 0xFF 0x5 0x8 // 3E 00 01 FF 05 00 08 00 => Centro de Intercambio

warp 0x0 0x0 0xFF 0x6 0x8 // 39 00 00 FF 06 00 08 00 => Combate Individual

warp 0x0 0x3 0xFF 0x5 0x8 // 39 00 03 FF 05 00 08 00 => Combate Doble
Y el script de esa chica empiza en el offset 0x1A8D02 Entonces, lo que harás será lo siguiente:

En los offsets 0x1BB78F 0x1BB614 0x1BB62F pondrás lo siguiente: 39 (banco) (mapa) FF (coordenada X) (coordena Y)

Por ejemplo si quiero teletransportarme en frente de mi casa el código será este: 39 03 00 FF 06 00 08 00

No lo he comprobado, pero esto sirve para editar los parámetros de esos warps al mapa que tu quieras. En este caso te he puesto para que solo puedas teletransportante a ese mapa, sea intercambio, combate individual, combate doble... pero puedes warpear a diferentes mapas. Ya me dirás si te funciona.
 

Laquin

Usuario mítico
No queria usar este método pero bueno, vas a tener que editarlo hexadecimalmente. En el script hay tres warps, que son los siguientes, estoy hablando de la chica de la derecha del todo de la planta superior del Centro Pokemon de Ciudad Verde:



Y el script de esa chica empiza en el offset 0x1A8D02 Entonces, lo que harás será lo siguiente:

En los offsets 0x1BB78F 0x1BB614 0x1BB62F pondrás lo siguiente: 39 (banco) (mapa) FF (coordenada X) (coordena Y)

Por ejemplo si quiero teletransportarme en frente de mi casa el código será este: 39 03 00 FF 06 00 08 00

No lo he comprobado, pero esto sirve para editar los parámetros de esos warps al mapa que tu quieras. En este caso te he puesto para que solo puedas teletransportante a ese mapa, sea intercambio, combate individual, combate doble... pero puedes warpear a diferentes mapas. Ya me dirás si te funciona.
Al usar el XSE estás haciendo justamente eso: cambiar los valores hexadecimales del juego. Y si lo usas sin el #dynamic, es decir, con los offset que le pongas, estos valores se pondrán exactamente en el offset que pongas en el #org. Realmente lo que haces es sobreescribir el script, pero lo sobreescribes con los mismos valores que antes tenía, porque nada cambia(hasta que llega al warp que ha cambiado, donde ahí el XSE pondría valores nuevos en la ROM).

Lo digo porque no creo que le vaya a gustar mucho tener que andar con el HxD a cada que tenga que hacer algo así. xD
 
Muchas gracias a todos enserio. al final despues de estar mucho tiempo probando he decidido probar otras manera pero igual se me han presentado neuvos fallos asi que estos dias pondre bastantes temas porque se me presentaran muchos errores o bugs Gracias por vuestra ayuda con el tema XD
 
Estado
Cerrado para nuevas respuestas.
Arriba