Registrarse

Añadir nuevas MTs

Estado
Cerrado para nuevas respuestas.

Lunos

Enfrentando a La Organización
Miembro insignia
Vayamos directo al punto, esto es lo que encontré hasta el momento:

1) pokeruby\include\constants\items.h
-Define tu nueva TM despues de ITEM_TM50_OVERHEAT y ajusta las IDs correspondientemente.
-Cambia el 50 en #define NUM_TECHNICAL_MACHINES 50 por un 51

2) pokeruby\src\data\items_en.h
-Añade una nueva entrada para tu nueva TM y ajustala correspondientemente.

3) pokeruby\src\data\item_descriptions_en.h
-Añade una descripción para tu TM despues de la descripción de la TM50.

4) pokeruby\src\party_menu.c
-Ctrl+F "MOVE_OVERHEAT," y añade el movimiento de tu nueva TM justo despues.

Y estos son los resultados de algunas pruebas que hice con la estructura "IsHMMove" dentro de party_menu.c



Si alguien tiene información util que aportar, bienvenido sea.

EDIT:
Expansión de TMs conseguida. Si a alguien le interesa verificar el mismo proceso, pero con una MO, adelante.
https://github.com/LOuroboros/pokeruby493/commit/af8c5260f1f42f24c75cb366927046a7f7c50278
Ignoren el cambio en el archivo pokemon_3.c. Como tal, no es necesario para que la TM funcione.


EDIT2 (05/04/2019):
Editado el titulo del tema. Esto no es una expansión de MTs y MOs como tal, es añadir nuevas MT a secas.
Para una verdadera expansión de MTs/MOs, revisen el post de Blurose justo debajo de este.​
 
Última edición:

BluRose

chiste, chiste
Re: Expansión de MTs/MOs

hola, me gustaría postear lo que yo cumplí hace poco minutos

usando este método, es posible tener un total de 128 mts/mos
el método que ilumina lunos en el primer mensaje solo permite que 64 existan a la vez

primer, haz más slots para todos las mts que quieres en
include/constants/items.h
y
src/data/items_en.h
es importante que las indices que se usa en items.h correspondan con el orden que se usa en items_en.h. no debe importar si se lo pone la primera en slot 27 o en slot 2432. solo importa que todas las mts ocupen slots directamente al lado de los otros: tm01 puede ser slot 539 o 9, con tal de que las mts sigiuentes tienen los próximos slots
sugiero que también se añada esta parte al archivo después de las mts (en items.h) para que nadie tenga que renombrar todas las instancias de los nombres usados:
Código:
#define ITEM_TM01 289 // o cualquier sea tu primer indice
#define ITEM_TM02 290
#define ITEM_TM03 291
#define ITEM_TM04 292
#define ITEM_TM05 293
#define ITEM_TM06 294
#define ITEM_TM07 295
#define ITEM_TM08 296
#define ITEM_TM09 297
#define ITEM_TM10 298
#define ITEM_TM11 299
#define ITEM_TM12 300
#define ITEM_TM13 301
#define ITEM_TM14 302
#define ITEM_TM15 303
#define ITEM_TM16 304
#define ITEM_TM17 305
#define ITEM_TM18 306
#define ITEM_TM19 307
#define ITEM_TM20 308
#define ITEM_TM21 309
#define ITEM_TM22 310
#define ITEM_TM23 311
#define ITEM_TM24 312
#define ITEM_TM25 313
#define ITEM_TM26 314
#define ITEM_TM27 315
#define ITEM_TM28 316
#define ITEM_TM29 317
#define ITEM_TM30 318
#define ITEM_TM31 319
#define ITEM_TM32 320
#define ITEM_TM33 321
#define ITEM_TM34 322
#define ITEM_TM35 323
#define ITEM_TM36 324
#define ITEM_TM37 325
#define ITEM_TM38 326
#define ITEM_TM39 327
#define ITEM_TM40 328
#define ITEM_TM41 329
#define ITEM_TM42 330
#define ITEM_TM43 331
#define ITEM_TM44 332
#define ITEM_TM45 333
#define ITEM_TM46 334
#define ITEM_TM47 335
#define ITEM_TM48 336
#define ITEM_TM49 337
#define ITEM_TM50 338
//nuevas mts aquí
#define ITEM_HM01 // numeros aquí
#define ITEM_HM02 // numeros aquí
#define ITEM_HM03 // numeros aquí 
#define ITEM_HM04 // numeros aquí
#define ITEM_HM05 // numeros aquí
#define ITEM_HM06 // numeros aquí
#define ITEM_HM07 // numeros aquí
#define ITEM_HM08 // numeros aquí

#define ITEM_TM01_FOCUS_PUNCH ITEM_TM01
#define ITEM_TM02_DRAGON_CLAW ITEM_TM02
#define ITEM_TM03_WATER_PULSE ITEM_TM03
#define ITEM_TM04_CALM_MIND ITEM_TM04
#define ITEM_TM05_ROAR ITEM_TM05
#define ITEM_TM06_TOXIC ITEM_TM06
#define ITEM_TM07_HAIL ITEM_TM07
#define ITEM_TM08_BULK_UP ITEM_TM08
#define ITEM_TM09_BULLET_SEED ITEM_TM09
#define ITEM_TM10_HIDDEN_POWER ITEM_TM10
#define ITEM_TM11_SUNNY_DAY ITEM_TM11
#define ITEM_TM12_TAUNT ITEM_TM12
#define ITEM_TM13_ICE_BEAM ITEM_TM13
#define ITEM_TM14_BLIZZARD ITEM_TM14
#define ITEM_TM15_HYPER_BEAM ITEM_TM15
#define ITEM_TM16_LIGHT_SCREEN ITEM_TM16
#define ITEM_TM17_PROTECT ITEM_TM17
#define ITEM_TM18_RAIN_DANCE ITEM_TM18
#define ITEM_TM19_GIGA_DRAIN ITEM_TM19
#define ITEM_TM20_SAFEGUARD ITEM_TM20
#define ITEM_TM21_FRUSTRATION ITEM_TM21
#define ITEM_TM22_SOLARBEAM ITEM_TM22
#define ITEM_TM23_IRON_TAIL ITEM_TM23
#define ITEM_TM24_THUNDERBOLT ITEM_TM24
#define ITEM_TM25_THUNDER ITEM_TM25
#define ITEM_TM26_EARTHQUAKE ITEM_TM26
#define ITEM_TM27_RETURN ITEM_TM27
#define ITEM_TM28_DIG ITEM_TM28
#define ITEM_TM29_PSYCHIC ITEM_TM29
#define ITEM_TM30_SHADOW_BALL ITEM_TM30
#define ITEM_TM31_BRICK_BREAK ITEM_TM31
#define ITEM_TM32_DOUBLE_TEAM ITEM_TM32
#define ITEM_TM33_REFLECT ITEM_TM33
#define ITEM_TM34_SHOCK_WAVE ITEM_TM34
#define ITEM_TM35_FLAMETHROWER ITEM_TM35
#define ITEM_TM36_SLUDGE_BOMB ITEM_TM36
#define ITEM_TM37_SANDSTORM ITEM_TM37
#define ITEM_TM38_FIRE_BLAST ITEM_TM38
#define ITEM_TM39_ROCK_TOMB ITEM_TM39
#define ITEM_TM40_AERIAL_ACE ITEM_TM40
#define ITEM_TM41_TORMENT ITEM_TM41
#define ITEM_TM42_FACADE ITEM_TM42
#define ITEM_TM43_SECRET_POWER ITEM_TM43
#define ITEM_TM44_REST ITEM_TM44
#define ITEM_TM45_ATTRACT ITEM_TM45
#define ITEM_TM46_THIEF ITEM_TM46
#define ITEM_TM47_STEEL_WING ITEM_TM47
#define ITEM_TM48_SKILL_SWAP ITEM_TM48
#define ITEM_TM49_SNATCH ITEM_TM49
#define ITEM_TM50_OVERHEAT ITEM_TM50
#define ITEM_HM01_CUT ITEM_HM01
#define ITEM_HM02_FLY ITEM_HM02
#define ITEM_HM03_SURF ITEM_HM03
#define ITEM_HM04_STRENGTH ITEM_HM04
#define ITEM_HM05_FLASH ITEM_HM05
#define ITEM_HM06_ROCK_SMASH ITEM_HM06
#define ITEM_HM07_WATERFALL ITEM_HM07
#define ITEM_HM08_DIVE ITEM_HM08

ahora, los learnsets.

src/data/pokemon/tmhm_learnsets.h
aquí, necesitamos editar la manera en la cual los pokémon puedan aprender los movimientos. al principio del archivo:
Código:
#define TMHM_LEARNSET(moves, moves2) {(u32)(moves), ((u64)(moves) >> 32), (u32)(moves2), ((u64)(moves2) >> 32)}
#define TMHM(tmhm) ((u64)1 << (ITEM_##tmhm - ITEM_TM01))
#define TMHM2(tmhm) ((u64)1 << (ITEM_##tmhm - ITEM_TM65))

const u32 gTMHMLearnsets[][4] =
ahora se almacenan las mts en otra manera. cada una de las primeras 64 mts tiene su propio parámetro, mientras la segunda 64 mts tiene otro. así veamos un learnset como ejemplo que hice:
Código:
    [SPECIES_BULBASAUR]   = TMHM_LEARNSET(TMHM(TM06)
                                        | TMHM(TM09)
                                        | TMHM(TM10)
                                        | TMHM(TM11)
                                        | TMHM(TM17)
                                        | TMHM(TM19)
                                        | TMHM(TM21)
                                        | TMHM(TM22)
                                        | TMHM(TM27)
                                        | TMHM(TM32)
                                        | TMHM(TM36)
                                        | TMHM(TM42)
                                        | TMHM(TM43)
                                        | TMHM(TM44)
                                        | TMHM(TM45)
                                        | TMHM(TM64),
                                          TMHM2(TM65)
                                        | TMHM2(TM77)
                                        | TMHM2(TM89)
                                        | TMHM2(TM99)
                                        | TMHM2(TM100)
                                        | TMHM2(HM01)
                                        | TMHM2(HM04)
                                        | TMHM2(HM05)
                                        | TMHM2(HM06)),
ahora todos los bulbasaur pueden aprender las mts indicadas.
ten en mente que todas las mts después de 64 (65 y más) tienen que tener "TMHM2" y tiene que estar después del coma en la lista! mos también se coloca después del coma y con TMHM2.
si alguien tiene preguntas, ¡pregúntelas!

ahora para los cambios en el código:
src/pokemon_3.c:
al principio, cambia:
Código:
extern u32 gTMHMLearnsets[][2];
a
Código:
extern u32 gTMHMLearnsets[][4];
CanMonLearnTMHM tiene que ser diferente:
Código:
u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm)
{
    u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
    if (species == SPECIES_EGG)
    {
        return 0;
    }
    else if (tm < 32)
    {
        u32 mask = 1 << tm;
        return gTMHMLearnsets[species][0] & mask;
    }
    else if (tm < 64)
    {
        u32 mask = 1 << (tm - 32);
        return gTMHMLearnsets[species][1] & mask;
    }
    else if (tm < 96)
    {
        u32 mask = 1 << (tm - 64);
        return gTMHMLearnsets[species][2] & mask;
    }
    else
    {
        u32 mask = 1 << (tm - 96);
        return gTMHMLearnsets[species][3] & mask;
    }
}
src/party_menu.c, en Task_TeamMonTMMove (cerca de línea 3899):
no hay cambios en esta primera pieza de código, pero aquí está:
Código:
void Task_TeamMonTMMove(u8 taskId)
{
    GetMonNickname(ewram1C000.pokemon, gStringVar1);
    ewram1C000.unk8 = ItemIdToBattleMoveId(ewram1C000.secondarySelectedIndex);
    StringCopy(gStringVar2, gMoveNames[ewram1C000.unk8]);
    ewram1B000.unk282 = 0;
    if (pokemon_has_move(ewram1C000.pokemon, ewram1C000.unk8))
    {
        StringExpandPlaceholders(gStringVar4, gOtherText_AlreadyKnows);
        sub_806E834(gStringVar4, 1);
        gTasks[taskId].func = party_menu_link_mon_held_item_object;
    }
    else
    {
        if (
#if DEBUG
         !gUnknown_020297ED &&
#endif
         !CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.secondarySelectedIndex - 33))
        {
            StringExpandPlaceholders(gStringVar4, gOtherText_NotCompatible);
            sub_806E834(gStringVar4, 1);
            gTasks[taskId].func = party_menu_link_mon_held_item_object;
        }
        else
        {
            if (GiveMoveToMon(ewram1C000.pokemon, ewram1C000.unk8) != 0xFFFF)
            {
                Task_TeamMonTMMove2(taskId);
            }
            else
            {
                StringExpandPlaceholders(gStringVar4, gOtherText_WantsToLearn);
                sub_806E834(gStringVar4, 1);
                gTasks[taskId].func = sub_806F358;
            }
        }
    }
}
el "if" que tiene que cambiar:
Código:
        if (
#if DEBUG
         !gUnknown_020297ED &&
#endif
         !CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.secondarySelectedIndex - 33))
        {
33 necesita ser:
Código:
(ITEM_TM01 % 256)
cual nos da:
Código:
        if (
#if DEBUG
         !gUnknown_020297ED &&
#endif
         !CanMonLearnTMHM(ewram1C000.pokemon, ewram1C000.secondarySelectedIndex - (ITEM_TM01 % 256)))
        {
y src/pokemon_menu.c, en sub_808AE8C (alrededor de línea 934):
al principio, añade
Código:
#include "constants/items.h"
ahora, el código:
Código:
static void sub_808AE8C(void)
{
    u8 i;
    u8 arg = gSpecialVar_ItemId - 33;
    for (i = 0; i < 6; i++)
    {
        if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
        {
            sub_806D668(i);
            if (
#if DEBUG
             gUnknown_020297ED == 0 &&
#endif
             (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg)))
                DrawMonDescriptorStatus(i, 0x9A);
            else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gSpecialVar_ItemId)))
                DrawMonDescriptorStatus(i, 0xA8);
            else
                DrawMonDescriptorStatus(i, 0x8C);
        }
    }
}
en esto, hay
Código:
    u8 arg = gSpecialVar_ItemId - 33;
cambia otra vez 33 a
Código:
(ITEM_TM01 % 256)
para terminar con
Código:
    u8 arg = gSpecialVar_ItemId - (ITEM_TM01 % 256);
también edita la lista de movimientos como te gusta en src/party_menu.c en línea 113. cada movimiento corresponde con otra mt

finalmente, aquí está mi archivo tmhmlearnsets.h porque el cambio es gigantesco y me pasó demasiado tiempo arreglando todos los learnsets para el nuevo sistema
edítalo como deseas, pero recuerda como tienes que hacerlo. ése asimismo asume que cambiaste como yo dije encima (en items.h)
hasta la próxima~
 
Última edición:

Azulado

Ex-Creador de Genshin Emblem no es un hack de PKMN
Respuesta: Expansión de MTs/MOs

Se Puede Hacer Lo Mismo En Fire Red
 
Estado
Cerrado para nuevas respuestas.
Arriba