Removed tutor move distinction, combined llists

This commit is contained in:
crater-git 2022-08-25 19:56:47 -04:00
parent d719510d32
commit ed02c4b425
14 changed files with 34790 additions and 40107 deletions

View File

@ -7,7 +7,7 @@ SlateportCity_PokemonFanClub_EventScript_SwaggerTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SwaggerDeclined
msgbox MoveTutor_Text_SwaggerWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_SWAGGER
setvar VAR_0x8005, MOVE_SWAGGER
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_SwaggerDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_SWAGGER
@ -33,7 +33,7 @@ MauvilleCity_EventScript_RolloutTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_RolloutDeclined
msgbox MoveTutor_Text_RolloutWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_ROLLOUT
setvar VAR_0x8005, MOVE_ROLLOUT
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_RolloutDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_ROLLOUT
@ -59,7 +59,7 @@ VerdanturfTown_PokemonCenter_1F_EventScript_FuryCutterTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_FuryCutterDeclined
msgbox MoveTutor_Text_FuryCutterWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_FURY_CUTTER
setvar VAR_0x8005, MOVE_FURY_CUTTER
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_FuryCutterDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_FURY_CUTTER
@ -85,7 +85,7 @@ LavaridgeTown_House_EventScript_MimicTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_MimicDeclined
msgbox MoveTutor_Text_MimicWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_MIMIC
setvar VAR_0x8005, MOVE_MIMIC
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_MimicDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_MIMIC
@ -111,7 +111,7 @@ FallarborTown_Mart_EventScript_MetronomeTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_MetronomeDeclined
msgbox MoveTutor_Text_MetronomeWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_METRONOME
setvar VAR_0x8005, MOVE_METRONOME
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_MetronomeDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_METRONOME
@ -137,7 +137,7 @@ FortreeCity_House2_EventScript_SleepTalkTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SleepTalkDeclined
msgbox MoveTutor_Text_SleepTalkWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_SLEEP_TALK
setvar VAR_0x8005, MOVE_SLEEP_TALK
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_SleepTalkDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_SLEEP_TALK
@ -163,7 +163,7 @@ LilycoveCity_DepartmentStoreRooftop_EventScript_SubstituteTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_SubstituteDeclined
msgbox MoveTutor_Text_SubstituteWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_SUBSTITUTE
setvar VAR_0x8005, MOVE_SUBSTITUTE
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_SubstituteDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_SUBSTITUTE
@ -189,7 +189,7 @@ MossdeepCity_EventScript_DynamicPunchTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_DynamicPunchDeclined
msgbox MoveTutor_Text_DynamicPunchWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_DYNAMIC_PUNCH
setvar VAR_0x8005, MOVE_DYNAMIC_PUNCH
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_DynamicPunchDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_DYNAMICPUNCH
@ -215,7 +215,7 @@ SootopolisCity_PokemonCenter_1F_EventScript_DoubleEdgeTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_DoubleEdgeDeclined
msgbox MoveTutor_Text_DoubleEdgeWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_DOUBLE_EDGE
setvar VAR_0x8005, MOVE_DOUBLE_EDGE
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_DoubleEdgeDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_DOUBLE_EDGE
@ -241,7 +241,7 @@ PacifidlogTown_PokemonCenter_1F_EventScript_ExplosionTutor::
call MoveTutor_EventScript_CanOnlyBeLearnedOnce
goto_if_eq VAR_RESULT, NO, MoveTutor_EventScript_ExplosionDeclined
msgbox MoveTutor_Text_ExplosionWhichMon, MSGBOX_DEFAULT
setvar VAR_0x8005, TUTOR_MOVE_EXPLOSION
setvar VAR_0x8005, MOVE_EXPLOSION
call MoveTutor_EventScript_OpenPartyMenu
goto_if_eq VAR_RESULT, 0, MoveTutor_EventScript_ExplosionDeclined
setflag FLAG_MOVE_TUTOR_TAUGHT_EXPLOSION

View File

@ -12,36 +12,6 @@
#define AILMENT_PKRS 6
#define AILMENT_FNT 7
#define TUTOR_MOVE_MEGA_PUNCH 0
#define TUTOR_MOVE_SWORDS_DANCE 1
#define TUTOR_MOVE_MEGA_KICK 2
#define TUTOR_MOVE_BODY_SLAM 3
#define TUTOR_MOVE_DOUBLE_EDGE 4
#define TUTOR_MOVE_COUNTER 5
#define TUTOR_MOVE_SEISMIC_TOSS 6
#define TUTOR_MOVE_MIMIC 7
#define TUTOR_MOVE_METRONOME 8
#define TUTOR_MOVE_SOFT_BOILED 9
#define TUTOR_MOVE_DREAM_EATER 10
#define TUTOR_MOVE_THUNDER_WAVE 11
#define TUTOR_MOVE_EXPLOSION 12
#define TUTOR_MOVE_ROCK_SLIDE 13
#define TUTOR_MOVE_SUBSTITUTE 14
#define TUTOR_MOVE_DYNAMIC_PUNCH 15
#define TUTOR_MOVE_ROLLOUT 16
#define TUTOR_MOVE_PSYCH_UP 17
#define TUTOR_MOVE_SNORE 18
#define TUTOR_MOVE_ICY_WIND 19
#define TUTOR_MOVE_ENDURE 20
#define TUTOR_MOVE_MUD_SLAP 21
#define TUTOR_MOVE_ICE_PUNCH 22
#define TUTOR_MOVE_SWAGGER 23
#define TUTOR_MOVE_SLEEP_TALK 24
#define TUTOR_MOVE_SWIFT 25
#define TUTOR_MOVE_DEFENSE_CURL 26
#define TUTOR_MOVE_THUNDER_PUNCH 27
#define TUTOR_MOVE_FIRE_PUNCH 28
#define TUTOR_MOVE_FURY_CUTTER 29
#define TUTOR_MOVE_COUNT 30
#define PARTY_LAYOUT_SINGLE 0

View File

@ -29,8 +29,6 @@ extern u8 gBattlePartyCurrentOrder[PARTY_SIZE / 2];
extern void (*gItemUseCB)(u8, TaskFunc);
extern const u16 gTutorMoves[];
void AnimatePartySlot(u8 slot, u8 animNum);
bool8 IsMultiBattle(void);
u8 GetCursorSelectionMonId(void);

View File

@ -397,7 +397,7 @@ extern const struct BaseStats gBaseStats[];
extern const u8 *const gItemEffectTable[];
extern const u32 gExperienceTables[][MAX_LEVEL + 1];
extern const struct LevelUpMove *const gLevelUpLearnsets[];
extern const u16 *const gTMHMLearnsets[];
extern const u16 *const gTeachLearnsets[];
extern const u8 gPPUpGetMask[];
extern const u8 gPPUpClearMask[];
extern const u8 gPPUpAddValues[];
@ -510,8 +510,8 @@ u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection);
void UpdatePartyPokerusTime(u16 days);
void PartySpreadPokerus(struct Pokemon *party);
bool8 TryIncrementMonLevel(struct Pokemon *mon);
u32 CanMonLearnTMHM(struct Pokemon *mon, u16 move);
u32 CanSpeciesLearnTMHM(u16 species, u16 move);
u32 CanMonLearnTaughtMove(struct Pokemon *mon, u16 move);
u32 CanSpeciesLearnTaughtMove(u16 species, u16 move);
u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves);
u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves);
u8 GetNumberOfRelearnableMoves(struct Pokemon *mon);

View File

@ -376,7 +376,7 @@ static u16 GetRandomAlternateMove(u8 monId)
do
{
id = Random() % (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES);
shouldUseMove = CanSpeciesLearnTMHM(species, ItemIdToBattleMoveId(ITEM_TM01 + id));
shouldUseMove = CanSpeciesLearnTaughtMove(species, ItemIdToBattleMoveId(ITEM_TM01 + id));
}
while (!shouldUseMove);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -696,7 +696,7 @@ static void BuildEggMoveset(struct Pokemon *egg, struct BoxPokemon *father, stru
for (j = 0; j < NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES; j++)
{
u16 moveId = ItemIdToBattleMoveId(ITEM_TM01 + j);
if (sHatchedEggFatherMoves[i] == moveId && CanMonLearnTMHM(egg, moveId))
if (sHatchedEggFatherMoves[i] == moveId && CanMonLearnTaughtMove(egg, moveId))
{
if (GiveMoveToMon(egg, sHatchedEggFatherMoves[i]) == MON_HAS_MAX_MOVES)
DeleteFirstMoveAndGiveMoveToMon(egg, sHatchedEggFatherMoves[i]);

View File

@ -3130,7 +3130,7 @@ void GetBattleFrontierTutorMoveIndex(void)
i = 0;
do
{
if (gTutorMoves[i] == sBattleFrontier_TutorMoves2[moveIndex])
if (i == sBattleFrontier_TutorMoves2[moveIndex])
{
gSpecialVar_0x8005 = i;
break;
@ -3143,7 +3143,7 @@ void GetBattleFrontierTutorMoveIndex(void)
i = 0;
do
{
if (gTutorMoves[i] == sBattleFrontier_TutorMoves1[moveIndex])
if (i == sBattleFrontier_TutorMoves1[moveIndex])
{
gSpecialVar_0x8005 = i;
break;

View File

@ -265,8 +265,8 @@ static void DisplayPartyPokemonMaxHPCheck(struct Pokemon *, struct PartyMenuBox
static void DisplayPartyPokemonHPBarCheck(struct Pokemon *, struct PartyMenuBox *);
static void DisplayPartyPokemonDescriptionText(u8, struct PartyMenuBox *, u8);
static bool8 IsMonAllowedInMinigame(u8);
static void DisplayPartyPokemonDataToTeachMove(u8, u16, u8);
static u8 CanMonLearnTMTutor(struct Pokemon *, u16, u8);
static void DisplayPartyPokemonDataToTeachMove(u8, u16);
static u8 CanMonLearnMove(struct Pokemon *, u16);
static void DisplayPartyPokemonBarDetail(u8, const u8 *, u8, const u8 *);
static void DisplayPartyPokemonLevel(u8, struct PartyMenuBox *);
static void DisplayPartyPokemonGender(u8, u16, u8 *, struct PartyMenuBox *);
@ -326,8 +326,6 @@ static bool16 IsMonAllowedInPokemonJump(struct Pokemon *);
static bool16 IsMonAllowedInDodrioBerryPicking(struct Pokemon *);
static void Task_CancelParticipationYesNo(u8);
static void Task_HandleCancelParticipationYesNoInput(u8);
static bool8 CanLearnTutorMove(u16, u8);
static u16 GetTutorMove(u8);
static bool8 ShouldUseChooseMonText(void);
static void SetPartyMonFieldSelectionActions(struct Pokemon *, u8);
static u8 GetPartyMenuActionsTypeInBattle(struct Pokemon *);
@ -479,7 +477,6 @@ static bool8 SetUpFieldMove_Dive(void);
void TryItemHoldFormChange(struct Pokemon *mon);
// static const data
#include "data/pokemon/tutor_learnsets.h"
#include "data/party_menu.h"
// code
@ -973,7 +970,7 @@ static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot)
if (gPartyMenu.action == PARTY_ACTION_MOVE_TUTOR)
{
gSpecialVar_Result = FALSE;
DisplayPartyPokemonDataToTeachMove(slot, 0, gSpecialVar_0x8005);
DisplayPartyPokemonDataToTeachMove(slot, gSpecialVar_0x8005);
}
else
{
@ -985,7 +982,7 @@ static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot)
default:
return FALSE;
case 1: // TM/HM
DisplayPartyPokemonDataToTeachMove(slot, item, 0);
DisplayPartyPokemonDataToTeachMove(slot, ItemIdToBattleMoveId(item));
break;
case 2: // Evolution stone
if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, EVO_MODE_ITEM_CHECK, item, NULL) != SPECIES_NONE)
@ -997,9 +994,9 @@ static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot)
return TRUE;
}
static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 item, u8 tutor)
static void DisplayPartyPokemonDataToTeachMove(u8 slot, u16 move)
{
switch (CanMonLearnTMTutor(&gPlayerParty[slot], item, tutor))
switch (CanMonLearnMove(&gPlayerParty[slot], move))
{
case CANNOT_LEARN_MOVE:
case CANNOT_LEARN_MOVE_IS_EGG:
@ -2029,47 +2026,18 @@ static void Task_HandleCancelParticipationYesNoInput(u8 taskId)
}
}
static u8 CanMonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor)
static u8 CanMonLearnMove(struct Pokemon *mon, u16 move)
{
u16 move;
if (GetMonData(mon, MON_DATA_IS_EGG))
return CANNOT_LEARN_MOVE_IS_EGG;
if (item >= ITEM_TM01)
{
if (!CanMonLearnTMHM(mon, ItemIdToBattleMoveId(item)))
else if (!CanMonLearnTaughtMove(mon, move))
return CANNOT_LEARN_MOVE;
else
move = ItemIdToBattleMoveId(item);
}
else
{
if (!CanLearnTutorMove(GetMonData(mon, MON_DATA_SPECIES), tutor))
return CANNOT_LEARN_MOVE;
else
move = GetTutorMove(tutor);
}
if (MonKnowsMove(mon, move) == TRUE)
else if (MonKnowsMove(mon, move) == TRUE)
return ALREADY_KNOWS_MOVE;
else
return CAN_LEARN_MOVE;
}
static u16 GetTutorMove(u8 tutor)
{
return gTutorMoves[tutor];
}
static bool8 CanLearnTutorMove(u16 species, u8 tutor)
{
if (sTutorLearnsets[species] & (1 << tutor))
return TRUE;
else
return FALSE;
}
static void InitPartyMenuWindows(u8 layout)
{
u8 i;
@ -4933,19 +4901,18 @@ static void DisplayLearnMoveMessageAndClose(u8 taskId, const u8 *str)
void ItemUseCB_TMHM(u8 taskId, TaskFunc task)
{
struct Pokemon *mon;
s16 *move;
u16 item;
u16 item = gSpecialVar_ItemId;
u16 move = ItemIdToBattleMoveId(item);
gPartyMenu.data1 = move;
PlaySE(SE_SELECT);
mon = &gPlayerParty[gPartyMenu.slotId];
move = &gPartyMenu.data1;
item = gSpecialVar_ItemId;
GetMonNickname(mon, gStringVar1);
move[0] = ItemIdToBattleMoveId(item);
StringCopy(gStringVar2, gMoveNames[move[0]]);
move[1] = 0;
switch (CanMonLearnTMTutor(mon, item, 0))
GetMonNickname(mon, gStringVar1);
StringCopy(gStringVar2, gMoveNames[move]);
switch (CanMonLearnMove(mon, move))
{
case CANNOT_LEARN_MOVE:
DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove);
@ -4955,7 +4922,7 @@ void ItemUseCB_TMHM(u8 taskId, TaskFunc task)
return;
}
if (GiveMoveToMon(mon, move[0]) != MON_HAS_MAX_MOVES)
if (GiveMoveToMon(mon, move) != MON_HAS_MAX_MOVES)
{
gTasks[taskId].func = Task_LearnedMove;
}
@ -5676,10 +5643,10 @@ static void TryTutorSelectedMon(u8 taskId)
mon = &gPlayerParty[gPartyMenu.slotId];
move = &gPartyMenu.data1;
GetMonNickname(mon, gStringVar1);
gPartyMenu.data1 = GetTutorMove(gSpecialVar_0x8005);
gPartyMenu.data1 = gSpecialVar_0x8005;
StringCopy(gStringVar2, gMoveNames[gPartyMenu.data1]);
move[1] = 2;
switch (CanMonLearnTMTutor(mon, 0, gSpecialVar_0x8005))
switch (CanMonLearnMove(mon, gPartyMenu.data1))
{
case CANNOT_LEARN_MOVE:
DisplayLearnMoveMessageAndClose(taskId, gText_PkmnCantLearnMove);

View File

@ -1894,14 +1894,14 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
#include "data/pokemon/experience_tables.h"
#include "data/pokemon/base_stats.h"
#include "data/pokemon/level_up_learnsets.h"
#include "data/pokemon/tmhm_learnsets.h"
#include "data/pokemon/teach_learnsets.h"
#if P_NEW_POKEMON == TRUE
#include "data/pokemon/evolution.h"
#else
#include "data/pokemon/evolution_old.h"
#endif
#include "data/pokemon/level_up_learnset_pointers.h"
#include "data/pokemon/tmhm_learnset_pointers.h"
#include "data/pokemon/teach_learnset_pointers.h"
#include "data/pokemon/form_species_tables.h"
#include "data/pokemon/form_species_table_pointers.h"
#include "data/pokemon/form_change_tables.h"
@ -7244,7 +7244,7 @@ bool8 TryIncrementMonLevel(struct Pokemon *mon)
}
}
u32 CanMonLearnTMHM(struct Pokemon *mon, u16 move)
u32 CanMonLearnTaughtMove(struct Pokemon *mon, u16 move)
{
u16 species = GetMonData(mon, MON_DATA_SPECIES2, 0);
@ -7255,9 +7255,9 @@ u32 CanMonLearnTMHM(struct Pokemon *mon, u16 move)
else
{
u32 i;
for (i = 0; gTMHMLearnsets[species][i] != MOVE_UNAVAILABLE; i++)
for (i = 0; gTeachLearnsets[species][i] != MOVE_UNAVAILABLE; i++)
{
if (gTMHMLearnsets[species][i] == move) {
if (gTeachLearnsets[species][i] == move) {
return TRUE;
}
}
@ -7265,7 +7265,7 @@ u32 CanMonLearnTMHM(struct Pokemon *mon, u16 move)
}
}
u32 CanSpeciesLearnTMHM(u16 species, u16 move)
u32 CanSpeciesLearnTaughtMove(u16 species, u16 move)
{
if (species == SPECIES_EGG)
{
@ -7274,9 +7274,9 @@ u32 CanSpeciesLearnTMHM(u16 species, u16 move)
else
{
u32 i;
for (i = 0; gTMHMLearnsets[species][i] != MOVE_UNAVAILABLE; i++)
for (i = 0; gTeachLearnsets[species][i] != MOVE_UNAVAILABLE; i++)
{
if (gTMHMLearnsets[species][i] == move) {
if (gTeachLearnsets[species][i] == move) {
return TRUE;
}
}