Registrarse

[Scripting] Aprende scripts fácilmente

Ryuzaki-sama

Te voy a comer >:D
Buenas.
Por fin actualizo este tutorial!!!
Lo voy a estructurar mejor, además de que voy a añadir algunos scripts nuevos.
Más tarde terminaré de organizarlo todo que ya es mu tarde.
Cuando tenga más o menos todos los cripts en el tuto, lo organizaré mejor, por niveles de dificultad.

Qué es un script?
Un script de pokemon es todo lo que engloba movimientos automaticos sin que nosotros pulsemos botones, textos,combates,
eventos,pokemon salvajes etc...
No sé exactamente, pero creo que se puede afirmar que un juego de Pokemon tiene mucho más que 600 scripts,y creo que 600 es muy poco.


Qué es un offset?
Se puede decir que un offset es una carpeta que contiene todos los datos de un script. Se usan offsets libres para crear scripts nuevos sin reemplazar antiguos.Los offsets libres no contienen ningún script,por eso no hay fallos al usar los LIBRES.


Qué es un puntero?
Un puntero es como la dirección de la casa de tus amigos. Si quieres ir a su casa tienes que ir a esa dirección.
Los punteros se pueden llamar como quieras, desde que sean una sola palabra.
Ellos se encargan de que si se cumple cierto requisito te redireccionarán al puntero que has elegido y ese puntero contendrá
más comandos


Qué es un comando?
Un comando es como un programa .exe, un ejecutable.
Cuando lo usamos, se activa usando su función, ya sea dar pokemon,quitar items, pagar dinero,hacer una msgbox etc...
Hay montones de comandos aunque alrededor de 1 sexto de esos comandos se desconocen.


Creo que estás listo para adentrarte en el mundillo del Scripting...
------------------------------------------------------------

Empezemos por lo básico...
Te recominedo descargar este Pack de Herramientas que es el que yo siempre uso:
http://whackahack.com/foro/t-13816/hacktools-4-0-deluxe-edition
Gracias a RogellParadox~ por crear el pack ya que es muy útil y tiene muchisimas herramientas.

Empezemos por usar el FSF para buscar un offset libre.
Abrimos el FSF y escojemos nuestro ROM.
Después LE daremos a Buscar, y después de haber encontrado el offset libre pinchamos en Copiar.

Ahora vamos al Advance Map y pegamos el offset que acabamos de copiar en donde pone Script Offset
Después de pegarlo pinchamos en Open Script.
ATENCIÓN: No borreis el $ del script offset o os dará error. Seleccionad el 000000 y reemplazadlo por el offset.




Ahora en el XSE (Editor de scripts) eliminamos lo que aparece y escribimos:

Esto hay que ponerlo en todos los scripts que se hagan.
Si os equivocais o dejais el 0x en blanco dará error.
Os acostumbraréis a que en el offset la gente ponga 0x800000 pero eso es solo para ejemplo.

Despues de poner el dynamic, ponemos esto:

#dynamic 0x

#org @inicio
Sin estos dos comandos nada funcionará.
Pasemos a lo siguiente:

#dynamic 0x

#org @inicio
lock
faceplayer
El lock hará que los minis no se muevan mientras decorre el script.
El faceplayer hará que el mini con el que hable te mire.
Ahora viene la parte donde ya empieza NUESTRO script.
Aqui se pueden poner los comandos que queramos de manera a dar forma a nuestro script.
Poner applymovementts para que el muñeco se mueva, msgboxs,givepokemon y demás. Todo depende de nuestra imaginación
para crear un script que se encaje en nuestro hack o história.
A continuación pondremos un msgbox porque es un comando facilisimo.

#dynamic 0x

#org @inicio
lock
faceplayer
msgbox @frase 0x0
release
end
El msgbox hará una caja de texto. Cual es el texto eso vendrá delante.
el @frase es el puntero en el cual estará el texto.
No os preocupeis podeis usar el puntero @frase en el nº de scripts que quieras.
Si lo usas en un script para que no aparezca el mismo texto en el segundo texto del script basta poner otro puntero como @frase2.

En el 0x0 del msgbox se puede poner:

0x0 : Se usa en el giveitem (por eso aparece el último 0x0)
0x1 : Es como en el giveitem pero este es para las pokeballs perdidas
0x2 : Este se usa en los letreros y carteles.
0x3 : Igual al 0x6 solo que en este el mini te mirará a la cara, no necesitas usar el faceplayer en el script
0x4 : Una msgbox normal solo que no se va a cerrar sin que pulses el botón A
0x5 : Abre un YES/NO box. Más tarde lo explico.
0x6 : Es una caja de texto normal, pero sin el faceplayer que contiene el 0x2
0xA : Este es solo para Esmeralda, sirve para hacer una llamada por el PokeNAV

El release es el contrario del lock, libera los minis del efecto de lock.
El end indica que el script acabó.

Ahora el texto:

#dynamic 0x

#org @inicio
lock
faceplayer
msgbox @frase 0x0
release
end

#org @frase
Que he hecho?
Estoy preparando el texto.
Después del omando end se deja una linea y en la siguiente se pone #org y después el mismo puntero que pusimos en el msgbox @frase 0x0.
Después pinchamos debajo del #org
y pulsamos Ctrl + T.
Y ahí escribiriemos el texto que queremos que aparezca en el msgbox.

Después pinchamos en Convertir y después en Insertar.
Ahora el texto contendrá cosas como /l y /n en algunas partes, pero no os preocupeis porque eso es solo para delimitar las lineas del texto, no aparece en el mensaje.

Ahora miramos la barra de herramientas que está al lado de donde dice archivo:
Pinchamos en el icono de las 2 ruedas dentadas.
Se llama Compilar.
Despues pinchamos en Cerrar.

Y ahora pinchamos en el icono a la derecha de Dirección, el que tiene una llave inglesa y un destornillador, se llama descompilar.
Una vez hecho eso, miramos a ver si el script noha quedado mal.
No os preocupeis que ahora en vez de empezar #dynamic 0x.... aparecerá diferente,pero eso no importa,
solo no debe quedrse como cuando abrimos el script y aparecia

-------------
#org 0xoffset que copiaste

Si lo que está arriba es lo único que aparece perdiste todo el script, por eso recomiendo que antes de descompilar
copiemos todo el script.
Tened cuidado al hacer Ctrl + V, si sin querer haceis Ctrl + B como me ha pasado unas 80 veces, el XSE tendrá error y se apagará sin que puedas recuperar tu script.(Yo hice scripts largísimos y acabé por perderlo todo.)

Por aquí nos quedamos ya son 00:50 y ya me he llevado una bronca por estar despierto hasta tan tarde,blablabla.

Si teneis alguna duda preguntadme y os lo contestaré ya sea aqui o por MP o por mensaje de visitante.
------------------------------------------------------------

msgbox @??? 0x0
Este es el script más báscio y el más usado. Es una caja de texto.
paymoney 0x0 0x0
Este Script es para que pagues una cantidad de dinero. (La cantidad de dinero es el 1er 0x0. Obviamente tiene que estar en HEX.
El 2do 0x0 no sirve de nada.No lo tocamos. )

givemoney 0x0 0x0
Este comando es muy útil a la hora de hacer juegos de apuestas,y más cosas. Como dice el nombre alguien te da cierta cantidad de dinero.
Como en el PAYMONEY el primer 0x0 es la cantidad de dinero a recibir, y como es obvio hay que escribirlo en HEX.
El segundo 0x0 no se toca.
checkitem 0x0 0x0
Este Script sirve para que alguien mire si tienes cierto objeto. ( Que será el 1er 0x0.Será el ID del objeto en HEX.
Y el 2do 0x0 será la cantidad que del objeto que mira. )

giveitem 0x0 0x0 0x0
Este comando es básico. Recibes un objeto ya sea de una persona,de una pokeball tirada en el suelo etc...
El primer 0x0 es el ID del Item, que porsupuesto, tiene que estar en HEX. El segundo 0x0 es la cantidad de items que recibirás.
El tercer 0x0 es el tipo del mensaje.Si quieres que el item te lo dé alguien pones 0x0. Si quieres que sea encontrada por el suelo pones 0x1

removeitem 0x0 0x0
Este comando se encarga de quitarte un item. El primer 0x0 será el ID del item en HEX y el segundo la cantidad de items que te van a quitar.
Bastante bueno para hacer partes donde los del Team Rocket te quitan objetos clave o cosas importantes en el hack.
Hay que usar antes el checkitem para saber si tienes el objeto en cuestión.

additem 0x0 0x0
Que diferencia tiene del giveitem? Pues 2 muy sencillas, solo tiene dos 0x0 en vez de tres, y el giveitem nos muestra un texto
al recibir el item, mientras que el additem no lo hace.
La verdad es que aún no se me ha ocurrido ninguna idea para usarlo aunqeu ya lo conocia.
Poca gente lo conoce, debido a que casi nadie lo usa y lo deja aparte.

addpcitem 0x0 0x
Este sirve para que te añada cierto objeto al PC del Jugador.( Será el 1er 0x0
que es el ID del Item en HEX.
Y el 2do 0x0 es la cantidad del objeto que te añade al PC.
Está también el "checkpcitem"
que sirve para ver si el Jugador tiene cierto objeto en el PC.
Funciona igual.
El 1er 0x0 es el objeto a verificar.
Y el 2do 0x0 es la cantidad a verificar. )
givepokemon 0x0 0x0 0x0 0x0 0x0 0x0
Otro comando indispensable. El givepokemon está presente en todo hack, es uno de los comandos secundarios que más se usa.
Los primarios son la msgbox,check y setflag etc...
El primer 0x0 es el nº del Pokemon en HEX,el segundo 0x0 es el nivel del Pokemon,tambien en HEX, y por ultimo el tercer 0x0 es el ID del item que lleva ese Pokemon. Los otros tres 0x0 no se tocan.

Este comando no requiere ningún parámetro.
Pero va seguido de unos comandos...

compare LASTRESULT 0x0
Que hace esto?? Se encarga de comparar el nº de Pokemon que el comando countpokemon verificó (0 a 6) con el nº que definas en el 0x0 el cual será 1,2,3,4,5 o 6.

if 0x1 goto @blablabla
if 0x0 goto @blebleble
Algunos os preguntareis que es esto. La mayoria ya sabe pero este tuto sirve para que los ex.profesionales se desoxiden y para que los principiantes se conviertan en pro players del hacking. El if que significa "si (condición)" en ingles se encarga de redirigirte a cierto punto de un script.
Cuando se usan flags es imprescindible usarlo.

Como funciona? pues el
if 0x1 significa que (en el contexto de este comando) si se cumplen los requisitos (el nº de pokemon contados por el countpokemon es superior al nº que se puso en el compare LASTRESULT) te redirige a un puntero el cual llame blablabla por que si pero podeis poner lo que querais siempre que sea una sola palabra sin espacios.

El goto @blablabla significa que si cumples el requisito que está detrás del goto (0x0 o 0x1) se te redireccionará al puntero blablabla.
El @ siempre señala que es un puntero.
showpokepic 0x0 0x0 0x0
Este Script te enseña la imagen de un Pokémon. ( El Pokémon que enseñará será el ID del Pokemon deseado en HEX que será el 1er 0x0.
El 2do 0x0 es la posición de la X y el 3er 0x0 es la posición de la caja Y.
Va seguido de "hidepokepic" que sirve paa cerrar la ventana en la que sale el pokemon. )



Espero que os guste mi Tutorial sobre Scripts es el primer Tutorial que hago en todo WAH y que por encima es sobre lo que peor se me da, ¡SCRIPTS!

Espero que os sirva para vuestros hacks.
Si os gusta ya sabéis que hacer...

Si no entendéis algo me avisáis.
Si creéis que falta algo para mi próximo post o que me ayudaría a mejorar en el foro
me lo decís.​
 

Jon.

Usuario mítico
Respuesta: Ayuda en algunos Scripts

Bonito TUTO,
parecido al mio lo unico que el mio no tenia los comandos: Paymoney y el AddPCitem, pero igualmente esta bien...

Te doy un consejo a los Scripts encierralos con el código
Código:
[CODE]Lo que hace es que se vea asi, da un aspecto al XSE
 

Xabier2012

Usuario mítico
Respuesta: Ayuda en algunos Scripts

Gracias por el aporte. Es un buen tuto para la gente que tenga problemas con estas cosas.
Solo espero que en vez de poner una duda pidiendo ayuda, busquen por el foro y encuentren esto.
 

Ryuzaki-sama

Te voy a comer >:D
Respuesta: Ayuda en algunos Scripts

Muchisimas gracias a todos.
Espero que a alguien le ayude de verdad.
 

Calzifer

Soy la furia en persona.
Respuesta: Ayuda en algunos Scripts

muy buen aporte, personalmente me parece muy útil, creo que ayudara mucho a los que quieran comenzar en esto de scripting..
en fin¡¡¡
solo me sobra decirte que sigas subiendo estos tutos... ayudarán bastante a los que lo necesitan¡¡¡

saludos
 

Ryuzaki-sama

Te voy a comer >:D
Respuesta: Scripting GBA | Aprende scripts facilmente

Hace mucho que no se actualiza, pero al fin y al cabo si quiero ayudar a alguien tengo que
actualizarlo para que puedan aprender.
Comenten ahora, a ver si está mejor estructurado.​
 

Versekr Dark

Usuario mítico
Respuesta: GBA | Scripting | Aprende scripts facilmente

Muy buena explicación bro, una pregunta crees que me puedas ayudar con un script que quiero hacer pero es de que vean tu fósil te lo pidan y te den un pokémon aun que se que es difícil te gustaria ayudarme.
 

CampeonSteven

Usuario de platino
Respuesta: GBA | Scripting | Aprende scripts facilmente

Una pregunta un poco novata pero como puedo combinar varios scripts en uno solo para que realice una accion, por ejemplo el add pokemon y el pokepic como puedo hacer para que cuando te vayan a dar el pokemon se vea la imagen (con el script del pokepic) del pokemon y luego puedas cerrarlo (creo que es con flags no estoy seguros por eso pregunto)
 

Tsuna-Sawada

Décimo jefe Vongola
Respuesta: GBA | Scripting | Aprende scripts facilmente

Una pregunta un poco novata pero como puedo combinar varios scripts en uno solo para que realice una accion, por ejemplo el add pokemon y el pokepic como puedo hacer para que cuando te vayan a dar el pokemon se vea la imagen (con el script del pokepic) del pokemon y luego puedas cerrarlo (creo que es con flags no estoy seguros por eso pregunto)
solo debes agregar mas comandos al script original, para hacer que se muestre el pokemon solo debes usar un:

Código:
showpokepic 0x0 0x0 0x0
En el primer 0x0: Aquí va el numero del pokemon, pero en Hexadecimal (en el XSE hay una calculadora para convertirlo)

En el segundo 0x0: Aqui va la posicion X de donde quieres que salga la caja.

En el tercer 0x0: Aqui pones la posicion Y .

abajo del "showpokepic" debes poner:

Código:
hidepokepic
para ocultar la caja de la imagen del pokemon.

Si te surge alguna duda puedes pregutarme en mi perfil o postear en el foro

------------------------------------------------------

Muy buen tutorial, todo bien explicado en gran parte, solo que deberias explicar mas comandos utiles y necesarios :)


Saludos :blush:
 

Tomy X

Novato en Hackrom
Respuesta: GBA | Scripting | Aprende scripts facilmente

Código:
 usalo ´para darle un aspecto de xse
 

H.B.P

Emperador Kaktiácero
Miembro de honor
Respuesta: GBA | Scripting | Aprende scripts facilmente

Se ve bastante bien estructurado, pero te dejo algunas apreciaciones personales en cuanto a conceptos:
  • Un script, tal y como su nombre indica, es un guión que recoge una serie de comandos, es algo así como un guión teatral, el cual le indica a la máquina qué debe hacer a cada momento hasta que lo termina de seguir.
  • Un offset es una dirección hexadecimal, básicamente. Dicho en términos coloquiales, a partir de ahí encontramos los bytes correspondientes a los cambios que hemos realizado. Y en realidad, no existen fallos con los "offsets libres" porque estás sobreescribiendo bytes que no se utilizan.
Finalmente, debo decirte que yo también redacté un tutorial para enseñar a compilar tu primer script, pero este tiene un poco más de variedad, así que tampoco viene mal echarle un ojo para arrancar. Eso sí, quizás poner ejemplos hubiera ayudado un poco más, como ocurre con el comando del msgbox.
 
Arriba