tutorial crear hack Rom de pokémon de GBA [parte 1]

ola aqui un tutorial para crear hack roms de pokémon (solo GAME BOY ADVANCE)
bueno empecemos:


tradiccion:
Edición de Textos con editor Hexadecimal.

Cualquier hack que se precie debe tener textos editados por el autor. Sin estos textos, aunque tenga los mejores Pokémon nuevos, los mejores mapas, los mejores Scripts..., seguiría siendo el mismo juego de siempre hecho por un aficionado. De hecho, hay hacks que solo tienen editado textos, como uno de Pokémon Amarillo, el hack que jugué, que tenía editado textos y un poquito los sprites de Ash y Gary, que tenían una cierta parte de su cuerpo más desarrollada de lo normal. Este hack constaba de una edición de textos obscenos a lo bestia, donde el sexo, las drogas y la violencia estaban presentes por todas partes (Lástima que solo era un BETA). Era imposible pasar dos minutos sin estar cinco riéndose. ¿El secreto de este hack? ¿Cómo podía un hack tan simple ser tan bueno? El objetivo de un hack, como cualquier juego, es entretener. La mejor manera de conseguirlo es mediante unos textos graciosos o intrigantes. Un buen hacker de roms debe ser también un buen escritor... o contar con uno a mano.

He aquí una pequeña guía para editar textos con un editor hexadecimal: Thingy 32. Si usas otro, apañatelas para encontrar lo que voy explicando. Además, esto también te sirve para editar otras cosas manualmente.
OPENING THAT... THINGY (Abriendo esa... cosita)

Al abrir el Programa, te pedirá que abras el ROM. Como el programa es anterior al archivo GBA, para que te aparezca en el explorador debes darle a “todos los archivos”. Luego te pedirá que abras dos archivos tbl, que son las tablas. Te pide dos porque puedes cambiar de una a otra en opciones/cambiar tabla.
Buscar el texto

En thingy 32, pulsa B o la palabra B=BUSCAR para abrir la búsqueda. Es importante que el texto que vas a buscar debe estar DESPUÉS de la página donde te encuentras, o te devolverá un error. Por eso, recomiendo que normalmente hagas la búsqueda desde el principio del ROM. Cuando escribas el texto a buscar, ten en cuenta que debe coincidir EXACTAMENTE con el texto real (si la tabla es correcta), mayúsculas, puntuación, ¡todo! Además, si quieres buscar un valor hexadecimal concreto, puedes pulsar @ o ` `.
Cambiar el texto

Una vez encontrado el texto, pulsa espacio al principio del mismo para comenzar a seleccionar (ha de aparecer a la izquierda la palabra “seleccionando”). Luego pulsa al final del texto para acabar la selección, y se abrirá una ventana donde puedes escribir. Pulsa @ o ` ` para insertar un valor hexadecimal concreto.

Además debes tener en cuenta que a la hora de escribir textos hay ciertos valores hexa que son necesarios, y que deberías añadir a la tabla (véase texto maestro y tablas):

o |FD| es utilizado para comandos, como el nombre del jugador, del rival, del team enemigo, etc.

o |FE| es utilizado para saltos de línea directos

o |FA| es utilizado para saltos de línea indirectos (pulsando A)

o |FB| es utilizado para saltos de párrafo (pulsando A)

o |FF| es utilizado para final de texto (pulsando A)
Saltar a una posición

Pulsa S o el texto S=SALTAR para abrir la ventana de saltar. Dale a Dirección manual para escribir manualmente la posición. Recuerda que si es hexadecimal debes incluír el prefijo &H (Ejemplo: &H6b1bb1)
Repuntear un texto

Lo que siempre anda quemando a los que intentan hacer un hack en español desde un ROM en inglés es que se las tienen que ingeniar para poner algo en BAG o en BOY/GIRL, puesto que MOCHILA, CHICO y CHICA, respectivamente, son palabras demasiado largas para ocupar ese espacio. La solución: repuntear el texto. Esto es muy sencillo, simplemente es conocer un poco lo que es el proceso y entender el método que utiliza el juego. Seguiremos estos sencillos pasos:

1. ¡Para de temblar que tampoco vas a hacer tanta cosa! ¡Pareces un flan!

2. Busca el texto que quieras. Por ejemplo, la palabra BAG. Una vez encontrado, anota su offset, que aparecerá al lado de la palabra Posición en la esquina superior izquierda. Imaginemos que su posición es $ABCDEF (no es esta, ¿eh? ¡Es solo un ejemplo!)

3. Busca espacio libre en el ROM. Teniendo en cuenta que el último byte está en $FFFFFF y que a partir de $6b0000 ya hay espacio libre, ¡espero que la palabra te quepa! Anota la posición donde vas a poner la palabra y escribela. Imaginemos que escribes la palabra MOCHILA en la posición $6b0132, por ejemplo.

4. Ve al principio del ROM porque vamos a buscar el puntero de BAG

5. Ahora viene lo que se le atasca a todo el mundo, darle la vuelta al offset. Se trata de dividir el offset en tres parejas e invertir el orden de las mismas. Observa este ejemplo:

$ABCDEF > AB CD EF > EF CD AB

Por lo tanto:

$6b0132 > 32 01 6b; $123456 > 56 34 12; $667788 > 88 77 66

Dale la vuelta a los offsets donde se encuentran BAG y MOCHILA y anótalo

(ej: EF CD AB, 32 01 6b)

6. Ahora busca el puntero de BAG. Esto es, un sitio que me indique el offset donde está escrito, y en ese sitio, si BAG está en $ABCDEF, estará escrito |EF||CD||AB| (valores hexadecimales, recuerda que en thingy 32 es con @ o ` `), así que este es el texto que hemos de buscar.

7. En donde esté escrito |EF||CD||AB| escribe el puntero de MOCHILA |32||01||6b| (valores hexadecimales)

8. Comprueba el resultado. La casualidad existe, así que puede que el texto que modificaste no fuese un puntero sino cualquier otra cosa. En este caso ve más abajo y dale a R=REBUSCAR
Texto Maestro y TABLAS

Por cortesía de Kyofu Kawa, Elitemap viene con un programa llamado FontEd. Esta herramienta puede usarse para cambiar la apariencia de las letras pero también para crear símbolos o dibujos. El juego cuenta con toda la simbología japonesa, pero no vas a hacer un juego usando el alfabeto latino y el japonés al mismo tiempo, ¿verdad? Pues puedes coger esas letras y cambiarlas por símbolos: smilies, notas musicales, iconos de pokémons, piensa las posibilidades. Entonces, busca una letra japonesa o un símbolo que no te guste y dibuja lo que quieras. Guardalo y anota el número (glyph # _ _ _) Es un número decimal, así que necesitaremos su equivalencia hexadecimal. Abre la calculadora de windows y dale a VER/CIENTÍFICA. Aparecerán más cosas, entre ellas un menú que pone HEX, DEC, OCT y BIN. Dale a la opción DEC y escribe el número de tu símbolo, luego dale a HEX para obtener la equivalencia.

(Por ejemplo, el símbolo del PokéPavo, es decir, la moneda del mundo Pokémon, es el número 183, y su equivalencia es B7) El resultado sería lo que tienes que añadir a la tabla.
Añadir entradas a la tabla

Abre el bloq de notas de Windows. Dale a ARCHIVO/ABRIR y abre la tabla, en tipo de archivo: todos los archivos. Si no dispones de una tabla tienes 3 opciones:

1. Buscarla
2. Crearla tu mismo tirandote cinco días peinando el FontEd
3. Bajarte la tabla de Baro, que no solo escribe este ladrillo que lees sino que comparte su tabla contigo quitándole las cositas que agregué con fonted. Cuenta con los símbolos de cambios de línea, símbolos de macho / hembra, comillas, etc. ¡BÁJALA! (en "Descargas"

Una vez conseguida y abierta la tabla, añade ordenadamente el código hexadecimal del símbolo. Por ejemplo, el B7 del dinero habría que añadirlo entre el B6 y el B8 o los más próximos (ten en cuenta que los números hexadecimales siguen este orden: 0123456789ABCDEF) Sigue el modelo de las otras entradas:

B7=€ Sin espacios. <código>=<equivalencia>

Hala, a hacer cochinadas con el texto. Buena suerte

cambiar graficos:

Editar sprites y otros gráficos

Podemos diferenciar entre 3 tipos de gráficos:16 colores no-comprimido, 16 colores comprimido y los de 256 colores, que casi siempre, por no decir siempre, están comprimidos.

Los gráficos del ROM tienen una paleta que va ligada a la imagen. Dicha paleta tiene uno índices preestablecidos, por lo que para editar imágenes debemos utilizar un programa de diseño gráfico que maneje paletas y ya puestos que acepte archivos de extensión PAL. Hay muchos, yo recomendaría el Photo Shop o el Paint shop Pro, pero para conseguirlo (legalmente) hay que pagar.

Decir que el Paint que viene gratuito con Windows no nos sirve para mucho: nos cambiaría los colores de la paleta. Además personalmente recomiendo el emulador Visual boy advance, puesto que necesitamos alguna de sus opciones. Recordad que las imágenes son combinación de colores, así que cuanto más ajustados sean los colores que usemos, mejor será el resultado.
Sustituir un gráfico de 256 colores

Los gráficos de 256 colores suelen estar comprimidos. Por lo tanto, necesitaremos un programa para gráficos compresos, como UNLZ-GBA.

Una vez encontrado el gráfico en el UNLZ-GBA (modo de 256 colores!), tenemos que buscarlo en el juego. Pongamos por ejemplo que queremos editar el logotipo de la versión de Pokémon Ruby.

1. Seguiremos estes pasos. En VBA, vamos a TOOLS / LOGGING y activamos SWI.
2. Iniciamos el juego y vamos a donde está el logo, que es en la pantalla de inicio.
3. Abrimos el OAM VIEWER desde TOOLS y exportamos los dos OAM que corresponden al logo. Luego los juntamos en una sola imagen para que quede como la que vemos en el UNLZ-GBA. Para algunos gráficos (como el logotipo de Pokémon) necesitamos el TILE VIEWER de TOOLS
4. Abrimos el PALLETE VIEWER de TOOLS y exportamos la paleta que queremos. En este caso tanto la de Sprites como la de Background son prácticamente iguales, así que podemos exportar cualquiera de las dos teniendo en cuenta que los colores de más abajo pueden ser los de la otra. Entonces le damos a Save OBJ (paleta Sprites) o Save BG (background) y guardaremos un archivo PAL de paleta.
5. Abrimos el programa de dibujo, y en él abrimos la combinación de los OAM o el TILE según el caso. Entonces aplicamos la PAL a esa imagen. En Paint Shop Pro es en Colors/Load pallete (shift+O). Si estás usando otro programa, usa la ayuda si tienes problemas (que para eso está)
6. Ahora deberíamos tener una imagen igual a la que se muestra en UNL-GBA pero con los colores que se muestran en el juego. Además esa paleta tiene índices, es decir, cada color de la paleta está numerado. Ahora es el turno de tu vena artística para dibujar. Ten en cuenta que puede serte mucho más fácil si desmontas los OAM y los vuelves a montar luego.
7. Una vez creado tu gráfico, ve al UNLZGBA y guardalo (Write to ROM) donde corresponda. Activa las casillas Export Image y Auto abort if... (Consulta el apartado de UNLZ-GBA para solucionar problemas)

Sustituir un gráfico comprimido de 16 colores

16 colores comprimido es la característica más presente en las imágenes de Pokémon de GBA. Esto es debido a que es la usada para entrenadores y Pokémon. Normalmente estas suelen tener una paleta ligada que se muestra en UNLZ-GBA, pero a veces esto no es así. Cuando sucede, es muy fácil cambiar, además, la paleta. Pongamos por caso que queremos editar a CASTFORM, que en mi ROM es el gráfico número 1178 (este número varía en cada ROM, porque UNLGBA busca archivos comprimidos y puede saltarse alguno)

1. Seguiremos estes pasos: Exportamos la imagen de Castform de UNLZGBA. Observamos que en UNLZ-GBA no tiene su paleta ligada porque es un gráfico no-entero (cuando se carga solo se carga una parte de él)
2. Necesitamos obtener la paleta de Castform. Para ello EXPORTAMOS una imagen del Pokepic y al mirar su paleta con el programa de dibujo hacemos una captura de la pantalla (no recomiendo usar este programa para guardar cosas en el ROM, puede fastidiarte si utilizas parches ips para distribuír tu ROM), o con el PALLETE VIEWER en TOOLS de Visual Boy Advance hacemos una captura del apartado donde estén los colores que buscamos cuando aparezca CASTFORM. En este caso recomiendo la primera opción, porque es más rápida, pero si quieres por ejemplo editar los tiles del mapa recomiendo la segunda.
3. Traspasamos la paleta de 16 colores a la imagen del unlzgba. Para ello, en Paint Shop Pro le damos a shift+P o colors/edit pallete y hacemos doble clic en cada color, luego movemos el cursor hacia el color de la paleta que queremos que ocupa el mismo lugar (si en la 1ª le dimos al primero, en la 2ª se damos también al primero) para copiar ese color, y hacemos así con todos los colores (consulta la ayuda si utilizas otro programa). Como esta imagen carga diferentes paletas, tendrás que repetir este paso varias veces.
4. Ahora debemos tener una imagen con los colores de una de sus partes. Podemos editar ESA parte. Repite el paso 3 para poder editar las demás.
5. Una vez acabado, vamos al UNLZGBA y la guardamos (write to ROM) donde corresponda. Consulta el apartado de UNLZGBA si tienes problemas

Sustituir un gráfico no-comprimido de 16 colores

Estos son quizás los gráficos más asequibles a la hora de editarlos, pero si queremos un buen resultado se convertirán en los más cansinos, puesto que tendremos que copiar una paleta. Este tipo de gráficos son los que se utilizan para los sprites pequeñitos (los del campo, cuando te puedes mover) y para otras cosas como las medallas, la animación de las flores o las puertas en el mapa, etc. Para estos solemos utilizar TLP o tilemolester. Recomiendo este último y es el que voy a usar yo para explicaros. ¡ADEMÁS CUANDO LO USES ACUERDATE DE USAR LAS OPCIONES ADD TO BOOKMARCKS Y ADD TO PALLETES!

1. Imaginemos que queremos editar al primer Líder de gimnasio. Seguiremos estes pasos. Buscamos el gráfico. Los de sprites están todos juntos, pero has de tener en cuenta que los bytes no están alineados. Una vez encontrado algo que sospechas que es lo que buscas, dale a Byte back/forward (el + y el – con los dos puntitos que están a la derecha de la barra de herramientas) hasta que creas que se ve bien definido. Luego busca una combinación de bloques. Para ello, ve a View/Block size/custom... y escribe las columnas o filas que deseas. Para ayudarte, te comento que la mayoría de estos sprites tienen 2 columnas y 4 filas.
2. Dale a View/Block grid y luego usa los botones byte/tile/row/page back/forward para encuadrar bien los sprites.
3. ¡Obten la paleta! Para ello puedes hacer una captura del pallete viewer de tools en VBA cuando aparezca la imagen, o por ejemplo una captura del Spread. (Por cierto, podrías usar este programa para editar esto, pero Tilemolester es mucho más fiel y dará un mejor resultado. Es tu decisión) A partir de esa captura puedes obtener el código de RGB de cada color (tiene que aparecer por algún lado, hasta PAINT creo que lo tiene). (Por ejemplo, casi todas usan un blanco que es R248 G248 B248, y un negro que es R0 G0 B0) Y escribimos ese cogido para cada color. Para ello haz doble clic en el color de la paleta de abajo y ve a la pestaña RGB. Recuerda que siempre que guardas una paleta en tilemolester (add to palletes) cualquier cambio que hagas se guardará automáticamente, así que no te toree, dale a las flechas de junto la paleta para cambiar de ídem.
4. Editalo y dale a guardar.

Editar una paleta

Necestas saber la dirección de la paleta, y una imagen con paleta de índices con los colores que necesitas. Ve a unlzgba, importa la imagen y dale a "write to ROM". Es importante que solo tengas activada la opción export pallete y no la de export image ( a no ser que tambien vayas a exportar una imagen.) Además debes escribir en la casilla pallete offset la dirección de la paleta que quieres sustituír
UNLZ-GBA para principiantes.

Potente herramienta para gráficos comprimidos de 16 y 256 colores. Usa los botones NEXT y PREVIOUS para moverte atrás o adelante en los gráficos, o en las casillas con números escribe el número de gráfico al lago de GOTO y pulsa GOTO. Lo propio añadiendo PAL para las paletas. + y – alinean los tiles de la imagen. Save as... exporta la imagen e import la carga al programa (no al juego) RawDump es algo que solo complica las cosas si no sabes manejarlo, y write to ROM guarda la imagen al juego. Dentro de esta opción hay 4 opciones, de las que nos interesan EXPORT IMAGE, que guarda la imagen; EXPORT PALLETE, que guarda la paleta de la imagen; AUTO ABORT..., opción de seguridad para no estropear el ROM. Además hay dos casilleros para introducir manualmente las direcciones de la imagen y la paleta.

¿Qué hacer si la imagen es muy grande?

Debes tener en cuenta que los ROMS no son infinitos. Tienen un tamaño limitado y hay que respetarlo. Aunque tienen espacio libre donde puedes intentar exportar y luego repuntear la imagen (no lo he probado todavía).

1. Si tu imagen es muy grande puedes hacer lo siguiente: Probar en un ROM aparte si la imagen cabe en su sitio sin estropear el gráfico siguiente y funcionan ambos en el juego quitando el Auto abort. Si es así debería hacer lo mismo en el ROM de tu hack, aunque recomiendo hacer copias de seguridad “a lo loco”.
2. Reducir el peso de la imagen. Los CAMBIOS DE COLOR aumentan su peso y los COLORES UNIFORMES son más ligeros. Los bytes se comprimen horizontalmente, así que ten en cuenta que los cambios de color se tienen que hacer menos horizontalmente.

poner scripts:
Comandos obligatorios y ejemplos más o menos sencillos.

tutorial crear hack Rom de pokémon de GBA [parte 1]

Cualquier videojuego actual es como una película interactiva, y por lo tanto tiene un guión. Pero al referirnos a la interactividad, el guión de cada evento cobra más importancia, porque dependerá de las demás acciones, si ya se han ejecutado para, sobretodo, conseguir coherencia en la historia. Además muchas de esas acciones deberán ser ejecutadas una sola vez, por lo que la cosa se complica. En esta guía se muestra solamente un punto de partida para crear scripts más o menos decentes, puesto que es una materia muy difícil de aprender y muy difícil de enseñar. Así, mostraré scripts desarrollados de las cosas más solicitadas por la gente, y daré nociones básicas para que puedas crear scripts buenos. Ten en cuenta que esto se trata de lógica, de leer las opciones que tienes y encadenarlas coherentemente. Ah, por cierto: estaré usando Rubikon Scripted y Elitemap, de Kyofu Kawa. Ambos están incluidos en Elitemap 3.6.
Empezamos a crear un script

La creación de scripts se basa en consultar fuentes de información. Con Elitemap 3.6, estas son las fuentes de información que podemos aplicar a los guiones:

* Los archivos *.rbh: std, stditems, stdpoke. Son archivos que pueden compilarse a la par que nuestro guión (El archivo std suele incluirse por defecto). Se basan en el comando de rubikon #define, que le da un nombre específico a ciertos valores. Abrelos con el bloq de notas para echarle un vistazo, y encontrarás cosas como que hay flags (banderas) para habilitar el POKéNAV o la POKéDEX. Además stditems y stdpoke contienen una lista de los objetos y los Pokémon, que puedes aplicar en otras cosas. Inclúyelos en tu script con el comando #include [nombre del arhivo (que esté en la misma carpeta)]
* Algunos archivos rbc que ya vienen incluidos, como es el richboy.rbc. Pueden servirte de ejemplo.
* El más importante: commands.html. Aquí tienes la lista de casi todos los comandos que hay en rubikon (queda, por ejemplo, killscript, que es absurdo, como deducirán los que sepan inglés) además de su equivalente hexadecimal (rubikon lo que hace es transformar el texto que tu escribes a hexadecimal). Consúltalo siempre que vayas a hacer un script, para ver ejemplos y demás. No está actualizado del todo, así que hay ejemplos que quizás no sean correctos, etc. Pero es la base más importante a la hora de escribir guiones, no lo olvides
* ROM. Sí, comprueba los eventos del rom con EM para buscar cómo lo hicieron los de Nintendo.

Bien. Ahora es la hora de empezar a escribir. Actúa con lógica y piensa siempre qué estás haciendo, y cuando acabes un guión leelo e intenta seguirlo. Hay algunos comandos que no están bien programados, y por ello a veces debes escribir #raw [hexa del comando] si ves que aunque coincide con el ejemplo de commands.html el programa te da error (por ejemplo, una vez no me funcionaba el comando waitfanfare y escribí #raw 32. Aquí va lo básico:

* ' - incluye un apóstrofe antes de cualquier cosa que no quieras que sea compilada, como es una nota.
* #org 0x[6dígitos-dirección] - indica donde empiezas a escribir ¡No te olvides de incluirlo o te empezará a escribir en el principio del rom, con lo cual te lo destrozará!
* #auntobank on –no es necesario incluirlo puesto que el archivo std.rbh se incluye por defecto y este incluye este comando, pero por motivos de seguridad, puedes añadirlo al principio de tu script si usas Scripted.
* nop – ¿absolutamente nada? ¡Un nop me ha salvado de estar toda mi vida peleando con un script! Equivale a escribir #raw 00. Cumplen similar función #raw 01 o #raw C6.
* End – acaba el script
* Goto, call, jump – saltan a otra posición

Además, mientras compilas te darás cuentas que necesitarás usar flags o variables, básicamente las primeras. Las flags son valores asignados a cada evento que puede estar activada (1) o desactivada (0). Cualquier otro valor inhabilitará el evento. Actívalas o desactívalas con clearflag o setflag (yo necesité escribir a continuación #raw 0x01 para un setflag, ¡aviso!) El estado de un flag no afecta al evento, pero sí puedes utilizarlo con checkflag para mirar este valor y hacer cosas dependiendo si está activada o no. Además puedes cambiar el valor por defecto del evento o el número del flag en ELITEMAP. Observa este ejemplo:

#org 0x[offset script principal] jingle ‘básicamente esto no hace ná, pero queda bonito que haya algo antes de todo. checkflag 0x[flag del evento] ‘comprobar el estado del flag. if 0x1 call 0x[Sansacabó] ‘si está activada, ir a Sansacabó goto 0x[offset núcleo] ‘si no, ir al núcleo end


#org 0x[offset núcleo] release ‘muchas veces el personaje se bloquea, así sigue caminando ‘[núcleo del evento, incluye aquí la acción que quieras que se ejecute] setflag 0x[flag del evento] ‘activa la flag #raw 0x1 ‘lo que decía antes] end ‘se acabó #org 0x[Sansacabó] release end


Ten en cuenta que las flags tienen cuatro dígitos y las direcciones (offsets), seis.

Entonces, este evento lo que hace es que la primera vez que se ejecute el script, ocurra lo que escribas en núcleo, y al activarse la bandera, cuando se vuelva a ejecutar, como el evento comprueba el estado de la bandera, las siguientes veces no ocurrirá nada.
Principales eventos que puedes compilar, con explicación.
MOSTRAR UN TEXTO, preguntar sí o no e ir a una dirección diferente en cada caso.


#org 0x[offset script principal] message 0x[offset texto] ‘se puede escribir con el commando “=”, pero conviene mucho más hacerlo manualmente con editor hexadecimal boxset BOXSET_YESNO ‘o 0x05, ambas formas están aceptadas. Hace que se pregunte SI/NO if B_NO goto 0x[offset script no] ‘si se responde que no, ir al script de "no" goto 0x[offset script sí] ‘si se responde que sí, ir al script sí. Puedes escribirlo aquí directamente, pero personalmente prefiero mandarlo a otro script.


BATALLA CON UN Pokémon. ¡Vamos a cazar un jirachi!

#org 0x[offset script principal] #include stdpoke.rbh ‘si no lo includes, en vez de PKMN_JIRACHI debes escribir 409, y personalmente no estoy muy seguro de esto. También puedes escribir antes “#define PKMN_JIRACHI 409”, al fin y al cabo esto es lo que necesitamos del stdpoke.rbh. checkflag 0x[FLAG] if 0x1 goto 0x[offset ya activada] cry PKMN_JIRACHI message 0x[offset texto] ‘Ej: JIRACHI: ¡raaaaaaashi! boxset 0x6 ‘cerrarse la ventana al pulsar A wildbattle PKMN_JIRACHI 70 3 End #org 0x[offset ya activada] release ‘si ya ocurrió el evento solo release end


Como puedes comprobar, los guiones son complicados de explicar. Se aprende mucho más probándolo tú mismo, así que actua con sapiencia y paciencia... y todo lo que acabe en –encia y no te preocupes si no te sale.

hacer sprites:
Todo lo que debes saber para diseñar, dibujar e insertar nuevos sprites

Cuando estamos hackeando un juego de pokémon, lo primero que queremos hacer suele ser crear nuestras propias criaturas, bien pokémon o bien criaturas con otro nombre (me acuerdo de un hack llamado POWMON red/blue, de un tal señor mostaza). He aquí una guía básica para, a partir de las criaturas de nintendo, hacer criaturas propias. Esto no solo sirve para pokémon, sino para muchos otros juegos, puesto que el formato “64x64, 16 colores, comprimido” es muy común en la gameboy advance.

Yo utilizaré los siguientes recursos. Siempre se pueden utilizar recursos similares, por supuesto, cada uno se arregla mejor a su manera:

* Lápiz (o portaminas, que yo el lápiz no lo trago) y papel
* unLZ-GBA. Se puede usar RS-BALL, pero unLZ-GBA te pone las barreras necesarias para que no estropees tu rom, aparte de una buena edición de las paletas y navegación por imágenes y paletas
* Paint Shop Pro (se pueden usar otros programas. Nunca aconsejo paint, de hecho lo desaconsejo. Probad con otro programa que acepte limitaciones de paleta, imprescindible para la tarea, por ejemplo photofiltre, que creo que es gratuito –el psp no-, y muchas más, lo que pasa es que no los conozco)
* RS-BALL, para cuando desistamos de aligerar la imagen o creemos una paleta que no quepa encima de la otra. Lo usaremos como repunteador.

De la idea al comienzo de su realización

Todo parte de una idea sobre un papel. El diseño del pokémon no se hace delante de una pantalla sino delante de un papel. Imagina a tu criatura. Decide qué pokémon va a sustituir, qué características tiene, qué cualidades especiales tiene –como si crearas un personaje. Por ejemplo, jigglipuff canta nanas, pineco anda siempre explotando, charizard es un orgulloso, etc. Esto dará personalidad a tu criatura, haciéndola más verosimil. Recuerda las introducciones de Pokémon: “Los pokémon son nuestras mascotas, blah blah blah, aunque a veces los usemos para luchar”: las criaturas no son sólo armas.-, piensa en su tipo y en sus ataques. Ahora es el momento de dibujarlo. Haz varios bocetos si no te convencen, y no tengas escrúpulos en tachar una mala idea. Bueno, os voy a presentar uno de mis pokémon, que estoy creando hoy para enseñaros cómo lo hago: coccnuto, el pokémon cocotero, que sustituirá a sudowoodo:

hack

Una vez se tiene la idea en el papel, abrimos unlzgba y buscamos el pokémon que va a sustituir. Hacemos clic en “save as” y guardas la imagen donde quieras.

roms

El dibujo

Abrimos la imagen en nuestro programa de dibujo. Observamos la paleta (en psp, clic en los colores que usamos) y comprobamos que hay 16 colores y 240 negros. Solo usaremos los 16 primeros, que se pueden cambiar en psp tecleando shift+P fuera de esa ventana.

Observa tambien el tamaño del pokémon en la imagen, y tenlo en cuenta porque si el pokémon ocupa todo el recuadro la imagen será demasiado grande. Más adelante se explicará como solventar este problema.

Ahora limpia la imagen, es decir, quítale la figura dejando tan solo el color de fondo (1)

AHORA ESTAMOS TABAJANDO CON LA HERRAMIENTA PINCEL

RADIO-1 PÍXEL

COLOR-NEGRO

Pon mucho zoom a la imagen y traza las líneas. Recuerda trabajar con el dibujo delante, y no importa si te pasas de largo o de corto, luego repararemos esas líneas. Un consejo: dibuja primero la silueta del pokémon, dejando los detalles para luego. (2)



Repara la silueta, moviendo lo que consideres oportuno y coloreando con el color de fondo donde te hayas salido para hacer el trazo más fino. Vuelve a dibujar las partes que veas necesarias, y dibuja las partes del cuerpo que no le hayas dibujado (brazos, cabeza, pelo...) (3)

Dibuja los detalles, primero trazando y luego reparando y afinando el trazo. Si no estás muy seguro del resultado, quita el zoom y míralo a escala 1:1, que es donde tiene que quedar bien, y la 1:4, que es en la que suele jugar la mayoría de la gente (aunque sé de gente que juega a escala 1:1, bueno, los ópticos también tienen que comer) (4)

AHORA ESTAMOS TABAJANDO CON LA HERRAMIENTA RELLENO (CUBO)

COLOR-EL DEL POKEMON

Escoge los colores que vas a usar y aplica un color uniforme en las zonas del interior del pokémon. (5)

AHORA ESTAMOS TABAJANDO CON LA HERRAMIENTA PINCEL

RADIO-1 PÍXEL

COLOR-EL DEL POKEMON



Pinta los bordes del color más oscuro del mismo matiz en cada zona, procura que no se use mucho el negro excepto donde sea necesario. Esto quitará aspecto de dibujo animado a tu pokémon.

Ahora aplica brillos y sombras a tu pokémon. Imagínatelo en tres dimensiones, como si fuese de verdad o como si estuviese en el pokemon colosseum. Dibuja con colores oscuros en un borde en un área considerable y ve poco a poco hacia el color claro. Dibuja brillos sólo si es necesario, tienes que hacer que la piel del pokemon parezca lo mismo en el dibujo que “la realidad”, por ejemplo, un pokémon dorado no solo tiene que ser amarillo sino que tiene que tener brillos, sin embargo un pokémon peludo no tendría brillos, y a veces hasta hay que aplicar texturas a la piel, para que parezca envejecida, rocosa, etc. En resumen: usa las sombras y los brillos para dar realismo a la criatura. (6)

gba pokémon tutorial crear hack Rom de pokémon de GBA [parte 1] hack roms gba pokémon

Insertando en Unlz

Ya casi has acabado. Ahora cruza los dedos y abre unlzgba (quizás tengas que descruzar los dedos para eso, cada uno tiene el control que tiene del ratón), busca el pokemon y dale a import. Busca tu imagen y ábrela. Dale a Write To ROM y cerciónate de que la casilla “Auto abort if new data is bigger” está activada. Si no lo está, activala. Esto puede ocasionarte problemas pero es mejor no insertar la imagen que cargarte el rom, ¿verdad? Dale a OK y espera a ver que pasa.

tutorial crear hack Rom de pokémon de GBA [parte 1]

Yo he tenido suerte con coccnuto (soy el jefe!!!). ¿Y vosotros? Si os ha aparecido el mensaje “image is too big: size is XXX”, la imagen pesa demasiado y no la podéis insertar ahí. Consulta el apartado de imagen muy grande

Una cosa: podeis darle a “next pal” para ver cómo sería tu pokémon en versión brillante (shiny) –ooooh! Un coccnuto verde y rojo! De la misma manera, al exportar la imagen trasera puedes darle a “previous pal” para editar desde la paleta normal.
Por detrás, no te costará más

Mi consejo al trabajar en los gráficos traseros es hacer una “mesa de trabajo”. La mesa consiste en una imagen tamaño 200x64x16M en la que colocaremos 2 imágenes para trabajar con ellas. Yo suelo colocar la imagen delantera a la izquierda (para verla mientras dibujamos), la imagen trasera en el centro y luego, a la derecha, coloco los bordes de la imagen central: una vez coloco la imagen central en el centro (por eso la llamo central), cojo los bordes superior e inferior (desde que acaba la imagen y empieza el fondo vacío) y los aparto a la derecha, quedando la imagen central lista para trabajar y sabiendo que va a estar exacta para que ni sobren ni falten lineas mientras se juega.

NOTA: el borde superior no es necesario que esté limpio, así que puedes pintar en el y aparecerá en el juego, pero si haces una imagen muy grande no te cabrá.

hack

Ahora procedemos como con la imagen delantera para hacer el dibujo. Para la imagen trasera, quizás no te haga falta dibujarlo (yo no lo suelo hacer, la imagen de arriba es solo una muestra), pero ten en cuenta que nada que pueda mejorar el resultado está de más. Una vez acabes la imagen (esta será más fácil que la anterior), coloca los bordes que separaste de nuevo donde estaban. Copia la imagen y pégala en la que exportaste de unlzgba. Impórtala al programa y guarda al rom. Si la imagen es demasiado grande, siempre puedes aligerarla bajando la figura, acordandose de cortar por la línea inferior.

roms

Si la imagen es demasiado grande

Puede ocurrir que la imagen resulte más grande que la original, y que por lo tanto unlzgba no te deje introducirla y pokepic te alargue el rom (rs ball no sé que hace). Hay varias maneras de solucionar esto:

1. Redibujando la imagen, pero haciéndola más pequeña. Ten en cuenta el tamaño de la criatura con su tamaño real, y un pichu no puede ocupar todo el recuadro de 64x64
2. Aligerando la imagen. Si es una trasera, córtala x líneas y bájala el mismo número de líneas. Si es delantera, procura rellenar ahí donde veas puntos de colores diferentes separados. Un área grande de un sólo color es más ligera que un área con muchos puntos de diferentes colores. En teoría, creo que los puntos al comprimirse se cargan en horizontal, así que utiliza el mismo criterio para aligerarlo. También puedes esconder partes del cuerpo para que no se vean o se vean menos, haciendo una imagen más ligera. A veces incluso moviendo la figura unos píxeles arriba, abajo o a los lados se pueden conseguir buenos resultados.

Observa estas dos imágenes que hice para mi pokémon Gritespec. La de la izquierda era demasiado grande, la aligeré y el resultado fue la de la izquierda, que es la que aparece ahora en mi juego, pues cupo.

gbapokémon

Con el tiempo tendrás que recurrir menos a la aligeración de la imagen porque cogerás práctica de hacer las imágenes más pequeñas, y sólo te hará falta cuando el pokémon original sea muy pequeño (cleefa, igglibuff, chimecho, pichu, etc)

3. Repunteando la imagen (recomendado para impacientes que estén hartos de aligerar, o para bestias que hagan pichus de 5 metros) No lo he probado...:

Busca con tu editor hexadecimal un offset que esté libre (que aparezca el mismo valor muchas veces seguidas), y anota su posición. Ahora en unlzgba importa la imagen y guardala, pero en la ventana de opciones de guardar desactiva “auto abort” y escribe tu offset en “image offset” NOTA: los offsets en unlzgba tienen 4 pares, así que como el tuyo tendrá 3, escribe 00 antes de tu offset. Dale a ok

AHORA ABRE RS BALL y busca tu pokémon. En gestión de puntos de localización, escribe tu offset (3 pares de cifras) y aplica los cambios. Si todo salió bien, tu imagen debería aparecer en el lugar de la original.

comandos:
Explicación de toooodos los comandos

Tras hablar con la gran cantidad de gente que me agrega al msn porque no le da la gana de preguntar en foros y prefieren molestarme >_< (por favor no lo hagais, para las dudas están los foros), me he dado cuenta de que el mayor problema a la hora de hacer scripts es no comprender los comandos, porque no saben inglés y no entienden el commands.html que viene con elitemap.

Rubycode es el lenguage que utiliza Scripted y sus precursores Rubikon y Diamond Cutter. Entender este lenguaje es el primer paso para poder hacer un buen script, así que lo he traducido a español. Entre paréntesis está la traducción el nombre del comando, aunque tienes que usar el nombre en inglés.

Debajo del nombre aparece su formato. Luego su descripción y después un ejemplo.

Ahora que sabeis que significan, un consejo: leed los scripts como si fueran textos.

Por ejemplo:

#org 0x800000 faceplayer message 0x800100 boxset 0x06 end


“Empieza a escribir en 0x800000, encara el sprite al jugador y muestra el mensaje escrito en 800100, según el parámetro 0x06 (cerrar al pulsar A)
Comandos de RubiKode

Está altamente recomendado escribir los comandos en minúsculas y cualquier cosa "#definida" en mayúsculas.
Comandos de preprograma

Son comandos que no se compilan, pero que coordinan el funcionamiento del programa
#include (#incluye)

#include nombredelarchivo

Incluye otro archivo en el proceso de compilación. Las comillas se quitan automáticamente.

Ejemplo:

#include "misconfiguraciones.rbh" #include stdpoke.rbh


#define (#define) #define nombre_simbolo índice_número Te permite definir símbolos para reemplazar números. Solo se permiten números pero pueden ser de cualquier tamaño de byte a dword. Es recomendable usar mayúsculas para el nombre del símbolo.

Ejemplo:

#define MASTERBALL 1 'Entonces, cada vez que escribas MASTERBALL, Scripted compilará un “1” (cabe añadir que la masterball es el primer objeto de la lista)


#org

Indica un cursor para el compilador, a un sitio específico del rom (indica donde empieza a escribir el guión)

Ejemplo:

#org 0x605040 'continúa (o empieza) a escribir en el offset 0x605040


#autobank (#autobanco) #autobank on #autobank off

Algunos prefieren hacerlo manualmente, otros no. Autobank inserta en los punteros un 08 automáticamente. Solo #org no está afectado )porque, como archivo, el rom empieza en el offset 0x000000)

Autobank, por defecto (porque se incluye #autobank on en std.rbh) está activo, asíq eu no te preocupes por el.

Ejemplo:

#autobank on message 0x604020 'se vuelve 0F00 08604020 #autobank off message 0x604020 'se vuelve 0F00 00604020, Lo cual no es bueno.


#raw

Aliados: #binary #raw aLot

Inserta una carga de datos raw en el ROM. Puede ser usado para comandos defectuosos o no soportados así como para los datos de movimiento. Para determinar que tipo de datos usar, escribelo antes de los números. Por defecto es byte. Puedes usar los prefijos hexadecimales 0x o &H, pero no son necesarios

* Los tipos de datos pueden ser: byte (tambien char)
* word (tambien int o integer)
* dword (tambien long)
* pointer (tambien ptr)

Ejemplo:

#raw 12 69 word 1234 dword 12345678 pointer 0xABCDEF


Este ejemplo insertaría dos bytes, un word, un dword y un puntero. Ten en cuenta que el puntero es afectado por Autobank y Dword no
=

= texto

Inserta un texto basado en una tabla hecha por los creadores de Elitemap

Ejemplo:

= ¡Hola, soy tan feliz y estúpido!\feliz feliz feliz...


Comandos generales
nop (00, 01) (no)

nop

Absolutamente NADA.
end (02) (fin)

end

Termina la ejecución del script.
return (03) (volver)

return

Vuelve a donde has sido llamado (call o #org). Como el sistema GOSUB...RETURN de Basic
call (04) (llamar)

call puntero

Llama a otro script. Puedes volver a ahí mediante return.

Ejemplo:

call JUMP_BAGISFULL


goto (05) (ir a)

goto punteroobjetivo

Continúa la ejecución desde el putnero objetivo. Return no está permitido.
if (06) (si)

if valorcondicional acción punteroobjetivo

Si la última comparación devolvió un valor concreto, saltar o ir a otro script. Las acciones pueden ser goto o call. Si no se especifica, se presume call por loq ue return puede ser usado.

Los valores condicionales son: 00 – Menor/falso (<<, tb FALSE 01 – Igual/verdadero (==), tb TRUE 02 - Mayor (>> 03 – Menor o igual (>=) 04 – Mayor o igual (<=) 05 – Desigual (!=)

Ejemplo:

compare LASTRESULT 0x4 if TRUE goto JUMP_BAGISFULL


boxset (09) (determinar la caja)

Aliases: callstd

boxset valor

Llama a una función standart. En general se usa para mostrar la caja de diálogo con los parámetros 0x04 o 0x06, o usar 0x05 para preguntas de si/no (la cual, además, mete un valor en LASTRESULT.

Ejemplo:

message 0x604000 'texto normal boxset 4 'no cerrarse despues de pulsar A message 0x604020 'pregunta boxset BOXSET_YESNO '(= 0x05) if NO 0x600020 'ir a la rama "no" 'la rama “si” va aquí ... end #org 0x600020 'la rama “no” va aquí ... end


message (0F) (mensaje)

message punterodelmensaje

Prepara un puntero para usar por comandos como boxset. Se usa para los textos.

Ejemplo:

message 0x604020 boxset 0x06 'cerrar al puslar A


setvar (16) (determinar variable)

Alias: setvar1

setvar indicevariable numerovalor

Determina una variable a un valor concreto.

Analogo a A = 4 de Basic
copyvar (19) (copiar variable)

Alias: setvar2

copyvar indicevariable indicevariable

Copia el valor de una variable a otra.

Analogo al A = B de Basic.
copyvarifnotzero (1A) (copiar variable si no es 0)

Alias: setvar3

copyvarifnotzero variable variable

Copia el valor de una variable a otra, si esta no tiene como valor 0.

Analogo al IF B > 0 THEN A = B de Basic.
compare (21) (comparar)

compare variable valor

Compara una variable con un valor. Usado en conjunción con if y mayormente.

con LASTRESULT como valor.

Compares a variable with a value. Used in conjunction with if and mostly with LASTRESULT as a parameter.

Ejemplo:

compare LASTRESULT 0x4 if TRUE JUMP_BAGISFULL


special (25) (especial)

special indicedeevento

Activa un evento especial

Ejemplo:

special SPECIAL_WALLYCATCH 'Reproduce la película de Wally cazando al Ralts


*NOTA DE BARO: estaría bien probar los especiales, quizás encontrais algo que os guste.
special2 (26) (especial2)

special2 variable indice

¿Comprueba cosas especiales? Se usa en revanchas y otras situaciones especiales.
pause (28) (pausa)

pause itiempo
setflag (29) (poner bandera)

setflag numeroflag

Activa un flag.

Ejemplo:

setflag 0x64 checkflag 0x64 compare LASTRESULT YES if 1 0x600020 'ir a la rama “si” 'rama “no” va aquí ... end #org 0x600020 'rama “si” va aquí ... end


clearflag (2A) (limpiar bandera)

clearflag numero flag

Desactiva un flag.
checkflag (2B) (comprueba flag)

checkflag numeroflag

comprueba si el flag está activado (ver ejemplo en setflag)
cry (30) (grito)

cry indiceespecies

Reproduce el grito de la especie indicada.

Ejemplo:

cry PKMN_PIKACHU


fanfare (31) (himno)

fanfare indicecanción

Reproduce una canción de fondo.
waitfanfare (32) (espera himno)

waitfanfare

Espera por el sonido de fanfare para acabar.
playsound (33) (tocar canción)

playsound indicecanción

Cambia abruptamente a otra canción.
fadedefault (35) (aparece por defecto)

fadedefault

Suavemente cambia a la canción por defecto del mapa
fadesound (36) (aparece canción)

fadesound indicecanción

Suavemente cambia a la canción con el indice indicado.
fadeout (37) (desaparece)

fadeout

Suavemente apaga la canción sonando
fadein (38) (aparece)

fadein

Suavemente aparece la canción que estaba sonando antes.
warp (39) (teletransporte)

warp bancodelmapa numerodelnivel numerodelasalida
checkitem (47) (comprobar objeto)

checkitem indiceobjeto

Comprueba si el jugador lleva como mínimo una unidad del objeto mencionado.

Ejemplo:

checkitem ITEM_MAXPOTION compare LASTRESULT YES if TRUE 0x604020


applymovement (4F) (aplicar movimiento)

applymovement Spriteafectado punterodelmovimiento

Aplica el movimiento descrito en el puntero.

Ejemplo:

applymovement 0x5 0x604020 pause 0x0 'espera a que el movimiento se complete


movesprite (57) (mueve minisprite)

movesprite indice ejeX ejeY
faceplayer (5A) (encarar sprite)

faceplayer

Gira el minisprite hacia el jugador
trainerbattle (5C) (batalla de entrenador)

trainerbattle tipo batalla punterodeltextointro

punterodeltextovencido

Empieza un combate de entrenador

El tipo es 0x00 para batallas normales, 0x04 para 2 contra 2 y 0x05 para revanchas. Para batallas 2 contra 2 o para gimnasios, añade otro parámetro, punteroespecial.

Las batallas 2-2 requieren punteroespecial para mostrar un mensaje si el jugador solo tiene un pokémon.

Los líderes de gimnasio te darán regalos como medallas en la continuación de la batalla. Mira tu lider favorito en scripted para ver un ejemplo.

Ejemplo:

trainerbattle 0 TEXTOINTRO TEXTOALVENCER message TEXTO DE DESPUES boxset 4


jingle (69) (sonidillo)

jingle

Se supone que reproduce un sonido, pero no hace nada.
lock (6A) (bloquear)

lock

Bloquea el movimiento del sprite que llama
release (6C) (liberar)

release

Devuelve el movimiento bloqueado con lock
multi (6F) (multiple)

multi posizquierda posarriba indicelista Cancelar

Pone una lista de opciones para que escoja el jugador. Las opciones dependen de la lista (indicelista). Cancelar indica si el último elemento es Cancelar o no. (si sí, 0x01, si no, 0x00) La respuesta se almacena en LASTRESULT

Ejemplo:

message 0x604020 '”que ciudad te gusta más?” choice 2 2 13 0 'las opciones son littlerrot, slateport y lilycove compare LASTRESULT 1 if 0 0x600030 'rama de littleroot if 1 0x600050 'rama de slateport 'aquí va la rama de lilycove. No se necesita “il lastresult 3”


givepokemon (79) (dar pokémon)

givepokemon indiceespecie nivel Item

Le da al jugador un pokémon de un determinado nivel y con un determinado objeto, si item > 0.
pokemart (86) (poketienda)

pokemart punterolistadeobjetos

Inicia el sistema de compra de pokemart con los objetos/precios que se encuentran en punterolistadeobjetos.
fadescreen (97) (fundido en negro)

fadescreen in/out

Fundido en negro hacia dentro/fuera
checkgender (A0) (comprueba sexo)

checkgender

Pone un 1 en LASTRESULT si el jugador es una chica o 0 si es un chico.
setmaptile (A2) (poner bloque en el mapa)

setmaptile ejeX ejeY numerodebloque movpermitido

Pone un tile en el mapa. Tienes que refrescar de algún modo esa parte, alejando la vista y volviendo, o llamar este comando desde el script del nivel.
setweather (A4) (determinar clima)

setweather valorclima

Prepara un clima para ser activado por doweather

Los valores son
00 - Nada
03 - Lluvia
04 – copos de nieve (Breve)
05 - Tormenta
06 - Niebla
07 – Ceniza
08 – Tormenta arena
09 – Otra niebla
0A – niebla clara
0B – Oscuridad (nocturno!!)
0C - Sofoco
0D – Tormenta 2
0E - Submarino
0F - Nada
doweather (A5) (hacer clima)

doweather

Activa el clima preparado por setweather.

Construídos (comandos complejos)
wildbattle (batalla salvaje)

wildbattle indiceespecie nivel estilo

Originalmente un verdadero comando, ahora un construído.

El estilo puede ser
0 normal
1 movimiento en zigzag, tierra
2 movimiento en zigzag, hierba
3 movimiento en torbellino

Ejemplo:

wildbattle 0x196 70 3 'lucha contra un RAYQUAZA NIVEL 70!


giveitem (dar objeto)

giveitem objeto cantidad

Da un objeto

Este construído combina dos setvarifnotzero

Ejemplo:

giveitem ITEM_SODAPOP 1


Comandos chungos
jumpstd (08) (salta std)
jumpstd bValue Salta a una función estándar. Del estilo de BoxSet, pero con una lógica ligeramente diferente, como comparar en Basic's GOSUB con GOTO. comparevars (1B) (compara variables)

comparevars variable variable
comparevartobyte (1C) (compara variable con byte)

comparevartobyte variable valorbyte
comparevartofarbyte (1D) (compara variable con byte lejano)

comparevartofarbyte variable puntero

Byte lejano = byte localizado en un puntero.
comparefarbytetovar (1E) (compara byte lejano con variable)

comparefarbytetovar puntero variable

Compares a byte at some location with a variable.
comparefarbytetobyte (1F) (compara byte lejano con byte)

comparefarbytetobyte puntero valorbyte

Compares a byte at some location with a byte value.
comparefarbytetofarbyte (20) (compara byte lejano con byte lejano)

comparefarbytetofarbyte puntero puntero
Variables predefinidas y constantes en STD.RBH
B_YES, B_NO, B_TRUE, B_FALSE, B_BOY y B_GIRL

(SI, NO, VERDADERO, FALSO, CHICO, CHICA)

Me gustan las booleanas (kyoufu Kawa). Son fáciles de #definir.
B_<<, B_==, B_>>, B_<=, B_>= y B_!=

Como B_TRUE y B_FALSE arriba, pero con todo el poder lógico para los más expertos.
BOXSET_DONTCLOSE, BOXSET_YESNO y BOXSET_NORMAL

Parámetros de Boxset más normales.
MENU_PARTY, MENU_POKEDEX y MENU_NAVIGATOR

Parámetros de Setflag para cada uno d elos tres elementos del menu (equipo, pokedex y navegador). Se peude usar, por ejemplo, para que el TEAM te robe tu material.
0x800D – LASTRESULT (ultimo resultado)

Casi siempre que algo se comprueba, la información se mete en esta variable: LASTRESULT.
SPRITEMOVE_INDEX
SPRITEMOVE_NEWXPOS
SPRITEMOVE_NEWYPOS

Combinados con Setvar, los mueves a cierta posición en el mapa. Se usa en littleroot para mover a la madre dependiendo del sexo del jugador.
APPLYMOVE_PLAYER (aplicarmovimiento al jugador)

Porque tiene más sentido que “0xFF” en applymovement. Ponlo como el indice del sprite para que el afectado sea el jugador. Aunque es más corto el típico "0xFF"
JUMP_BAGISFULL (saltar a “si la mochila está llena”)

parchar:
Pasos necesarios para jugar un hack

tutorial crear hack Rom de pokémon de GBA [parte 1]

Para los más inocentes que no tienen ni idea de parchear, y aunque se lo expliquen no saben, aquí tenéis un manual ¡con imágenes!

Ve a tu carpeta de Elite Map y busca un icono de una luna. Cuidado hay tres iconos. La aplicación que buscar es "Lips.exe" y en vista previa se verá Lips:

hack

Bien, ahora dale dos veces, o sea: ábrelo. Tienes 3 opciones:

* -Apply IPS Patch (aplicar parche IPS).
* -Create IPS Patch (crear parche IPS).
* -About LIPS (a cerca de LIPS).

A nosotros nos interesa "Apply IPS Patch", por que queremos parchear un rom:

roms
gba

Se abrirá una nueva ventana, la cual pide archivos de parche (lunar ips); los puedes reconocer por que sus iconos son corazones.

Selecciona el parche y ábrelo:

pokémon

Cuando lo abras se te volverá a abrir otra ventana, esta pide archivos GBA. Pero ¡Ojo! que sean originales (sin modificar), si no lo son te puede salir mal la jugada o tal vez no...

Selecciona tu archivo de rom y ábrelo.

tutorial crear hack Rom de pokémon de GBA [parte 1]

Si has hecho todo bien y como te dice arriba la pantalla que te debe salir es esta:

hack

Si después de esto aún no sabes parchear, lo lleváis claro...


Cambiar Paletas:

Cambia los colores de cualquier parte de tu hack

Tutorial usando un Hex

Recuerda que para seguir este manual necesitas algún editor hexadecimal, aunque esta guía en concreto está hecha con Hex Workshop que puedes bajar aquí.

1) Haces una copia del juego que quieras modificar.

roms

2)Lo abres (el juego, no la copia), buscas la pantalla que cambiar y pinchas tools, palette viewer, pulsas pausa (cntrl+ p) y localizas los colores que quieras cambiar.

gba

3) Copias los números que te salen al pincharlos, dados vuelta y en el block de notas.

pokémon
tutorial crear hack Rom de pokémon de GBA [parte 1]

4) Quitas la pausa y buscas otros colores que te gusten.

hack

5) Los copias en el bloc de notas, debajo y comparas el numero de colores y el orden (claro a oscuro u oscuro a claro).

roms

6) Cierras el juego, abres el editor y buscas los colores originales en el juego nuevo.

gba

7) Cierras la ventana de buscar.

Colocas el cursor en los primeros números del principio. Pinchas edit, replace, y escribes los colores del bloc de notas

pokémon

8) Pinchas aceptar, y el juego comenzará a buscar, pulsa varias veces “find next” para comprobar q solo exista una copia de los colores q buscas, si existe solo una pulsa “replace”, si existen varias puedes pulsar “replace all” paraa sustituir todas, o ir sustituyendo y guardando una a una y comprobar q se hayan cambiado en el juego.

tutorial crear hack Rom de pokémon de GBA [parte 1]

9) Lo que hayas modificado se verá en rojo, guarda el juego y entonces se verá en azul.

hack
roms

10) Cierra el editor y abre el juego para comprobar que se ha cambiado.

gba

Tutorial usando APE

Abrir el APE y cargar rom (en este caso Pokémon Ruby)

pokémon

En donde dice "offset (hex)" con la opcion de "loadear offset" puesta pones la direccoón de la paleta que quieres cambiar (en este caso la de los arboles).

Donde dice "paleta actual" es donde esta la paleta sin modificar.

tutorial crear hack Rom de pokémon de GBA [parte 1]

En el color que quieres modificar, donde dice Paleta modificada pones al código en hex del color que quieras modificar.

hack

Otra manera es poniendo cualquier numero de color y donde aparece el color le das doble clic, entonces aparecerá este cartel:

roms

Ahí hay muchas opciones, hay un historial de colores para usar uno que ya hayas usado, puedes elegir los colores desde ahí y lo más sorprendente, ¡hay un cuentagotas! Si tienes la paleta en Paint u otro sitio simplemente pinchas en el cuenta gotas y arrastras hasta tocar el color, luego sueltas y te aparecerá el color ya en APE.

gba

Cuando ya has elegido al color simplemente cierra y verás que se a cambiado, o sigues con los otros colores hasta haber cambiado toda la paleta.

http://i57.photobucket.com/albums/g205/Rukario_987/ape5.jpg

Si solo vas a cambiar unos pocos colores y dejar el resto igual, dale al menú "editar"->"paleta actual"->"copiar" y te saldrán automáticamente la paleta anterior oara que la modifiques, así te ahorrarás el tener que copiar uno a uno el resto de colores.

pokémon

Al hacer eso, la casilla de reemplazar se activa, entonces le pinchas en reemplazar y ahí se reemplazan las paletas del juego por las tuyas.

¡Ya se cambiaron las paletas!

tutorial crear hack Rom de pokémon de GBA [parte 1]



sigan en la segunda parte

14 comentarios - tutorial crear hack Rom de pokémon de GBA [parte 1]

jacfv
Gracias gran aporte
Criissstian
Copy and paste de wah... igual buen aporte
tonga368
master, no importa q sea copy and paste, pero sirve mucho,
te dejaria puntos pero soy novato
MrKMIKZE
Ayudame: de donde saco los tbl. para ponerlos en la carpeta????????????

(PERDON LA IGNORANCIA)
SkatoratePunk
ufff... algo extenso,,, justo lo que buscaba .........
aunque si lo habia visto en algun lado pero no importa aqui lo
pusiste casi completo ii no tengo ke andar de pagina en pagina.
LuksTorre
Es mas dificil qe la mierda, aunqe el aporte esta bno aunqe sea copy/paste. Bueno, si lo leo de nvo y lo entiendo lo hago, sino no A favs
Postie
Gracias por el aporte pero ni empedo me pongo nervioso si hay tantats letras y quilombo juntos bye
TheFacundorx
que genial el post! pero las imágenes tienen virus y el antivirus las bloquea (no todas). solucionalo y te doy 10.
patricio507
me encanto! pero tambien estuve buscando en otras paginas y me encontre las mismas oraciones con las imagenes.... no se quien se copio a quien 77