Author Id: 17505 Author Name: Mikelan4315♪ Post Content: Nota: Para que luego no andéis preguntando chorradas, un número precedido por 0x significa que está en hexadecimal. [spoiler=Esta es la tabla de "relaciones" entre tipos] 000505 000805 0A0A05 0A0B05 0A0C14 0A0F14 0A0614 0A0505 0A1005 0A0814 0B0A14 0B0B05 0B0C05 0B0414 0B0514 0B1005 0D0B14 0D0D05 0D0C05 0D0400 0D0214 0D1005 0C0A05 0C0B14 0C0C05 0C0305 0C0414 0C0205 0C0605 0C0514 0C1005 0C0805 0F0B05 0F0C14 0F0F05 0F0414 0F0214 0F1014 0F0805 0F0A05 010014 010F14 010305 010205 010E05 010605 010514 011114 010814 030C14 030305 030405 030505 030705 030800 040A14 040D14 040C05 040314 040200 040605 040514 040814 020D05 020C14 020114 020614 020505 020805 0E0114 0E0314 0E0E05 0E1100 0E0805 060A05 060C14 060105 060305 060205 060E14 060705 061114 060805 050A14 050F14 050105 050405 050214 050614 050805 070000 070E14 071105 070805 070714 101014 100805 110105 110E14 110714 111105 110805 080A05 080B05 080D05 080F14 080514 080805 FEFE00 000700 010700 FFFF[/spoiler] Y este es el formato de cada uno: AA CC EE AA : tipo del ataque CC : tipo(s) del contrincante EE : efectividad Estos tres bytes se repiten en cada "relación" entre tipos y termina en FFFF. AA y CC pueden tener estos valores: 0×00 : Normal 0×01 : Lucha 0×02 : Volador 0×03 : Veneno 0×04 : Tierra 0×05 : Roca 0×06 : Bicho 0×07 : Fantasma 0×08 : Acero 0×09 : ??? 0×0A : Fuego 0×0B : Agua 0×0C : Planta 0×0D : Eléctrico 0×0E : Psíquico 0×0F : Hielo 0×10 : Dragón 0×11 : Siniestro EE puede tomar estos 4: 0×00 : Ineficaz 0×05 : Poco eficaz 0×0A : Daño normal 0×14 : Muy eficaz Como habrás observado, EE es un multiplicador de daño, pero para obtener el número real que se le multiplica, hay que dividirlo entre 0xA (es decir, 10). Pero hay un problema, si intentas buscar en una ROM la cadena hexadecimal 00 05 05 00 08 05 0A 0A 05, el buscador te dirá que no hay resultados. Esto es debido a que la localización de estos valores está en el overlay, y este está fragmentado, y cada fragmento está comprimido. Puedes descomprimirlo con el CrystalTile2, por ejemplo. El overlay donde se encuentran estos valores es el 12. Ahora, si miramos la tabla, veremos que no aparecen las relaciones que provocan un daño x1. El juego, en caso de no encontrar los tres bytes que rigen las efectividades, hace que el movimiento tenga una efectividad normal. ¿En qué nos afecta esto? Bueno, si queremos introducir el tipo hada en HGSS (lo más sensato es remplazarlo por el Tipo ???) tendremos un problemón. Si intentamos añadir (ni se te ocurra hacerlo) alguna nueva relación, desde cero, el juego crasheará al iniciar una batalla. Esto es debido a que el arm9 leerá mal los datos que haya después de los datos de las relaciones. Cómo añadir nuevas relaciones entre tipos Primero, hay que entender cómo funciona el juego: El juego se "divide" en dos partes principales: el overworld (manejar al personaje por los distintos mapas, hablar a los NPCs, etc.) y las batallas. El juego necesita leer los siguientes overlays para el overworld : 1, 2, 3 y 27 (Grupo 1), y necesita leer estos para las batallas: 6, 7, 10, 12, y 18 (Grupo 2). En realidad, el overlay 10 es leído cada vez que te dan a elegir una acción, y el 7 cuando has elegido la opción (y al comienzo y al final de la batalla también). Cuando le das a Continuar en el menú del juego, se carga el Grupo 1, y cuando entablas una batalla se carga el Grupo 2. Puedes verlo con el visor de RAM, sobre el address 0x021D0E00. Es algo como esto: Overworld 01 00 00 00 01 00 00 00 02 00 00 00 01 00 00 00 03 00 00 00 01 00 00 00 1B 00 00 00 01 00 00 00 Batalla 0C 00 00 00 01 00 00 00 12 00 00 00 01 00 00 00 06 00 00 00 01 00 00 00 0A 00 00 00 01 00 00 00 El truco consiste en hallar un espacio que no sea usado durante las batallas (puesto que el Grupo 1 sobreescribe al Grupo 2 y viceversa, cuando no son cargados). Milagrosamente, este hueco existe. El overlay 18 y el overlay 1 tienen el mismo offset en la RAM, pero el overlay 1 es mucho más grande que el 18. ¿Qué significa esto? Que lo que sobra del overlay 1 (a la hora de iniciar la batalla) está vacío, y puede ser utilizado. Manos a la obra Paso 1 Abre la ROM de HGSS con CrystalTile2. Paso 2 Pincha en el icono de la NDS (o pulsa Ctrl+N). Paso 3 Pincha con el botón derecho en el overlay_0012.bin y haz click en Extract (no en Export), para descomprimir el archivo. Haz lo mismo en el overlay_0018.bin. Paso 4 Abre ambos con un editor hexadecimal (como HxD). Paso 5 Añade tus propias "relaciones entre tipos" al final del overlay 18 (obviamente, el archivo se expandirá de tamaño). Recomiendo escribir las 324 relaciones ahí, por si luego tenéis que cambiarlo, que sea más cómodo. También puedes coger la mía, actualizada a la Sexta Generación (donde el Tipo ??? es reemplazado por el Tipo Hada): [spoiler]00000A00010A00020A00030A00040A00050500060A00070000080500090A000A0A000B0A000C0A000D0A000E0A000F0A00100A00110A 01001401010A01020501030501040A010514010605010700010814010905010A0A010B0A010C0A010D0A010E05010F1401100A011114 02000A02011402020A02030A02040A02050502061402070A02080502090A020A0A020B0A020C14020D05020E0A020F0A02100A02110A 03000A03010A03020A03030503040503050503060A030705030800030914030A0A030B0A030C14030D0A030E0A030F0A03100A03110A 04000A04010A04020004031404040A04051404060504070A04081404090A040A14040B0A040C05040D14040E0A040F0A04100A04110A 05000A05010505021405030A05040505050A05061405070A05080505090A050A14050B0A050C0A050D0A050E0A050F1405100A05110A 06000A06010506020506030506040A06050A06060A060705060805060905060A05060B0A060C14060D0A060E14060F0A06100A061114 07000007010A07020A07030A07040A07050A07060A07071407080A07090A070A0A070B0A070C0A070D0A070E14070F0A07100507110A 08000A08010A08020A08030A08040A08051408060A08070A080805080914080A05080B05080C0A080D05080E0A080F1408100A08110A 09000A09011409020A09030509040A09050A09060A09070A09080509090A090A05090B0A090C0A090D0A090E0A090F0A091014091114 0A000A0A010A0A020A0A030A0A040A0A05050A06140A070A0A08140A090A0A0A050A0B050A0C140A0D0A0A0E0A0A0F140A10050A110A 0B000A0B010A0B020A0B030A0B04140B05140B060A0B070A0B080A0B090A0B0A140B0B050B0C050B0D0A0B0E0A0B0F0A0B10050B110A 0C000A0C010A0C02050C03050C04140C05140C06050C070A0C08050C090A0C0A050C0B140C0C050C0D0A0C0E0A0C0F0A0C10050C110A 0D000A0D010A0D02140D030A0D04000D050A0D060A0D070A0D080A0D090A0D0A0A0D0B140D0C050D0D050D0E0A0D0F0A0D10050D110A 0E000A0E01140E020A0E03140E040A0E050A0E060A0E070A0E08050E090A0E0A0A0E0B0A0E0C0A0E0D0A0E0E050E0F0A0E100A0E1100 0F000A0F010A0F02140F030A0F04140F050A0F060A0F070A0F08050F090A0F0A050F0B050F0C140F0D0A0F0E0A0F0F050F10140F110A 10000A10010A10020A10030A10040A10050A10060A10070A100805100900100A0A100B0A100C0A100D0A100E0A100F0A10101410110A 11000A11010511020A11030A11040A11050A11060A11071411080A110905110A0A110B0A110C0A110D0A110E14110F0A11100A111105 FFFFFFFF[/spoiler] Paso 6 En el overlay 12, busca en el address XXXXXXXX el valor YYYYYYYY, y sustitúyelo por el valor ZZZZZZZZ. Estos tres valores cambian dependiendo de la región del juego: Juego y código . . . . . . . . Address en Overlay12 . . . . . Pointer original . . . . . Pointer actualizado . . . . . . . . . . . . . .. . (XXXXXXXX) . . . . . . . . . . (YYYYYYYY) . . . . . . . . (ZZZZZZZZ) Española POKEMON HG (IPKS). . . . . . . 0x0001A78C . . . . . . . . . . 9CCC2602 . . . . . . . . . A0BA1F02 POKEMON SS (IPGS). . . . . . . 0x0001A78C . . . . . . . . . . BCCC2602 . . . . . . . . . C0BA1F02 Japonesa POKEMON HG (IPKJ). . . . . . . 0x0001A794 . . . . . . . . . . 78C12602 . . . . . . . . . E0B01F02 POKEMON SS (IPGJ). . . . . . . 0x0001A794 . . . . . . . . . . 78C12602 . . . . . . . . . E0B01F02 Inglesa POKEMON HG (IPKE). . . . . . . 0x0001A78C . . . . . . . . . . 7CCC2602 . . . . . . . . . 60BE1F02 POKEMON SS (IPGE). . . . . . . 0x0001A78C . . . . . . . . . . 7CCC2602 . . . . . . . . . 60BE1F02 Francesa POKEMON HG (IPKF). . . . . . . 0x0001A78C . . . . . . . . . . 9CCC2602 . . . . . . . . . A0BA1F02 POKEMON SS (IPGF). . . . . . . 0x0001A78C . . . . . . . . . . 9CCC2602 . . . . . . . . . A0BA1F02 Italiana POKEMON HG (IPKI). . . . . . . 0x0001A78C . . . . . . . . . . 1CCC2602 . . . . . . . . . 20BA1F02 POKEMON SS (IPGI). . . . . . . 0x0001A78C . . . . . . . . . . 1CCC2602 . . . . . . . . . 20BA1F02 Alemana POKEMON HG (IPKD). . . . . . . 0x0001A78C . . . . . . . . . . 5CCC2602 . . . . . . . . . 60BA1F02 POKEMON SS (IPGD). . . . . . . 0x0001A78C . . . . . . . . . . 5CCC2602 . . . . . . . . . 60BA1F02 Coreana POKEMON HG (IPKK). . . . . . . 0x0001A790 . . . . . . . . . . 80D62602 . . . . . . . . . A0C41F02 POKEMON SS (IPGK). . . . . . . 0x0001A790 . . . . . . . . . . 80D62602 . . . . . . . . . A0C41F02 Paso 7 Guarda ambos archivos y cierra el editor hexadecimal. Paso 8 Vuelve a CrystalTile2, haz click derecho en overlay_0012.bin y pincha en Compression, para importar el archivo y comprirlo en LZ. Haz lo mismo con el overlay_0018.bin. Dado que este último archivo es bastante mayor que el overlay 18 original, tendrás que abrir hueco en la ROM. Pero no te preocupes, CrystalTile2 ya lo hace por ti. Tú sólo pincha en OK. Paso 9 Cierra el CT2 y tu ROM ya está lista. Además, funcionará tanto en emulador como en flashcards, así que no problem. Tutorial original: https://nsmbhd.net/thread/2606-complete-type-chart-in-pokemon-hg-ss-without-breaking-code/