[RH - Otros] [Finalizada] Escuela de ROM Hacking GBA general de Ramihack


Like Tree43Gracias
 
 
Herramientas Desplegado
  #1  
30/07/2013
Predeterminado [Finalizada] Escuela de ROM Hacking GBA general de Ramihack
Os doy la bienvenida a mi escuela de ROM Hacking
Hola a todos los hackers. He abierto esta escuela para que, si acabáis de empezar no tengáis dificultades a la hora de aprender a romhackear. En esta escuela aprenderéis de todos los campos del ROM Hacking periódicamente, es decir, primero las bases del mapping, scripting, tiling, etc. Luego conocimientos avanzados… Espero que mis lecciones os resulten amenas y explicativas. Mi intención es ir posteando una lección de cada campo cada 2 días, pero si queréis que las suba diariamente, avisadme. No hay inconveniente. Al final de cada lección os propongo unos ejercicios para practicar lo aprendido en la lección. Si queréis que los evalúe y os de consejos para mejorarlos, subid una imagen de los mapas y gráficos y un vídeo de los scripts. Os daré una nota sobre diez y consejos sobre cómo mejorar, por ejemplo, vuestra combinación de gráficos en los mapas. Hablemos de los temas importantes de la escuela. Para que podáis seguir mi escuela sin problemas, aquí os dejo el link de un pack que he preparado con herramientas y ROMs.

Pack de Hack ROM GBA by Ramihack 20-07-2013.rar

Normas:
Me gustaría que la escuela se mantenga lo más limpia posible, así que, por favor, únicamente postead dudas aquí. Los comentarios negativos, me los decís por perfil o por MP, y los del tipo “Gracias” o “Tus lecciones me han ayudado”, no los posteéis. Simplemente dadle al botón de +Gracias del post principal. Las nuevas lecciones las postearé en el post principal para evitar confusión.

Inscripciones:
Si queréis, podéis inscribiros avisándome por MP o por perfil. Yo os inscribiré en la escuela. Puedo admitir un máximo 20 alumnos, aunque todos podéis postear vuestras dudas, estéis o no inscritos. La única diferencia, es que a los alumnos inscritos les avisaré por MP cada vez que suba nuevas lecciones, y responderé antes a sus dudas. Aunque responderé a las de todos. De momento están inscritos:

• Nintendo123
• Agh14
• Don!
• Braxpok
• Lord Roxas
• Pacodelopio
• KakilbG
• Lord Darkrai
• currokiko10
• serguis
• G&G Pokémon
• Mega~Luc@rio╚S╣
• xWarCry

Dudas:
Postead aquí las dudas y yo las responderé. Si veo que una duda puede interesar a más gente, la postearé en el apartado “Dudas de interés general”. Responderé antes a las dudas de los alumnos inscritos oficialmente, aunque os responderé a todos.

Acepto peticiones y sugerencias:
Si queréis que haga una lección sobre un tema en particular que no es lo suficientemente amplio como para dedicarle una sección entera, decídmelo, y será posteado en el apartado “Lecciones a petición de los usuarios”. En cuanto a las sugerencias, si no os queda claro algo de mis lecciones, o veis que algo no está bien explicado, decídmelo y lo corregiré.
Sobre las prácticas:

Al final de cada lección, como ya dije, os propongo unos ejercicios de práctica para que mejoréis vuestras habilidades de hackers. Los ejercicios, como dije antes, serán evaluados por mí si así lo decidís. Si queréis que los evalúe, mandádmelos por MP. Según como sean las prácticas, os pediré una foto o un vídeo. Por favor, mandadme los ejercicios por MP. No los posteéis en la escuela ya que sería un caos. Cuando haya evaluado vuestros ejercicios, os diré la nota y los consejos por MP.

No me enrollo más con normas y movidas de estas y empiezo a postear.


Mapping

Lección 1| Introducción a lo básico y aprender a mapear

Lección 1 de Mapping
Introducción a lo básico y aprender a mapear
Herramientas necesarias: Advance Map 1.92
Hola todos los hackers. En esta lección aprenderemos las bases de advance map y aprenderemos a mapear. Bueno, primero habéis de saber que advance map se divide en varias pestañas, a saber: ver mapa, ver movimientos permitidos, ver eventos, ver cabezal. Cada una tiene una utilidad propia. Aquí os lo explico:



1: Menús varios: Aquí podrás cargar ROM, guardar los cambios, configurar el advance map, etc, pero es mejor que estos menús los veais por vosotros mismos.
2: Cargar y guardar: El primer botón es para cargar un ROM, y el segundo para guardar los cambios.
3: Crear e insertar mapas: El primer botón es para crear un mapa desde cero y el segundo, para insertarlo en el ROM.
4: Aquí se verán los mapas del juego, que podrás editar a tu gusto.
5: Editor de bloques: Aquí podrás editar los bloques con los que se mapea, así como insertar nuevos tiles (gráficos).
6: Editor de conexiones: Aquí podrás editar los mapas con los que conecta el mapa actual por arriba, abajo, por la derecha y por la izquierda.
7: Editor de Mapa del Mundo: Atención a esto, aquí no se edita el mapa del mundo como tal, sino que editamos las ciudades y rutas que hay en cada parte del worldmap.
8: Aquí se busca espacio libre, es decir, direcciones de memoria (offsets) que no están ocupados. Esta función es inútil si disponemos de FSF.
9: Pestaña de ver mapa: Aquí podemos ver el mapa que tenemos seleccionado para editarlo.
10: Pestaña de Ver Movimientos Permitidos: Aquí definiremos por donde y como se puede mover el protagonista por el mapa.
11: Pestaña de Eventos: Aquí ponemos eventos en el mapa como personas, scripts, carteles…
12: Pestaña de Pokémon Salvajes: Aquí definimos que pokémon salvajes hay en el mapa y dónde se encuentran (hierba, agua…)
13: Pestaña del Cabezal: esta es un poco más complicada, ya que nos permite hacer gran cantidad de cosas, como cambiarle el nombre al mapa, poner scripts especiales, cambiar la música que suena…
14: Bloque frontera: Aquí definimos el bloque que se verá más allá de los límites del mapa.
15: Tileset: Aquí tenemos los bloques que utilizaremos para hacer nuestro mapa. Los podemos editar en el editor de bloques y hasta podemos poner los nuestros propios.
16: Información del ROM: Aquí vemos diversos datos que definen a nuestro ROM.
17: Información del bloque sobre el que tenemos el puntero: esto será útil en los scripts.
Hasta aquí lo básico, ahora entremos en materia. Expliquemos pestaña por pestaña.
• Ver Mapa: No añado foto porque ya la tenéis arriba. Aquí se mapea. Pinchamos con el cursor en el bloque que queramos poner y luego pinchamos en el lugar del mapa en el que lo queramos poner, así de fácil.
• Ver Movimientos Permitidos: Aquí ponemos por dónde se puede mover el protagonista y los demás minis (personas) del mapa.
1: Aquí es como en la primera pestaña, seleccionamos los bloques, en este caso las letras (cada letra es un tipo de movimiento, el cual se ve definido abajo) en el mapa del mismo modo que en la anterior.
2: Aquí se ve el tipo de movimiento que es la letra sobre la que está colocado el cursor.



• Ver Eventos: Esta es más complicada, y la explicaré en una lección venidera.
• Ver Pokémon Salvajes: Aquí definimos los pokémon salvajes que salen, su nivel máximo, su nivel mínimo, dónde aparecen y la frecuencia de aparición. La explicaré en una lección venidera.
• Ver Cabezal: Aquí podemos hacer gran cantidad de cosas. Aquí las explico:
1: Nombre: Aquí cambiamos el nombre del mapa. Para seleccionar un nombre ya existente, pinchamos en el cuadro de la izquierda y seleccionamos el que queramos, y para crear uno nuevo, pinchamos en el de la derecha, escribimos el que queramos y le damos a cambiar nombre (ojo, se cambiará el nombre a todos los mapas que tengan el mismo nombre que el actual).
2: Opciones de mapa: Aquí seleccionamos la música, el clima del mapa, el tipo de mapa (ciudad, cueva…), su tipo de batalla… Donde pone cave byte, ponemos (en el caso de que nuestro mapa sea una cueva) si queremos que sea normal (iluminada), oscura y que se puede usar destello u oscura y que no se puede usar.
3: Map script: Aquí se hacen lo que se llama script de nivel, es decir, scripts que se ejecutan al entrar al mapa o bajo ciertas condiciones especiales. Esto irá explicado en la escuela de scripts.
4: Tilesets usados: Aquí se seleccionan los bloques que usará el mapa (habréis apreciado que no todos los mapas usan los mismos). Los bloques se agrupan en tilesets. Aquí seleccionamos los tilesets que queremos que tenga nuestro mapa. Explicaré esto en profundidad en la lección de tiles.
5: Tamaño del mapa: Aquí cambiamos las dimensiones de nuestro mapa (se mide en bloques de ancho y bloques de alto).



Esto es lo más básico de advance map. Con saber esto ya podéis hacer un buen mapa. El mapear y hacer buenos mapas requiere práctica. Hay que saber combinar bien los bloques de los que disponemos para hacer un mapa atractivo. Hasta aquí la lección de mapping de hoy.

PARA PRACTICAR
Editar el primer mapa de vuestro juego a vuestro gusto. Como vosotros queráis, intentando que sea lo más atractivo posible. Solo tenéis que editar el mapa, los movimientos permitidos y el tamaño. Nada de eventos ni de pokémon salvajes. Los movimientos permitidos tienen que ir acorde a los bloques que pongáis, acordaos de eso. Valoraré imaginación, creatividad y sabiduría a la hora de combinar los bloques y de poner los movimientos. Adjuntad la imagen. Del mapa y de los movimientos. Fecha límite de entrega: pasado mañana.
Hasta la próxima lección.


Lección 2 | Eventos

Lección 2 de Mapping
Eventos
Herramientas necesarias: Advance Map, XSE
Hola a todos los hackers. En la lección de Mapping de hoy aprenderemos a crear eventos. Los eventos son todo lo que ocurre en el juego, desde recoger un objeto del suelo hasta luchar contra Palkia en la Columna Lanza es un evento. A los eventos se les asigna un script de XSE. Los eventos en GBA pueden ser de 4 tipos:
• Personas: es la gente que aparece en nuestros mapas. Son la P verde.
• Carteles: letreros y advertencias que aparecen en los mapas. A los carteles se les puede asignar un script, o hacer que sean objetos ocultos, es decir, que no se ven en el mapa, como las Pokéballs con objeto, pero que al pulsar el botón A delante de ellos, nos dan un objeto que nosotros asignamos. Son la S roja.
• Warps: la palabra “warp” significa teletransporte. Los warps nos llevan de un mapa a otro. Crear un warp es realmente simple. Lo ponemos en el punto de teletransporte y luego definimos a qué mapa nos llevan, poniendo su banco y número de mapa (lo veremos más adelante). Son la W morada.
• Script de gatillo: son scripts que se ejecutan al pasar sobre ellos. Los explicaré en una lección de Scripting venidera. Son la S verde.
Empecemos explicando la pestaña de eventos referida a eventos de persona:



1.- Esto es un evento de persona.
2.- Al clicar aquí, hacemos que se vean los sprites de las personas en lugar de ver la P.
3.- Esto es el banco y número de mapa. El primer número es el banco y el segundo el número.
4.- Aquí editamos la persona. Explico apartado a apartado:
• Donde pone gente, se cambia el tipo de evento que es el seleccionado.
• El No. de evento no lo toquéis. Puede causar problemas.
• Lo de Mark Active Sprite hace que salga un cuadrado rojo alrededor del evento seleccionado.
• Delete event borra el evento. Es mejor que esto no lo toquéis. Borrar un evento puede hacer daño al ROM. Os aconsejo reciclar los eventos y añadir cuantos necesitéis. Con eso de reciclar digo que editéis los eventos ya existentes. Podéis añadir cuantos eventos queráis, pero no borréis los que ya están puestos.
• Lo de No. de Gente igual que No. de Evento. No lo toquéis ya que puede causar conflictos.
• No. de Sprites cambia el Sprite del evento. Para saber el número de un sprite, buscadlo en NSE.
• El desconocido no lo toquéis.
• Pos X/Y nos dice las coordenadas en las que se encuentra el evento dentro del mapa.
• El desconocido no lo toquéis.
• En tipo de movimiento definimos como se mueve la persona.
• Movimiento no lo toquéis.
• Desconocido no lo toquéis.
• Entrenador se marca solo si la persona es un entrenador.
• Este desconocido solo se toca cuando el evento es un Script de gatillo. En ese caso se pone 03.
• Ver rango solo se toca cuando el evento es un entrenador. El número que pongamos aquí indica a cuántos cuadrados de distancia te puede ver el entrenador.
• Script offset. Aquí se pone la dirección de memoria que nos da XSE al compilar nuestro script (como expliqué en la lección 1 de Scripting). Siempre se pone la $ delante del offset. De lo contrario, no funcionará.
• Lo de People ID se toca solo si la persona va a dejar de estar ahí en cierto momento del juego. De ser así, aquí se pondría el número de una flag, y en el script que haría desaparecer a la persona se pone setflag y el número de esa flag.
• Desconocido no lo toquéis.
• Lo de Open Script nos permite ver el script asignado a la persona. Para que funcione, hay que darle a Opciones, Choose Script Editor y seleccionar nuestro XSE.
5.- Organizador de eventos: Aquí definimos la cantidad de eventos del mapa, cambiando el número. Una vez hechos los cambios, le damos a Cambiar Eventos y se aplicarán. Los nuevos eventos aparecen en la esquina superior izquierda del mapa. De ahí los movemos al lugar que queramos. Recordad que el número de eventos solo se puede aumentar. Si lo disminuís, podéis estropear el ROM.
Hasta aquí las personas. Ahora, los carteles o Signposts:



1.- Esto es un evento de Cartel.
2.- Dentro de lo editable, esto es lo único nuevo. El talking level yo no lo suelo tocar, y el signpost tipe indica el tipo de cartel que es. Los tipos son muy fáciles de entender, por lo que no los explicaré.
Ahora, para terminar, los Warps:



1.- Esto es un Warp.
2.- El desconocido no lo toquéis. Las demás opciones indican adónde lleva el warp. Todo warp lleva a otro warp. En No. de Warp indicamos el número de Warp al que nos teletransporta nuestro warp en el otro mapa. En Banco de Mapa, se pone el banco de datos en el que se aloja el mapa al que nos lleva el warp. En la lista de mapas, el banco de mapa es el primer número al lado del nombre mapa. En Mapa, se pone el número del mapa al que nos teletransporta el warp. Este número es en la lista de mapas el segundo al lado del nombre.
La misteriosa F roja:
La F roja no es otra cosa que la Flying position del mapa, es decir, el lugar del mapa en el que apareces al hacer vuelo. Basta con mover la flying position al lugar en el que queramos aparecer. La flying position no se puede borrar.
[CENTER]PARA PRACTICAR[/CENTER
Hacer un evento de cada. Probar si funciona. Si así es, no me enviéis nada. Si no os funciona, decidme que pasa y os diré el fallo.


Lección 3 | Pokémon Salvajes y Editor de Bloques

Lección 3 de Mapping
Pokémon salvajes y editor de bloques
Herramientas necesarias: Advance Map
Hola, hackers. En esta lección veremos dos apartados importantísimos de todo hack. Aprenderemos a asignarle Pokémon a un mapa, y a editar los bloques del tileset. Vayamos por partes.
La pestaña Pokémon salvajes:



1.- Aquí se define el Pokémon que aparece.
2.- En el primer cuadrado se pone el mínimo nivel con el que aparecerá el Pokémon, y en el segundo, el máximo nivel con el que te puede salir.
3.- Guardar, evidentemente, guarda los Pokémon salvajes en ese mapa, y expandir, te permite crear un nuevo tipo de Pokémon salvaje, es decir, si en nuestro mapa hemos añadido un lago, pero en el ROM solo hay Pokémon en la hierba, le damos a expandir y seleccionamos agua.
4.- Aquí se define la frecuencia con la que aparecen los Pokémon. No pongáis más del 20 o 30%, ya que os saldrán entonces Pokémon a cada paso que déis.
5.- Aquí definimos en que superficie aparecen los Pokémon. Se puede poner hierba, agua, árboles y pesca.

El editor de bloques:
El editor de bloques es una de las más útiles herramientas de Advance Map. Es relativamente sencillo de usar, y nos permite crear nuestros propios bloques e insertar gráficos nuevos. Yo os explicaré hoy como crear nuestros propios bloques. Antes de ver el editor de bloques, conviene que aprendamos vocabulario:
• Tileset: Son los gráficos editables en paint. Con los gráficos del tileset construimos los bloques con los que mapeamos. Los tileset los podemos editar en paint, y en el editor de bloques, importarlos y exportarlos. En cada mapa, como vimos en la lección 1, se ponen dos tileset. El principal y el secundario.
• Paleta: Son los colores de los tileset. Hay numerosas paletas en el juego. Cada una puede tener un máximo de 15 colores y el de transparencia. Podemos editar los bloques con los gráficos del tileset en cualquier paleta. Es decir, en los bloques se pueden poner gráficos del tileset con cualquiera de las paletas disponibles.
• Bloque: Son los elementos con los que mapeamos. Un cartel o una puerta son bloques. Los bloques se editan con los gráficos del tileset. Los bloques también se dividen en tileset 1 y tileset 2, que pueden variar en cada mapa.
Ahora, veamos la interfaz del editor:



1.- Menús varios:
• Imagen: dividido en:
o Guardar tileset 1: exporta el tileset principal para ser editado.
o Cargar tileset 1: importa el tileset principal al ROM.
o Guardar tileset 2: exporta el tileset secundario para ser editado.
o Cargar tileset 2: importa el tileset secundario al ROM.
o Re-Cargar bloques: guarda los cambios en los bloques.
• Blocks: dividido en:
o Guardar tileset 1: exporta la organización de los bloques del tileset 1 para ser importada en otro ROM.
o Cargar tileset 1: importa una organización de bloques determinada para el tileset 1.
o Guardar tileset 2: exporta la organización de los bloques del tileset 2 para ser importada en otro ROM.
o Cargar tileset 2: importa una organización de bloques determinada para el tileset 2.
• Palette: dividido en:
o Show palette editor: que nos permite editar los colores de la paleta que queramos.
o Write palette changes to ROM: que guarda cualquier cambio en la paleta que hayamos hecho en el ROM.
o Write current palette to file: que exporta la paleta seleccionada.
o Load current palette to file: que importa la paleta seleccionada.
o Change palette definition of block data: que nos permite editar que paletas corresponden a cada tileset.
2.- Estos son los bloques con los que mapeamos.
3.- Este es el tileset.
4.- Aquí cambiamos la paleta con la que se ve el tileset.
5.- Aquí editamos los bloques.
6.- Esto nos permite dar la vuelta horizontal y verticalmente al gráfico del tileset seleccionado para editar los bloques.
7.- Aquí editamos lo que harán los bloques al ser pisados. Es mejor que esto lo veáis por vosotros mismos.
8.- Aquí definimos si el bloque seleccionado queda tapado por el personaje o no. Lo de turns into border block… Mejor no toquetearlo.
Cómo editar los bloques:
Editar los bloques es algo realmente simple. Lo que hay que hacer es:
1.- Entrar al editor de bloques y hacer clic sobre el bloque a editar.
2.- Seleccionar el gráfico del tileset que queramos poner para nuestro bloque y colocarlo sobre el cuadradito donde pone Debajo/Por arriba Tile. En la mitad de la derecha del rectángulo se pone el bloque en sí, y en la de la izquierda se pone el fondo, es decir, lo que se verá por debajo del bloque en sí.
3.- Una vez acabamos, damos en guardar.

PARA PRACTICAR
Poned en el primer mapa de vuestro ROM Pokémon salvajes. Subid un vídeo en el que luchéis contra uno de ellos para que lo vea, y editad un bloque a vuestro gusto. Ponedlo en un mapa y enseñadme una imagen.


Lección 4 | Insertar tiles

Lección 4 de mapping
Insertar tiles con Advance Map
Herramientas necesarias: Advance Map, Character Maker Pro y Paint
Hola a todos los hackers. En esta lección aprenderemos a insertar tiles en nuestro ROM usando Advance Map y Character Maker Pro. Para quien no lo sepa, los tiles son los gráficos de nuestro juego, como son árboles, hierba, etc. Yo voy a sustituir el árbol y la hierba básicos de Pokémon Ruby por estos otros:



Paso a paso, la inserción sería así:
1.- Obtener la paleta de colores de nuestros tiles:
Como ya sabéis, los tiles pueden tener un máximo de 15 colores más el de transparencia, por lo que hay que indexar nuestros tiles en Character Maker Pro en formato PNG. Una vez indexados, se le da a Paletas>Guardar Paleta y guardamos la paleta como .act.



2.- Importar la paleta en Advance Map:
Una vez guardada nuestra paleta e indexada nuestra imagen, abrimos nuestro ROM con Advance Map y nos vamos al editor de bloques. Una vez ahí, localizamos en el tileset nuestro tile a sustituir y buscamos su paleta. En mi caso, al ser árboles y hierba, es la paleta 2.



Cuando tengamos localizado el tile a sustituir con su paleta, le damos en Palettes>Load current palette from file. Nos saldrá una ventana en la que tenemos que seleccionar nuestra paleta. En la barra donde pone AM Tileset Palete, le damos clic y seleccionamos Adobe Color Table. Seleccionamos nuestra paleta y en el Advance Map damos en Palettes>Write Palette Changes to ROM. Veremos que los colores de nuestro tileset cambian, y con ellos los de nuestro mapa.



3.- Insertar los tiles en el tileset:
Cuando la paleta esté cambiada, damos en Imagen>Guardar Tileset 1 y seleccionamos la carpeta de destino. Una vez guardado, lo editamos con Paint. Este es el paso más importante de todos, así que hacedlo con cuidado. Nos vamos al tileset abierto con paint. Seleccionamos el cuadrado que ocupa la hierba alta donde salen los Pokémon y lo pegamos en la imagen con nuestros tiles para insertar. La clave de insertar tiles es ocupar el mínimo espacio posible, por lo que insertar un árbol entero sería una auténtica barbaridad. Hay que dividir el árbol en trozos del tamaño de un bloque de advance map. Por eso hemos cogido la hierba alta. Como los tiles en Advance Map se pueden voltear, si nuestro tile es simétrico, como mi árbol, se le puede borrar la mitad. Dividimos el árbol en cuadrados del tamaño de la hierba alta y juntamos los cuadrados resultantes de manera que ocupen el mínimo espacio posible. A mí me ha quedado así:



Una vez dividido nuestro tile a trozos y tengamos esos trozos juntos ahorrando espacio, lo pegamos en el tileset sobre el tile antiguo. Con la hierba hacemos lo mismo. A mi me queda así:



Cuando nuestro tile esté en su sitio, guardamos el tileset.
4.- Insertar los tiles en el ROM:
Nos vamos a Advance Map y le damos en el editor de bloques en Imagen>Guardar Tileset 1 y seleccionamos nuestra imagen. Cuando se haya importado, damos en Imagen>Re-Cargar Bloques. Así los bloques se guardarán en el ROM. Al haber tenido que dividir los tiles e insertarlos de distinta manera de cómo estaban los antiguos, los gráficos en el mapa se habrán quedado extraños:



Para arreglar esto, hay que editar los bloques como vimos en la lección anterior. Nos vamos al editor de bloques y editamos los bloques de los antiguos árboles con nuestros nuevos tiles. Una vez editado, queda así:



Lo de insertar tiles puede ser difícil de entender al principio. Yo mismo lo entendí con un vídeo tutorial en You Tube, y como a vosotros puede que os cueste un poco entenderlo leyendo solo la lección, os he preparado un tutorial de apoyo en vídeo:

Escuela de ROM Hacking GBA|Lección 4 de mapping: Insertar tiles - YouTube

PARA PRACTICAR
Insertar un tile cualquiera en vuestro ROM y enseñarme una imagen




Scripting

Lección 1| Introducción a lo básico de XSE

Lección 1 de Scripting
Introducción a lo básico. Aprendemos vocabulario, lo básico de XSE y a compilar un script
Herramientas necesarias: XSE 1.1.1, Advance Map 1.92 y FSF
Comandos nuevos que se usarán: ninguno
Hola, hackers, bienvenidos a la primera lección de scripting. Hoy aprenderemos un poco de vocabulario y a compilar un script. Antes de nada. Entrad en advance map, pinchad en opciones y dadle a choose script editor. Seleccionad el XSE. Bueno, no me enrollo más.
Vocabulario
Empezemos con lo básico:
• Script: todo lo que ocurre en el juego, hablar con una persona, luchar contra un entrenador y hasta leer un cartel es un script. Los script se hacen por comandos.
• Comando: son las palabras con las que hacemos el script. Están en inglés, así que no os vendría mal tener nociones básicas de este idioma.
• Compilar: los comandos con los que se hace un script en XSE no son reconocibles por el ordenador ni por el ROM. La compilación del script consiste en pasar esos comandos a un código reconocible por el ordenador: el código máquina.
• Offset: son direcciones de memoria en el juego. Como sabéis, los ordenadores reconocen código binario, pero los offsets están en hexadecimal (combinan números y letras). Los offsets libres se encuentran con una herramienta llamada FSF. Es importante que cada script que hagamos lo hagamos en un offset libre, ya que si lo hacemos sobre uno ya ocupado, puede haber problemas.
• Números hexadecimales: los números hexadecimales no tienen solo diez números distintos a partir de los que se hacen los demás números (como los números normales de toda la vida: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a partir de los cuales se hacen los demás), sino que tienen dieciséis números distintos, a saber, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
• Flags: funcionan de forma parecida a un interruptor. Pueden activarse y desactivarse. Sirven para que los script no se repitan, por ejemplo, que si la flag está activada, no se ejecute. Las flags son números hexadecimales que se activan con el comando setflag y se desactivan con clearflag. También tienen otras funciones, como hacer desaparecer minis.
• Variables: son un poco como las letras en el álgebra (no son letras, son números hexadecimales). A la variable se le asigna un valor que podemos variar a nuestro gusto. Sirve también para que un script no se repita, por ejemplo, podemos hacer que un script no se ejecute a menos que una determinada variable tenga asignado un determinado valor.
• Punteros: son direcciones dentro del script a partir de las cuales, el script continua. Los punteros consisten en una @ y una palabra, la que sea, pero solo una. Se usan, por ejemplo, cuando un script tiene varios resultados posibles. Me explico. Pongamos el ejemplo de un script de si y no. Indicaremos, después de poner la caja de mensaje, que el juego compruebe si has dicho si o no. Si dices sí, te envía a un determinado puntero, en el que escribirás lo que pasará si dices que sí. Puede que estéis un poco confusos, pero esto se ve mejor en un ejemplo.
Ahora aprenderemos lo básico de XSE.
1: Menús varios: Aquí podemos configurar el programa, abrir un ROM, un RBC…
2: Aquí se indica el archivo abierto.
3: Si pinchamos aquí abrimos un archivo.
4: Si pinchamos aquí, guardamos nuestro script en formato RBC, para que luego se pueda abrir diréctamente con XSE.
5: Pinchando aquí se compila el script.
6: Aquí se depura el script. Yo nunca lo uso.
7: Esto no hace falta tocarlo.
8: Aquí se indica el offset sobre el que se escribe el script.
9: Aquí se descompila el script, es decir, si escribimos un offset en el cuadro del offset (8) y le damos a descompilar, se ve el script escrito en el offset en cuestión. Si está vacío es que podemos escribir en él.
10: Aquí indicamos si es un script de nivel.
11: Calculadora. Aquí podemos pasar de decimal a hexadecimal, lo que es muy útil.
12: Es un bloc de notas. Se puede escribir lo que quieras.



Lo que un script debe tener siempre:
Un script debe tener siempre:
• En la primera línea: #dynamic 0x80000000 (los ceros representan un offset libre sobre el que se hará el script).
• En la segunda línea: #org @inicio (esto es un puntero. Por cierto, cuando queramos escribir el contenido de un puntero, delante del puntero hay que poner #org). Esto indica que se inicia el script.
• En la última línea: end. Esto indica que se acaba el script. Si no lo ponemos, saldrán letras raras y el juego se colgará.
Cómo compilar un script:
Ahora necesitaremos advance map. Abrimos nuestro ROM con advance map. Nos vamos a donde los eventos y, ponemos una persona en el mapa (también vale un cartel o un script de gatillo, pero eso será explicado más adelante). Una vez escrito nuestro script, le damos a compilar (los dos engranajes) y nos saldrá una ventanita con un montón de cosas escritas. Abajo saldrán los punteros. Pinchamos en el que pone @inicio y le damos a copiar. Ya cerramos XSE. Volvemos a advance map, y pinchamos donde los eventos sobre la persona que habíamos puesto. Donde pone script offset, borramos lo que haya (ojo, no borréis la $) y pegamos el offset que habíamos copiado en XSE. Guardamos y lo probamos en el juego. Debería funcionar.

PARA PRACTICAR
Como esta lección era solo para introduciros al script, no habrá nada de práctica.

Esto es todo por hoy. Hasta la próxima.


Lección 2 | Cajas de mensaje básicas

Lección 2 de Scripting
Script básico de habla
Herramientas necesarias: XSE 1.1.1, advance map 1.92 y FSF
Comandos nuevos que se usarán: lock, faceplayer, msgbox, release, end
Hola, hackers, bienvenidos a la segunda lección de mi escuela de scripting. Hoy aprenderemos a hacer un script de habla básico. Abrid vuestro ROM con XSE y empezad a escribir. Os iré explicando comando por comando, para que lo entendáis. Así lo haré en todas las lecciones. El script que pretendo hacer consiste en lo siguiente: cuando el protagonista habla con la persona, esta le mira y le dice algo. Este sería el script (pongo en rojo el código que hay que escribir):
#dynamic 0x80000000- Ya lo expliqué en la lección anterior, aquí va el offset
#org @inicio- El puntero que da inicio al script
lock- comando nuevo, hace que el personaje con el que hablas no se mueva mientras te habla
faceplayer- hace que el personaje mire al protagonista
msgbox @mensaje 0x6- Por partes. El msgbox es una caja de mensaje. El @mensaje es el puntero en el que escribiremos el contenido de la caja de mensaje. El 0x6 es el tipo de mensaje. Explico más abajo que es cada tipo.
release- hace que el personaje que te hablaba ya se pueda mover de nuevo.
end- pone fin al script
Ojo, ahora se deja una línea libre
#org @mensaje- aquí se indica lo que dije antes. El contenido de la caja de mensaje. Tened en cuenta que los punteros no se repitan dentro de un script, es decir, que no haya dos @mensaje ni dos @inicio. Que sean cualquier otra cosa.
Ahora, en la siguiente línea, pulsas control+T y escribes lo que quieras. Le das a convertir, luego a insertar y ya está.
Esto es todo. Este es el script de habla básico. Ya lo podéis compilar como dije en la lección anterior.
Tipos de msgbox:
0x1:
0x2: te evita poner lock y faceplayer
0x3: se usa solo si la msgbox es un cartel.
0x4: es una msgbox que permanece abierta. Para cerrarla hay que poner, en la línea siguiente al msgbox el comando closeonkeypress.
0x5: es una caja de mensaje con sí y no incorporados. Las veremos más adelante.
0x6: es la que he usado yo, la clásica. Una msgbox simple. No incluye lock ni faceplayer. Tampoco hay que poner closeonkeypress.
Si tenéis algún problema, contactad conmigo por perfil o por MP. Yo os diré dónde está el fallo. Hasta la próxima.

PARA PRACTICAR
Hacer un script de habla básico. La msgbox puede decir lo que queráis. Subid el vídeo para que lo vea. Fecha límite de entrega: pasado mañana.


Lección 3 | Cajas de elecciones: Sí y No

Lección 3 de Scripting
Msgbox yesno
Herramientas necesarias: advance map, XSE 1.1.1 y FSF
Comandos nuevos que se usarán: compare, if, goto
Hola, hackers, bienvenidos a una nueva lección de mi escuela de scripting. Hoy aprenderemos a hacer una caja de sí y no. Es muy simple, pero aquí se empiezan a usar punteros más en serio. El script que voy a hacer hará lo siguiente: un personaje me preguntará algo. Si le digo que sí me dirá algo y si le digo que no, me dirá otra cosa distinta. Empecemos. Explicaré solo los comandos nuevos:
#dynamic 0x80000000
#org @inicio
lock
faceplayer
msgbox @yesno 0x5
- Esto sigue siendo una caja de mensaje. Lo que cambia es el tipo. El 0x5 indica que es del tipo sí y no. En el puntero del contenido de la caja pondremos lo que nos pregunta, por ejemplo, si me pregunta si quiero un pokémon, en el puntero pondré: ¿Quieres un pokémon?
compare LASTRESULT 0x1- esto comprueba si has dicho sí o si has dicho no.
if 0x1 goto @si- este comando hace que si dices que sí (0x1 es sí y 0x0 es no) te vayas al puntero @si.
En las líneas siguientes se hace el script que se ejecutará si dijo que no.
release
end

#org @si
Aquí el script que se ejecutaría si dijo que sí.
release
end
Luego, como dije en la lección anterior, definís lo que dicen las msgbox.

PARA PRACTICAR
Hacer un script de sí o no. Si dices que sí, saltará una msgbox del tipo 0x6 que te diga: has dicho que sí. Si dices que no, saltará una msgbox del tipo 0x6 que te diga: has dicho que no. Subís el vídeo para que lo vea. Fecha límite de entrega: pasado mañana.
Esto es todo. El msgbox 0x5 no tiene más misterio. Si hay cualquier duda, por perfil o por MP.


Lección 4 | Flags y Variables

Lección 4 de Scripting
Flags y variables
Herramientas necesarias: advance map, XSE 1.1.1 y FSF
Comandos nuevos que se usarán: setflag, clearflag, checkflag, setvar, comparevars, addvar, subvar, copyvar
Hola, hackers. Aquí estoy con una nueva lección de mi escuela de scripting. Hoy aprenderemos a usar flags y variables. Los más experimentados sabréis muy bien de qué hablo, pero los novatos os preguntaréis para qué sirven. Muy sencillo. Sirven para que un script no se repita, o para que ocurran cosas distintas si se ejecuta bajo ciertas condiciones. Me explico. Las flags son como interruptores. Pueden estar activadas (0x1) o desactivadas (0x0). Un script puede comprobar si una flag está activa y hacer una cosa distinta si lo está y otra si no lo está. Las variables funcionan de forma parecida, pero no se activan o desactivan como las flags, sino que toman cierto valor. Un script puede comprobar el valor de una variable y hacer una cosa u otra en función del valor que la variable tome. Las variables te permiten que un script tenga más posibilidades que usando una flag, y son clave en los script de gatillo (los cuales explicaré en lecciones más avanzadas. Empecemos explicando los comandos.
-Setflag: Activa una flag. Se escribe así: setflag 0xXXXXX donde las X son el número de flag.
-Clearflag: Se usa igual que setflag pero en lugar de activar, desactiva la flag.
-Checkflag: Comprueba si una flag está o no activa. Se escribe así: setflag 0xXXXX donde las X son el número de flag. Siempre va seguido de un if y un goto. Ejm:
checkflag 0x4F1A
if 0x1 goto @activa (si la flag 0x4F1A está activa se va al puntero @activa)
aquí se hace el script que ocurriría si la flag está inactiva

#org @activa
Aquí se haría el que se ejecutaría si la flag está activa.
-Setvar: le asigna un valor a cierta variable. Se usa así: setvar 0xXXXX 0xY donde X es el número de variable e Y es el valor que toma (en hexadecimal siempre).
-Comparevars: sería como el checkflag. Comprueba el valor de la variable. La diferencia es que aquí tenemos que decirle con qué valor debe compararla. Se usa así:
comparevars 0xXXXX 0xY X es el número de variable, e Y es el valor con el que debe ser comparado el valor de X
if 0x1 goto @var1
aquí se haría el script que ocurriría si el valor de XXXX no es igual a Y.
Si el valor de la variable XXXX es igual a Y, se va al puntero @var1
#org @var1
Aquí se haría el script que ocurriría si el valor de XXXX es igual a Y.
-Addvar: lo que hace este comando es sumar una cantidad a la variable. Por ejemplo, si la variable 0x45AF tiene un valor de 4 y le ponemos addvar 0x3, su valor pasará a ser de 7. Es decir, se le suma al valor de la variable tantas unidades como indique el número después del addvar. Se escribe así: addvar 0xXXXX 0xYYYY donde X es la variable cuyo valor va a ser modificado e Y es el número de unidades que se le suman al valor de la variable. Este número ha de estar escrito siempre en hexadecimal.
-Subvar: su uso y funcionamiento es igual al de addvar, pero en vez de sumar unidades, las resta.
-Copyvar: copia el valor de una variable en otra. Funciona así: copyvar 0xXXXX 0xYYYY donde X es el número de la variable en la que el valor será copiado e Y es el número de variable cuyo valor copiaremos en X.
En verdad, de todos estos comandos, los que más os deben interesar son setflag, checkflag, setvar y comparevars. Os voy a explicar todo mejor con un script de prueba. Empezamos con las flags:
#dynamic 0x800000 aquí, como ya sabemos, ponemos el offset que nos dio el FSF

#org @inicio aquí ponemos nuestro puntero que inicia el script
checkflag 0x9F4A esto comprueba si la flag está activada o no
if 0x1 goto @activa esto hace que si está activada, el script salte al puntero @activa
aquí se hace el script que se ejecutaría si la flag está desactivada.
release
end

#org @activa
Aquí se haría el script que se ejecutaría si la flag está activada.
release
end

Ahora, un script con variables:
#dynamic 0x800000 aquí, como ya sabemos, ponemos el offset que nos dio el FSF

#org @inicio aquí ponemos nuestro puntero que inicia el script
comparevars 0x4F9E 0x1 esto comprueba si la variable tiene un valor de 1
if 0x1 goto @si esto hace que si el valor de la variable es 1, se vaya al puntero @si
aquí se hace el script que se ejecutaría si el valor de la variable no es1.
release
end


#org @si
Aquí se haría el script que se ejecutaría si el valor de la variable es 1.
release
end

Mucha gente se pregunta cómo activar ciertos menús como Pokémon, Pokédex, etc. Para eso están las flags especiales. Son las siguientes:
Setflag 0x800 activas el menú Pokémon
Setflag 0x801 recibes Pokédex
Setflag 0x802 recibes PokéNav
Setflag 0x807 recibes primera medalla.
Setflag 0x808 recibes segunda medalla.
Setflag 0x809 recibes tercera medalla.
Setflag 0x80A recibes cuarta medalla.
Setflag 0x80B recibes quinta medalla.
Setflag 0x80C recibes sexta medalla.
Setflag 0x80D recibes séptima medalla.
Setflag 0x80E recibes octava medalla.
Setflag 0x860 recibes zapatillas para correr
También le ha ocurrido a mucha gente, que los nombres de los lugares no aparecen al entrar al lugar en cuestión. Para que aparezcan, tenéis que poner en el primer script de vuestro hack esto.
setvar 0x4084 0x2
setvar 0x4060 0x3
Da igual en qué parte del script lo pongáis mientras que esté ahí. Hasta aquí la clase de scripting de hoy.

PARA PRACTICAR
Hacer un script con flags en el que una persona te diga primero una cosa, y la siguiente vez que hables con él te diga otra distinta. No practicaremos las variables aún porque todavía no hemos visto los script de gatillo, que es donde más se usan las variables.


Lección 5 | Givepokemon y Giveitem

Lección 5 de Scripting
Givepokemon y Giveitem
Herramientas necesarias: advance map, XSE 1.1.1 y FSF
Comandos nuevos que se usarán: givepokemon y giveitem
Hola a todos los hackers. Hoy aprenderemos a usar los comandos givepokemon y giveitem. Funcionan de la siguiente manera:

givepokemon: hace que nos den un Pokémon. Se escribe así en un script: givepokémon 0xA 0xB 0xC 0x0 0x0 0x0, donde A es el número de la Pokédex Nacional del Pokémon a recibir en hexadecimal, B es el nivel del Pokémon en hexadecimal y C es el número del objeto del Pokémon en hexadecimal. Para saber los números de Pokémon y objetos en hexadecimal, solo hay que abrir en XSE los archivos stdpoke y stditems que vienen en la carpeta junto al XSE.

giveitem: hace que nos den un objeto. Se escribe así en un script: giveitem 0xA 0xB 0x0 donde A es el número del objeto en hexadecimal, B es la cantidad en hexadecimal y el 0 del final hace que automáticamente nos salga: Has obtenido… Guardaste el objeto en tal bolsillo…
La lección se podría resumir en esto, pero os daré algún consejillo.
1.- Se deben usar flags después del givepokémon y giveitem, de manera que no nos vuelvan a dar otra vez el pokémon o el objeto.
2.- Si hacéis un givepokémon y es el primer Pokémon que recibes en el juego, has de poner setflag 0x800, o de lo contrario, cuando entres al menú no aparecerá el menú Pokémon.

PARA PRACTICAR
Hacer un script de givepokemon y otro de giveitem. Enviadme el vídeo por MP.


Lección 6 | Applymovement y Waitmovement

Lección 6 de scripting
Comando Applymovement
Comandos nuevos que se usarán: applymovement y waitmovement
Herramientas necesarias: XSE, FSF y Advance Map
Hola a todos, en esta lección aprenderemos a usar el comando applymovement y waitmovement. Veamos su funcionamiento:
Applymovement: Mueve un evento de persona del mapa. Se escribe así en un script: applymovement 0xA @X, donde la A es el número de persona y @X es el puntero donde definiremos los movimientos. Recordad que detrás de la @ se puede poner una palabra cualquiera, pero solo una.
Waitmovement: Espera a que un applymovement finalice antes de continuar con el script. Si no se pone, el applymovement se quedará a medias. En un script se pone así: waitmovement 0xA, donde A es el número de evento de persona que pusimos en el applymovement.
Ahora os explicaré cosillas importantes que debéis saber a la hora de hacer este tipo de scripts:

1.- Como saber el número de persona:
En el Advance Map, nos vamos a la persona que queramos mover, hacemos clic sobre ella y debajo de Delete Event veremos que pone No. de Gente. El número que salga es el número que hemos de poner en el applymovement y el waitmovement. Tened cuidado, porque hay que ponerlo siempre en hexadecimal.

2.- Como mover al protagonista:
Hacemos el script normal, pero en el número de gente se pone 0xFF.
3.- Como mover la cámara:
Mover la cámara tiene un poco más de telita. Se hace el script normal, pero antes del applymovement se pone special 0x113, y después del waitmovement se pone special 0x114, y en el número de gente se pone 0x7F.

4.- Como definir los movimientos:
Definir los movimientos es sencillo. En el puntero indicado en el applymovement hay que poner la dirección raw de los movimientos que queramos poner. Las direcciones en raw se ponen así: raw 0xA, donde A es la dirección raw en hexadecimal. Para saber qué dirección se corresponde con cada movimiento, os dejo aquí la lista con los movimientos y su correspondiente raw. Al final de los movimientos siempre hay que poner raw 0xFE, que indica que el personaje de turno acaba de moverse. Aquí os dejo la lista con los movimientos y su correspondiente raw:

Movimientos y sus raws

#raw 0x0 'Mirar Abajo
#raw 0x1 'Mirar Arriba
#raw 0x2 'Mirar Izquierda
#raw 0x3 'Mirar Derecha
#raw 0x8 'Paso Abajo (normal)
#raw 0x9 'Paso Arriba (normal)
#raw 0xA 'Paso Izquierda (normal)
#raw 0xB 'Paso Derecha (normal)
#raw 0x4 'Paso Abajo (lento)
#raw 0x5 'Paso Arriba (lento)
#raw 0x6 'Paso Izquierda (lento)
#raw 0x7 'Paso Derecha (lento)
#raw 0x62 'Caminar Abajo
#raw 0x63 'Caminar Arriba
#raw 0x96 'Caminar Izquierda
#raw 0x97 'Caminar Derecha
#raw 0x35 'Correr Abajo
#raw 0x36 'Correr Arriba
#raw 0x37 'Correr Izquierda
#raw 0x38 'Correr Derecha
#raw 0x19 'Paso en el Lugar Abajo (lento)
#raw 0x1A 'Paso en el Lugar Arriba (lento)
#raw 0x1B 'Paso en el Lugar Izquierda (lento)
#raw 0x1C 'Paso en el Lugar Derecha (lento)
#raw 0x1D 'Paso en el Lugar Abajo (Normal)
#raw 0x42 'Salto Abajo
#raw 0x43 'Salto Arriba
#raw 0x44 'Salto Izquierda
#raw 0x45 'Salto Derecha
#raw 0x74 'Salto Abajo Corriendo
#raw 0x75 'Salto Arriba Corriendo
#raw 0x76 'Salto Izquierda Corriendo
#raw 0x77 'Salto Derecho Corriendo
#raw 0xC 'Salto2 Abajo
#raw 0xD 'Salto2 Arriba
#raw 0xE 'Salto2 izquierda
#raw 0xF 'Salto2 Derecha
#raw 0x78 'Salto2 Abajo Corriendo
#raw 0x79 'Salto2 Arriba Corriendo
#raw 0x7A 'Salto2 Izquierda Corriendo
#raw 0x7B 'Salto2 Derecha Corriendo
#raw 0x46 'Salto en el lugar (Mirando abajo)
#raw 0x47 'Salto en el lugar (Mirando la izquierda)
#raw 0x48 'Salto en el lugar (Mirando la izquierda)
#raw 0x49 'Salto en el lugar (Mirando la derecha)
#raw 0x4A 'Salto en el lugar (Mirando abajo/arriba)
#raw 0x15 'Deslizarse Abajo
#raw 0x16 'Deslizarse Arriba
#raw 0x17 'Deslizarse Izquierda
#raw 0x18 'Deslizarse Derecha
#raw 0x80 'Deslizarse Abajo Corriendo
#raw 0x81 'Deslizarse Arriba Corriendo
#raw 0x82 'Deslizarse izquierda Corriendo
#raw 0x83 'Deslizarse Derecha Corriendo
#raw 0x88 'Deslizarse Abajo en el pie izquierdo
#raw 0x89 'Deslizarse Arriba en el pie izquierdo
#raw 0x8A 'Deslizarse Izquierda en el pie izquierdo
#raw 0x8B 'Deslizarse Derecha en el pie izquierdo
#raw 0x8C 'Deslizarse Izquierda en diagonal (mirando arriba)
#raw 0x8D 'Deslizarse Derecha en diagonal (mirando arriba)
#raw 0x8E 'Deslizarse Izquierda en diagonal (mirando abajo)
#raw 0x8F 'Deslizarse Derecha en diagonal (mirando abajo)
#raw 0x90 'Deslizarse2 Izquierda en diagonal (mirando arriba)
#raw 0x91 'Deslizarse2 Derecha en diagonal (mirando arriba)
#raw 0x92 'Deslizarse2 Izquierda en diagonal (mirando abajo)
#raw 0x93 'Deslizarse2 Derecha en diagonal (mirando abajo)
#raw 0x10 'Esperar 1
#raw 0x11 'Esperar 2
#raw 0x12 'Esperar 3
#raw 0x13 'Esperar 4
#raw 0x14 'Esperar 5
#raw 0x3E 'Mirar al Jugador
#raw 0x3F 'Ignorar al Jugador
#raw 0x54 'Ocultar
#raw 0x55 'Mostrar
#raw 0x56 'Exclamación (!)
#raw 0x57 'Interrogación (?)
#raw 0x58 'Amor (<3)
#raw 0x98 'Levitar
#raw 0x99 'Detener Levitar
#raw 0x9C 'Volar Verticalmente
#raw 0x9D 'Aterrizar
#raw 0xFE 'Fin de los movimientos


Script de ejemplo:

Código:
#dynamic 0x000000

#org @inicio
lock
faceplayer
msgbox @mensaje 0x6
applymovement 0x2 @movimiento
release
end

#org @mensaje
=Mira como me muevo.

#org @movimiento
#raw 0x8
#raw 0x9
#raw 0xFE
PARA PRACTICAR
Hacer un script de applymovement moviendo el mini que queráis. Subid el vídeo para que lo vea.



Lección 7 | Scripts de gatillo

Lección 7 de Scripting
Scripts de gatillo
Herramientas necesarias: XSE, Advance Map y FSF
Hola, hackers. En esta lección entraremos en materia más complicada de scripting: los script de gatillo. Son esa S verde que aparece en advance map. Lo que caracteriza a estos script es que se ejecutan al pasar sobre ellos, y que están regidos por una variable, es decir, dependen del valor que una variable tome para ser o no ejecutados. Estos script suelen ejecutarse solo una vez o durante un tiempo limitado, por ejemplo, un script que al intentar salir de una ciudad nos diga que no tenemos suficientes medallas y nos eche para atrás. Ese script solo se ejecutaría hasta que tengamos cierto número de medallas, momento en el que se le dará cierto valor a una variable y el script dejará de ejecutarse. Sé que esta explicación os puede liar al principio, pero cuando lo entendáis será muy fácil. En un script de gatillo nunca se pone lock ni faceplayer, ya que no se le atribuye a un mini, por lo que aunque lo pongamos, no habrá nadie a quién bloquear ni nadie que nos mire. En esta lección no os enseñaré comandos nuevos, sino que os enseñaré a hacer y compilar correctamente un script de gatillo. Al final os complementaré la lección con un vídeo, de manera que lo entendáis mejor. Empecemos. Los script de gatillo se compilan así:
1.- Hacer nuestro script:
Yo voy a hacer un script con variables de lo más simple: al pasar por el script de gatillo salta una msgbox que nos dice: “Acabas de compilar un script de gatillo”. Después le da un valor a Aquí está el script:
Código:
#dynamic 0x6B0C08

#org @inicio
comparevars 0x90AE 0x1 – Mira si la variable 0x90AE tiene el valor de 1
if 0x1 goto @incio2 – Si tiene el valor 1, nos lleva a @inicio2
msgbox @msg1 0x6
setvar 0x90AE 0x1 – Le da el valor de uno a la variable anterior, para que al volver a pasar por el script, este no se repita.
release
end

#org @inicio2 – En este puntero pongo solo release y end, de manera que el script no haga nada cuando la variable tenga el valor de 1.
release
end

#org @msg1
= Acabas de compilar un script de\ngatillo.
2.- Compilar el script:
Los script de gatillo se compilan igual que un script normal. Le damos en compilar, picamos en el primer puntero de nuestro script, copiamos y cerramos el XSE. Ahora hay que ir a Advance Map. Nos vamos al gestor de eventos y donde pone cantidad de scripts damos en la flecha que mira arriba para añadir un script de gatillo. Lo colocamos en el cuadradito que queremos que el jugador pise para que se ejecute el script, y donde pone script offset pegamos el offset copiado del XSE. Ahora nos vamos a donde pone Var number y ponemos el número de la variable de la que depende nuestro script. En Var Value ponemos el valor que la variable debe tomar para que se ejecute el script. Ahora nos vamos a donde pone Desconocido (el que es un cuadrado solo, no dos) y ponemos 0003. Lo probamos en el juego y deberá funcionar.

PARA PRACTICAR
Hacer un script de gatillo simple. Pasarme el vídeo para que lo vea.


Lección 8 | Reproducir Sonidos

Lección 8 de scripting
Reproducir distintos sonidos
Herramientas necesarias: FSF, XSE y Advance Map
Comandos nuevos que se usarán: sound, fadesong, cry
Hola a todos. En esta lección aprenderemos comandos de reproducción de sonidos. Os explicaré los principales, que son:

Sound
Reproduce un sonido. Se escribe así:

Código:
sound 0x(número del sonido en hex)
Para saber los números de los sonidos os dejo aquí la lista:

Lista de sounds

sound 0xA = salto
sound 0x9 = puerta
sound 0x8 = puerta2
sound 0x7 = golpe
sound 0x6 = sonido al abrir el menú
sound 0x5 = sonido al cerrar el menú
sound 0x4 = sonido al abrir el pokenav
sound 0x3 = sonido al cerrar el pokenav
sound 0x1 = sonido al subir de nivel
sound 0xC = golpe2
sound 0xD = golpe3
sound 0xE = sonido al huir un pokemon
sound 0xF = sonido al salir la pokebola
sound 0x13 = sonido del barco
sound 0x29 = sonido al romper un vidrio o algo asi
sound 0x27 = sonido de un temblor
sound 0x2A = sonido del piso rompiendose
sound 0x2B = sonido cayendo
sound 0x2C = sonido al caer
sound 0x2D = sonido al teletransportarse
sound 0x2E = sonido al finalizar la teletransportacion
sound 0x2F = sonido de la puerta del camion al abrirse
sound 0x30 = sonido del pokeblock
sound 0x31 = sonido del camion
sound 0x34 = sonido de aleteo
sound 0x35 = sonido de avión
sound 0x3D = sonido de vuelo
sound 0x3E hasta sound 0x42 sonido de campanas
sound 0x46 = sonidos al caminar sobre el agua
sound 0x47 = sonido al colocar algo sobre la mesa
sound 0x48 = sonido al recibir palta (dinero)
sound 0x49 = un timbre ding dong
sound 0x4A = sonido de agua 1
sound 0x4B = sonido de agua 2
sound 0x4C = sonido de agua 3
sound 0x51 = luvia
sound 0x50 = ventisca
sound 0x4F = sonido de envenenamiento
sound 0x57 = trueno
sound 0x58 = trueno 2
sound 0x5A =sonido al ser derrotado
sound 0x5B = sonido al llegar al límite de experiencia
sound 0x5C = camion 2
sound 0x5D = aleteo 2
sound 0x65 = sonido de alerta
sound 0x66 = sonido que hace un pokemon shuiny
sound 0x67 = poder
sound 0x6A = gente gritando
sound 0x6B = un yet
sound 0x70 ? te llaman!!
sound 0x80 = sonido al cortar
sound 0x83 = al romper piedras
sound 0x8D = se detiene el temblor (creo)
sound 0x90 = fuego
sound 0x91 = fuego2
sound 0x92 = fuego2
sound 0x93 = golpe de fuego


Fadesong
Reproduce cierta canción durante el transcurso del script. Se escribe así:

Código:
fadesong 0x(número de la canción)
El número de las canciones lo podemos averiguar con Advance Map. Nos vamos a cualquier mapa y en el cabezal, donde definimos la música del mapa, en la lista de canciones hay un número al lado de cada canción. Por ejemplo, 015E. Se pondría fadesong 0x15E. El primer cero delante del número de la canción no se pone.

Cry
Reproduce el grito de un Pokémon. Se escribe así:

Código:
cry 0x(número del pokémon en la pokédex nacional en hex)
Para saber el número del Pokémon, abrid el archivo stdpoke que viene con vuestro XSE.

PARA PRACTICAR
Hacer un script con cada uno de los tres comandos. Subid el vídeo para que lo vea.


Lección 9 | Comandos útiles que no pueden faltar en un script

Lección 9 de Scripting
Comandos útiles que no deben faltar en un script
Herramientas necesarias: XSE, FSF y Advance Map
Comandos nuevos que se usarán: special, fadescreen, setweather, doweather, showpokepic, hidepokepic, warp, setmaptile

Hola, hackers. En esta lección de scripting aprenderemos comandos útiles que no deben faltar en un script. Empecemos por el principio:

Special

El comando special es un comando bastante peculiar. ¿Nunca os habéis preguntado como hace el juego de ruby para mostrar la bolsa con los Pokémon? Pues con un special. Los special se escriben así en un script:

Código:
special 0x(número de special)
Para saber los números de special os dejo aquí la lista:

Specials Pokémon Ruby

0 = Heals Party Pokémon
1 = ?
2 = Warp sound + FadeBlack
3 = Hero Uses Last Used Warp
4 = ?
5 = ?
6 = ?
7 = ?
8 = Make new Secret Base/Enter Secret Base
9 = Come out of Coliseum
A = Come out of Coliseum
B = ?
C = ?
D = ?
E = Hero Uses Secret Base PC
F = Something to do with registry in a secret base
10 = ?
11 = Something to do with Secret Base battling
12 = ?
13 = ?
14 = ?
15 = ?
16 = ?
17 = ?
18 = Move Player to X01 Y03
19 = Something to do with secret base battling
1A = Turning off PC
1B = Mixing Records
1C = ?
1D = ?
1E = ?
1F = checks whether game is linked
20 = Please wait followed by wild battle (Linkup) (VS in coliseum)
21 = "Please wait link stand by" (Link Feature)
22 = "Please wait link stand by" (Link Feature)
23 = Call Save Menu
24 = ?
25 = ?
26 = ?
27 = ?
28 = ?
29 = Select 3 Pokémon [maybe for Battle tower?]
2A = Black Screen
2B = Something to do with Berry Growth
2C = Opens up berry pocket (Used in berry blender script)
2D = Something to do with Planted berry (Used with CmdC3)
2E = Something to do with Berry Growth
2F = Something to do with Berry Growth
30 = Maybe activates the watered flag (used first, then special0x5E)
31 = ?
32 = ?
33 = ?
34 = Open Textbox (Stays Open)
35 = Open Textbox (Stays Open)
36 = ?
37 = ?
38 = ?
39 = ?
3A = ?
3B = Trainer battle
3C = Access Lanette's PC (BOX System)
3D = ?
3E = ?
3F = ?
40 = ?
41 = ?
42 = ?
43 = ?
44 = ?
45 = ?
46 = ?
47 = ?
48 = ?
49 = ?
4A = ?
4B = ?
4C = ?
4D = ?
4E = ?
4F = ?
50 = ?
51 = ?
52 = ?
53 = ?
54 = ?
55 = ?
56 = ?
57 = ?
58 = ?
59 = ?
5A = ?
5B = ?
5C = ?
5D = Call Save Menu which keeps looping.
5E = Watering of Berry (used first, then special0x5E)
5F = You fill your trainer's profile/interview
60 = Shows what you put for trainer's Profile/interview
61 = ?
62 = ?
63 = ?
64 = ?
65 = ?
66 = ?
67 = Strange Message with sound (could be Unown speech)
68 = ?
69 = ?
6A = ?
6B = ?
6C = Trainer Tales (Link Feature)
6D = Choose Tale
6E = ?
6F = ?
70 = ?
71 = ?
72 = ?
73 = ?
74 = ?
75 = Secret Base Decoration Item Menu
76 = ?
77 = ?
78 = ?
79 = ?
7A = ?
7B = ?
7C = Something to do with renaming
7D = Something to do with renaming
7E = ?
7F = ?
80 = ?
81 = ?
82 = ?
83 = Poké Slots In Use (Store Command)
84 = ?
85 = ?
86 = ?
87 = ?
88 = ?
89 = ?
8A = Crashes
8B = ?
8C = ?
8D = Displays the last message
8E = Used with Setmaptile to make it work
8F = ?
90 = ?
91 = setmaptile #206 at X8 YB
92 = ?
93 = ?
94 = Something to do with Timed events
95 = ?
96 = ?
97 = ?
98 = Cable Car Ride Cutscene
9A = Male Clock
9B = View Clock
9C = Choose Starters From Birch's Bag
9D = Wally Catching Ralts
9E = Nickname's first Pokémon in Party
9F = Choose a Pokémon in the party (For Nickname)
A0 = ?
A1 = Starts Berry Blender
A2 = Slot game.
A3 = ?
A4 = ?
A5 = ?
A6 = ?
A7 = ?
A8 = ?
A9 = ?
AA = ?
AB = ?
AC = ?
AD = ?
AE = ?
AF = Gabby and TV's "In serach of Trainers"
B0 = ?
B1 = ?
B2 = ?
B3 = ?
B4 = ?
B5 = ?
B6 = ?
B7 = ?
B8 = ?
B9 = ?
BA = ?
BB = ?
BC = Store a Pokémon For Day Care
BD = Take back Pokémon From Day Care
BE = Get Breeding Growth (store)
BF = Get Price
C0 = Something to do with Day Cay pay (store)
C1 = ?
C2 = Egg hatch (1st Pokémon in party)
C3 = ?
C4 = Battle results For The Coliseum

C5 = ?
C6 = Something to do with DayCare cost
C7 = ?
C8 = Move to the last sethealingplace/flightspot after some time (faint!!) (Fainted Event)
C9 = ?
CA = ?
CB = ?
CC = ?
CD = ?
CE = ?
CF = ?
D0 = Opens PokéBlock case
D1 = Stores a random value to LASTRESULT (If the value matches mirage Island will show)
D2 = ?
D3 = ?
D4 = Used Before Special 0xF9/FA
D5 = Catch Pokémon tip, boxset 4 (use closeonkeypress)
D6 = tile change (in the middle of screen?)(For PC)
D7 = tile change (flower, in the middle of screen?)
D8 = ?
D9 = Sets some sort of tiles
DA = Sets some sort of tiles
DB = Choose Pokémon then Fadescreen
DC = Opens the First Pokémon's Moves
DD = ?
DE = ?
DF = ?
E0 = Move tutoring For 1st Pokémon in Party
E1 = ?
E2 = ?
E3 = CheckBike (store command) 00 = nobike
E4 = Set Cycling Road Results (time, collisions)
E5 = ?
E6 = First Pokémon Happy (StoreResult, 4 = Happy),
E7 = ?
E8 = ?
E9 = ?
EA = ?
EB = ?
EC = Verse a high level trainer, level 100/Random Battle?
ED = ?
EE = ?
EF = ?
F0 = ?
F1 = Restarts Game
F2 = ?
F3 = ?
F4 = ?
F5 = choose 3 Pokémon(Battle tower) F6 = ?
F7 = ?
F8 = ?
F9 = Item Storage Mailbox Decoration
FA = Item Storage - No Decoration
FB = World Map
FC = ?
FD = ?
FE = Used for In-Game Trades - Trades 1st trade Pokémon "Makit" to 1st Pokémon in Party
FF = ?
100 = ?
101 = ?
102 = ?
103 = Berry Blender results
104 = ?
105 = ?
106 = PC (menu opens and disappears real fast)
107 = Hall of Fame, through PC (Will be corrupt if there's no data) (reads)
108 = Hoenn Pokédex diploma
109 = ?
10A = ?
10B = ?
10C = ?
10D = ?
10E = Boat sailing for a long time, like Fire Red's speed boat (+Return)
10F = Restarts
110 = Hall of Fame "Credits" (Saves data)
111 = Elevator animation<
112 = Displays Flutes
113 = Freezes The Screen/Camera
114 = Releases The Screen/Camera
115 = ?
116 = ?
117 = ?
118 = ?
119 = Groudon's Orb followed by earthquake
11A = ?
11B = Battel Tower Results
11C = ?
11D = ?
11E = ?
11F = ?
120 = ?
121 = ?
122 = ?
123 = ?
124 = ?
125 = ?
126 = ?
127 = ?
128 = ?
129 = ?
12A = ?
12B = ?
12C = Player Goes to last warp/flightspot used
12D = Makes special 0x9d work properly
12E = ?
12F = ?
130 = Is PC Box Full (store command) (0 = full)
131 = Earthquake for few seconds "Earthquake (stops)"
132 = Show Floors & Which Floor you're on
133 = ?
134 = CheckPokerus [0001 = Pokerus]
135 = ?
136 = Weird Quake
137 = Lava Battle/with Groudon
138 = Land Battle/with legendary
139 = Land Battle2/different song/battle with ledgendary - used with wildbattle
13A = ?
13B = Small screen shake
13C = ?
13D = Light/Flash
13E = Player uses the warp last used (no sound)
13F = falls in first warp of the first map
140 = Pokémon Image (UnLZ 199/200)
141 = ?
142 = Ecard battle Initiate (used in Levelscript at mossdeep, Oldman's house)
143 = Battle ?(perhaps used for wildbattle)
144 = ?
145 = ?
146 = ?
147 = Check Pokemon
148 = ?
149 = ?
14A = ?
14B = ?
14C = Turns Off Background/Map music
153 = ?
154 = ?
155 = ?


Specials en Fire Red

0 = Heal Party Pokémon
1 = ?
2 = Warp sound + Black Screen
3 = Walk to your room
4 = ?
5 = ?
6 = ?
7 = ?
8 = ?
9 = ?
A = ?
B = ?
C = ?
D = ?
E = ?
F = ?
10 = ?
11 = ?
12 = ?
13 = ?
14 = ?
15 = ?
16 = ?
17 = ?
18 = ?
19 = ?
1A = ?
1B = ?
1C = ?
1D = ?
1E = ?
1F = ?
20 = Weird Fight
21 = Link Communication Standby
22 = Link Communication Standby 2
23 = Call Save Menu
24 = ?
25 = ?
26 = ?
27 = ?
28 = ?
29 = Select 3 Pokémon for something
2A = Crashes
2B = ?
2C = ?
2D = ?
2E = ?
2F = ?
30 = ?
31 = ?
32 = ?
33 = ?
34 = ?
35 = ?
36 = ?
37 = ?
38 = ?
39 = ?
3A = ?
3B = Fight with Team Aqua's Leader
3C = Access BILL's PC
3D = ?
3E = ?
3F = ?
40 = ?
41 = ?
42 = ?
43 = ?
44 = ?
45 = ?
46 = ?
47 = ?
48 = ?
49 = ?
4A = ?
4B = ?
4C = ?
4D = ?
4E = ?
4F = ?
50 = ?
51 = ?
52 = ?
53 = ?
54 = ?
55 = ?
56 = ?
57 = ?
58 = ?
59 = ?
5A = ?
5B = ?
5C = ?
5D = Call Save Menu
5E = Edit "At the battle's start" profile
5F = Edit "At the battle's start" profile
60 = Displays "At the battle's start" text
61 = ?
62 = ?
63 = ?
64 = ?
65 = ?
66 = ?
67 = ?
68 = ?
69 = ?
6A = ?
6B = ?
6C = ?
6D = ?
6E = ?
6F = ?
70 = ?
71 = ?
72 = ?
73 = ?
74 = ?
75 = ?
76 = ?
77 = ?
78 = ?
79 = ?
7A = ?
7B = ?
7C = ?
7D = ?
7E = ?
7F = ?
80 = ?
81 = ?
82 = ?
83 = ?
84 = ?
85 = ?
86 = ?
87 = ?
88 = ?
89 = ?
8A = ?
8B = ?
8C = ?
8D = ?
8E = ?
8F = ?
90 = ?
91 = ?
92 = ?
93 = ?
94 = ?
95 = ?
96 = ?
97 = ?
98 = ?
99 = ?
9A = ?
9B = ?
9C = ?
9D = Old man catching a Weedle
9E = Nickname
9F = Choose 3 Pokémon
A0 = ?
A1 = ?
A2 = ?
A3 = ?
A4 = ?
A5 = ?
A6 = ?
A7 = ?
A8 = ?
A9 = ?
AA = ?
AB = ?
AC = ?
AD = ?
AE = ?
AF = ?
B0 = ?
B1 = ?
B2 = ?
B3 = ?
B4 = ?
B5 = ?
B6 = ?
B7 = ?
B8 = ?
B9 = ?
BA = ?
BB = ?
BC = Store a Pokémon
BD = Withdraw a stored Pokémon
BE = ?
BF = ?
C0 = ?
C1 = ?
C2 = Egg Hatch
C3 = ?
C4 = Show Battle Results
C5 = ?
C6 = ?
C7 = ?
C8 = Fainted Event
C9 = ?
CA = ?
CB = ?
CC = ?
CD = ?
CE = ?
CF = ?
D0 = ?
D1 = ?
D2 = ?
D3 = ?
D4 = ?
D5 = ?
D6 = A Turned On PC Appears
D7 = A Turned Off PC Appears
D8 = ?
D9 = ?
DA = ?
DB = ?
DC = Shows Known Moves
DD = ?
DE = ?
DF = Crashes
E0 = Crashes
E1 = Crashes
E2 = Crashes
E3 = Crashes
E4 = Crashes
E5 = Crashes
E6 = Crashes
E7 = Crashes
E8 = Crashes
E9 = Crashes
EA = ?
EB = ?
EC = ?
ED = ?
EE = ?
EF = ?
F0 = ?
F1 = ?
F2 = ?
F3 = ?
F4 = ?
F5 = ?
F6 = ?
F7 = ?
F8 = ?
F9 = ?
FA = ?
FB = ?
FC = ?
FD = ?
FE = ?
FF = ?
100 = ?
101 = ?
102 = ?
103 = ?
104 = ?
105 = ?
106 = ?
107 = Reads Hall Of Fame Data
108 = Diplome For Completing Kanto Dex
109 = ?
10A = ?
10B = ?
10C = ?
10D = ?
10E = ?
10F = Crashes
110 = Saves Hall Of Fame Data
111 = Elevator
112 = ?
113 = Freezes The Camera
114 = Releases The Camera
115 = ?
116 = ?
117 = ?
118 = ?
119 = ?
11A = ?
11B = ?
11C = ?
11D = ?
11E = ?
11F = ?
120 = ?
121 = ?
122 = ?
123 = ?
124 = ?
125 = ?
126 = ?
127 = ?
128 = ?
129 = ?
12A = ?
12B = ?
12C = ?
12D = ?
12E = ?
12F = ?
130 = ?
131 = ?
132 = Select Floor (Elevator)
133 = ?
134 = ?
135 = ?
136 = Using Strength
137 = Starts Trainerbattle
138 = Starts Wild Battle
139 = Starts Wild Battle
13A = ?
13B = ?
13C = ?
13D = Warp
13E = Fall Through A Hole
13F = ?
140 = ?
141 = ?
142 = ?
143 = Starts Wild Battle
144 = ?
145 = ?
146 = ?
147 = ?
148 = ?
149 = ?
14A = ?
14B = ?
14C = ?
14D = ?
14E = ?
14F = ?
150 = ?
151 = ?
152 = ?
153 = ?
154 = ?
155 = ?
156 = Starts Battle Against Ghost
157 = Uses The Bicycle
158 = ?
159 = ?
15A = ?
15B = ?
15C = Crashes
15D = ?
15E = ?
15F = ?
160 = ?
161 = Activates Surfing Animation
162 = ?
163 = See in PokéDex
164 = ?
165 = ?
166 = Lets You Enter A Nickname
167 = ?
168 = ?
169 = ?
16A = ?
16B = Establishes A Connection
16C = Establishes A Connection
16D = Establishes A Connection
16E = Shows Wireless Connection Status
16F = ?
170 = ?
171 = ?
172 = ?
173 = ?
174 = ?
175 = ?
176 = ?
177 = ?
178 = ?
179 = ?
17A = ?
17B = Uses The Ms Aqua
17C = ?
17D = ?
17E = ?
17F = ?
180 = ?
181 = ?
182 = ?
183 = ?
184 = ?
185 = ?
186 = Crashes
187 = ?
188 = ?
189 = ?
18A = ?
18B = ?
18C = ?
18D = Learns A Move
18E = Battletower Lv50
18F = ?
190 = ?
191 = Departure Of MS Anne
192 = ?
193 = ?
194 = ?
195 = Shows Jump Records
196 = ?
197 = ?
198 = ?
199 = ?
19A = ?
19B = ?
19C = Shows Powder Counter
19D = ?
19E = ?
19F = ?
1A0 = ?
1A1 = ?
1A2 = Shows Berry Crush Rankings
1A3 = ?
1A4 = ?
1A5 = Plays Credits On The Current Map
1A6 = Shows Dodrio Berry Picking Stats
1A7 = ?
1A8 = ?
1A9 = ?
1AA = ?
1AB = Moves The Deoxys-Triangle
1AC = ?
1AD = ?
1AE = ?
1AF = ?
1B0 = ?
1B1 = ?
1B2 = Displays A Cursor At The Left Top Corner
1B3 = ?
1B4 = ?
1B5 = Executes Weird Effects on Map Tiles
1B6 = Executes Weird Effects on Map Tiles
1B7 = ?
1B8 = ?
1B9 = ?
1BA = ?
1BB = ?


Fadescreen

Hace un flash de pantalla. Se escribe así:

Código:
fadescreen 0x(tipo de fade)
Los tipos de fade son los siguientes:

Código:
0x0-negro rápido
0x1-blanco rápido
0x2-negro largo
0x3-blanco largo
Movesprite
El movesprite es un tipo de applymovement muy peculiar. Lo que hace es que mueve un mini del mapa a las coordenadas x e y indicadas. Se escribe así en un script:

Código:
movesprite 0x(número de gente) 0x(coordenada x) 0x(coordenada y)
Para saber la coordenada x e y de un bloque del mapa se coloca el puntero sobre el bloque al que queremos mover el mini y las coordenadas aparecen abajo a la izquierda.

Setmaptile

El setmaptile es un comando bastante útil, aunque su uso es peculiar. Lo que hace este comando es mapear mediante script. Es decir, nos permite colocar el bloque indicado en la posición del mapa que queramos. Se escribe así en un script:

Código:
setmaptile 0x(coordenada x) 0x(coordenada y) 0x(número de tile) 0x(tipo de movimiento del tile)
Ya sabéis como averiguar las coordenadas, pero no el número del tile. El número del tile lo podemos saber en Advance Map. Ponemos el puntero sobre el tile a colocar y abajo a la izquierda aparecerán dos números. El número de tile es el que está a la izquierda. Lo del tipo de movimiento del tile… solo podemos poner dos tipos: 0x0(no se puede pasar) y 0x1(se puede pasar). Un ejemplo de setmaptile:

Código:
setmaptile 0x14 0x2F 0x4E 0x0
Tened en cuenta que el setmaptile se deshace cuando salís del mapa, de manera que el tile volverá a la normalidad.

Setweather y doweather

Unos comandos cuyos nombres bien explican su función. Setweather hace que cambie el clima, y doweather lo ejecuta. Me explico, si pones setweather pero no doweather, no ocurrirá nada. Se escribe así en un script:

Código:
setweather 0x(tipo de clima)
Aquí os dejo la lista de los climas:

Climas (créditos a hot_kage por la información)

None = 0x0
Reflected Clouds = 0x1
Normal = 0x2
Rain = 0x3
3 Snowflakes = 0x4
Thunderstorm = 0x5
Fog = 0x6
Snow = 0x7
Sandstorm = 0x8
Diagonal Fog = 0x9
Thin Fog = 0xA
Bit Dark = 0xB
Overheat = 0xC
Thunderstorm2 = 0xD
None = 0xE


Warp


Nada más fácil. Nos lleva a otro mapa. Se escribe así:

Código:
warp 0x(banco de mapa) 0x(número de mapa) 0x(warp de ese mapa por el que saldremos) 0x(coordenada x) 0x(coordenada y)
Hay varios tipos de warp, a saber:
Warp: nos teleporta. Con efecto puerta.
Warphole: con efecto agujero.
Warpmuted: sin ningún efecto.
Warpwalk: con efecto de caminar
Warpteleport: con efecto de teleportador

Showpokepic

Sencillísimo. Nos muestra el sprite de un Pokémon. Se escribe así (todo en hexadecimal)
showpokepic 0x(número del Pokémon) 0x(coordenada x) 0x(coordenada y)
Ya´ta. Eso es todo. Cuando queramos que el sprite desaparezca de la pantalla hay que poner hidepokepic.

PARA PRACTICAR
Hacer un script de cada tipo explicado en la lección. Subid el vídeo para que lo vea.


Lección 10 | Wildbattle y Trainerbattle

Lección 10 de Scripting
Wildbattle y Trainerbattle
Herramientas necesarias: FSF, XSE y Advance Map
Comandos nuevos que se usarán: Wildbattle y Trainerbattle

Hola a todos los hackers. En esta lección aprenderemos a hacer scripts básicos de Wildbattle y Trainerbattle. Empecemos con una explicación básica de los comandos.

Wildbattle: Ejecuta una batalla contra un Pokémon salvaje. Así de simple. Se escribe así en un script:

Código:
wildbattle 0x(Pokémon contra el que se luchará) 0x(nivel del Pokémon) 0x(objeto que llevará el Pokémon)
Recordad que todo ha de ser escrito en hexadecimal.

Trainerbattle: Ejecuta una batalla contra un entrenador básico. Hay varios tipos de trainerbattle. Yo os voy a explicar los dos principales, pero primero, veamos la sintaxis del trainerbattle. Es un poco complejo:

Código:
trainerbattle 0x(tipo de batalla) 0x(entrenador contra el que luchar) @(puntero al texto que dirá cuando te vea) @(puntero al texto que dirá cuando le venzas)
Vayamos paso a paso.

1.- ¿Cómo se el tipo de batalla?
Lo explicaré más adelante.

2.- ¿Cómo sé el tipo de entrenador?
Hay que irse a la herramienta Advance Trainer o PET. Abrimos el ROM y nos vamos a la lista de entrenadores. Veréis que al lado del nombre del entrenador hay un número. Ese es el número de entrenador. Simplemente hay que poner el número del entrenador con el que queramos luchar. Para aprender a editar entrenadores id a la microlección en la que lo explico.

3.- ¿Qué es eso que dice Reserved?
Eso no lo toqúeis. No pongáis nada.
Los punteros ya sabéis hacerlo. Vayamos con los dos tipos de entrenadores principales:

Entrenador regular, como los que ves por las rutas:

Para este tipo de entrenadores se pone lo siguiente:

Código:
trainerbattle 0x0 0x(número de entrenador) @frasedereto  @frasedederrota
msgbox @msg 0x6 (esta es la frase que dirá cuando vuelvas a hablar con él tras la batalla)
Para este tipo de entrenador hay que tocar también el Advance Map. Una vez compilemos el script, se lo asignamos al mini que será el entrenador. En ver eventos, hacemos clic sobre ese mini, y marcamos la casilla donde pone entrenador. En la casilla donde pone Ver Rango ponemos en hexadecimal el número de cuadritos máximos al que nos puede ver el entrenador.

Entrenadores especiales:

Con esto me refiero a batallas de entrenador después de las cuales continúa el script. Son más fáciles. Se pone esto:

Código:
trainerbattle 0x3 0x(número de entrenador) @textoquedicealperder
Debajo del trainerbattle se continúa el script con normalidad.

PARA PRACTICAR
Hacer un script de wildbattle contra el Pokémon que queráis y uno de trainerbattle contra el entrenador que queráis. El de trainerbattle que sea contra un entrenador normal de una ruta.




Grafismo y UNLz GBA

Lección 1| Bases de las principales herramientas

Lección 1 de grafismo
Bases de las principales herramientas
Herramientas necesarias: NSE, UNLz GBA, Character Maker Pro
Hola de nuevo a todos los hackers. Una de las cosas más temibles a la hora de hacer un hack es su aspecto gráfico como portada, minisprites, sprites, worldmap, tiles, etc. Empezaremos con una especie de diccionario. Por cierto, en esta escuela no os enseñaré a hacer vuestros propios sprites y minisprites. Eso es mejor que se lo preguntéis a hackers más especializados en ello. Tampoco os enseñaré a hacer vuestros propios tiles. Solo a insertarlos.
Portada: Me imagino que todos sabréis lo que es. Es la imagen que sale al principio del juego. En la que sale el título del videojuego.
Minisprite: También llamados overworlds. Son los personajes que vemos en los mapas. Los muñecos pequeños con los que hablamos, nos dan Pokémon…
Sprite: son las imágenes de Pokémon y entrenadores que vemos en las batallas.
Worldmap: es el mapa del mundo que vemos cuando hacemos vuelo, o en la habitación del protagonista.
Tiles: Bajo mi punto de vista, los tiles son el aspecto gráfico más significativo de cualquier hack. Son los gráficos que vemos en los mapas por los que nos movemos, como son árboles, nieve, montañas, caminos de tierra, etc.
Empecemos a explicar los programas.

NSE 1.7
Es el programa que usaremos para editar, principalmente los minisprites y sprites de Pokémon del juego. En Pokémon Rojo Fuego, podremos editar también sprites de entrenadores y de objetos. Os explicaré lo básico de este programa:



1.-Menús variados en los que encontraréis distintas opciones. Son las siguientes:
• File: Aquí podemos encontrar los siguientes menús:
o Open: Nos permite abrir un ROM
o Save: Para guardar los cambios
o Insert: Nos permite insertar la imagen actual en un determinado offset
o Import: Nos permite importar Bitmaps de 16 colores y paletas de 16 colores
o Export: Nos perimite exportar Bitmaps de 16 colores y paletas de 16 colores
o Close: Cierra el ROM
• Edit: Que se divide en:
o Game information: Nos permite editar cierta información importante del ROM
o Preferences: Aquí podemos elegir el tipo de personaje que son las imágenes en el juego, cambiarles el tamaño, redimensionar frames…
o Palette: Aquí podemos editar la paleta de color de la imagen en cuestión
o Undo: Deshace la última acción
o Redo: Rehace la última acción
• View: Que se divide en:
o Refresh: Refresca la imagen para que se aprecien ciertos cambios
o Next Index: Cambia de imagen a la siguiente
o Previous Index: Cambia de imagen a la anterior
o Next Frame: Las frames de una imagen son las fases de su animación, por así decirlo. Las frames de un minisprite son todas las posturas en las que puede aparecer en el juego. Andando a la derecha, corriendo hacia la izquierda… El next frame cambia a la siguiente frame de la imagen
o Previous Frame: Cambia a la anterior frame de la imagen
o Offset: Aquí podemos ver la dirección de memoria en la que se aloja la imagen en cuestión
o Hex Editor: Esto nos permite editar en hexadecimal nuestro ROM
• Options: Aquí podemos elegir entre los distintos complementos de la herramienta
o Grid: Muestra la cuadrícula
o Advanced Mode: Cambia a modo avanzado, que nos permite ver más datos de la imagen
o Boundries
o Backcolor: Nos permite ver el color de fondo de la imagen. Es decir, su color de transparencia. El color de transparencia es siempre el primero de la paleta. Por eso es importante que a la hora de editar la paleta pongáis el color de fondo de vuestra imagen en primer lugar.
o Bookmarks: Las bookmarks, o marcapáginas en español, son imágenes especiales del juego, como la animación de la hierba o el backsprite del entrenador protagonista. Un backsprite es un sprite visto de espaldas.
o Plugins: Los plugins de NSE, los cuales vienen en mi pack de herramientas, son archivos, que al ser colocados en la correspondiente carpeta, nos permiten editar otras imágenes aparte de los minisprites, como son los sprites de Pokémon. Menos el de los sprites de Pokémon, todos los demás plugins son solo para Fire Red.
o Draw Mode: al hacer clic aquí entramos al modo dibujo, que nos permite editar la imagen con más precisión.
• Others: Aquí podemos ver distinta información sobre la herramienta
o About: Nos permite ver información de la herramienta.
o Online: Nos permite ver información de la herramienta en internet.
2.- Imagen: Aquí vemos la imagen a editar.
3.-Cuando hacemos clic sobre una región de la imagen, esta se muestra aquí aumentada. Esta vista aumentada es la que podemos editar. Se edita haciendo clic sobre el color que queramos poner y luego clic sobre el lugar donde lo queramos poner.
4.-Aquí vemos cierta información del juego, como su nombre o su número de minisprites.
5.-Aquí nos podemos mover rápidamente entre las imágenes y sus distintas frames.
6.-Esto nos permite cambiar la paleta que utiliza la imagen seleccionada.
7.-Esto es la paleta. Aquí seleccionamos los colores para editar nuestra imagen.
8.-Aquí vemos el color sobre el que tenemos situado el cursor.
9.- Aquí vemos el color seleccionado. Tanto el principal (seleccionado con clic izquierdo) como el secundario (seleccionado con clic derecho).
Esto es lo más que os puedo explicar de NSE. Ah, una cosa, las imágenes que se importan en NSE tienen que ser Bitmaps de 16 colores. No pueden ser ningún otro tipo de imagen ni tener más de 16 colores, incluyendo el de transparencia.

UNLz GBA
El UNLz GBA es el programa por excelencia para editar gráficos. En él están todos los gráficos del juego. Aunque es difícil de usar, si lo tenemos y aprendemos a dominarlo, podemos editar gráficos muy fácilmente. Recordad que las imágenes que insertéis han de estar indexadas, es decir, con su paleta guardada en Character Maker Pro, pero eso os lo explicaré más adelante. Os explicaré su interfaz y funcionamiento.



1.-Menús varios. Son:
• File: En él podemos ver distintos menús:
o Open File: Abre un ROM
o Run Deep Scan: Encuentra todos los datos LZ77 comprimidos del juego, aunque genera muchos archivos inútiles
o Load RAW: Permite cargar imágenes RAW
• Help: Aquí podemos recibir ayuda con el programa.
2.-Abre un ROM
3.-Aquí podemos ver la imagen más achatada o más alargada.
4.-Aquí podemos ver la imagen en modo 16 colores o en modo 256 colores.
4.1.-Aquí podemos ver la imagen en modo blanco y negro.
5.-Estos son los botones de navegación. Aquí podemos navegar entre las imágenes y las paletas.
6.-Aquí podemos exportar la imagen y guardarla en nuestro ordenador para editarla.
7.-Esto nos permite exportar la imagen en formato RAW. Muchas imágenes han de ser editadas en formato RAW. Como por ejemplo el Worldmap. Para ello usamos el NTME.
8.-Aquí podemos importar una imagen PNG.
9.-Aquí podemos guardar los datos en el ROM.
10.-Estas son las teclas de navegación rápida. Aquí podemos movernos rápidamente entre las miles de imágenes de nuestro ROM.
11.-Aquí vemos la paleta de nuestra imagen.
12.-Aquí vemos las imágenes.
Recordad que la mayoría de las imágenes no aparecen en UNLz GBA tal y como salen en el juego, pero las más importantes os las enseñaré en lecciones venideras.

Character Maker Pro
El Character Maker Pro es una utílisima herramienta. Tanto para minisprites como para sprites o para tiles. Lo que hacemos con este programa es preparar los gráficos para su inserción en un proceso que en lenguaje de UNLz GBA se llama indexar. Esto consiste en abrir la imagen a insertar en Character Maker Pro. Reducir los colores de su paleta a 16 incluyendo el color de fondo. Luego, ir al editor de paletas de Character Maker Pro y colocar el color de fondo en el primer lugar. Después, guardamos la imagen como un Bitmap de 16 colores. Nuestra imagen ya está indexada y lista para su inserción. Os explico todo esto en una sola lección ya que no voy a hacer una lección solo para enseñaros a indexar. En lecciones más avanzadas, cuando os diga que indexéis la imagen, remitíos a este proceso. Explicaré la indexación a fondo más adelante. Ahora, procedamos con la interfaz de Character Maker Pro. Este programa es realmente amplio, por lo que solo os explicaré las funciones que más nos interesan.



1.-Menús variados que conviene que exploréis por vosotros mismos.
2.-Opciones varias, como nueva imagen, abrir imagen, guardar imagen, deshacer, rehacer, etc.
3.-Esta es la imagen abierta. Si la queremos modificar, hacemos clic derecho en la parte que queramos modificar, la cual se mostrará en grande en la ventana 4. Aquí podremos editarla.
4.-Aquí se edita la porción de imagen seleccionada.
5.-Esta es la paleta de color de la imagen. Recordad que sólo puede tener 16 colores incluyendo el de fondo, que en el juego se verá transparente, el cual debe estar el primero de la paleta.
6.-Aquí podemos modificar el color de la paleta seleccionado, añadiéndole o quitándole cantidad de rojo, verde o azul con las barras de desplazamiento.
7.-Estas son las herramientas de dibujo, que utilizaremos para editar la porción de imagen seleccionada.
8.-Aquí vemos la porción de imagen seleccionada en tamaño completo.
Esto es todo sobre la interfaz. En cuanto a dibujar en Character Maker Pro, es muy fácil. Seleccionamos la porción a editar, hacemos clic en el color que queramos poner y luego, lo ponemos donde queramos con las herramientas de dibujo. Así de fácil. Ahora procedo a explicaros como indexar una imagen paso a paso y con imágenes.
Indexación en Character Maker Pro explicada paso a paso
Ya expliqué la indexación más arriba, pero ahora la explicaré paso a paso y con imágenes. De ahora en adelante, cuando os diga que hay que indexar una imagen, remitíos a este proceso.
1.-Encontramos la imagen a indexar, en mi caso esta:



2.-Abrimos nuestra imagen en Character Maker Pro. Le reducimos los colores a 16 así. Entramos en el menú paleta, editar paleta y nos saldrá una ventanita con los colores. Borramos colores hasta que queden 16 o menos. Tened en cuenta que hay que borrar solo los que estén repetidos o que aparezcan poco en la imagen, para que el cambio apenas se note. Yo he quitado todos los que he podido y queda así:



3.-Ahora, en la ventana de edición de paletas que veis arriba, hay que poner el color de fondo de la imagen el primero de todos. Seleccionamos el color, le damos a cortar y luego, nos situamos al principio de la lista de colores y le damos a pegar. En mi caso, el color de fondo es el amarillo. Una vez hecho esto, seleccionamos los colores de nuestra imagen y le damos a colores de 15 bits.



4.-Nuestra imagen ya está indexada. Ahora la guardamos. En PNG si la vamos a poner en UNLz GBA y en Bitmap de 16 colores si es para NSE.
Esto es lo más detallado que os puedo contar sobre la indexación. Hasta aquí la lección de hoy.

PARA PRACTICAR
No os puedo sugerir ninguna práctica de grafismo aún, ya que hoy solo hemos visto las bases de los programas. Si queréis, indexad algunas imágenes para ir cogiendo práctica. Si algo no os ha quedado claro o tenéis alguna duda, posteadla aquí y yo os la responderé gustosamente. Recordad que las dudas que puedan interesar a mucha gente las postearé en el apartado dudas de interés general.


Lección 2 | Cómo insertar sprites y minisprites

Lección 2 de Grafismo
Insertar un minisprite y un Sprite (2 formas)
Herramientas necesarias: UNLz GBA, NSE 1.7, NSE 2.1, FSF
Hola a todos los hackers. En esta lección aprenderemos a insertar minisprites y sprites en nuestro ROM. Empezaremos por los minisprites.

Cómo insertar un minisprite con NSE 1.7
Nuestro juego tiene un número determinado de minisprites. Para poner un nuevo minisprite, hay que ponerlo sobre uno antiguo, de manera que este último desaparezca y sea sustituido por el nuevo. Explicaré la inserción de minisprites paso a paso. Por cierto, cada minisprite tiene un tamaño, que puede ser:
16x16: niños y Pokémon pequeños
16x32: Personas adultas y Pokémon de tamaño medio.
32x32: personas entradas en carnes, pokémon anchos y personas en bicicleta o haciendo Surf.
64x64: Pokémon grandes, como Dialga, Palkia, Groudon…
128x64: Barcos
Os explicaré la inserción de minis paso a paso:
1.- Elegir nuestro mini, en mi caso este:



2.- Lo adaptamos al tamaño del mini original, en mi caso, 16x32.
3.- Lo indexamos a mapa de bits de 16 colores (lee la lección 1 de Grafismo para aprender a indexar paso a paso).
4.- Cuando ya tenga sus 16 colores y sea un mapa de bits, nos vamos al NSE y le damos a File>Import>Image. Entonces nos saldrá una ventana donde pone load. Le damos a load y seleccionamos nuestra imagen indexada. Una vez cargada, hacéis clic donde pone Image y seleccionáis All, de manera que se importen tanto la imagen como la paleta de color. Una vez hecho eso, le damos en Save. Cuando salga changing offset le damos que sí. Nuestra imagen ya está importada.
5.- Ahora se guarda el ROM. Hay que dar en Edit>Palette. Entonces le damos a Save y cerramos la ventana de la paleta.
6.- Para culminar el proceso le damos en File>Save. Nuestro mini ya está insertado. Os enseño una imagen de cómo quedaría:



Cómo insertar un sprite en UNLz GBA
Os explicaré la inserción paso a paso. En UNLz GBA también hay que sustituir el sprite antiguo por el nuevo.
1.- Seleccionamos nuestro sprite. En mi caso este Pikachu chuchurrío:



2.- Se indexa la imagen en PNG con 16 colores.
3.- Buscamos en UNLz la imagen a sustituir y le damos Import. Seleccionamos nuestra imagen.
4.- Le damos en Write to ROM y seleccionamos las 3 primeras opciones. Aceptamos y ya estará guardado. Os enseño una imagen de cómo queda:



Recordad que los backsprites (los Pokémon de espalda como salen en batalla) han de ser insertados en color shiny.
Si al guardar en el ROM os dice que es demasiado grande y se aborta el guardado, no pasa nada. Hay que repuntear. Se hace así:
1.- Cuando al dar aceptar en Write to ROM nos diga aborting, nos vamos a FSF y abrimos nuestro ROM. Ponemos en bytes necesarios 800, y en intervalo a buscar, 400.
2.- Le damos a buscar y nos saldrá un offset. Le damos a buscar siguiente y nos sale otro offset.
3.- Le damos en UNLz GBA otra vez a Write to ROM.
4.- Donde dice image offset, ponemos el primer offset del FSF. Donde dice Palette offset ponemos el segundo offset del FSF y le damos a aceptar.
Ya está repunteado e insertado en nuestro ROM.

Cómo insertar sprites en NSE 2.1
Para insertar sprites, yo personalmente me quedo con NSE 2.1, ya que repuntea automáticamente. Lo primero, os explicaré su interfaz:



1.- Menús variados que conviene que exploréis vosotros mismos.
2.- Herramientas de edición. Otra cosa buena que tiene NSE 2.1 es que se pueden editar los sprites con el propio programa.
3.- Aquí navegamos por los distintos sprites y los editamos.
Cómo insertar un sprite:
1.- Indexamos nuestro sprite en PNG con 16 colores.
2.- Damos en File>Import>Sprite Data, y seleccionamos nuestra imagen. Damos en donde pone Image y seleccionamos Image + Palette. Damos en Save.
3.- Damos en Insert>Image Data, pinchamos la lupa y pinchamos Save.
4.-Damos en Insert>Palette Data, pinchamos la lupa y damos en Save
5.-Damos en Edit>Palette y damos en Write Palette to ROM.
6.- Damos en File>Save.
Nuestra imagen ya está insertada. Quedará igual que con UNLz, pero aquí repuntear e importar es más fácil.
PARA PRACTICAR
Insertar un minisprite y un sprite y enviarme la imagen de los dos. Recordad que solo tenéis que insertar el mini en una de sus frames. Las demás son para todas las posturas del mini.


Lección 3 | Cómo editar las paletas con APE

Lección 3 de Grafismo
Como editar paletas con APE
Herramientas necesarias: APE
Hola a todos. Hoy aprenderemos a editar las paletas de color de nuestro hack con la herramienta Advanced Palette Editor o APE. Esto es tremendamente útil para personalizar nuestro hack, ya que un ROM con buenos colores es un ROM feliz. No, es broma. Con el APE podemos editar cualquier paleta de nuestro ROM. No miento. Cualquiera. Empezaremos con la interfaz:



1.- Menús varios: Se dividen en:
• Archivo
o Abrir ROM: Carga el ROM cuyas paletas vayamos a editar
o Salir: Cierra el APE
• Edición
o Paleta a editar: divida a su vez en:
 Trasladar para editarla: copia la paleta a editar en la paleta cambiada, de manera que podemos editar a partir de los colores originales.
 Exportar: Exporta la paleta a editar
 Añadir a marcadores: Añade a la lista de marcadores la paleta a editar seleccionada. Los marcadores son accesos directos a paletas que vayamos a editar con frecuencia, de manera que no tenemos que buscar el offset de la paleta cada vez que vayamos a editarla.
o Paleta cambiada: dividada a su vez en:
 Limpiar: borra todos los colores que tengamos en la paleta cambiada
 Importar: Importa una paleta que tengamos guardada en el ordenador.
 Exportar: exporta la paleta cambiada y la guarda en el ordenador.
• Ver: de aquí solo es útil el botón marcadores, que nos permite cargar uno de nuestras paletas con marcadores para editarla.
• Herramientas:
o Elige-color: abre una rueda de color de manera que podemos buscar y elegir colores con precisión.
o Conversor RGB-GBA: en ROM Hacking los colores se leen en formato GBA, mientras que en los editores de imagen normales, cuando conseguimos un color, se nos facilita un offset con la dirección del color en formato RGB. El APE usa formato GBA, por lo que esta herramienta se usaría si tenemos el offset RGB y lo queremos convertir a GBA o viceversa.
• Ayuda: no merece la pena que lo explique
2.- Buscador de paleta: nos permite introducir el offset de la paleta para cargar una paleta determinada que no tenga marcador. El offset lo podemos conseguir en UNLz GBA. Nos vamos a la paleta a editar, y arriba nos pondrá Palette offset. Ese es el offset de la paleta.
3.- Cargar y guardar. Nada más simple. Cargar carga el ROM y guardar aplica los cambios.
4.- Marcadores: nos permite navegar por las paletas con marcador y añadir marcador a una paleta cualquiera.
5.- Paletaa editar: Esta es la paleta que vamos a editar. La paleta a editar no se edita directamente. Se edita la paleta cambiada y luego se le da a guardar.
6.- Paleta cambiada: Es la que editaremos. Se pone el offset GBA del color que queramos en los cuadrados grandes y en los pequeños nos sale el color correspondiente a ese offset.

Como editar paletas en APE:
Editar paletas en APE es simple. Buscamos la paleta que queramos editar. Cuando ya aparezca en el cuadro de paleta a editar, nos vamos a la paleta cambiada y ponemos los offset de los colores de la paleta definitiva, que obtendremos con el elige-color. Recordad que los colores se tienen que corresponder, es decir, si queremos sustituir en una paleta el rojo oscuro por el azul claro, tenemos que poner el azul claro en la paleta cambiada en la misma posición que está el rojo oscuro en la paleta a editar. El color de fondo o transparencia se pone en APE el último de la paleta, no el primero como suele ser. Yo he editado los colores de la introducción del profesor Abedul de mi ROM. Así era antes:



Y así es ahora:



PARA PRACTICAR
Cambiar una paleta cualquiera. Enviadme la imagen de como era antes y de como es después.




Microlecciones

Nº 1| Cómo cambiar la introducción de un juego

1ªMicrolección
Editar la introducción de un ROM
Herramientas Necesarias: Advance Intro Ed
Hola a todos los hackers. Bienvenidos a mi primera microlección. Las microlecciones son lecciones sobre temas variados que solo ocupan unas líneas. Como esta, en la que os enseñaré a editar la introducción de vuestro videojuego. Necesitaremos el programa Advance Intro Ed. Aquí os explico cómo se usa:



1.-Aquí se cambia la música que suena al principio. Para saber el número de la canción, habrá que mirarlo en el Sappy. Sappy es el programa de edición de música de ROMs de GBA. Lo veremos en otra microlección.
2.-Aquí se cambia el Pokémon que saca el profesor en la introducción.
3.-Esto es solo para Rojo Fuego y Verde Hoja. Aquí se cambia el Pokémon cuyo grito suena al pulsar start en la portada. Ojo, no se cambia el Pokémon que sale en la portada, sino el grito que suena. Tú pones un Pokémon en esa caja de texto, y será su grito el que suene al pulsar start.
4.-Aquí se cambia el mapa en el que empieza el juego.
5.-Al inicio de los juegos de Pokémon, siempre hay un objeto en el PC. En este caso es una Poción. Aquí podemos editar el objeto que sale. Si no queremos que salga objeto, picamos en la casilla de Remove Item.
6.-Aquí definimos la cantidad del objeto definido en 5 que aparecerá en el PC.
7.-Aquí definimos el dinero con el que el jugador empieza. La cantidad por defecto es 3000, pero podéis poner cualquier otra.
Hasta aquí la primera microlección.

PARA PRACTICAR
Como práctica, cambiad la introducción de vuestro ROM. Cambiad el dinero con el que empezáis, el objeto del PC, el mapa de inicio, el Pokémon del profesor y poned un número aleatorio en el número de canción. Subid el vídeo para que lo vea.


2ª Microlección | Cómo parchear un ROM con LIPS

2ªMicrolección
Cómo parchear un ROM con LIPS
Herramientas necesarias: LIPS
Hola a todos los hackers. Aquí estoy con mi segunda microlección. Hoy aprenderemos algo muy sencillo. Cómo parchear un ROM con LIPS. LIPS o Lunar IPS, es un programa creado para aplicar y crear parches con la extensión IPS. Yo os enseñaré ambas cosas, como crear y como aplicar parches. Empecemos.
Para aplicar un parche:
Lo primero es tener nuestro parche. Podemos descargarlo de la sección parches de la web de WAH. Yo voy a aplicar un parche de cambio de caja de mensaje. Antes de nada, os enseño como son las cajas de mensaje en el ROM original.



Ahora procedamos a aplicar el parche. Lo primero es abrir LIPS, y se verá una ventanita así.



Ahora le damos a Apply IPS Patch o en español, aplicar parche IPS. Antes de nada, os digo que un parche es un fichero, que al ser aplicado sobre un juego o un programa, le añade funcionalidades, o cambia cosas en su estructura. Los parches conviene que sean aplicados sobre ROMs sin editar aún, pero si ya los has editado no te preocupes. Los parches solo cambian los datos del ROM que no coinciden con los datos en el parche. En este caso, la caja de mensaje. Una vez le hemos dado a Apply IPS Patch, nos saldrá una ventana que dice select IPS file to use. Seleccionamos nuestro parche. Entonces nos sale una ventana que dice select file to patch. Seleccionamos el ROM sobre el que vamos a aplicar el parche. Recordad que los parches se hacen para cierto ROM. Si un parche se ha hecho para Rojo Fuego, no lo podemos aplicar en Rubí. Una vez seleccionado nuestro ROM, si nos dice The file was successfully patched es que lo hemos hecho bien. Recordad que no todos los parches funcionan. En el caso de que el parche esté defectuoso, cuando abráis el ROM la pantalla se quedará blanca. Por eso conviene hacer copias de seguridad antes de parchear nada. Este parche ha funcionado, y ahora la caja de mensaje se ve así:



Como crear un parche:
Crear un parche es mucho más simple que aplicarlo. Lo único que hay que hacer es darle a create IPS Patch y saldrá una ventana que dice select original unmodified file to use. Aquí hay que seleccionar el ROM sobre el que se aplicará el parche. Si lo habéis hecho en un ROM de Ruby en inglés, seleccionáis un ROM de Ruby en inglés sin modificar. Luego saldrá una ventana que dice select new modified file to use. Ahora seleccionáis el archivo modificado.

PARA PRACTICAR
Parchead un ROM cualquiera con uno de los parches de WAH. Mandadme por MP una foto de cómo era antes y de cómo es después de aplicar el parche.


Nº 3 | Cómo editar los entrenadores del ROM

3ª Microlección
Como editar los entrenadores
Herramientas necesarias: PET

Hola a todos los hackers. En esta microlección aprenderemos a editar los entrenadores de nuestro ROM. Es muy sencillo. Lo único que hay que hacer es abrir el ROM con PET y empezar a editar. Os explico la interfaz:




1.- La lista de entrenadores. El número que aparece al lado del nombre es el número de entrenador, que será útil a la hora de hacer un script de trainerbattle, pero eso lo aprenderemos en la sección de scripts.
2.- Aquí editamos los stats base del entrenador, es decir, su nombre, el tipo de entrenador que es (dominguero, soldado, etc.), el número de Pokémon que tiene, la música que suena al luchar contra él, su sprite…
3.- Aquí editamos los objetos de los que dispone el entrenador, y que él usará en el juego según necesite.
4.- Aquí editamos los Pokémon del entrenador. En level ponemos su nivel, con las flechitas cambiamos el Pokémon, con Save Pokémon guardamos el Pokémon seleccionado, con la barra de desplazamiento navegamos entre los Pokémon del entrenador, donde pone Attacks, definimos los ataques que tendrá el Pokémon seleccionado. Si lo dejamos en blanco, el juego le atribuirá unos ataques aleatorios.

PARA PRACTICAR
Editar un entrenador a vuestro gusto. Subid la imagen del PET.


Nº 4 | Cómo expandir el ROM

4ª microlección
Cómo expandir el ROM
Herramientas necesarias: XSE

Hola a todos, hackers. Como bien sé, muchos estáis interesados en añadir más entrenadores al ROM, más tilesets de los que ya hay, más mapas, más regiones, etc. Una tarea completamente imposible en un ROM normal. Sin embargo, es algo cotidiano hacerlo en un ROM expandido. Expandir el ROM es muy simple. Solo hace falta XSE. Bueno, para que veáis que no os miento, así es un ROM clásico:



¿Véis que pone 16,0 MB? Ese es el tamaño perfecto para los datos normales, pero si queréis tener más espacio, podéis hasta triplicarlo. Es muy sencillo.
1.-Abrid XSE y con él nuestro ROM a expandir. Seleccionad Herramientas>Reductor del ROM y veréis algo como esto:



2.- Dad en expandir. Si os dice que la memoria ha sido expandida correctamente, ya está. Ahora mirad como se ha quedado:



Como veréis, su tamaño se ha doblado. Podéis llevarlo a mucho más, pero con 32 ya hay suficiente. Lo máximo para que no sea insano serían 64 MB y a lo sumo.



Lecciones a petición de usuarios

1ª | Cómo poner en el ROM Pokémon de la 4ª, 5ª o 6ª generación

Lección a petición de usuario Nº 1
Cómo poner en el ROM Pokémon de la 4º o 5º generación
Herramientas que se usarán: NSE 1.7, YAPE, Advance Pokemon Icon Editor, Advanced Cry Editor
Hola a todos. Bienvenidos a la primera lección a petición de los usuarios. Hoy aprenderemos a insertar Pokémon de generaciones no disponibles en el ROM, como son la 4º, 5º y 6º. Para poner nuevos Pokémon sin problemas, habrá que sustituir alguno antiguo. De lo contrario, el ROM puede estropearse. El proceso de añadir Pokémon es delicado, así que haced una copia de seguridad antes de empezar. Yo voy a sustituir a Torchic por Chimchar.

Paso 1: Insertar la imagen del Pokémon:
Como ya vimos en la lección 2 de grafismo, para insertar imágenes en NSE hay que indexarlas en bitmap de 16 colores. Si queremos que quede bien, vamos a necesitar tanto el sprite del Pokémon como el backsprite. También necesitaremos el icono del Pokémon. Yo los tengo aquí:







Una vez indexados, hay que irse a NSE y seleccionar Options>Plugins>Select Plugin y dar en Pokémon.npi y luego en Run. Veremos ahora los sprites de nuestros Pokémon así:



Buscamos nuestro Pokémon a sustituir e insertamos la imagen del Pokémon que queremos poner. Una vez insertado el sprite de frente, hay que poner el backsprite. Para ello, nos vamos a la frame siguiente del Pokémon. Repetimos el proceso, esta vez insertando el backsprite. A mí me va quedando así:



Paso 2: Cambiar el icono del Pokémon:
El icono del Pokémon es realmente fácil de cambiar. Se usa la herramienta Advance Pokemon Icon Editor. Lo que hay que hacer es abrirla, y seleccionar nuestro ROM. Yo cambiaré el icono de Torchic por el de Chimchar. Para que quede bien, necesitaremos las dos frames del icono, es decir, sus dos posturas (por si no os habéis dado cuenta, los iconos se mueven). Yo tengo aquí las dos de Chimchar.



Lo que hay que hacer es buscar en la lista de Pokémon, el Pokémon cuyo icono queramos sustituir. Una vez encontrado, hay que darle a File>Export Image, de manera que se guarde el icono en nuestro ordenador. Ahora, hay que editar esa imagen recién exportada. Colocamos los iconos nuevos de la misma forma que están colocados los antiguos. A mí me quedó así:



Una vez guardada la imagen, volvemos al Advanced Pokemon Icon Editor y le damos a File>Import Image y seleccionamos nuestra imagen. A mí me ha quedado así:



Le damos a Write to ROM y listo. En el juego quedaría así:



Paso 3: Cambiar el grito del Pokémon:
Para esto usaremos la herramienta Advanced Cry Editor. Lo que necesitaremos será el grito del Pokémon en formato Wav de 8 bits (se puede convertir un WAV a 8 bits con programas de edición de audio). Se abre la herramienta y con ella el ROM, se le da a import cry, se selecciona el grito. Una vez cargado, donde pone Pokemon´s ROM Number, se pone el número del Pokémon cuyo grito vayamos a sustituir y se da en Write to ROM.

Paso 4: Cambiar los datos del Pokémon:
Para cambiar los datos del Pokémon usaremos YAPE. Es muy fácil. Se abre la herramienta y con ella el ROM, nos vamos al Pokémon a sustituir y editamos sus características de manera que sean como las del Pokémon que queremos poner. Yo os enseñaré el nombre y algunos ataques cambiados:




Nº 2 | Como editar el Worldmap

Lección a petición de usuario Nº 2
Cómo editar el Worldmap
Herramientas necesarias: NTME, UNLz GBA
Hola a todos. En esta lección aprenderemos a editar el Worldmap de nuestro ROM. Para quien no lo sepa, el worldmap es el mapa de la región que vemos al hacer vuelo o en la habitación del protagonista. Editarlo es simple. Lo más largo es hacerlo. Como ya sabréis, encontrar ciertos gráficos en UNLz puede ser demencial, por lo que os dejo aquí algunas direcciones de UNLz:

Direcciones UNLz GBA Pokemon Ruby USA

Pokémon Ruby USA:
1 fondo del profesor
2 es el RAW

78 portada
79 RAW

127 listones

130 la pokenav

131 listones

147 bolsa del profesor donde estan los pokemon iniciales

148 mano que escoje los pokemon iniciales

160 un tailow y el ongo raro (no se donde salen si alguien sabe que lo diga )

175 latios de la intro

177 un pikachu con una copa

179 monte del intro

181 unas nubes del intro

183 mas nubes

184 arboles de la intro

186 mas arboles

189 el prota de la intro

190 la prota de la intro

191 la bici de la intro

192 latias de la intro volando
193 latias de la intro volando

200 misingo

202-213 pokeball

319 habilidades de los concursos
321 estatus de concursos
349 el que esta en los cuncursos

441 sustituto
442 sustituto atras

461-762 pokemon de la generacion 1
463-962 pokemon de la generacion 2
965-1236 pokemon de la generacion 3
1237 huevo
1238-1291 unou

1294 prota chico
1295 prota chica
1309 blasco

1363 back del chico
1364 back de la chica
1365 back de blasco

1379 VS

1380-1408 fondos de batalla

1445 next turn

1446 aplauso

1485 los tipos de pokemon
1488 las estatus de los pokemon

1493 mochila del chico
1494 mochila de la chica
1495 dentro de la mochila

1500 money

1503 tubo de pokebloks

1511-1553 bayas

1558 el asensor

1562 worl map
1598 opciones

1565 credit

1592 pokedex
1595 opciones de pokedex

1619 tiles principales

1635 pantalla de inicio

1636 press start

1637 Pokemon 256 colores y black/white
1638 rubi version 256 colores y black/white

1646 todos los derechos....

1650 casa de la intro


Créditos a DAGERMN por la información.

Direcciones UNLz GBA Fire Red USA

Pokémon Fire Red USA:
Tiles de cuevas: 79
Medallas(Kanto): 148
Creditos iniciales(Nintendo Game Freak 2004):210
Logo(El signo de la intro):211
Tiles principales: 1990
Charizard de la intro: 2011
Créditos de presentación: 2013
Titulo: 2009

3 al 43 - Todo sobre Battle backround
185 al 187 - Cuadros en el mapa
188 - Mini cabeza del protagonista Hombre en el mapa
189 - Mini cabeza de la protagonista Mujer en el mapa
207 = Créditos
211 - Titulo "GAME FREAK" apretar + hasta que se aclare la imagen
212 - Logo "GAME FREAK"
213 - Estrella de la 2º intro
214 - Estrellas de la 2º intro
216 - Present, apretar + hasta que se aclare la imagen
225 al 238 - Todo de Gengar y Nidoran de la 3º Intro
242 al 249 - Pokémones de los Creditos
252 - Protagonista Hombre corriendo en los creditos
253 - Portagonista Mujer corriendo en los creditos
254 - Gary en los creditos
258 - Una imagen de pokémones

337 = botones A, L-R
340 = personajes 80x80
574 = Cuadros de pelea exp (tuyo)
576 = Cuadros de pelea exp
669=Pokémons
1500=Entrenadores
1694 = Mochila
1703= Disco de MT 1721=Pokéballs
1733=Objetos
1968 = trainerd card
1974 = Todo del poke habilidad, atake
1985 = PC option close box
1990 = tile principal
2009= POKÉMON
2011 = sprite portada
2013 = gamefreak inc 2004 press start


Créditos a Acspower por la información.

Direcciones UNLz GBA Pokemon Emerald USA

Pokémon Emerald USA
Bayas = Desde (2125)0D9C414 hasta (2167)0DA1614
Bayas2 = Desde (2280)0DAF29C hasta (2322)0DB1BB0
Pokeballs = Desde (2211)0DAB1F0 hasta (2222)0DABBFC
Pokeballs2 = Desde (759)0C0173C hasta (770)0C021F0
Objetos = Desde (2223)0DABCA0 hasta (2279)0DAF1E4
Objetos2 = Desde (2323)0DB1C9C hasta (2468)0DBA08C
Personajes 64x64 = Desde (1850)0D51DC4 Hasta (1942)0D66154
Pokemons 64x64 = Desde (1019)0C2FA04 hasta (1795)0D44EF4
Background battles = Desde (1945)0D77D64 hasta (1975)0D7D58C
TextBox = Desde (926)0C1F1C0 hasta (930)0C1F8E4
Juez concurso pokemon = (907)0C1C3DC
Simbolos (¡!¿? etc) = (879)0C192A4
Emoticonos concurso pokemon = (878)0C19188
Escenario concurso pokemon = (877)0C1852C
Textos varios concurso pokemon = (876)0C17AB0
Medallas de gimnasios = (144)0573094
Simbolos Frente batalla = (145)05732DC
Maletin del profesor pokemon = (243)05B3A08
Mano (cuando escoges pokemon inicial) = (244)05B44B0
Bici = (304)05F7158
Latios = (305)05F75A4
Latias = (306)05F7A68
Medallas (Premios) varias = (330)06267B4
Medidor de grito pokemon = (2612)0DE9DB4
Textos varios = (2603)0DE47E8
Pase del frente batalla = (2596)0DE0964
Texto "Pulsa start" = (2594)0DE0460
Textos varios2 = (2566)0DD4A38
Textos varios3 = 2560)0DD3188
Medidor de "carisma, dureza etc" = (2554)0DCD148
Textos varios4 = (2553)0DCCD60
Botones pokedex1 = (2547)0DCBC24
Texto pokedex2 = (2546)0DCBA04
Textos varios5 = (2544)0DC9358
Textos varios6 = Desde (2530)0DC8148 hasta (2541)0DC90AC
Medidor2 de "carisma, dureza etc" = (2525)0DC6604
Textos varios7 = (2524)0DC41E8
Botones pokedex3 = (2519)0DC337C
Texto pokedex4 = (2508)0DC19A8
Simbolos varios = (2507)0DC1408
Cuadro texto "Fichas" = (2480)0DBE4C8
Fondos "nubes, arboles" = (2472)0DBA624
Rayquaza = (2200)0DA9968 [PALETA - 1243]
Kyogre = (2199)0DA9720 [PALETA - 1242]
Groudon = (2197 y 2198)0DA8F44 [PALETA - 1241]
Fondo "nubes" = (2184)0DA6A28
Groudon2 = (2168)0DA1EE4
Mano de Groudon = (2169)0DA2B94
Texto "tipo de pokochos": "Dulce, acido etc" = (2120)0D9BBE4
Pokecubo (contenedor de pokochos) = (2117)0D9B580
Texto "masa" de pokochos = (2115)0D9B344
Otra mochila (?) = (2108)0D9AA74
Textos varios8 = (2095)0D97CF0
Textos "tipos de pokemon: Lucha, volador etc" = (2092)0D970EC
Textos "estados alterados" = (2091)0D96ECC
Fondo "olas" = (2081)0D949F4
Tile "pajaro blanco" = (2080)0D94594
Maquina de pokochos = (2065)0D91CF4
Texto "aplauso" de concurso pokemon = (2052)0D8EA24
Texto "turno sig" de concurso pokemon = (2051)0D8E878
Fondo hielo = (2049)0D8DBF0
Rayquaza2 = (2039)0D8B9B0
Fondo "nubes2" = (2034)0D8A990
Fondo "burbujas" = (2031)0D89EB8
Flygon de la intro = (2024)0D86F68
Manectric de la intro = (2023)0D8648C
Torchic de la intro = (2022)0D8606C
Otro pokemon de la intro (no recuerdo nombre xD) = (2021)0D85E8C
Fondo "nubes3" = (2008)0D82604
Fondo "rocas/montaña" = (2004)0D8160C
Fondo "rocas/montaña2" = (2002)0D80E98
Fondo "agua" = (2000)0D80800
Fondo "agua2" = (1998)0D80050
Fondo "hierbas" = (1992)0D7E9C0
Fondo "hierbas2" = (1990)0D7E27C


Créditos a Davoker por la información

Os lo explicaré paso a paso:

1.- Buscar nuestro Worldmap en UNLz GBA:
Lo que hay que hacer es ir a la dirección en UNLz de nuestro Worldmap. Una vez lleguemos a ella, veréis un gráfico un tanto extraño. Algo como esto.



Aunque no lo parezca ese es el Worldmap. Lo que pasa es que debemos editarlo en un formato especial. Si editásemos esa extraña imagen como un sprite cualquiera y lo volviéramos a insertar en UNLz, habría problemas. Lo que hay que hacer es editarlo en formato .RAW. Para ello usaremos un programa como Cyclone o NTME. Yo os recomiendo encarecidamente este último. Lo que hay que hacer para exportarlo en RAW es dar en el botón Raw Dump. Entonces lo guardamos.

2.- Encontrar el tileset de nuestro mapa:
Todo gráfico en formato RAW requiere un tileset para ser editado. Para encontrar el tileset de nuestro mapa hay que jugar a nuestro ROM con el Visual Boy Advance. Tenemos que jugar hasta que podamos acceder al Worldmap, es decir, hasta llegar a la habitación del protagonista. Entonces, miramos el worldmap. Cuando lo tengamos en pantalla damos en Tools>Tile Viewer, y nos saldrá una ventana con varias opciones que hay que marcar de la siguiente manera:



Al picar así las opciones veremos el tileset del worldmap. Damos en Save y lo guardamos donde queramos. Ahora hay que editar en paint el tileset. Lo único que hay que hacer es recortar la imagen verticalmente todo lo que podamos de manera que se ajuste al tileset. A mí me quedó así:

Después



Después



3.- Hacer nuestro Worldmap:
Una vez conseguido el tileset hay que abrir NTME. Antes de nada, damos en Edit>Mode>8bpp. Ahora damos en Load Tileset y seleccionamos nuestro tileset. El tileset aparecerá en el cuadro de arriba. Entonces damos en Open TileMap y seleccionamos nuestro Worldmap en formato RAW. Ahora se verá el Worldmap de nuestro juego. Ahora es como hacer un mapa en Advance Map. Con los bloques de arriba construimos nuestro Worldmap en el cuadro de abajo. Esto puede llevaros un buen rato. Yo he hecho este Worldmap de prueba:



Una vez acabado el Worldmap, damos en File>Save Tile Map y lo guardamos donde queramos. Ahora volvemos a UNLz GBA, en el casillero de nuestro mapa damos en File>Load RAW y seleccionamos nuestro mapa. Cuando se haya cargado, damos en Write to ROM y marcamos las dos primeras opciones. Damos en Ok y probamos el ROM. A mí me ha quedado así:




Dudas de interés general

-El Advance Map puede ser detectado por los antivirus como un virus debido a uno de los archivos .INI que trae consigo. No es una amenaza.
  #2  
30/07/2013
Predeterminado Respuesta: Escuela de ROM Hacking GBA general de Ramihack
No lo puedo descargar porque el AVAST me dice que el Advanced Map tiene un virus
Gracias: JosephS29
  #3  
30/07/2013
Predeterminado Respuesta: Escuela de ROM Hacking GBA general de Ramihack
No le hagas caso. A mí el Norton me lo dice siempre pero no es una amenaza. Uno de los archivos .INI confunde a los antivirus.
Gracias: JosephS29
¿Quieres aprender ROM Hacking GBA desde cero?
¿Eres nuevo y no sabes cómo empezar?
Yo puedo enseñarte. Haz clic aquí:
http://whackahack.com/foro/t-22434/escuela-rom-hacking-gba-general-ramihack
  #4  
30/07/2013
Predeterminado Respuesta: Escuela de ROM Hacking GBA general de Ramihack
Pero no me deja, menos mal que tenía un pack de hack rom de gba y ahora utilizo ese.
Y si me falta algo ya lo descargare gracias, me ha servido.

Si muevo las casas de sitio y posición pasara algo ?
Gracias: Ramihack y JosephS29
  #5  
30/07/2013
Predeterminado Re: Escuela de ROM Hacking GBA general de Ramihack
Yeee yo me bajado tu pack, y todo guay, quiero apuntarme a la escuela de GBC pero no se sabe nada, espero que hayan noticias pronto, si al final de esta semana no la abren o no hay noticias, me pongo con esta y a darle caña!!!!!!!
Gracias: JosephS29
  #6  
02/08/2013
Predeterminado Respuesta: Escuela de ROM Hacking GBA general de Ramihack
Duda/Advanced Intro Ed:
Como hago para Saber el Banco y Nº de mapa, Por que cuando pongo los datos que me da el Advanced Map y lo Pongo en el Advanced Intro Ed Empiezo en Otro Mapa que NAda que Ver, Alguna Sugerencia.
  #7  
02/08/2013
Predeterminado Respuesta: Escuela de ROM Hacking GBA general de Ramihack
Vete al Advance Map y busca en la lista de mapas el mapa en el que quieres aparecer. Habrá dos números al lado del nombre. El primero es el banco y el segundo el número de mapa.
¿Quieres aprender ROM Hacking GBA desde cero?
¿Eres nuevo y no sabes cómo empezar?
Yo puedo enseñarte. Haz clic aquí:
http://whackahack.com/foro/t-22434/escuela-rom-hacking-gba-general-ramihack
  #8  
06/08/2013
Predeterminado Re: Escuela de ROM Hacking GBA general de Ramihack
¿En la 1a lección de Mapping se pueden editar tiles?
  #9  
06/08/2013
Predeterminado Respuesta: Escuela de ROM Hacking GBA general de Ramihack
En principio no, pero eso a tu decisión. Los tiles los aprenderemos a insertar en la próxima lección.
Gracias: Pacodelopio
¿Quieres aprender ROM Hacking GBA desde cero?
¿Eres nuevo y no sabes cómo empezar?
Yo puedo enseñarte. Haz clic aquí:
http://whackahack.com/foro/t-22434/escuela-rom-hacking-gba-general-ramihack
  #10  
07/08/2013
Predeterminado Re: Escuela de ROM Hacking GBA general de Ramihack
Donde pone lecciones a petición de usuarios, me gustaría una lección de como cambiar el fondo de las batallas, o por ejemplo tambien el fondo de cuando en la intro el Prof. te habla y te dice como es el mundo y tal.. No se si me explico muy bien... Cambiar fondos En Battle Trainer y Wild Battle y en sitios como la Intro, Se agradecería mucho y creo que ha mucha gente le gustaría
Gracias: Braxpok y currokiko10
 

Herramientas
Desplegado

Permisos para publicar mensajes
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los BB code están Activado
Los Emoticones están Activado
El código [IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Desactivado



Extra
Estilo clásico
La franja horaria es GMT +1. Ahora son las 21:10.