HGSS | Otros | Editar la efectividad entre tipos

Avisos

Like Tree6Gracias
  • 5 Post By Mikelan98
  • 1 Post By Dani_SR_17

Respuesta
 
Herramientas Desplegado
  #1  
02/09/2014
Predeterminado HGSS | Otros | Editar la efectividad entre tipos
Nota: Para que luego no andéis preguntando chorradas, un número precedido por 0x significa que está en hexadecimal.

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


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

00000A00010A00020A00030A00040A00050500060A00070000 080500090A000A0A000B0A000C0A000D0A000E0A000F0A0010 0A00110A 01001401010A01020501030501040A01051401060501070001 0814010905010A0A010B0A010C0A010D0A010E05010F140110 0A011114 02000A02011402020A02030A02040A02050502061402070A02 080502090A020A0A020B0A020C14020D05020E0A020F0A0210 0A02110A 03000A03010A03020A03030503040503050503060A03070503 0800030914030A0A030B0A030C14030D0A030E0A030F0A0310 0A03110A 04000A04010A04020004031404040A04051404060504070A04 081404090A040A14040B0A040C05040D14040E0A040F0A0410 0A04110A 05000A05010505021405030A05040505050A05061405070A05 080505090A050A14050B0A050C0A050D0A050E0A050F140510 0A05110A 06000A06010506020506030506040A06050A06060A06070506 0805060905060A05060B0A060C14060D0A060E14060F0A0610 0A061114 07000007010A07020A07030A07040A07050A07060A07071407 080A07090A070A0A070B0A070C0A070D0A070E14070F0A0710 0507110A 08000A08010A08020A08030A08040A08051408060A08070A08 0805080914080A05080B05080C0A080D05080E0A080F140810 0A08110A 09000A09011409020A09030509040A09050A09060A09070A09 080509090A090A05090B0A090C0A090D0A090E0A090F0A0910 14091114 0A000A0A010A0A020A0A030A0A040A0A05050A06140A070A0A 08140A090A0A0A050A0B050A0C140A0D0A0A0E0A0A0F140A10 050A110A 0B000A0B010A0B020A0B030A0B04140B05140B060A0B070A0B 080A0B090A0B0A140B0B050B0C050B0D0A0B0E0A0B0F0A0B10 050B110A 0C000A0C010A0C02050C03050C04140C05140C06050C070A0C 08050C090A0C0A050C0B140C0C050C0D0A0C0E0A0C0F0A0C10 050C110A 0D000A0D010A0D02140D030A0D04000D050A0D060A0D070A0D 080A0D090A0D0A0A0D0B140D0C050D0D050D0E0A0D0F0A0D10 050D110A 0E000A0E01140E020A0E03140E040A0E050A0E060A0E070A0E 08050E090A0E0A0A0E0B0A0E0C0A0E0D0A0E0E050E0F0A0E10 0A0E1100 0F000A0F010A0F02140F030A0F04140F050A0F060A0F070A0F 08050F090A0F0A050F0B050F0C140F0D0A0F0E0A0F0F050F10 140F110A 10000A10010A10020A10030A10040A10050A10060A10070A10 0805100900100A0A100B0A100C0A100D0A100E0A100F0A1010 1410110A 11000A11010511020A11030A11040A11050A11060A11071411 080A110905110A0A110B0A110C0A110D0A110E14110F0A1110 0A111105 FFFFFFFF


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/

Última edición por Mikelan98; 09/09/2014 a las 11:28
  #2  
02/09/2014
Predeterminado Respuesta: [Tutorial HGSS] Editar la efectividad entre tipos
Actualizado el tutorial, para insertar nuevas "relaciones".
Pokémon para intercambiar en Pokémon X e Y
Para los interesados, consultadme mediante perfil/MP


  #3  
10/09/2014
Predeterminado Respuesta: [Tutorial HGSS] Editar la efectividad entre tipos
¿Nadie comenta?
Vale, que el hackeo en NDS no sea el mayoritario en el foro, pero es un aportazo como para no comentar...

La verdad, realizas un curro impresionante investigando en NDS.
Además, se agradece ver como pasaste de solo conocer donde estaba a como conseguir modificarlo y tal, da inspiración y ganas de investigar otras cosas jeje.

Sobre el tuto, pues muy bien explicadito, pasito a pasito todo claro y comprensible.

Un gran trabajo
Gracias: Master Brock
¡¡VIVA EL STAFFMIGUISMO!!

"Aunque algunos se empeñen en que pierda.
Sé que mis fans me harán grande,
mis haters me harán LEYENDA."



Premios






Dicho por Sayer301!
Tener que asumir que el alumno supera al maestro, puto Dani_SR_17 como controla de scripts.

Mis Tutoriales, Aportes e Investigaciones

-Recopilación de Scripts de Dani_SR_17-
-Colores del menú de info de los Pokémon-
-Pasar scripts usando la Refactorización-
-Pasar mapas de una Rom a otra y copias de seguridad-
-Pack de TextBox de Dani_SR_17-
-Daani Translate, por una Rom totalmente en Español-
-[Parche FR] No más Flashback-



Cheve, no he podido resistirme xD


_____Sexy?Sex
____?Sexy?Sexy
___y?Sexy?Sexy?
___?Sexy?Sexy?S
___?Sexy?Sexy?S
__?Sexy?Sexy?Se
_?Sexy?Sexy?Se
_?Sexy?Sexy?Se
_?Sexy?Sexy?Sexy?
?Sexy?Sexy?Sexy?Sexy
?Sexy?Sexy?Sexy?Sexy?Se
?Sexy?Sexy?Sexy?Sexy?Sex
_?Sexy?__?Sexy?Sexy?Sex
___?Sex____?Sexy?Sexy?
___?Sex_____?Sexy?Sexy
___?Sex_____?Sexy?Sexy
____?Sex____?Sexy?Sexy
_____?Se____?Sexy?Sex
______?Se__?Sexy?Sexy
_______?Sexy?Sexy?Sex
________?Sexy?Sexy?sex
_______?Sexy?Sexy?Sexy?Se
_______?Sexy?Sexy?Sexy?Sexy?
_______?Sexy?Sexy?Sexy?Sexy?Sexy
_______?Sexy?Sexy?Sexy?Sexy?Sexy?S
________?Sexy?Sexy____?Sexy?Sexy?se
_________?Sexy?Se_______?Sexy?Sexy?
_________?Sexy?Se_____?Sexy?Sexy?
_________?Sexy?S____?Sexy?Sexy
_________?Sexy?S_?Sexy?Sexy
________?Sexy?Sexy?Sexy
________?Sexy?Sexy?S
________?Sexy?Sexy
_______?Sexy?Se
_______?Sexy?
______?Sexy?
______?Sexy?
______?Sexy?
______?Sexy
______?Sexy
_______?Sex
_______?Sex
_______?Sex
______?Sexy
______?Sexy
_______Sexy
_______ Sexy?
________SexY

  #4  
10/09/2014
Predeterminado Respuesta: [Tutorial HGSS] Editar la efectividad entre tipos
Y yo me pregunto que clase de poder divino tienes para investigar tan a fondo.

Gracias por el aporte molón :3
Veo que el HDS cada vez avanza más y más; y no es por nada, pero actualmente eres el mayor exponente de habla hispana en ésto xD

Retirado del RomHacking




Skype: scriptercheve
Twitter: The Moon Lover



"Cuando oigas a un niño preguntar
Por qué el sol viene y se va
Dile: porque en esta vida no hay
Luz sin oscuridad"


Respuesta

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 02:34.