Berserker1523
2-Intentando discernir qué es lo más importante...
Introducción
Muy buenas a todos gente! He decidido traerles la adaptación del tutorial de ShyRayq:
https://web.archive.org/web/20160531010632/https://www.pokecommunity.com/showthread.php?t=313872 de PokeCommunity para Rojo Fuego, la traducción la podrán encontrar aquí: https://whackahack.com/foro/t-26860/fr-otros-agregar-tipos-cero-sin-sustituir-traducido-por-mi-pokecommunity , pero aprovechando que este último no tiene imagenes y me parece que está un poco mal explicado, aprovecho también para explicarles algunas cosas más. Literalmente no dormí por hacer esto así que espero que si notan algún error decidmelo por favor. Sin más preámbulos vamos allá!
Herramientas a utilizar:
- NSE 2.0
- Character Maker Pro (CMP)
- Un heditor Hexadecimal, v.gr. , HxD
- Una ROM de Rojo Fuego (también pueden encontrar los offsets de Fire Red en cualquiera de los tutoriales antes mencionados)
- Un editor de imágenes, v.gr. , paint, paint.net
1. Los Iconos de los Tipos
Primero abrimos la ROM en NSE 2.0
En el panel "Edit Sprites" oprimimos "Navigate", se nos abre una ventana, en la parte derecha ampliamos la carpeta que se ve, ambiamos "BPRE", "Hud", "PKMN" y por último damos clic en "Status".
En la parte derecha de esa misma "sub"-ventana, donde pone "Image" escribimos E95D10 y debajo, donde dice "Palette", ponemos E95CF0. Le damos a "open" (abajo a la derecha de la misma "sub"-ventana) y "close".
Ahora para exportar la imagen y poderla editar, vamos arriba a la derecha (o pueden presionar "Ctrl + Shift + E") donde dice "File", "Export", "Export Bitmap" y seleccionan donde guardar la imagen.
Editando la imagen para agregar un nuevo tipo
En este caso, yo insertaré el tipo Hada, pero ustedes pueden insertar el (los) que quieran. Para modificar la imagen, si necesitan ampliarla (como lo he hecho yo) ya sea en ancho o alto (yo amplié este último) deben tener en cuenta que el número de píxeles del alto y el ancho deben ser divisibles por ocho. Por ejemplo, las dimensiones de la imagen original son 128x128 (128/8 = 16), yo la amplié a 128x144 (128 / 8= 16 || 144 / 8 = 18).
Como dato curioso, ShyRayq, menciona que, teóricamente, se pueden agregar hasta 250 tipos, es decir, que la imagen puede tener dimensiones arbitrarias.
Editando la Paleta
Algo en lo que tuve muchos problemas al seguir el tutorial, fue el tema de las paletas (de hecho fue la primera vez que trabajaba con ellas), lo cual no se explica. Les explicaré como organizar la paleta para que, parcialmente, no tengan ningún inconveniente.
Abran el CMP y su imagen. Aquí yo ya tengo la paleta organizada, pero seguramente a ustedes no les aparecerá igual.
Lo que deben hacer es organizar los colores de manera que:
- El primero color sea el color de fondo (en este caso el verde oscuro).
- Los demás colores queden de forma parecida a la imagen de abajo (No sé si esto es necesario).
- Deben dejar un color para el texto en una posición determinada de la paleta (el que aparece en la interfaz pokémon, no el nombre de los tipos), y un color para la sombra de este, este primero también es el color de la sombra de las imagen con el tipo.
Aquí pueden ver como funciona:
Volviendo al tema, y ¿cómo se editan las paletas? Pues en CMP vamos arriba, en la barra de menú, donde dice "Paletas" y luego "Editar Paleta" (o simplemente Shift + E). Se les abrirá una "sub"-ventana. Para cambiar de posición un color, lo seleccionan (presionan clic izquierdo y pasa el ratón encima de él y sueltan), le dan a "cortar", dan clic al lado del color donde lo quieren poner y presionan "pegar copia" (o simplemente ctrl + v). No olviden asignar sabiamente el colo del texto (y sombra del texto de los tipos) y el de la sombra.
Una vez arreglada la paleta, procedemos a insertar en la ROM. Abrimos NSE 2.0, y como antes, vamos a "Navigate", y abrímos las carpetas "Pokémon", "BPRE", "Hud", "PKMN", y abrímos "status". Colocamos de nuevo la dirección de la imagen y la paleta y aquí viene el cambio: en la parte derecha a donde ponemos las direcciones, donde pone "Size" cambiamos el ancho "Width" y el alto "Height" por el que ampliamos dividido entre 8. En mi caso yo solo amplié el alto a 144, por lo tanto pongo "18". No importa si debajo sale "mal" la imagen, denle a "open" y "close".
Ahora en la barra de menú, vamos a "File", "Import", "import Sprite Data" (o simplemente Ctrl + I). Le dan a "load sprite", cargan su imagen y si cambiaron la paleta (que seguro hicieron), seleccionan al lado "Image + Palette", y le dan a "Save".
Luego vamos a "File", "Insert", "Insert Image Data", automáticamente les buscará espacio libre, anotan el "data offset" porque lo utilizaremos después y por último "save". Luego, el mismo procedimiento con la paleta, "File", "Insert", "Palette Data", anotan el offset donde lo insertarán y guardan.
Ahora vamos a cambiar los punteros de la imagen y la paleta en la ROM. Abren HxD y con Ctrl + F (Buscar) escogen valores hexadecimales y ponen: 105DE908 , allí cambian ese valor por el puntero a su imagen con Ctrl + B para pegar o escribiendo directamente.
Cómo volver la dirección offset un puntero?
Pues si tu direccion offset es xxyyzz, lo separas de a 2 valores: xx yy zz, lo inviertes de esta manera: zz yy xx y le agregas un 08 al final: zz yy xx 08. Por ejemplo:
A mí se me insertó la imagen en 0x80CBA8, en puntero sería: A8 CB 80 08 y eso es lo que escribo
Lo mismo para la paleta, con Ctrl + F buscan los valores hexadecimales F05CE908 (estos están un poco más arriba) y los reemplazan por el puntero al offset donde se insertó su paleta.
Ahora procedemos a realizar los cambios para que el juego pueda leer que hemos insertado un nuevo tipo en la imagen y/o modificado la posición de los otros. Usando Ctrl+G (ir a...) vamos al offset 44D570, allí copiamos la longitud de 60 bytes y pegamos (con Ctrl + B) en un espacio libre.
Qué hacen todos estos valores? Pues son los datos que asignan un tipo con una imagen usando una serie de coordenadas:
(Imagen del tutorial de ShyRayq)
Para hallar la coordenada de un icono:
- Miren las columnas, estás son 0, 4, 8 o C, en adelante.
- Miren las filas, son 0, 20, 40, 60, 80, A0, en adelante.
- Tomen el número de la fila y la columna, y unanlos.
Por ejemplo, en la imagen, el tipo Lumo se encuentra en la fila 100, columna 0. Su coordenada es 0x100. El tipo "Fajro" (Fuego), está en la columna 4, fila 20, su coordenada es 0x24 (0x ya que son números hexadecimales).
¿cómo añadimos la coordenada a la tabla? cada una está compuesta por 4 bytes:
- El primer byte refiere al ancho del icono. Para los Tipos tienen ancho de 0x20 y los iconos de pp, precición, etc, tienen ancho de 0x28.
- El segundo Byte es es la altura del icono. Todos tienen altura de 0x0C.
- El tercer y cuarto Byte son la coordenada en sí y debe escribirse parecida a los punteros.
¿Cómo escribo mi coordenada? Por ejemplo tomemos el icono del tipo Fuego, su coordenada es 0x24, añadimos tantos 0s a la izquierda para llenar 4 digitos: 0024, los separamos en grupos de a 2 dígitos: 00 24 y por último los invertimos: 24 00.
Por ejemplo, para el tipo Hada, el cuál se encuentra en la columna 0 y fila 100, lo cual da 0x100, le agregamos tantos 0s a la izquierda para que sea de 4 dígitos: 0100, separo de a 2 dígitos: 01 00, e invierto: 00 01. Esta es la coordenada para el nuevo tipo que agregué! (Y así sucesivamente pueden hallar las coordenadas para cuales sean que añadan).
Si han insertado la imagen y abren el juego, tal vez vean que los tipos salen "cuadrados" y no con el bordeado que llevan, y además puede que les salga una línea a la derecha del color del tipo siguiente a este en la imagen.
Para solucionar lo segundo, pueden cambiar el ancho de los tipos, en vez de 0x20, 0x1F. Si alguien tiene una mejor solución o una a lo primero, pueden escribirme o postear aquí y yo con gusto lo agregaré al tutorial.
Para solucionar lo segundo, pueden cambiar el ancho de los tipos, en vez de 0x20, 0x1F. Si alguien tiene una mejor solución o una a lo primero, pueden escribirme o postear aquí y yo con gusto lo agregaré al tutorial.
Ahora tenemos que repuntear, busquen el valor 70D54408 con Ctrl + F en su ROM, reemplazenlo por el puntero al offset donde pusieron los datos.
Probar que van bien
Entonces pueden cambiar el valor del byte n°7 o n°8 de un Pokémon para que sea:Berserker1523 dijo:Datos de los Pokémon (Pokédex, es decir, de todos los pokes disponibles en el juego, no los del equipo del jugador) : "Real": 24FF4C
Hipotético: 24FF68 (datos bulbasaur).
Información útil: La longitud hipotética de los datos de un pokémon es de 17 Bytes (23 en decimal), los bytes n°7 y n°8 son los 2 tipos de pokémon (si tiene un solo tipo, tendrán el mismo valor). Luego de esto, vienen 2 bytes de valor 00, 1 byte de valor 03 seguido de otros 2 bytes de valor 00. Luego de esto empiza el siguiente Pokémon en la Pokédex (Ivysaur).
Normal = 00
Lucha = 01
Volador = 02
Veneno = 03
Tierra = 04
Roca= 05
Bicho= 06
Fantasma= 07
Acero= 08
??? = 09
Fuego= 0A
Agua= 0B
Planta = 0C
Electrico= 0D
Psíquico = 0E
Hielo= 0F
Dragon = 10
Siniestro = 11
El nuevo tipo empezará desde 0x17, en mi caso el Hada, el 0x18, otro tipo que quieran agregar y así sucesivamente.
Lucha = 01
Volador = 02
Veneno = 03
Tierra = 04
Roca= 05
Bicho= 06
Fantasma= 07
Acero= 08
??? = 09
Fuego= 0A
Agua= 0B
Planta = 0C
Electrico= 0D
Psíquico = 0E
Hielo= 0F
Dragon = 10
Siniestro = 11
El nuevo tipo empezará desde 0x17, en mi caso el Hada, el 0x18, otro tipo que quieran agregar y así sucesivamente.
(No muestro una imagen In-Game porque no tengo a bulbasaur xD)
Y así probar que su imagen del tipo se ve bien y correcta!
2. Editando las Efectividades
Vamos a la dirección offset 24A7BC con Ctrl + G (Ir a...) y copiamos una longitud de 0x150 bytes y pegamos en un espacio libre.
Examinen los primeros 3 valores: 00 05 05. La efectividad es puesta en 3 bytes:
- El primer Byte es el tipo atacante. (Mirar la tabla en "Probar que va bien").
- El segundo Byte esel tipo defensor.
- El tercer byte es el multiplicador de daño.
En este caso, el tipo atacante es el normal, el defensor el roca, y el multiplicador de daño es 0.5x , los movimientos de tipo normal le hacen la mitad del daño a los pokémon de tipo roca.
Lo multiplicadores normales son:
05 = 0.5x (no es efectivo)
00 = 0x (no afecta)
14 = 2.0x (super efectivo)
Pero ustedes también pueden colocar el multiplicador que quieran! por ejemplo, 5.6x de daño. Para hacerlo: tomen su multiplicador "5.6", multipliquenlo por 10 (5.6*10= 56), y por último, conviertan este número a Hexadecimal (56 = 0x38). Lo malo de esto es que no les saldrá el mensaje de "es super efectivo", etc, al atacar, eso deben cambiarlo ustedes con ASM.
Antes de hacer algún cambio, noten estos valores al final:
FE FE 00 significa que todo lo que este después es afectado por profecía (Foresight) 00 07 00 denota que normal le hace 0 de daño al fantasma y 01 07 00 lo mismo con el tipo lucha, pero al estar entre FE FE 00, pueden dañar si utilizan Profecía. El FF FF 00 significa el final de la tabla.
Entonces si quieren editar las efectividades para sus nuevos tipos, muevan estos últimos valores mencionados a la derecha y usen 17, 18, etc. Si quieren que su tipo sea afectado por profecía, entonces pongan su efectividad después del FE FE 00.
Una vez terminados de editar, tenemos que repuntear la tabla. Busquen los valores hexadecimales BC A7 24 08 con Ctrl+ F y cambienlos por el puntero al offset de su tabla. Una vez cambiado, deben volver a buscar este valor y repuntear unas (9 veces? creo, luego edito y les digo cuántas son exactamente, comenten o envíenme un MP para avisarles).
Probar que va bien
3. Editar el nombre del tipo que aparece en la interfaz de batalla, abajo a la derecha cuando seleccionas un ataque[/SIZE][/B][/CENTER]
(Imagen de ShyRayq)
Como pueden notar, abajo en la esquina derecha no sale el nombre del tipo que agregó, eso haremos ahora!
Con Ctrl + G (Ir a...) vamos al offset 0x24A90C Los datos que nos intersan son estos (longitud 7E):
Como siempre, movemos a un espacio libre. Podrán creer que son datos hexadecimales random, pero no es así, en realidad son letras!
A = bb
B = bc
C = bd
D = be
E = bf
F = c0
G = c1
H = c2
I = c3
J = c4
K = c5
L = c6
M = c7
N = c8
O = c9
P = ca
Q = cb
R = cc
S = cd
T = ce
U = cf
V = d0
W = d1
X = d2
Y = d3
Z = d4
Lo primero que dice es NORMAL, LUCHA, etc. Las "FF" son el final del nombre y los "00" son la alineación (para quien quiera saber sobre esto último, escríbame y le aviso cuando actualice el tutorial con lo que es la "alineación", ando apurado ahora).
Para agregar los nombres de nuestros tipos, primero tenemos que hacer espacio para "TIPO", "PODER, "PP", "PRECISIÓN" y "EFECTO", ya que aquellos iconos son técnicamente tipos. Solo creamos una entrada de 7 bytes de largo con seis "00" y un "FF" para cada uno, es decir, 5 veces:
Luego, añadan sus nuevos nombres (Usen la tabla antes pasada para convertirlos a Hexadecimal)
Aquí mi ejemplo con el tipo Hada:
(Perdonen que tuve que tomar la imagen de Fire Red ya que me lié con la de Rojo Fuego que tenía, luego la cambio, es lo mismo solo que los tipos están en inglés, podéis comprobarlo si queréis)
Ahora solo hace falta repuntear, con Ctrl + F busquen los valores hexadecimales 0CA92408 y cambienlos por el puntero al offset donde pusieron la tabla. Deben hacer el último unas 5 veces (o hasta que el editor hexadecimal no encuentre el susodicho valor)
Bueno gente, espero les haya sido de mucha utilidad, soy consciente de los pequeños fallos que presento pero seguro que alguno de ustedes puede pasarnos la solución. Si les agrada, puedo hacer un tutorial para enseñar a cambiar la ini de las herramientas para que no tengan que ponerle su tipo a un pokémon/movimiento a mano. (Seguramente en estos días actualice para mostrarles como hacerlo con G3T). Si tienen alguna duda no -duden- en preguntar, nos vemos!