Registrarse

[Duda] ¿givepokemon y luego moverse?

Estado
Cerrado para nuevas respuestas.

KALM

The Rat King
Esto...¡Hola! (Vaya nervios, hace mucho que no hago casi nada así en Wah xD)

Pues bueno, a lo que vengo, se que hay forma de hacer esto, pero yo soy malísimo en lo que se refiere a scripting (y en casi todo la verdad :v), alguien podría decirme como se hace para que te den un Pokémon, y luego el NPC se mueva hacia la izquierda? es decir, ya tengo el evento en que el NPC te habla y te da el Pokémon, solo falta que al terminar de hablarte, se corra hacia un lado.

Pueh eso, no se que mas decir :shock: asi que...¡gracias de antemano!

PD: Olvide decir que es para FR ._.
 

DeadApolo

A'KERIA'S TRACES
Bueno primero que todo, supondré que la base del script es ésta:

Código:
#Dynamic 0x800000

#org @Inicio
lock
faceplayer
msgbox @MSG 0x6
Givepokemon 0xpokemon 0xnivel 0xobjeto 0x0 0x0 0x0
release
end

#org @MSG
= "Mensaje"
(Un script muy básico de givepokemon. Ahí luego se agregan efectos y cosas, pero básicamente es ésta es la base)
Hasta ahí te habla y te da el pokemon, entonces para que se mueva a un lado ¿Cómo se hace? ¡Pues muy fácil!, un applymovement es la solución.
Éste código debes poner bajo el givepokemon:

Código:
[...]
Applymovement 0xmini @MOV
Waitmovement 0xmini(o "0" simplemente, de ese modo espera cualquier mini que se esté moviendo con el apply anterior.)
[...]

#org @MOV
#raw 0x12 'Paso Izquierda
#raw 0xFE 'Finalizar Movimientos
Bien, con eso ya se estaría moviendo a la izquierda ¿Se entiende? pues generalmente te preguntarías: ¿Cómo sé cual es el número(0xN°) de los otros movimientos? pues muy fácil, es cosa de que uses la herramienta "Move It!", la cual puedes encontrar en cualquier paquete de herramientas en el foro.

Ahora para sintetizar, lo que debes hacer es esto:
Código:
#Dynamic 0x800000

#org @Inicio
lock
faceplayer
msgbox @MSG 0x6
Givepokemon 0xpokemon 0xnivel 0xobjeto 0x0 0x0 0x0
Applymovement 0xmini @MOV
Waitmovement 0xmini
release
end

#org @MSG
= "Mensaje"

#org @MOV
#raw 0x12 'Paso Izquierda
#raw 0xFE 'Finalizar Movimientos
De ese modo al darte el pokemon también se moverá a la izquierda.
Luego solo queda que le hagas los retoques, algún que otro efectillo y quedará listo.
Applymovement, si sabes utilizarlo, puede servirte para muchas cosas más, como mover la cámara por ejemplo, pero eso ya lo irás aprendiendo con el tiempo.
¡Saludos colega!, espero haber aclarado tu duda.

Atte:

ApoloD - DeadApolo actualmente.
 

KALM

The Rat King
Re: Respuesta: [Duda] ¿givepokemon y luego moverse?

Pues no lo termino de entender xD no sirvo para esto de los scripts, solo se lo básico
 

Xiros

¡Creador de Pokémon Omega!
Miembro del equipo
Miembro de honor
Código:
#Dynamic 0x800000
Esto sirve para que el XSE te busque espacio libre donde guardar el script en la rom (el juego) a partir de esta dirección, vos simplemente pones @ y al lado del nombre y después el programa automaticamente le asigna donde se coloca

Código:
#org @Inicio
Con #org es con lo que empieza cada script, y luego iría la dirección del script, en este caso le ponemos @(cualquier cosa) para que después nos elija la dirección automaticamente

Código:
lock
Esto lo que hace es que el personaje que utilizamos se bloquee mientras ocurre el script
Código:
faceplayer
Esto hace que a la persona que le hablamos nos mire
Código:
msgbox @MSG 0x6
Esto hace que se muestre el mensaje puesto en la dirección @MSG

Código:
Givepokemon 0xpokemon 0xnivel 0xobjeto 0x0 0x0 0x0
Esto es el comando para givepokemon, tu tienes que poner en el primer 0x el número en hexadecimal del pokemon, en el segundo 0x el número en hexadecimal del nivel y en el tercer 0x el número en hexadecimal del objeto que lleva, si es que lleva. A modo de ejemplo, bulbasaur es el pokemon 1, si lo queres entregar en nivel 10 en hexadecimal pondrías A, y no te interesa ningun objeto, entonces quedaría así:

Código:
givepokemon 0x1 0xA 0x0 0x0 0x0 0x0
Código:
release
Como habías bloqueado al personaje, ahora debes de liberarlo con el comando release, si no se queda trancado

Código:
end
Indicas que finaliza el script

Código:
#org @MSG
= "Mensaje"
Habíamos dicho que el mensaje estaba en la dirección @MSG, entonces aquí inicias un nuevo script con ORG en esa dirección y escribes el mensaje con = Y aquí escribes el mensaje.

Y la parte del applymovement:

Código:
Applymovement 0xmini @MOV
El comando para que se mueva un mini es applymovement, en el cual tienes que indicar cual mini es el que se tiene que mover (tienes que mirar el número del mini en el advanced map, seguro hay alguna guía en la que explican esto), y luego va la dirección de donde se implementan los movimientos

Código:
Waitmovement 0xmini(o "0" simplemente, de ese modo espera cualquier mini que se esté moviendo con el apply anterior.)
Esto es necesario para que se ejecute el movimiento, es la pausa que tiene que hacer antes de seguir con el script. Si le pones 0 (osea 0x0), se ejecuta todo el movimiento completo, por lo general es lo más recomendable.

Código:
#org @MOV
#raw 0x12 'Paso Izquierda
#raw 0xFE 'Finalizar Movimientos
En la dirección @MOV escribimos los movimeintos en forma de #raw. Cada movimiento equivale a un #raw y el comando del movimiento. Tienes que encontrar cuales son los movimientos que tu quieres (creo que existe una herramienta que te asiste con esto, si no antes por lo menos existía un archivo por ahí que tenía todos los movimientos, o si no encuentras puedes investigar cuales se usan en los scripts del rom que utilices). Todo movimiento tiene que terminar con FE, ya que es que indica cuando se terminaron los movimientos.


No analicé el script en conjunto pero espero que con esto más lo de @DeadApolo puedas entender más.

En realidad hace muuuuuuuuuuuucho no scripteo y puedo tener algún concepto no bien del todo, pero creo que era todo así :)
Cualquier cosa estoy a las ordenes!
 

DeadApolo

A'KERIA'S TRACES
Una acotación al tema. y para que no quede ningún cabo suelto, quería agregar algo así por si algún novatillo viese esto, vendría siendo una explicación orientada únicamente al applymovement:

Un applymovement, si lo analizamos, significaría: Aplicar(Apply) Movimiento(Movement), por lo tanto lo que hace es aplicar un movimiento a un Mini(NPC) determinado.
Tip: Este comando se puede utilizar, además, para mover la cámara si sabes usarlo.
La estructura del comando es la siguiente:
Applymovement 0xN°delMini @MOV
Waitmovement 0xN°delMini o "0" para que se ejecute todo el movimiento completo.

Ahora la explicación de ambos comandos:
Applymovement: Aplica un movimiento a un NPC, sirve para moverlo de su posición con distintos efectos, ya sea caminando, deslizando, especiales, etc, éstos los puedes ver en Move It!, la herramienta antes mencionada.

Waitmovement: Esto sería: Esperar(Wait) un Movimiento(Movement), osea sirve para que no siga el script hasta que se haya terminado el movimiento anterior.

Aclaraciones: No siempre es necesarios que vaya el Waitmovement, osea si quieres que mientras se hace el movimiento de un NPC aparezca un texto, no pones el Waitmovement y lo sigues con un msgbox. Se puede usar de formas bastante ingeniosas, sólo necesitas imaginación.

El N° del Mini se saca por A-Map, lo puedes ver en la información de los minis que se te muestra en la derecha del A-Map, bajo el desplegable "Gente", aparece un segundo despegable, pero a su lado dice: Número de Evento, de ahí sacarás el número que usarás como "N° de Mini".
Y respecto a la utilización del mismo, es como lo ha explicado el colega Xiros por lo que no veo motivo para redundar en lo mismo.

Ya con esto supongo que la duda debería estar más clarificada o al menos que sirviese como base y ya me doy por pagado xDDD, saludos colega, cualquier duda siga posteandolas en la sección.

Atte:

ApoloD - DeadApolo actualmente.
 

KALM

The Rat King
¡Muchas gracias a ambos! n.n ya logre hacer lo que quería.

EDIT: Eso si, no se que sucede que me da el Pokémon, pero en el menú (donde dice save, bag, etc...) no me aparece la pestaña Pokémon ;-;

Ademas, al entrar a una casa y luego salir, el evento se reinicia :T
 
Última edición:

Laquin

Usuario mítico
Respuesta: Re: [Duda] ¿givepokemon y luego moverse?

¡Muchas gracias a ambos! n.n ya logre hacer lo que quería.

EDIT: Eso si, no se que sucede que me da el Pokémon, pero en el menú (donde dice save, bag, etc...) no me aparece la pestaña Pokémon ;-;

Ademas, al entrar a una casa y luego salir, el evento se reinicia :T
Lo del menú Pokémon, setflag 0x828 si mal no recuerdo.(solo para FR)

Lo de la casa no entendí xD
 

Xiros

¡Creador de Pokémon Omega!
Miembro del equipo
Miembro de honor
Respuesta: Re: [Duda] ¿givepokemon y luego moverse?

¡Muchas gracias a ambos! n.n ya logre hacer lo que quería.

EDIT: Eso si, no se que sucede que me da el Pokémon, pero en el menú (donde dice save, bag, etc...) no me aparece la pestaña Pokémon ;-;

Ademas, al entrar a una casa y luego salir, el evento se reinicia :T
Para que aparezca la opción en el menú tienes que activar una flag prefijada, en ruby es la 800 creo, y en fire red debe ser la que dijo @Laquin.

A que te refieres con que el evento se reinicia? Osea la persona vuelve al mismo lugar donde estabas y al volverle a hablar vuelve a darte el pokémon? Eso es porque aun no has utilizado el concepto de flags. El evento de la forma que lo presentó @DeadApolo cumplía con todo lo que pediste, pero en realidad cada vez que hables con la persona te va a dar el pokémon (y también la persona cada vez que entres al mapa va a aparecer donde inicialmente la pusiste). Te recomiendo que investigues un poco del tema de flags y variables (con paciencia, en un principio es difícil de entender), y seguro también hay en algún manual explicación de como hacer para fijar un mini en otro lado una vez que se activó un script (o si en un principio es muy complejo, siempre puedes hacerlo desaparecer (con hidesprite) y, nuevamente con el concepto de flags (asignandole la misma al mini desde advanced map), hacer que no aparezca más).

Cualquier consulta estoy a las ordenes, no te doy código porque la verdad en este momento no estoy con el tiempo para ponerme a escribir script de cualquier cosa que no sea lo mio pero si tienes alguna falla o algo con gusto te ayudo a resolverla!

Como estoy de buen humor, te explico lo que es una flag. Una flag es una variable booleana (¿Qué es esto? Siempre puedes googlearlo!), pero la idea es que puede tener dos valores, que serían 0 o 1 (también se le dice verdadero o falso, activado o desactivado). Esto permite que un script pueda ir en una dirección u otra dependiendo del valor de la flag.

Esto quiere decir, si la primera vez hablamos con la persona y no está la flag activada, que te de el pokemon y active la flag. Luego, al volver a hablarle, como la flag ya está activada esta vez no te dará el pokemon, si no que te puede decir otra cosa.

La forma más fácil de entender una flag es imaginarte que es un interruptor de luz, que puede estar prendido o apagado. Tu sabes que puedes prenderlo cuando quieras y al prenderlo pasan cosas, y a la vez puedes apagarlo cuando quieras y también pasan cosas. Además, puedes fijarte si está prendido para hacer determinadas cosas cuadno está prendido, y puedes fijarte si está apagado para hacer determinadas cosas cuando está apagado.

Hay muchos manuales de scripts en la vuelta, y algo muuuy importante para aprender y que casi nadie hace es mirar los scripts del rom original!
 

DeadApolo

A'KERIA'S TRACES
Respuesta: Re: [Duda] ¿givepokemon y luego moverse?

Ademas, al entrar a una casa y luego salir, el evento se reinicia :T
Lo de que se reinicie es normal, podrías hacer, que al darte el pokemon, el NPC se moviese a la izquierda y luego desapareciese, de ese modo con una simple flag podrías hacer que el mini no reinicie su evento.

Ahora la explicación:
Ya tenemos el script base, que vendría siendo éste:
Código:
#Dynamic 0x800000

#org @Inicio
lock
faceplayer
msgbox @MSG 0x6
Givepokemon 0xpokemon 0xnivel 0xobjeto 0x0 0x0 0x0
Applymovement 0xmini @MOV
Waitmovement 0xmini
release
end

#org @MSG
= "Mensaje"

#org @MOV
#raw 0x12 'Paso Izquierda
#raw 0xFE 'Finalizar Movimientos
Hay 2 formas de hacer esto fácilmente:
1.- Que el NPC, luego de darte el poke y moverse, desaparezca en el instante como si se hubiese ido, utilizando un fadescreen para esto.
2.- Que el NPC desaparezca cuando ya no lo veas, no usaremos fadescreen.

Lo que haremos ahora para explicar el primer caso es lo siguiente:
Agregaremos una flag, un fadescreen y un hidesprite, éstos los agregarás debajo del waitmovement y los usarás de este modo:
Código:
Fadescreen 0x1(0x1 para pantalla negra)
Hidesprite 0xN°delMini
Fadescreen 0x0(0x0 para volver a la normalidad)
Ahora te preguntarás ¿Dónde está la flag en ese script? pues es sencillo, con el hidesprite no usas la flag directamente en el script, sino que se la pones al NPC ¿Dónde? te preguntarás tú, pero es muy fácil, debes ir al A-Map, luego en la información del NPC a la derecha aparecerá una casilla que se llama People ID y que tiene sólo "0000", ahí es donde pondrás la flag.

Ahora explicaré los comandos 1 a 1:
Fadescreen: Agregará un efecto de pantalla negra al script, sirve para refrescar la pantalla o para ocultar minis, como lo hemos hecho en esta ocasión. Significa Apagar(Fade(Fade tiene varios significados, por cierto))Pantalla(Screen), osea si está en 0x1 apagará la pantalla(la dejará en negro), mientras que si está en 0x0 la volverá a la normalidad.

Hidesprite: Su nombre lo dice: Ocultar(Hide)Sprite(Sprite :p), sirve para ocultar al sprite, pero este método sólo sirve cuando se refresca la pantalla y es por eso que usaremos el fadescreen.

Flags: esto lo explicó el colega Xiros, así que no es necesaria mi explicación, sin embargo dejaré las Flags utilizables, en FR, las cuales serían:
"Desde la 0x200 hasta la 0x29F
Desde la 0x500 hasta la 0x79F
Desde la 0x1000 hasta la 0x109F" (tomado del macrotutorial de javi)

El script final sería así:
Código:
#Dynamic 0x800000

#org @Inicio
lock
faceplayer
msgbox @MSG 0x6
Givepokemon 0xpokemon 0xnivel 0xobjeto 0x0 0x0 0x0
Applymovement 0xmini @MOV
Waitmovement 0xmini
Fadescreen 0x1
Hidesprite 0xN°delMini
Fadescreen 0x0
release
end

#org @MSG
= "Mensaje"

#org @MOV
#raw 0x12 'Paso Izquierda
#raw 0xFE 'Finalizar Movimientos
Recuerda que el NPC debe tener la flag en el People ID para que desaparezca, de otro modo no pasará nada y el script seguirá repitiéndose.
Ahora explicaré el segundo caso, el cual, además, es el más fácil:
Sólo hay que agregar 1 comando, el cual es Setflag 0xFlag, ahora explico:
Las flag, como decía el colega Xiros, tienen la función de estar prendidas o apagadas, 0x1 o 0x0, etc.
Las flags por defecto están apagadas, según sé, por lo tanto para hacer desaparecer a los minis se usa el setflag. Recuerda que los números siempre deben ir en Hexadecimal.

La función específica del Setflag es prender la flag, osea darle el valor 0x1. Para apagar la flag se usa ClearFlag, la cual le daría el valor 0x0.

Ahora ¿cómo lo uso en el script? pues fácil, sólo agrega
Código:
Setflag 0xFlag
debajo del Waitmovement, osea quedaría así:

Código:
#Dynamic 0x800000

#org @Inicio
lock
faceplayer
msgbox @MSG 0x6
Givepokemon 0xpokemon 0xnivel 0xobjeto 0x0 0x0 0x0
Applymovement 0xmini @MOV
Waitmovement 0xmini
Setflag 0xFlag
release
end

#org @MSG
= "Mensaje"

#org @MOV
#raw 0x12 'Paso Izquierda
#raw 0xFE 'Finalizar Movimientos
Entonces si te alejas lo suficiente para dejar de ver al NPC, cuando vuelvas, ya no estará hasta que vuelvas a apagar la flag.
Esos serían los 2 casos más fáciles para hacer esto, espero haber sido de ayuda colega, nos vemos.

Atte:

ApoloD - DeadApolo actualmente.
 
Estado
Cerrado para nuevas respuestas.
Arriba