Registrarse

[RH - Scripting] Analizador de entrenadores

Estado
Cerrado para nuevas respuestas.
Muy buenas a todos.
Soy nuevo en esto del ROMHACKING pero tengo un montón de ideas y sigo aprendiendo. Me encanta esto de hacer modificar Roms.

Llevo un tiendo programando y se me ocurrio hacer una cosa.

Porque no hacer un evento el cual no se activara si no has derrotado a 3 de 5 entrenadores?

Entonces me puse a ello.

Pense en utilizar flags al principio, pero despues me di cuenta que tenia las trainerflags! Algo mucho mejor ya que no tendria que usar flags normales.
Tambien pense en el metodo que podia utilizar y que activaria. Cosa que es irrelevante en lo que quiero tratar.

Bien, probe si un NPC con algunos trainerflags podia decirme:
Has derrotado a 0 entrenadores.
o bien si derrotaba al trainer en concreto
Has derrotado a 1 entrenador, te quedan 2!
Hasta ahi todo bien. Luego la cosa enpezo a complicarse.

Intente hacerlo con 2 entrenadores.(Lamentablemente esos scripts los borre mientras hacia pruebas aunque use la misma base que dejare abajo)

Luego al hablar con el NPC decia cuantos habia derrotado.
Pero hacia cosas raras.

Al fianl de todo hice esto que ire explicando brevemente.
Código:
#dynamic 0x800000

//---------------
#org @start
lock
faceplayer
msgbox @t1 0x6
goto @entrenadores



//---------------
#org @entrenadores
checktrainerflag 0x001
compare LASTRESULT 0x1
if 0x1 goto @1
checktrainerflag 0x002
compare LASTRESULT 0x1
if 0x1 goto @2
checktrainerflag 0x003
compare LASTRESULT 0x1
if 0x1 goto @3
pause 0x15
msgbox @ninguno 0x6
release
end


//------POINTERS---------
#org @1
checktrainerflag 0x002
compare LASTRESULT 0x1
if 0x1 goto @12
checktrainerflag 0x003
compare LASTRESULT 0x1
if 0x1 goto @13
pause 0x15
msgbox @llevas1 0x6
release
end


#org @12
checktrainerflag 0x003
compare LASTRESULT 0x1
if 0x1 goto @vencidos
pause 0x15
msgbox @llevas2 0x6
release
end

#org @13
msgbox @calculando 0x4
checktrainerflag 0x002
if 0x1 goto @vencidos
compare LASTRESULT 0x1
pause 0x15
msgbox @llevas2 0x6
release
end
//---------------
#org @2
checktrainerflag 0x001
compare LASTRESULT 0x1
if 0x1 goto @21
checktrainerflag 0x003
compare LASTRESULT 0x1
if 0x1 goto @23
pause 0x15
msgbox @llevas1 0x6
release
end


#org @21
checktrainerflag 0x003
compare LASTRESULT 0x1
if 0x1 goto @vencidos
pause 0x15
msgbox @llevas2 0x6
release
end

#org @23
checktrainerflag 0x001
compare LASTRESULT 0x1
if 0x1 goto @vencidos
pause 0x15
msgbox @llevas2 0x6
release
end
//---------------
#org @3
checktrainerflag 0x001
compare LASTRESULT 0x1
if 0x1 goto @31
checktrainerflag 0x002
compare LASTRESULT 0x1
if 0x1 goto @32
pause 0x15
msgbox @llevas1 0x6
release
end


#org @31
msgbox @calculando 0x4
checktrainerflag 0x002
compare LASTRESULT 0x1
if 0x1 goto @vencidos
pause 0x15
msgbox @llevas2 0x6
release
end

#org @32
msgbox @calculando 0x4
checktrainerflag 0x001
compare LASTRESULT 0x1
if 0x1 goto @vencidos
pause 0x15
msgbox @llevas2 0x6
release
end
//---------------

#org @vencidos
msgbox @llevas3 0x6
giveitem 0xE 0x1 0x1
release
end

//------DIALOGUE---------

#org @llevas3
= Has derrotado a todos los\nentrenadores, buen trabajo!\pTen esto.

#org @llevas2
= Has derrotado a 2 entrenadores.

#org @llevas1
= Has derrotado a 1 entrenador.

#org @ninguno
= Has derrotado a 0 entrenadores.

#org @t1
= Veamos a cuantos entrenadores has\npodido derrotar.

Vale, cuanto material y ahora lo explicare mas o menos cual era mi idea.

Según tengo entendido cada entrenador tiene su propia flag, es decir, cuando ganas al entrenador 0x001, su flag automáticamente se coloca. Por lo tanto mi idea era comprobar las flags de los entrenadores como si fuese un árbol, es decir:

Comprueba flag 001
si la tiene comprueba la del 2 y así asta los que queráis.
Pero ojo que esto tiene que ser con orden.
Es decir si compruebas el 1, 2, 3.
También deberás comprobar el 2, 3 ,1. Sino el entrenador tendrá que derrotarlos en el orden 1,2,3 para que sea correcto. Esto solo es necesario en el caso de que por ejemplo en una zona hubiesen 5 entrenadores, y solo necesitáramos pelear contra 3 para abrir una puerta.
Es un poco complejo pero si etendeis programacion sabreis a lo que me refiero.

El problema esta en que por lo que sea. No consigo ejecutarlo bien. La practica bien pero no consigo saber que es lo que ocurre.
Se que mi script es tedioso y no hace falta que lo lean ni comprendan completamente, solo quiero saber si algo tipo así (script simple debajo) es posible.
Código:
#org @entrenadores
checktrainerflag 0x001
compare LASTRESULT 0x1
if 0x1 goto @1
checktrainerflag 0x002
compare LASTRESULT 0x1
if 0x1 goto @2
checktrainerflag 0x003
compare LASTRESULT 0x1
if 0x1 goto @3
pause 0x15
msgbox @ninguno 0x6
release
end


//------POINTERS---------
#org @1
checktrainerflag 0x002
compare LASTRESULT 0x1
if 0x1 goto @12
checktrainerflag 0x003
compare LASTRESULT 0x1
if 0x1 goto @13
pause 0x15
msgbox @llevas1 0x6
release
end


#org @12
checktrainerflag 0x003
compare LASTRESULT 0x1
if 0x1 goto @vencidos
pause 0x15
msgbox @llevas2 0x6
release
end

Quiza se pueda arreglar incluso mejorar o simplificar.
Muchas gracias por leer el post buenos días.
 
Última edición por un moderador:

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Creo que no conoces la existencia de la variables. Las. Cuales son capaces de almacenar cualquier valor entre 0 y FFFF. Es decir, puedes hacer lo que pides simplemente añadiendo uno al valor de una variable.

Es decir,

Código:
 trainerbattle (y todos sus parámetros)
addvar 0x(número de variable) 0x1
de esta forma al vencer a un entrenador sumará uno a la variable. Después en otro trainerbattle suma uno a la misma variable. De esta manera cubrirás todos los órdenes y te contará las veces que hayas derrotado a un entrenador.

Por último, en el script de comprobar,

Código:
 compare 0x(número de antes) 0x0
if 0x1 goto @ceroderrotados
compare 0x(número de antes) 0x1
if 0x1 goto @unoderrotados
compare 0x(número de antes) 0x2
if 0x1 goto @dosderrotados
...
Creo que las variables son mucho más eficaces para lo que quieras hacer ;)
 
Respuesta: Re: Analizador de entrenadores

Creo que no conoces la existencia de la variables. Las. Cuales son capaces de almacenar cualquier valor entre 0 y FFFF. Es decir, puedes hacer lo que pides simplemente añadiendo uno al valor de una variable.

Es decir,

Código:
 trainerbattle (y todos sus parámetros)
addvar 0x(número de variable) 0x1
de esta forma al vencer a un entrenador sumará uno a la variable. Después en otro trainerbattle suma uno a la misma variable. De esta manera cubrirás todos los órdenes y te contará las veces que hayas derrotado a un entrenador.

Por último, en el script de comprobar,

Código:
 compare 0x(número de antes) 0x0
if 0x1 goto @ceroderrotados
compare 0x(número de antes) 0x1
if 0x1 goto @unoderrotados
compare 0x(número de antes) 0x2
if 0x1 goto @dosderrotados
...
Creo que las variables son mucho más eficaces para lo que quieras hacer ;)
Muchisimas gracais por tu ayuda, ahora el codigo es mucho mas limpio y simple. Pero me sigue dando algunos problemillas y nose porque.
Código:
#dynamic 0x800000

//---------------
#org @start
lock
faceplayer
msgbox @t1 0x6
goto @entrenadores



//---------------
#org @entrenadores
pause 0x15
compare 0x1 0x0
if 0x1 goto @ninguno
compare 0x1 0x1
if 0x1 goto @1derrotado
compare 0x1 0x2
if 0x1 goto @2derrotado
compare 0x1 0x3
if 0x1 goto @3derrotado
compare 0x1 0x4
if 0x1 goto @todos

//---------------

#org @ninguno
msgbox @llevas0 0x6
release
end

#org @1derrotado
msgbox @llevas1 0x6
release
end

#org @2derrotado
msgbox @llevas2 0x6
release
end

#org @3derrotado
checkflag 0x20A
if 0x1 goto @darpokedex
msgbox @t2 0x6
release
end

#org @darpokedex
setflag 0x20A
setflag 0x861
fanfare 0x172
msgbox [MENTION=41910]poke[/MENTION]dex 0x4
waitfanfare
release
end

#org @todos
msgbox @perfect 0x6
release
end

//------DIALOGUE---------

#org @perfect
= Has derrotado a todos los\nentrenadores de la Ruta 1!

#org [MENTION=41910]poke[/MENTION]dex
= [player] recivio\n[red_em]Pokédex[darkgrey_em]!

#org @llevas3
= Has derrotado a 3 entrenadores.\nBuen trabajo!\pToma esto por tu esfuerzo.

#org @llevas2
= Has derrotado a 2 entrenadores.

#org @llevas1
= Has derrotado a 1 entrenador.

#org @llevas0
= Has derrotado a 0 entrenadores.

#org @t1
= Veamos a cuantos entrenadores has\npodido derrotar.

#org @t2
= Aun quedan algunos entrenadores\ncon los que conbatir, pero no es\lobligatorio luchar contra ellos.

Eso supongo quees lo que esta mal ya que los scripts de entrenador es bastante simplre.
Son todos iguales exceptuando los mensajes y la ID delentrenador
Código:
#dynamic 0x800000

#org @start
lock
faceplayer
trainerbattle 0x0 0x001 0x0 @intro @win
addvar 0x1 0x1
msgbox @t1 0x6
release
end

#org @t1
= Me encantan los Pokémons tipo\nbicho!

#org @win
= Me has ganado!

#org @intro
= Los bichos son lo mejor!
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Claro que no te funciona, no se puede usar la variable número uno. Prueba con la 0x8000
 
Respuesta: Re: Analizador de entrenadores

Claro que no te funciona, no se puede usar la variable número uno. Prueba con la 0x8000
De verdad muchísimas gracias.
Con estas cosas no solo consigo solucionar mis problemas sino que ademas también aprendo mas sobre ROMHACKING.
De verdad que muchas gracias y espero seguir mejorando mi pequeña ROM.

Que tengas un buen día.;):lovelon:

PD: Crees que seria buena idea hacer un post con esta idea para hacer un contador de entrenadores por si la gente quiere uno?
 

MetalKaktus

A la luz del quinto día, mira al este
Miembro insignia
Re: Respuesta: Re: Analizador de entrenadores

De verdad muchísimas gracias.
Con estas cosas no solo consigo solucionar mis problemas sino que ademas también aprendo mas sobre ROMHACKING.
De verdad que muchas gracias y espero seguir mejorando mi pequeña ROM.

Que tengas un buen día.;):lovelon:

PD: Crees que seria buena idea hacer un post con esta idea para hacer un contador de entrenadores por si la gente quiere uno?
A ver, si aportas algo así nadie te va a decir nada malo. Pero me parece algo innecesario viendo lo fácil que es. Es mejor que la gente lo haga por si misma para que aprendan por si mismos.
 
Estado
Cerrado para nuevas respuestas.
Arriba