Untangled TMs and HMs from item ids (#7173)

This commit is contained in:
Nephrite 2025-07-04 18:07:53 +01:00 committed by GitHub
parent b3f52166df
commit e8abfbce49
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 201 additions and 209 deletions

View File

@ -1027,9 +1027,6 @@
#define MAIL_NONE 0xFF
#define ITEM_TO_MULCH(itemId)(((itemId) - ITEM_GROWTH_MULCH) + 1)
#define NUM_TECHNICAL_MACHINES 100
#define NUM_HIDDEN_MACHINES 8
#define MAX_BAG_ITEM_CAPACITY 999
#define MAX_PC_ITEM_CAPACITY 999
#define MAX_PYRAMID_BAG_ITEM_CAPACITY 99 // Values higher than 255 require free SaveBlock2 space.

View File

@ -3,8 +3,44 @@
#include "constants/item.h"
#include "constants/items.h"
#include "constants/moves.h"
#include "constants/tms_hms.h"
/* Expands to:
* enum
* {
* ITEM_TM_FOCUS_PUNCH = ITEM_TM01,
* ...
* ITEM_HM_CUT = ITM_HM01,
* ...
* }; */
#define ENUM_TM(n, id) CAT(ITEM_TM_, id) = CAT(ITEM_TM, n),
#define ENUM_HM(n, id) CAT(ITEM_HM_, id) = CAT(ITEM_HM, n),
#define TO_TMHM_NUMS(a, ...) (__VA_ARGS__)
enum TMHMItemId
{
RECURSIVELY(R_ZIP(ENUM_TM, TO_TMHM_NUMS NUMBERS_256, (FOREACH_TM(APPEND_COMMA))))
RECURSIVELY(R_ZIP(ENUM_HM, TO_TMHM_NUMS NUMBERS_256, (FOREACH_HM(APPEND_COMMA))))
};
#undef ENUM_TM
#undef ENUM_HM
#undef TO_TMHM_NUMS
/* Each of these TM_HM enums corresponds an index in the list of TMs + HMs item ids in
* gTMHMItemMoveIds. The index for an item can be retrieved with GetItemTMHMIndex below.
*/
#define UNPACK_TM_HM_ENUM(_tmHm) CAT(ENUM_TM_HM_, _tmHm),
enum TMHMIndex
{
FOREACH_TMHM(UNPACK_TM_HM_ENUM)
NUM_ALL_MACHINES,
NUM_TECHNICAL_MACHINES = (0 FOREACH_TM(PLUS_ONE)),
NUM_HIDDEN_MACHINES = (0 FOREACH_HM(PLUS_ONE)),
};
#undef UNPACK_TM_HM_ENUM
typedef void (*ItemUseFunc)(u8);
struct Item
@ -20,8 +56,8 @@ struct Item
u8 holdEffectParam;
u8 importance:2;
u8 notConsumed:1;
u8 padding:5;
enum Pocket pocket:8;
enum Pocket pocket:5;
u8 padding;
u8 type;
u8 battleUsage;
u8 flingPower;
@ -29,14 +65,75 @@ struct Item
const u16 *iconPalette;
};
struct __attribute__((packed, aligned(2))) BagPocket
struct ALIGNED(2) BagPocket
{
struct ItemSlot *itemSlots;
u16 capacity;
};
struct TmHmIndexKey
{
enum TMHMItemId itemId:16;
u16 moveId;
};
extern const struct Item gItemsInfo[];
extern struct BagPocket gBagPockets[];
extern const struct TmHmIndexKey gTMHMItemMoveIds[];
#define UNPACK_ITEM_TO_TM_INDEX(_tm) case CAT(ITEM_TM_, _tm): return CAT(ENUM_TM_HM_, _tm) + 1;
#define UNPACK_ITEM_TO_HM_INDEX(_hm) case CAT(ITEM_HM_, _hm): return CAT(ENUM_TM_HM_, _hm) + 1;
#define UNPACK_ITEM_TO_TM_MOVE_ID(_tm) case CAT(ITEM_TM_, _tm): return CAT(MOVE_, _tm);
#define UNPACK_ITEM_TO_HM_MOVE_ID(_hm) case CAT(ITEM_HM_, _hm): return CAT(MOVE_, _hm);
static inline enum TMHMIndex GetItemTMHMIndex(u16 item)
{
switch (item)
{
/* Expands to:
* case ITEM_TM_FOCUS_PUNCH:
* return 1;
* case ITEM_TM_DRAGON_CLAW:
* return 2;
* etc */
FOREACH_TM(UNPACK_ITEM_TO_TM_INDEX)
FOREACH_HM(UNPACK_ITEM_TO_HM_INDEX)
default:
return 0;
}
}
static inline u16 GetItemTMHMMoveId(u16 item)
{
switch (item)
{
/* Expands to:
* case ITEM_TM_FOCUS_PUNCH:
* return MOVE_FOCUS_PUNCH;
* case ITEM_TM_DRAGON_CLAW:
* return MOVE_DRAGON_CLAW;
* etc */
FOREACH_TM(UNPACK_ITEM_TO_TM_MOVE_ID)
FOREACH_HM(UNPACK_ITEM_TO_HM_MOVE_ID)
default:
return MOVE_NONE;
}
}
#undef UNPACK_ITEM_TO_TM_INDEX
#undef UNPACK_ITEM_TO_HM_INDEX
#undef UNPACK_ITEM_TO_TM_MOVE_ID
#undef UNPACK_ITEM_TO_HM_MOVE_ID
static inline enum TMHMItemId GetTMHMItemId(enum TMHMIndex index)
{
return gTMHMItemMoveIds[index].itemId;
}
static inline u16 GetTMHMMoveId(enum TMHMIndex index)
{
return gTMHMItemMoveIds[index].moveId;
}
u16 GetBagItemId(enum Pocket pocketId, u32 pocketPos);
u16 GetBagItemQuantity(enum Pocket pocketId, u32 pocketPos);
@ -85,25 +182,4 @@ u32 GetItemStatus1Mask(u16 itemId);
u32 GetItemStatus2Mask(u16 itemId);
u32 GetItemSellPrice(u32 itemId);
/* Expands to:
* enum
* {
* ITEM_TM_FOCUS_PUNCH,
* ...
* ITEM_HM_CUT,
* ...
* }; */
#define ENUM_TM(id) CAT(ITEM_TM_, id),
#define ENUM_HM(id) CAT(ITEM_HM_, id),
enum
{
ENUM_TM_START_ = ITEM_TM01 - 1,
FOREACH_TM(ENUM_TM)
ENUM_HM_START_ = ITEM_HM01 - 1,
FOREACH_HM(ENUM_HM)
};
#undef ENUM_TM
#undef ENUM_HM
#endif // GUARD_ITEM_H

View File

@ -26,8 +26,9 @@
#define STR(...) STR_(__VA_ARGS__)
#define STR_(...) #__VA_ARGS__
/* You'll never guess what this one does */
/* You'll never guess what these do */
#define APPEND_SEMICOLON(a) a;
#define APPEND_COMMA(a) a,
/* Converts a string to a compound literal, essentially making it a pointer to const u8 */
#define COMPOUND_STRING(str) (const u8[]) _(str)
@ -98,6 +99,21 @@
#define R_FOR_EACH_WITH_(macro, args, a, ...) INVOKE_WITH(macro, args, a) __VA_OPT__(R_FOR_EACH_WITH_P PARENS (macro, args, __VA_ARGS__))
#define R_FOR_EACH_WITH_P() R_FOR_EACH_WITH_
/* Expands to 'macro(a, b)' for each 'a' in 'as' and 'b' in 'bs'.
* Uses the shorter of 'as' and 'bs'. (Credit to MGriffin) */
#define R_ZIP(macro, as, bs) CAT(R_ZIP_, CAT(R_ZIP_NONEMPTY(as), R_ZIP_NONEMPTY(bs)))(macro, FIRST as, FIRST bs, (EXCEPT_1 as), (EXCEPT_1 bs))
#define R_ZIP_00(macro, a, b, as, bs)
#define R_ZIP_01(macro, a, b, as, bs)
#define R_ZIP_10(macro, a, b, as, bs)
#define R_ZIP_11(macro, a, b, as, bs) macro(a, b) R_ZIP_P PARENS (macro, as, bs)
#define R_ZIP_P() R_ZIP
#define R_ZIP_NONEMPTY(as) R_ZIP_NONEMPTY_ as
#define R_ZIP_NONEMPTY_(...) FIRST(__VA_OPT__(1,) 0)
/* Just a lot of numbers (with leading zeroes - remove with REMOVE_LEADING_ZEROES) */
#define NUMBERS_256 (00, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255)
/* Picks the xth VA_ARG if it exists, otherwise returns a default value */
#define DEFAULT(_default, ...) FIRST(__VA_OPT__(__VA_ARGS__, ) _default)
#define DEFAULT_2(_default, ...) DEFAULT(_default __VA_OPT__(, SECOND(__VA_ARGS__)))
@ -171,4 +187,10 @@ Input must be of the form (upper << lower) where upper can be up to 3, lower up
/* Finds the required digits to display the number (maximum 4) */
#define MAX_DIGITS(_num) 1 + !!(_num / 10) + !!(_num / 100) + !!(_num / 1000)
/* Converts a number with leading zeroes to a normal int (base 10 and up to three digits only!) */
#define REMOVE_LEADING_ZEROES(_num) (((0x##_num / 256) * 100) + ((0x##_num / 16) * 10) + (0x##_num % 16))
/* Useful for counting arguments */
#define PLUS_ONE(...) + 1
#endif

View File

@ -824,7 +824,8 @@ void CreateTask_PlayMapChosenOrBattleBGM(u16 songId);
const u16 *GetMonFrontSpritePal(struct Pokemon *mon);
const u16 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, bool32 isShiny, u32 personality);
const u16 *GetMonSpritePalFromSpecies(u16 species, bool32 isShiny, bool32 isFemale);
bool8 IsMoveHM(u16 move);
bool32 IsMoveHM(u16 move);
bool32 CannotForgetMove(u16 move);
bool8 IsMonSpriteNotFlipped(u16 species);
s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor);
s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor);

View File

@ -353,14 +353,12 @@ static u16 GetRandomAlternateMove(u8 monId)
// NOTE: Below is an infinite loop if a species which cannot learn TMs is assigned to an Apprentice
do
{
id = Random() % (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES);
shouldUseMove = CanLearnTeachableMove(species, ItemIdToBattleMoveId(ITEM_TM01 + id));
id = (Random() % NUM_ALL_MACHINES) + 1;
move = GetTMHMMoveId(id);
shouldUseMove = CanLearnTeachableMove(species, move);
}
while (!shouldUseMove);
move = ItemIdToBattleMoveId(ITEM_TM01 + id);
shouldUseMove = TRUE;
if (numLearnsetMoves <= MAX_MON_MOVES)
j = 0;
else

View File

@ -27,6 +27,7 @@
#include "sound.h"
#include "pokemon_icon.h"
#include "data.h"
#include "item.h"
#include "international_string_util.h"
#include "trainer_pokemon_sprites.h"
#include "scanline_effect.h"
@ -3976,12 +3977,12 @@ static bool32 IsDomeLuckyMove(u32 move)
static bool32 IsDomePopularMove(u32 move)
{
u8 i;
for (i = 0; i < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; i++)
for (i = 0; i < NUM_ALL_MACHINES; i++)
{
if (ItemIdToBattleMoveId(ITEM_TM01 + i) == move)
if (GetTMHMMoveId(i + 1) == move)
return TRUE;
}
if (i == NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES)
if (i == NUM_ALL_MACHINES)
return FALSE;
// Filter in TMs/HMs
if (GetMovePower(move) >= 90)

View File

@ -8497,7 +8497,7 @@ static void Cmd_yesnoboxlearnmove(void)
else
{
u16 move = GetMonData(&gPlayerParty[gBattleStruct->expGetterMonId], MON_DATA_MOVE1 + movePosition);
if (IsMoveHM(move))
if (CannotForgetMove(move))
{
PrepareStringBattle(STRINGID_HMMOVESCANTBEFORGOTTEN, B_POSITION_PLAYER_LEFT);
gBattleScripting.learnMoveState = 6;

View File

@ -10445,7 +10445,7 @@ enum DamageCategory GetCategoryBasedOnStats(u32 battler)
static u32 GetFlingPowerFromItemId(u32 itemId)
{
if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08)
if (gItemsInfo[itemId].pocket == POCKET_TM_HM)
{
u32 power = GetMovePower(ItemIdToBattleMoveId(itemId));
if (power > 1)

View File

@ -10454,7 +10454,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_FOCUS_PUNCH,
},
[ITEM_TM_DRAGON_CLAW] =
@ -10469,7 +10468,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_DRAGON_CLAW,
},
[ITEM_TM_WATER_PULSE] =
@ -10484,7 +10482,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_WATER_PULSE,
},
[ITEM_TM_CALM_MIND] =
@ -10499,7 +10496,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_CALM_MIND,
},
[ITEM_TM_ROAR] =
@ -10514,7 +10510,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_ROAR,
},
[ITEM_TM_TOXIC] =
@ -10529,7 +10524,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_TOXIC,
},
[ITEM_TM_HAIL] =
@ -10551,7 +10545,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_HAIL,
},
[ITEM_TM_BULK_UP] =
@ -10566,7 +10559,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_BULK_UP,
},
[ITEM_TM_BULLET_SEED] =
@ -10581,7 +10573,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_BULLET_SEED,
},
[ITEM_TM_HIDDEN_POWER] =
@ -10596,7 +10587,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_HIDDEN_POWER,
},
[ITEM_TM_SUNNY_DAY] =
@ -10611,7 +10601,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SUNNY_DAY,
},
[ITEM_TM_TAUNT] =
@ -10626,7 +10615,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_TAUNT,
},
[ITEM_TM_ICE_BEAM] =
@ -10645,7 +10633,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_ICE_BEAM,
},
[ITEM_TM_BLIZZARD] =
@ -10666,7 +10653,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_BLIZZARD,
},
[ITEM_TM_HYPER_BEAM] =
@ -10681,7 +10667,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_HYPER_BEAM,
},
[ITEM_TM_LIGHT_SCREEN] =
@ -10696,7 +10681,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_LIGHT_SCREEN,
},
[ITEM_TM_PROTECT] =
@ -10711,7 +10695,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_PROTECT,
},
[ITEM_TM_RAIN_DANCE] =
@ -10726,7 +10709,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_RAIN_DANCE,
},
[ITEM_TM_GIGA_DRAIN] =
@ -10741,7 +10723,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_GIGA_DRAIN,
},
[ITEM_TM_SAFEGUARD] =
@ -10756,7 +10737,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SAFEGUARD,
},
[ITEM_TM_FRUSTRATION] =
@ -10771,7 +10751,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_FRUSTRATION,
},
[ITEM_TM_SOLAR_BEAM] =
@ -10786,7 +10765,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SOLAR_BEAM,
},
[ITEM_TM_IRON_TAIL] =
@ -10801,7 +10779,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_IRON_TAIL,
},
[ITEM_TM_THUNDERBOLT] =
@ -10816,7 +10793,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_THUNDERBOLT,
},
[ITEM_TM_THUNDER] =
@ -10831,7 +10807,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_THUNDER,
},
[ITEM_TM_EARTHQUAKE] =
@ -10846,7 +10821,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_EARTHQUAKE,
},
[ITEM_TM_RETURN] =
@ -10861,7 +10835,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_RETURN,
},
[ITEM_TM_DIG] =
@ -10876,7 +10849,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_DIG,
},
[ITEM_TM_PSYCHIC] =
@ -10891,7 +10863,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_PSYCHIC,
},
[ITEM_TM_SHADOW_BALL] =
@ -10906,7 +10877,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SHADOW_BALL,
},
[ITEM_TM_BRICK_BREAK] =
@ -10921,7 +10891,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_BRICK_BREAK,
},
[ITEM_TM_DOUBLE_TEAM] =
@ -10936,7 +10905,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_DOUBLE_TEAM,
},
[ITEM_TM_REFLECT] =
@ -10951,7 +10919,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_REFLECT,
},
[ITEM_TM_SHOCK_WAVE] =
@ -10966,7 +10933,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SHOCK_WAVE,
},
[ITEM_TM_FLAMETHROWER] =
@ -10981,7 +10947,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_FLAMETHROWER,
},
[ITEM_TM_SLUDGE_BOMB] =
@ -10996,7 +10961,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SLUDGE_BOMB,
},
[ITEM_TM_SANDSTORM] =
@ -11011,7 +10975,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SANDSTORM,
},
[ITEM_TM_FIRE_BLAST] =
@ -11026,7 +10989,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_FIRE_BLAST,
},
[ITEM_TM_ROCK_TOMB] =
@ -11041,7 +11003,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_ROCK_TOMB,
},
[ITEM_TM_AERIAL_ACE] =
@ -11056,7 +11017,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_AERIAL_ACE,
},
[ITEM_TM_TORMENT] =
@ -11071,7 +11031,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_TORMENT,
},
[ITEM_TM_FACADE] =
@ -11086,7 +11045,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_FACADE,
},
[ITEM_TM_SECRET_POWER] =
@ -11101,7 +11059,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SECRET_POWER,
},
[ITEM_TM_REST] =
@ -11116,7 +11073,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_REST,
},
[ITEM_TM_ATTRACT] =
@ -11131,7 +11087,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_ATTRACT,
},
[ITEM_TM_THIEF] =
@ -11146,7 +11101,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_THIEF,
},
[ITEM_TM_STEEL_WING] =
@ -11161,7 +11115,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_STEEL_WING,
},
[ITEM_TM_SKILL_SWAP] =
@ -11176,7 +11129,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SKILL_SWAP,
},
[ITEM_TM_SNATCH] =
@ -11191,7 +11143,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SNATCH,
},
[ITEM_TM_OVERHEAT] =
@ -11206,7 +11157,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_OVERHEAT,
},
[ITEM_TM51] =
@ -11218,7 +11168,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM52] =
@ -11230,7 +11179,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM53] =
@ -11242,7 +11190,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM54] =
@ -11254,7 +11201,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM55] =
@ -11266,7 +11212,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM56] =
@ -11278,7 +11223,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM57] =
@ -11290,7 +11234,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM58] =
@ -11302,7 +11245,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM59] =
@ -11314,7 +11256,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM60] =
@ -11326,7 +11267,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM61] =
@ -11338,7 +11278,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM62] =
@ -11350,7 +11289,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM63] =
@ -11362,7 +11300,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM64] =
@ -11374,7 +11311,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM65] =
@ -11386,7 +11322,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM66] =
@ -11398,7 +11333,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM67] =
@ -11410,7 +11344,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM68] =
@ -11422,7 +11355,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM69] =
@ -11434,7 +11366,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM70] =
@ -11446,7 +11377,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM71] =
@ -11458,7 +11388,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM72] =
@ -11470,7 +11399,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM73] =
@ -11482,7 +11410,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM74] =
@ -11494,7 +11421,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM75] =
@ -11506,7 +11432,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM76] =
@ -11518,7 +11443,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM77] =
@ -11530,7 +11454,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM78] =
@ -11542,7 +11465,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM79] =
@ -11554,7 +11476,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM80] =
@ -11566,7 +11487,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM81] =
@ -11578,7 +11498,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM82] =
@ -11590,7 +11509,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM83] =
@ -11602,7 +11520,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM84] =
@ -11614,7 +11531,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM85] =
@ -11626,7 +11542,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM86] =
@ -11638,7 +11553,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM87] =
@ -11650,7 +11564,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM88] =
@ -11662,7 +11575,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM89] =
@ -11674,7 +11586,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM90] =
@ -11686,7 +11597,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM91] =
@ -11698,7 +11608,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM92] =
@ -11710,7 +11619,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM93] =
@ -11722,7 +11630,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM94] =
@ -11734,7 +11641,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM95] =
@ -11746,7 +11652,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM96] =
@ -11758,7 +11663,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM97] =
@ -11770,7 +11674,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM98] =
@ -11782,7 +11685,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM99] =
@ -11794,7 +11696,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM100] =
@ -11806,7 +11707,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_NONE, // Todo
},
[ITEM_HM_CUT] =
@ -11821,7 +11721,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_CUT,
},
[ITEM_HM_FLY] =
@ -11836,7 +11735,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_FLY,
},
[ITEM_HM_SURF] =
@ -11851,7 +11749,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_SURF,
},
[ITEM_HM_STRENGTH] =
@ -11866,7 +11763,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_STRENGTH,
},
[ITEM_HM_FLASH] =
@ -11881,7 +11777,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_FLASH,
},
[ITEM_HM_ROCK_SMASH] =
@ -11896,7 +11791,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_ROCK_SMASH,
},
[ITEM_HM_WATERFALL] =
@ -11911,7 +11805,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_WATERFALL,
},
[ITEM_HM_DIVE] =
@ -11926,7 +11819,6 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
.secondaryId = MOVE_DIVE,
},

View File

@ -895,9 +895,9 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru
{
if (sHatchedEggFatherMoves[i] != MOVE_NONE)
{
for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++)
for (j = 0; j < NUM_ALL_MACHINES; j++)
{
u16 moveId = ItemIdToBattleMoveId(ITEM_TM01 + j);
u16 moveId = GetTMHMMoveId(j + 1);
if (sHatchedEggFatherMoves[i] == moveId && CanLearnTeachableMove(GetMonData(egg, MON_DATA_SPECIES_OR_EGG), moveId))
{
if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES)

View File

@ -3236,10 +3236,11 @@ static void DebugAction_PCBag_Fill_PocketPokeBalls(u8 taskId)
static void DebugAction_PCBag_Fill_PocketTMHM(u8 taskId)
{
u16 itemId;
u16 index, itemId;
for (itemId = ITEM_TM01; itemId <= ITEM_HM08; itemId++)
for (index = 0; index < NUM_ALL_MACHINES; index++)
{
itemId = GetTMHMItemId(index + 1);
if (CheckBagHasSpace(itemId, 1) && ItemIdToBattleMoveId(itemId) != MOVE_NONE)
AddBagItem(itemId, 1);
}

View File

@ -992,7 +992,7 @@ static void Task_EvolutionScene(u8 taskId)
{
// Selected move to forget
u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
if (IsMoveHM(move))
if (CannotForgetMove(move))
{
// Can't forget HMs
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN]);
@ -1376,7 +1376,7 @@ static void Task_TradeEvolutionScene(u8 taskId)
{
// Selected move to forget
u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
if (IsMoveHM(move))
if (CannotForgetMove(move))
{
// Can't forget HMs
BattleStringExpandPlaceholdersToDisplayedString(gBattleStringsTable[STRINGID_HMMOVESCANTBEFORGOTTEN]);

View File

@ -19,6 +19,7 @@
#include "field_weather.h"
#include "graphics.h"
#include "international_string_util.h"
#include "item.h"
#include "item_icon.h"
#include "link.h"
#include "load_save.h"
@ -1671,7 +1672,7 @@ u16 GetMysteryGiftCardStat(void)
bool8 BufferTMHMMoveName(void)
{
if (gSpecialVar_0x8004 >= ITEM_TM01 && gSpecialVar_0x8004 <= ITEM_HM08)
if (gItemsInfo[gSpecialVar_0x8004].pocket == POCKET_TM_HM)
{
StringCopy(gStringVar2, GetMoveName(ItemIdToBattleMoveId(gSpecialVar_0x8004)));
return TRUE;

View File

@ -31,6 +31,27 @@ EWRAM_DATA struct BagPocket gBagPockets[POCKETS_COUNT] = {0};
#include "data/pokemon/item_effects.h"
#include "data/items.h"
#define UNPACK_TM_ITEM_ID(_tm) [CAT(ENUM_TM_HM_, _tm) + 1] = { CAT(ITEM_TM_, _tm), CAT(MOVE_, _tm) },
#define UNPACK_HM_ITEM_ID(_hm) [CAT(ENUM_TM_HM_, _hm) + 1] = { CAT(ITEM_HM_, _hm), CAT(MOVE_, _hm) },
const struct TmHmIndexKey gTMHMItemMoveIds[NUM_ALL_MACHINES + 1] =
{
[0] = { ITEM_NONE, MOVE_NONE }, // Failsafe
FOREACH_TM(UNPACK_TM_ITEM_ID)
FOREACH_HM(UNPACK_HM_ITEM_ID)
/*
* Expands to the following:
*
* [1] = { ITEM_TM_FOCUS_PUNCH, MOVE_FOCUS_PUNCH },
* [2] = { ITEM_TM_DRAGON_CLAW, MOVE_DRAGON_CLAW },
* [3] = { ITEM_TM_WATER_PULSE, MOVE_WATER_PULSE },
* etc etc
*/
};
#undef UNPACK_TM_ITEM_ID
#undef UNPACK_HM_ITEM_ID
static inline u16 GetBagItemIdPocket(struct BagPocket *pocket, u32 pocketPos)
{
return pocket->itemSlots[pocketPos].itemId;
@ -592,7 +613,9 @@ void SortBerriesOrTMHMs(enum Pocket pocketId)
{
if (GetBagItemQuantity(pocketId, j) == 0 || GetBagItemId(pocketId, j) == ITEM_NONE)
continue;
if (GetBagItemId(pocketId, i) <= GetBagItemId(pocketId, j))
if (pocketId == POCKET_BERRIES && GetBagItemId(pocketId, i) <= GetBagItemId(pocketId, j)) // To do
continue;
if (pocketId == POCKET_TM_HM && GetItemTMHMIndex(GetBagItemId(pocketId, i)) <= GetItemTMHMIndex(GetBagItemId(pocketId, j)))
continue;
}
SwapItemSlots(pocketId, i, j);

View File

@ -166,11 +166,11 @@ const void *GetItemIconPic(u16 itemId)
return gItemIcon_ReturnToFieldArrow; // Use last icon, the "return to field" arrow
if (itemId >= ITEMS_COUNT)
return gItemsInfo[0].iconPic;
if (itemId >= ITEM_TM01 && itemId < ITEM_HM01 + NUM_HIDDEN_MACHINES)
if (gItemsInfo[itemId].pocket == POCKET_TM_HM)
{
if (itemId < ITEM_TM01 + NUM_TECHNICAL_MACHINES)
return gItemIcon_TM;
return gItemIcon_HM;
if (GetItemTMHMIndex(itemId) > NUM_TECHNICAL_MACHINES)
return gItemIcon_HM;
return gItemIcon_TM;
}
return gItemsInfo[itemId].iconPic;
@ -182,8 +182,8 @@ const u16 *GetItemIconPalette(u16 itemId)
return gItemIconPalette_ReturnToFieldArrow;
if (itemId >= ITEMS_COUNT)
return gItemsInfo[0].iconPalette;
if (itemId >= ITEM_TM01 && itemId < ITEM_HM01 + NUM_HIDDEN_MACHINES)
return gTypesInfo[GetMoveType(gItemsInfo[itemId].secondaryId)].paletteTMHM;
if (gItemsInfo[itemId].pocket == POCKET_TM_HM)
return gTypesInfo[GetMoveType(GetItemTMHMMoveId(itemId))].paletteTMHM;
return gItemsInfo[itemId].iconPalette;
}

View File

@ -916,16 +916,16 @@ static void GetItemNameFromPocket(u8 *dest, u16 itemId)
case POCKET_TM_HM:
end = StringCopy(gStringVar2, GetMoveName(ItemIdToBattleMoveId(itemId)));
PrependFontIdToFit(gStringVar2, end, FONT_NARROW, 61);
if (itemId >= ITEM_HM01)
if (GetItemTMHMIndex(itemId) > NUM_TECHNICAL_MACHINES)
{
// Get HM number
ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 1);
ConvertIntToDecimalStringN(gStringVar1, GetItemTMHMIndex(itemId) - NUM_TECHNICAL_MACHINES, STR_CONV_MODE_LEADING_ZEROS, 1);
StringExpandPlaceholders(dest, gText_NumberItem_HM);
}
else
{
// Get TM number
ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
ConvertIntToDecimalStringN(gStringVar1, GetItemTMHMIndex(itemId), STR_CONV_MODE_LEADING_ZEROS, 2);
StringExpandPlaceholders(dest, gText_NumberItem_TMBerry);
}
break;
@ -983,7 +983,7 @@ static void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y)
itemQuantity = GetBagItemQuantity(gBagPosition.pocket, itemIndex);
// Draw HM icon
if (itemId >= ITEM_HM01 && itemId <= ITEM_HM08)
if (gBagPosition.pocket == POCKET_TM_HM && GetItemTMHMIndex(itemId) > NUM_TECHNICAL_MACHINES)
BlitBitmapToWindow(windowId, gBagMenuHMIcon_Gfx, 8, y - 1, 16, 16);
if (gBagPosition.pocket != POCKET_KEY_ITEMS && GetItemImportance(itemId) == FALSE)

View File

@ -884,7 +884,7 @@ void ItemUseOutOfBattle_DynamaxCandy(u8 taskId)
void ItemUseOutOfBattle_TMHM(u8 taskId)
{
if (gSpecialVar_ItemId >= ITEM_HM01)
if (GetItemTMHMIndex(gSpecialVar_ItemId) > NUM_TECHNICAL_MACHINES)
DisplayItemMessage(taskId, FONT_NORMAL, sText_BootedUpHM, BootUpSoundTMHM); // HM
else
DisplayItemMessage(taskId, FONT_NORMAL, sText_BootedUpTM, BootUpSoundTMHM); // TM

View File

@ -158,14 +158,6 @@ enum {
#define MENU_DIR_RIGHT 2
#define MENU_DIR_LEFT -2
#define HM_MOVES_END 0xFFFF
static const u16 sHMMoves[] =
{
MOVE_CUT, MOVE_FLY, MOVE_SURF, MOVE_STRENGTH, MOVE_FLASH,
MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_DIVE, HM_MOVES_END
};
enum {
CAN_LEARN_MOVE,
CANNOT_LEARN_MOVE,
@ -1567,14 +1559,8 @@ static bool8 DoesSelectedMonKnowHM(u8 *slotPtr)
for (u32 i = 0; i < MAX_MON_MOVES; i++)
{
u32 j = 0;
u16 move = GetMonData(&gPlayerParty[*slotPtr], MON_DATA_MOVE1 + i);
while (sHMMoves[j] != HM_MOVES_END)
{
if (sHMMoves[j++] == move)
return TRUE;
}
if (IsMoveHM(GetMonData(&gPlayerParty[*slotPtr], MON_DATA_MOVE1 + i)))
return TRUE;
}
return FALSE;
}
@ -5355,7 +5341,7 @@ void ItemUseCB_PPUp(u8 taskId, TaskFunc task)
u16 ItemIdToBattleMoveId(u16 item)
{
return (GetItemPocket(item) == POCKET_TM_HM) ? gItemsInfo[item].secondaryId : MOVE_NONE;
return (GetItemPocket(item) == POCKET_TM_HM) ? GetItemTMHMMoveId(item) : MOVE_NONE;
}
bool8 MonKnowsMove(struct Pokemon *mon, u16 move)

View File

@ -290,9 +290,9 @@ static EWRAM_DATA u16 sLastSelectedPokemon = 0;
static EWRAM_DATA u8 sPokeBallRotation = 0;
static EWRAM_DATA struct PokedexListItem *sPokedexListItem = NULL;
//Pokedex Plus HGSS_Ui
#define MOVES_COUNT_TOTAL (EGG_MOVES_ARRAY_COUNT + MAX_LEVEL_UP_MOVES + NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES)
#define MOVES_COUNT_TOTAL (EGG_MOVES_ARRAY_COUNT + MAX_LEVEL_UP_MOVES + NUM_ALL_MACHINES)
EWRAM_DATA static u16 sStatsMoves[MOVES_COUNT_TOTAL] = {0};
EWRAM_DATA static u16 sStatsMovesTMHM_ID[NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES] = {0};
EWRAM_DATA static u16 sStatsMovesTMHM_ID[NUM_ALL_MACHINES] = {0};
struct SearchOptionText
@ -5054,13 +5054,13 @@ static u16 AddTMTutorMoves(u16 species, u16 movesTotal, u8 *numTMHMMoves, u8 *nu
// TM Moves
if (HGSS_SORT_TMS_BY_NUM)
{
for (i = 0; i < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; i++)
for (i = 0; i < NUM_ALL_MACHINES; i++)
{
move = ItemIdToBattleMoveId(ITEM_TM01 + i);
move = GetTMHMMoveId(i + 1);
if (move != MOVE_NONE && CanLearnTeachableMove(species, move))
{
isTMMove[move] = TRUE;
sStatsMovesTMHM_ID[*numTMHMMoves] = ITEM_TM01 + i;
sStatsMovesTMHM_ID[*numTMHMMoves] = GetTMHMItemId(i + 1);
(*numTMHMMoves)++;
sStatsMoves[movesTotal] = move;
movesTotal++;
@ -5072,12 +5072,12 @@ static u16 AddTMTutorMoves(u16 species, u16 movesTotal, u8 *numTMHMMoves, u8 *nu
for (i = 0; teachableLearnset[i] != MOVE_UNAVAILABLE; i++)
{
move = teachableLearnset[i];
for (u16 j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++)
for (u16 j = 0; j < NUM_ALL_MACHINES; j++)
{
if (ItemIdToBattleMoveId(ITEM_TM01 + j) == move)
if (GetTMHMMoveId(j + 1) == move)
{
isTMMove[move] = TRUE;
sStatsMovesTMHM_ID[*numTMHMMoves] = ITEM_TM01 + j;
sStatsMovesTMHM_ID[*numTMHMMoves] = GetTMHMItemId(j + 1);
(*numTMHMMoves)++;
sStatsMoves[movesTotal] = move;
movesTotal++;

View File

@ -871,14 +871,6 @@ static const s8 sFriendshipEventModifiers[][3] =
[FRIENDSHIP_EVENT_FAINT_LARGE] = {-5, -5, -10},
};
#define HM_MOVES_END 0xFFFF
static const u16 sHMMoves[] =
{
MOVE_CUT, MOVE_FLY, MOVE_SURF, MOVE_STRENGTH, MOVE_FLASH,
MOVE_ROCK_SMASH, MOVE_WATERFALL, MOVE_DIVE, HM_MOVES_END
};
static const struct SpeciesItem sAlteringCaveWildMonHeldItems[] =
{
{SPECIES_NONE, ITEM_NONE},
@ -5947,19 +5939,21 @@ const u16 *GetMonSpritePalFromSpecies(u16 species, bool32 isShiny, bool32 isFema
}
}
bool8 IsMoveHM(u16 move)
{
int i = 0;
#define OR_MOVE_IS_HM(_hm) || (move == MOVE_##_hm)
bool32 IsMoveHM(u16 move)
{
return FALSE FOREACH_HM(OR_MOVE_IS_HM);
}
#undef OR_MOVE_IS_HM
bool32 CannotForgetMove(u16 move)
{
if (P_CAN_FORGET_HIDDEN_MOVE)
return FALSE;
while (sHMMoves[i] != HM_MOVES_END)
{
if (sHMMoves[i++] == move)
return TRUE;
}
return FALSE;
return IsMoveHM(move);
}
bool8 IsMonSpriteNotFlipped(u16 species)

View File

@ -2609,7 +2609,7 @@ static bool8 CanReplaceMove(void)
{
if (sMonSummaryScreen->firstMoveIndex == MAX_MON_MOVES
|| sMonSummaryScreen->newMove == MOVE_NONE
|| IsMoveHM(sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]) != TRUE)
|| !CannotForgetMove(sMonSummaryScreen->summary.moves[sMonSummaryScreen->firstMoveIndex]))
return TRUE;
else
return FALSE;