From a34e0f6f6f9eedb56789b98decb346c53488e07d Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Sat, 7 Oct 2023 23:04:36 -0300 Subject: [PATCH 01/17] Debug menu cleanup --- data/scripts/debug.inc | 16 +- src/battle_debug.c | 32 +- src/debug.c | 1740 +++++++++++++++++++++------------------ src/menu.c | 6 +- src/pokedex_plus_hgss.c | 12 +- src/pokemon_debug.c | 6 +- 6 files changed, 975 insertions(+), 837 deletions(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index b29291a7f9..90ddcf824c 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -69,28 +69,28 @@ Debug_BoxFilledMessage:: Debug_BoxFilledMessage_Text: .string "Storage boxes filled!$" -Debug_Script_1:: +Debug_EventScript_Script_1:: end -Debug_Script_2:: +Debug_EventScript_Script_2:: end -Debug_Script_3:: +Debug_EventScript_Script_3:: end -Debug_Script_4:: +Debug_EventScript_Script_4:: end -Debug_Script_5:: +Debug_EventScript_Script_5:: end -Debug_Script_6:: +Debug_EventScript_Script_6:: end -Debug_Script_7:: +Debug_EventScript_Script_7:: end -Debug_Script_8:: +Debug_EventScript_Script_8:: end Debug_CheckSaveBlock:: diff --git a/src/battle_debug.c b/src/battle_debug.c index 110a6c1165..3a335be2c0 100644 --- a/src/battle_debug.c +++ b/src/battle_debug.c @@ -716,7 +716,7 @@ void CB2_BattleDebugMenu(void) data->currentMainListItemId = 0; data->activeWindow = ACTIVE_WIN_MAIN; data->secondaryListTaskId = 0xFF; - CopyWindowToVram(data->mainListWindowId, 3); + CopyWindowToVram(data->mainListWindowId, COPYWIN_FULL); gMain.state++; break; case 5: @@ -737,7 +737,7 @@ static void PutMovesPointsText(struct BattleDebugMenu *data) { text[0] = CHAR_SPACE; StringCopy(text + 1, gMoveNames[gBattleMons[data->aiBattlerId].moves[i]]); - AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 0, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 0, i * 15, 0, NULL); for (count = 0, j = 0; j < MAX_BATTLERS_COUNT; j++) { if (data->spriteIds.aiIconSpriteIds[j] == 0xFF) @@ -746,18 +746,18 @@ static void PutMovesPointsText(struct BattleDebugMenu *data) ConvertIntToDecimalStringN(text, gBattleStruct->aiFinalScore[data->aiBattlerId][battlerDef][i], STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 83 + count * 54, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 83 + count * 54, i * 15, 0, NULL); ConvertIntToDecimalStringN(text, AI_DATA->simulatedDmg[data->aiBattlerId][battlerDef][i], STR_CONV_MODE_RIGHT_ALIGN, 3); - AddTextPrinterParameterized(data->aiMovesWindowId, 1, text, 110 + count * 54, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 110 + count * 54, i * 15, 0, NULL); count++; } } - CopyWindowToVram(data->aiMovesWindowId, 3); + CopyWindowToVram(data->aiMovesWindowId, COPYWIN_FULL); Free(text); } @@ -849,7 +849,7 @@ static void PutAiInfoText(struct BattleDebugMenu *data) // item names for (i = 0; i < ARRAY_COUNT(sAiInfoItemNames); i++) { - AddTextPrinterParameterized(data->aiMovesWindowId, 1, sAiInfoItemNames[i], 3, i * 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, sAiInfoItemNames[i], 3, i * 15, 0, NULL); } // items info @@ -861,13 +861,13 @@ static void PutAiInfoText(struct BattleDebugMenu *data) u16 holdEffect = AI_DATA->holdEffects[i]; u16 item = AI_DATA->items[i]; u8 x = (i == B_POSITION_PLAYER_LEFT) ? 83 + (i) * 75 : 83 + (i-1) * 75; - AddTextPrinterParameterized(data->aiMovesWindowId, 0, gAbilityNames[ability], x, 0, 0, NULL); - AddTextPrinterParameterized(data->aiMovesWindowId, 0, ItemId_GetName(item), x, 15, 0, NULL); - AddTextPrinterParameterized(data->aiMovesWindowId, 0, GetHoldEffectName(holdEffect), x, 30, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, gAbilityNames[ability], x, 0, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, ItemId_GetName(item), x, 15, 0, NULL); + AddTextPrinterParameterized(data->aiMovesWindowId, FONT_SMALL, GetHoldEffectName(holdEffect), x, 30, 0, NULL); } } - CopyWindowToVram(data->aiMovesWindowId, 3); + CopyWindowToVram(data->aiMovesWindowId, COPYWIN_FULL); Free(text); } @@ -914,7 +914,7 @@ static void PutAiPartyText(struct BattleDebugMenu *data) AddTextPrinterParameterized5(data->aiMovesWindowId, FONT_SMALL_NARROW, text, i * 41, 35 + (j + 1) * 15, 0, NULL, 0, 0); } - CopyWindowToVram(data->aiMovesWindowId, 3); + CopyWindowToVram(data->aiMovesWindowId, COPYWIN_FULL); Free(text); } @@ -1177,7 +1177,7 @@ static void Task_DebugMenuProcessInput(u8 taskId) data->currentSecondaryListItemId = listItemId; data->modifyWindowId = AddWindow(&sModifyWindowTemplate); PutWindowTilemap(data->modifyWindowId); - CopyWindowToVram(data->modifyWindowId, 3); + CopyWindowToVram(data->modifyWindowId, COPYWIN_FULL); SetUpModifyArrows(data); PrintDigitChars(data); data->activeWindow = ACTIVE_WIN_MODIFY; @@ -1261,8 +1261,8 @@ static void PrintOnBattlerWindow(u8 windowId, u8 battlerId) StringCopy(&text[4], gBattleMons[battlerId].nickname); FillWindowPixelBuffer(windowId, 0x11); - AddTextPrinterParameterized(windowId, 1, text, 0, 0, 0, NULL); - CopyWindowToVram(windowId, 3); + AddTextPrinterParameterized(windowId, FONT_NORMAL, text, 0, 0, 0, NULL); + CopyWindowToVram(windowId, COPYWIN_FULL); } static void UpdateWindowsOnChangedBattler(struct BattleDebugMenu *data) @@ -1368,7 +1368,7 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data) listTemplate.windowId = data->secondaryListWindowId; data->secondaryListTaskId = ListMenuInit(&listTemplate, 0, 0); - CopyWindowToVram(data->secondaryListWindowId, 3); + CopyWindowToVram(data->secondaryListWindowId, COPYWIN_FULL); } static void PadString(const u8 *src, u8 *dst) @@ -1497,7 +1497,7 @@ static void PrintDigitChars(struct BattleDebugMenu *data) text[i] = EOS; - AddTextPrinterParameterized(data->modifyWindowId, 1, text, 3, 0, 0, NULL); + AddTextPrinterParameterized(data->modifyWindowId, FONT_NORMAL, text, 3, 0, 0, NULL); } static const u32 GetBitfieldToAndValue(u32 currBit, u32 bitsCount) diff --git a/src/debug.c b/src/debug.c index f915235d8b..76329948fc 100644 --- a/src/debug.c +++ b/src/debug.c @@ -53,6 +53,7 @@ #include "constants/abilities.h" #include "constants/battle_ai.h" #include "constants/battle_frontier.h" +#include "constants/coins.h" #include "constants/flags.h" #include "constants/items.h" #include "constants/map_groups.h" @@ -64,8 +65,8 @@ #if DEBUG_OVERWORLD_MENU == TRUE // ******************************* -// Enums -enum { // Main +enum DebugMenu +{ DEBUG_MENU_ITEM_UTILITIES, DEBUG_MENU_ITEM_SCRIPTS, DEBUG_MENU_ITEM_FLAGVAR, @@ -74,9 +75,11 @@ enum { // Main DEBUG_MENU_ITEM_FILL, DEBUG_MENU_ITEM_SOUND, DEBUG_MENU_ITEM_ACCESS_PC, - DEBUG_MENU_ITEM_CANCEL + DEBUG_MENU_ITEM_CANCEL, }; -enum { // Util + +enum UtilMenu +{ DEBUG_UTIL_MENU_ITEM_HEAL_PARTY, DEBUG_UTIL_MENU_ITEM_FLY, DEBUG_UTIL_MENU_ITEM_WARP, @@ -86,14 +89,16 @@ enum { // Util DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK, DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK, DEBUG_UTIL_MENU_ITEM_WATCHCREDITS, - DEBUG_UTIL_MENU_ITEM_TRAINER_NAME, - DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER, - DEBUG_UTIL_MENU_ITEM_TRAINER_ID, + DEBUG_UTIL_MENU_ITEM_PLAYER_NAME, + DEBUG_UTIL_MENU_ITEM_PLAYER_GENDER, + DEBUG_UTIL_MENU_ITEM_PLAYER_ID, DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES, DEBUG_UTIL_MENU_ITEM_CHEAT, DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG, }; -enum { // Scripts + +enum ScriptMenu +{ DEBUG_UTIL_MENU_ITEM_SCRIPT_1, DEBUG_UTIL_MENU_ITEM_SCRIPT_2, DEBUG_UTIL_MENU_ITEM_SCRIPT_3, @@ -103,7 +108,9 @@ enum { // Scripts DEBUG_UTIL_MENU_ITEM_SCRIPT_7, DEBUG_UTIL_MENU_ITEM_SCRIPT_8, }; -enum { // Flags and Vars + +enum FlagsVarsMenu +{ DEBUG_FLAGVAR_MENU_ITEM_FLAGS, DEBUG_FLAGVAR_MENU_ITEM_VARS, DEBUG_FLAGVAR_MENU_ITEM_DEXFLAGS_ALL, @@ -121,14 +128,18 @@ enum { // Flags and Vars DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BAG_USE, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_CATCHING, }; -enum { // Battle 0 Type + +enum BattleType +{ DEBUG_BATTLE_0_MENU_ITEM_WILD, DEBUG_BATTLE_0_MENU_ITEM_WILD_DOUBLE, DEBUG_BATTLE_0_MENU_ITEM_SINGLE, DEBUG_BATTLE_0_MENU_ITEM_DOUBLE, DEBUG_BATTLE_0_MENU_ITEM_MULTI, }; -enum { // Battle 1 AI FLags + +enum BattleAIFlags +{ DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_00, DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_01, DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_02, @@ -149,7 +160,9 @@ enum { // Battle 1 AI FLags DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_17, DEBUG_BATTLE_1_MENU_ITEM_CONTINUE, }; -enum { // Battle 2 Terrain + +enum BattleTerrain +{ DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_0, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_1, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_2, @@ -161,7 +174,9 @@ enum { // Battle 2 Terrain DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_8, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_9, }; -enum { // Give + +enum GiveMenu +{ DEBUG_GIVE_MENU_ITEM_ITEM_X, DEBUG_GIVE_MENU_ITEM_ALLTMS, DEBUG_GIVE_MENU_ITEM_POKEMON_SIMPLE, @@ -171,7 +186,9 @@ enum { // Give DEBUG_GIVE_MENU_ITEM_MAX_BATTLE_POINTS, DEBUG_GIVE_MENU_ITEM_DAYCARE_EGG, }; -enum { // Give Fill + +enum GiveFillMenu +{ DEBUG_FILL_MENU_ITEM_PC_BOXES_FAST, DEBUG_FILL_MENU_ITEM_PC_BOXES_SLOW, DEBUG_FILL_MENU_ITEM_PC_ITEMS, @@ -181,13 +198,17 @@ enum { // Give Fill DEBUG_FILL_MENU_ITEM_POCKET_BERRIES, DEBUG_FILL_MENU_ITEM_POCKET_KEY_ITEMS, }; -enum { //Sound + +enum SoundMenu +{ DEBUG_SOUND_MENU_ITEM_SE, DEBUG_SOUND_MENU_ITEM_MUS, }; // ******************************* // Constants +#define DEBUG_MENU_FONT FONT_NORMAL + #define DEBUG_MENU_WIDTH_MAIN 16 #define DEBUG_MENU_HEIGHT_MAIN 9 @@ -217,11 +238,11 @@ enum { //Sound // ******************************* struct DebugMonData { - u16 mon_speciesId; - u8 mon_level; - u8 isShiny; - u16 mon_natureId; - u16 mon_abilityNum; + u16 species; + u8 level:7; + bool8 isShiny:1; + u8 nature:6; + u8 abilityNum:2; u8 mon_iv_hp; u8 mon_iv_atk; u8 mon_iv_def; @@ -287,6 +308,7 @@ static void DebugAction_OpenGiveMenu(u8 taskId); static void DebugAction_OpenFillMenu(u8 taskId); static void DebugAction_OpenSoundMenu(u8 taskId); static void DebugAction_AccessPC(u8 taskId); + static void DebugTask_HandleMenuInput_Main(u8 taskId); static void DebugTask_HandleMenuInput_Utilities(u8 taskId); static void DebugTask_HandleMenuInput_Scripts(u8 taskId); @@ -310,9 +332,9 @@ static void DebugAction_Util_Weather_SelectId(u8 taskId); static void DebugAction_Util_CheckWallClock(u8 taskId); static void DebugAction_Util_SetWallClock(u8 taskId); static void DebugAction_Util_WatchCredits(u8 taskId); -static void DebugAction_Util_Trainer_Name(u8 taskId); -static void DebugAction_Util_Trainer_Gender(u8 taskId); -static void DebugAction_Util_Trainer_Id(u8 taskId); +static void DebugAction_Util_Player_Name(u8 taskId); +static void DebugAction_Util_Player_Gender(u8 taskId); +static void DebugAction_Util_Player_Id(u8 taskId); static void DebugAction_Util_Clear_Boxes(u8 taskId); static void DebugAction_Util_CheatStart(u8 taskId); static void DebugAction_Util_HatchAnEgg(u8 taskId); @@ -374,14 +396,14 @@ static void DebugAction_Sound_MUS_SelectId(u8 taskId); extern const u8 Debug_FlagsNotSetOverworldConfigMessage[]; extern const u8 Debug_FlagsNotSetBattleConfigMessage[]; -extern const u8 Debug_Script_1[]; -extern const u8 Debug_Script_2[]; -extern const u8 Debug_Script_3[]; -extern const u8 Debug_Script_4[]; -extern const u8 Debug_Script_5[]; -extern const u8 Debug_Script_6[]; -extern const u8 Debug_Script_7[]; -extern const u8 Debug_Script_8[]; +extern const u8 Debug_EventScript_Script_1[]; +extern const u8 Debug_EventScript_Script_2[]; +extern const u8 Debug_EventScript_Script_3[]; +extern const u8 Debug_EventScript_Script_4[]; +extern const u8 Debug_EventScript_Script_5[]; +extern const u8 Debug_EventScript_Script_6[]; +extern const u8 Debug_EventScript_Script_7[]; +extern const u8 Debug_EventScript_Script_8[]; extern const u8 DebugScript_DaycareMonsNotCompatible[]; extern const u8 DebugScript_OneDaycareMons[]; extern const u8 DebugScript_ZeroDaycareMons[]; @@ -425,26 +447,26 @@ static const u8 sDebugText_Util_Script_6[] = _("Script 6"); static const u8 sDebugText_Util_Script_7[] = _("Script 7"); static const u8 sDebugText_Util_Script_8[] = _("Script 8"); // Util Menu -static const u8 sDebugText_Util_HealParty[] = _("Heal Party"); -static const u8 sDebugText_Util_Fly[] = _("Fly to map…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_WarpToMap[] = _("Warp to map warp…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_WarpToMap_SelectMapGroup[] =_("Group: {STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n\n{STR_VAR_3}{CLEAR_TO 90}"); -static const u8 sDebugText_Util_WarpToMap_SelectMap[] = _("Map: {STR_VAR_1}{CLEAR_TO 90}\nMapSec:{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}\n{STR_VAR_3}{CLEAR_TO 90}"); -static const u8 sDebugText_Util_WarpToMap_SelectWarp[] = _("Warp:{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_3}{CLEAR_TO 90}"); -static const u8 sDebugText_Util_WarpToMap_SelMax[] = _("{STR_VAR_1} / {STR_VAR_2}"); -static const u8 sDebugText_Util_PoisonMons[] = _("Poison all mons"); -static const u8 sDebugText_Util_SaveBlockSpace[] = _("SaveBlock Space…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_Weather[] = _("Set weather…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_Weather_ID[] = _("Weather Id: {STR_VAR_3}\n{STR_VAR_1}\n{STR_VAR_2}"); -static const u8 sDebugText_Util_CheckWallClock[] = _("Check Wall Clock…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_SetWallClock[] = _("Set Wall Clock…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_WatchCredits[] = _("Watch Credits…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Util_Trainer_Name[] = _("Trainer name"); -static const u8 sDebugText_Util_Trainer_Gender[] = _("Toggle T. Gender"); -static const u8 sDebugText_Util_Trainer_Id[] = _("New Trainer Id"); -static const u8 sDebugText_Util_Clear_Boxes[] = _("Clear Storage Boxes"); -static const u8 sDebugText_Util_CheatStart[] = _("CHEAT Start"); -static const u8 sDebugText_Util_HatchAnEgg[] = _("Hatch an Egg"); +static const u8 sDebugText_Util_HealParty[] = _("Heal Party"); +static const u8 sDebugText_Util_FlyToMap[] = _("Fly to map…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_WarpToMap[] = _("Warp to map warp…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_WarpToMap_SelectMapGroup[] = _("Group: {STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n\n{STR_VAR_3}{CLEAR_TO 90}"); +static const u8 sDebugText_Util_WarpToMap_SelectMap[] = _("Map: {STR_VAR_1}{CLEAR_TO 90}\nMapSec:{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}\n{STR_VAR_3}{CLEAR_TO 90}"); +static const u8 sDebugText_Util_WarpToMap_SelectWarp[] = _("Warp:{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_3}{CLEAR_TO 90}"); +static const u8 sDebugText_Util_WarpToMap_SelMax[] = _("{STR_VAR_1} / {STR_VAR_2}"); +static const u8 sDebugText_Util_PoisonParty[] = _("Poison party"); +static const u8 sDebugText_Util_SaveBlockSpace[] = _("SaveBlock Space…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_Weather[] = _("Set weather…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_Weather_ID[] = _("Weather Id: {STR_VAR_3}\n{STR_VAR_1}\n{STR_VAR_2}"); +static const u8 sDebugText_Util_CheckWallClock[] = _("Check Wall Clock…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_SetWallClock[] = _("Set Wall Clock…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_WatchCredits[] = _("Watch Credits…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Util_Player_Name[] = _("Player name"); +static const u8 sDebugText_Util_Player_Gender[] = _("Toggle Gender"); +static const u8 sDebugText_Util_Player_Id[] = _("New Trainer Id"); +static const u8 sDebugText_Util_Clear_Boxes[] = _("Clear Storage Boxes"); +static const u8 sDebugText_Util_CheatStart[] = _("CHEAT Start"); +static const u8 sDebugText_Util_HatchAnEgg[] = _("Hatch an Egg"); // Flags/Vars Menu static const u8 sDebugText_FlagsVars_Flags[] = _("Set Flag XYZ…{CLEAR_TO 110}{RIGHT_ARROW}"); static const u8 sDebugText_FlagsVars_Flag[] = _("Flag: {STR_VAR_1}{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}\n{STR_VAR_3}"); @@ -514,12 +536,12 @@ static const u8 sDebugText_PokemonShiny[] = _("Shiny:{CLEAR_TO 90}\n static const u8 sDebugText_PokemonNature[] = _("NatureId: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonAbility[] = _("AbilityNum: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonIVs[] = _("All IVs:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_0[] = _("IV HP:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_1[] = _("IV Attack:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_2[] = _("IV Defense:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_3[] = _("IV Speed:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_4[] = _("IV Sp. Attack:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); -static const u8 sDebugText_PokemonIV_5[] = _("IV Sp. Defense:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_HP[] = _("IV HP:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_Attack[] = _("IV Attack:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_Defense[] = _("IV Defense:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_Speed[] = _("IV Speed:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_SpAttack[] = _("IV Sp. Attack:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); +static const u8 sDebugText_IV_SpDefense[] = _("IV Sp. Defense:{CLEAR_TO 90}\n {STR_VAR_3}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonMove_0[] = _("Move 0: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonMove_1[] = _("Move 1: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); static const u8 sDebugText_PokemonMove_2[] = _("Move 2: {STR_VAR_3}{CLEAR_TO 90}\n{STR_VAR_1}{CLEAR_TO 90}\n{CLEAR_TO 90}\n{STR_VAR_2}{CLEAR_TO 90}"); @@ -529,39 +551,40 @@ static const u8 sDebugText_Give_MaxCoins[] = _("Max Coins"); static const u8 sDebugText_Give_BattlePoints[] = _("Max Battle Points"); static const u8 sDebugText_Give_DaycareEgg[] = _("Daycare Egg"); // Fill Menu -static const u8 sDebugText_Fill_Pc_Fast[] = _("Fill PCBoxes Fast"); -static const u8 sDebugText_Fill_Pc_Slow[] = _("Fill PCBoxes Slow (LAG!)"); -static const u8 sDebugText_Fill_Pc_Items[] = _("Fill PCItems"); -static const u8 sDebugText_Fill_PocketItems[] = _("Fill Pocket Items"); -static const u8 sDebugText_Fill_PocketPokeBalls[] =_("Fill Pocket PokeBalls"); -static const u8 sDebugText_Fill_PocketTMHM[] = _("Fill Pocket TMHM"); -static const u8 sDebugText_Fill_PocketBerries[] = _("Fill Pocket Berries"); -static const u8 sDebugText_Fill_PocketKeyItems[] = _("Fill Pocket KeyItems"); -// Sound Mneu -static const u8 sDebugText_Sound_SE[] = _("Effects…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Sound_SE_ID[] = _("Sound Id: {STR_VAR_3}\n{STR_VAR_1} \n{STR_VAR_2}"); -static const u8 sDebugText_Sound_MUS[] = _("Music…{CLEAR_TO 110}{RIGHT_ARROW}"); -static const u8 sDebugText_Sound_MUS_ID[] = _("Music Id: {STR_VAR_3}\n{STR_VAR_1} \n{STR_VAR_2}"); +static const u8 sDebugText_Fill_Pc_Fast[] = _("Fill PCBoxes Fast"); +static const u8 sDebugText_Fill_Pc_Slow[] = _("Fill PCBoxes Slow (LAG!)"); +static const u8 sDebugText_Fill_Pc_Items[] = _("Fill PCItems"); +static const u8 sDebugText_Fill_PocketItems[] = _("Fill Pocket Items"); +static const u8 sDebugText_Fill_PocketPokeBalls[] = _("Fill Pocket PokeBalls"); +static const u8 sDebugText_Fill_PocketTMHM[] = _("Fill Pocket TMHM"); +static const u8 sDebugText_Fill_PocketBerries[] = _("Fill Pocket Berries"); +static const u8 sDebugText_Fill_PocketKeyItems[] = _("Fill Pocket KeyItems"); +// Sound Menu +static const u8 sDebugText_Sound_SFX[] = _("SFX…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Sound_SFX_ID[] = _("SFX Id: {STR_VAR_3} {START_BUTTON} Stop\n{STR_VAR_1} \n{STR_VAR_2}"); +static const u8 sDebugText_Sound_Music[] = _("Music…{CLEAR_TO 110}{RIGHT_ARROW}"); +static const u8 sDebugText_Sound_Music_ID[] = _("Music Id: {STR_VAR_3} {START_BUTTON} Stop\n{STR_VAR_1} \n{STR_VAR_2}"); -static const u8 digitInidicator_1[] = _("{LEFT_ARROW}+1{RIGHT_ARROW} "); -static const u8 digitInidicator_10[] = _("{LEFT_ARROW}+10{RIGHT_ARROW} "); -static const u8 digitInidicator_100[] = _("{LEFT_ARROW}+100{RIGHT_ARROW} "); -static const u8 digitInidicator_1000[] = _("{LEFT_ARROW}+1000{RIGHT_ARROW} "); -static const u8 digitInidicator_10000[] = _("{LEFT_ARROW}+10000{RIGHT_ARROW} "); -static const u8 digitInidicator_100000[] = _("{LEFT_ARROW}+100000{RIGHT_ARROW} "); -static const u8 digitInidicator_1000000[] = _("{LEFT_ARROW}+1000000{RIGHT_ARROW} "); -static const u8 digitInidicator_10000000[] = _("{LEFT_ARROW}+10000000{RIGHT_ARROW} "); -const u8 * const gText_DigitIndicator[] = +static const u8 sDebugText_Digit_1[] = _("{LEFT_ARROW}+1{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_10[] = _("{LEFT_ARROW}+10{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_100[] = _("{LEFT_ARROW}+100{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_1000[] = _("{LEFT_ARROW}+1000{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_10000[] = _("{LEFT_ARROW}+10000{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_100000[] = _("{LEFT_ARROW}+100000{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_1000000[] = _("{LEFT_ARROW}+1000000{RIGHT_ARROW} "); +static const u8 sDebugText_Digit_10000000[] = _("{LEFT_ARROW}+10000000{RIGHT_ARROW} "); +const u8 *const gText_DigitIndicator[] = { - digitInidicator_1, - digitInidicator_10, - digitInidicator_100, - digitInidicator_1000, - digitInidicator_10000, - digitInidicator_100000, - digitInidicator_1000000, - digitInidicator_10000000 + sDebugText_Digit_1, + sDebugText_Digit_10, + sDebugText_Digit_100, + sDebugText_Digit_1000, + sDebugText_Digit_10000, + sDebugText_Digit_100000, + sDebugText_Digit_1000000, + sDebugText_Digit_10000000 }; + static const s32 sPowersOfTen[] = { 1, @@ -580,45 +603,48 @@ static const s32 sPowersOfTen[] = // List Menu Items static const struct ListMenuItem sDebugMenu_Items_Main[] = { - [DEBUG_MENU_ITEM_UTILITIES] = {sDebugText_Utilities, DEBUG_MENU_ITEM_UTILITIES}, - [DEBUG_MENU_ITEM_SCRIPTS] = {sDebugText_Scripts, DEBUG_MENU_ITEM_SCRIPTS}, - [DEBUG_MENU_ITEM_FLAGVAR] = {sDebugText_FlagsVars, DEBUG_MENU_ITEM_FLAGVAR}, - //[DEBUG_MENU_ITEM_BATTLE] = {sDebugText_Battle, DEBUG_MENU_ITEM_BATTLE}, - [DEBUG_MENU_ITEM_GIVE] = {sDebugText_Give, DEBUG_MENU_ITEM_GIVE}, - [DEBUG_MENU_ITEM_FILL] = {sDebugText_Fill, DEBUG_MENU_ITEM_FILL}, - [DEBUG_MENU_ITEM_SOUND] = {sDebugText_Sound, DEBUG_MENU_ITEM_SOUND}, - [DEBUG_MENU_ITEM_ACCESS_PC] = {sDebugText_AccessPC, DEBUG_MENU_ITEM_ACCESS_PC}, - [DEBUG_MENU_ITEM_CANCEL] = {sDebugText_Cancel, DEBUG_MENU_ITEM_CANCEL} + [DEBUG_MENU_ITEM_UTILITIES] = {sDebugText_Utilities, DEBUG_MENU_ITEM_UTILITIES}, + [DEBUG_MENU_ITEM_SCRIPTS] = {sDebugText_Scripts, DEBUG_MENU_ITEM_SCRIPTS}, + [DEBUG_MENU_ITEM_FLAGVAR] = {sDebugText_FlagsVars, DEBUG_MENU_ITEM_FLAGVAR}, + //[DEBUG_MENU_ITEM_BATTLE] = {sDebugText_Battle, DEBUG_MENU_ITEM_BATTLE}, + [DEBUG_MENU_ITEM_GIVE] = {sDebugText_Give, DEBUG_MENU_ITEM_GIVE}, + [DEBUG_MENU_ITEM_FILL] = {sDebugText_Fill, DEBUG_MENU_ITEM_FILL}, + [DEBUG_MENU_ITEM_SOUND] = {sDebugText_Sound, DEBUG_MENU_ITEM_SOUND}, + [DEBUG_MENU_ITEM_ACCESS_PC] = {sDebugText_AccessPC, DEBUG_MENU_ITEM_ACCESS_PC}, + [DEBUG_MENU_ITEM_CANCEL] = {sDebugText_Cancel, DEBUG_MENU_ITEM_CANCEL} }; + static const struct ListMenuItem sDebugMenu_Items_Utilities[] = { - [DEBUG_UTIL_MENU_ITEM_HEAL_PARTY] = {sDebugText_Util_HealParty, DEBUG_UTIL_MENU_ITEM_HEAL_PARTY}, - [DEBUG_UTIL_MENU_ITEM_FLY] = {sDebugText_Util_Fly, DEBUG_UTIL_MENU_ITEM_FLY}, - [DEBUG_UTIL_MENU_ITEM_WARP] = {sDebugText_Util_WarpToMap, DEBUG_UTIL_MENU_ITEM_WARP}, - [DEBUG_UTIL_MENU_ITEM_POISON_MONS] = {sDebugText_Util_PoisonMons, DEBUG_UTIL_MENU_ITEM_POISON_MONS}, - [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = {sDebugText_Util_SaveBlockSpace, DEBUG_UTIL_MENU_ITEM_SAVEBLOCK}, - [DEBUG_UTIL_MENU_ITEM_WEATHER] = {sDebugText_Util_Weather, DEBUG_UTIL_MENU_ITEM_WEATHER}, - [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = {sDebugText_Util_CheckWallClock, DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK}, - [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = {sDebugText_Util_SetWallClock, DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK}, - [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = {sDebugText_Util_WatchCredits, DEBUG_UTIL_MENU_ITEM_WATCHCREDITS}, - [DEBUG_UTIL_MENU_ITEM_TRAINER_NAME] = {sDebugText_Util_Trainer_Name, DEBUG_UTIL_MENU_ITEM_TRAINER_NAME}, - [DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER] = {sDebugText_Util_Trainer_Gender, DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER}, - [DEBUG_UTIL_MENU_ITEM_TRAINER_ID] = {sDebugText_Util_Trainer_Id, DEBUG_UTIL_MENU_ITEM_TRAINER_ID}, - [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = {sDebugText_Util_Clear_Boxes, DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES}, - [DEBUG_UTIL_MENU_ITEM_CHEAT] = {sDebugText_Util_CheatStart, DEBUG_UTIL_MENU_ITEM_CHEAT}, - [DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG] = {sDebugText_Util_HatchAnEgg, DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG}, + [DEBUG_UTIL_MENU_ITEM_HEAL_PARTY] = {sDebugText_Util_HealParty, DEBUG_UTIL_MENU_ITEM_HEAL_PARTY}, + [DEBUG_UTIL_MENU_ITEM_FLY] = {sDebugText_Util_FlyToMap, DEBUG_UTIL_MENU_ITEM_FLY}, + [DEBUG_UTIL_MENU_ITEM_WARP] = {sDebugText_Util_WarpToMap, DEBUG_UTIL_MENU_ITEM_WARP}, + [DEBUG_UTIL_MENU_ITEM_POISON_MONS] = {sDebugText_Util_PoisonParty, DEBUG_UTIL_MENU_ITEM_POISON_MONS}, + [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = {sDebugText_Util_SaveBlockSpace, DEBUG_UTIL_MENU_ITEM_SAVEBLOCK}, + [DEBUG_UTIL_MENU_ITEM_WEATHER] = {sDebugText_Util_Weather, DEBUG_UTIL_MENU_ITEM_WEATHER}, + [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = {sDebugText_Util_CheckWallClock, DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK}, + [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = {sDebugText_Util_SetWallClock, DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK}, + [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = {sDebugText_Util_WatchCredits, DEBUG_UTIL_MENU_ITEM_WATCHCREDITS}, + [DEBUG_UTIL_MENU_ITEM_PLAYER_NAME] = {sDebugText_Util_Player_Name, DEBUG_UTIL_MENU_ITEM_PLAYER_NAME}, + [DEBUG_UTIL_MENU_ITEM_PLAYER_GENDER] = {sDebugText_Util_Player_Gender, DEBUG_UTIL_MENU_ITEM_PLAYER_GENDER}, + [DEBUG_UTIL_MENU_ITEM_PLAYER_ID] = {sDebugText_Util_Player_Id, DEBUG_UTIL_MENU_ITEM_PLAYER_ID}, + [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = {sDebugText_Util_Clear_Boxes, DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES}, + [DEBUG_UTIL_MENU_ITEM_CHEAT] = {sDebugText_Util_CheatStart, DEBUG_UTIL_MENU_ITEM_CHEAT}, + [DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG] = {sDebugText_Util_HatchAnEgg, DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG}, }; + static const struct ListMenuItem sDebugMenu_Items_Scripts[] = { - [DEBUG_UTIL_MENU_ITEM_SCRIPT_1] = {sDebugText_Util_Script_1, DEBUG_UTIL_MENU_ITEM_SCRIPT_1}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_2] = {sDebugText_Util_Script_2, DEBUG_UTIL_MENU_ITEM_SCRIPT_2}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_3] = {sDebugText_Util_Script_3, DEBUG_UTIL_MENU_ITEM_SCRIPT_3}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_4] = {sDebugText_Util_Script_4, DEBUG_UTIL_MENU_ITEM_SCRIPT_4}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_5] = {sDebugText_Util_Script_5, DEBUG_UTIL_MENU_ITEM_SCRIPT_5}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_6] = {sDebugText_Util_Script_6, DEBUG_UTIL_MENU_ITEM_SCRIPT_6}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_7] = {sDebugText_Util_Script_7, DEBUG_UTIL_MENU_ITEM_SCRIPT_7}, - [DEBUG_UTIL_MENU_ITEM_SCRIPT_8] = {sDebugText_Util_Script_8, DEBUG_UTIL_MENU_ITEM_SCRIPT_8}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_1] = {sDebugText_Util_Script_1, DEBUG_UTIL_MENU_ITEM_SCRIPT_1}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_2] = {sDebugText_Util_Script_2, DEBUG_UTIL_MENU_ITEM_SCRIPT_2}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_3] = {sDebugText_Util_Script_3, DEBUG_UTIL_MENU_ITEM_SCRIPT_3}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_4] = {sDebugText_Util_Script_4, DEBUG_UTIL_MENU_ITEM_SCRIPT_4}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_5] = {sDebugText_Util_Script_5, DEBUG_UTIL_MENU_ITEM_SCRIPT_5}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_6] = {sDebugText_Util_Script_6, DEBUG_UTIL_MENU_ITEM_SCRIPT_6}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_7] = {sDebugText_Util_Script_7, DEBUG_UTIL_MENU_ITEM_SCRIPT_7}, + [DEBUG_UTIL_MENU_ITEM_SCRIPT_8] = {sDebugText_Util_Script_8, DEBUG_UTIL_MENU_ITEM_SCRIPT_8}, }; + static const struct ListMenuItem sDebugMenu_Items_FlagsVars[] = { [DEBUG_FLAGVAR_MENU_ITEM_FLAGS] = {sDebugText_FlagsVars_Flags, DEBUG_FLAGVAR_MENU_ITEM_FLAGS}, @@ -638,6 +664,7 @@ static const struct ListMenuItem sDebugMenu_Items_FlagsVars[] = [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BAG_USE] = {sDebugText_FlagsVars_SwitchBagUse, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BAG_USE}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_CATCHING] = {sDebugText_FlagsVars_SwitchCatching, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_CATCHING}, }; + static const struct ListMenuItem sDebugMenu_Items_Battle_0[] = { [DEBUG_BATTLE_0_MENU_ITEM_WILD] = {sDebugText_Battle_0_Wild, DEBUG_BATTLE_0_MENU_ITEM_WILD}, @@ -646,6 +673,7 @@ static const struct ListMenuItem sDebugMenu_Items_Battle_0[] = [DEBUG_BATTLE_0_MENU_ITEM_DOUBLE] = {sDebugText_Battle_0_Double, DEBUG_BATTLE_0_MENU_ITEM_DOUBLE}, [DEBUG_BATTLE_0_MENU_ITEM_MULTI] = {sDebugText_Battle_0_Mulit, DEBUG_BATTLE_0_MENU_ITEM_MULTI}, }; + static const struct ListMenuItem sDebugMenu_Items_Battle_1[] = { [DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_00] = {sDebugText_Battle_1_AIFlag_00, DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_00}, @@ -668,6 +696,7 @@ static const struct ListMenuItem sDebugMenu_Items_Battle_1[] = [DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_17] = {sDebugText_Battle_1_AIFlag_17, DEBUG_BATTLE_1_MENU_ITEM_AI_FLAG_17}, [DEBUG_BATTLE_1_MENU_ITEM_CONTINUE] = {sDebugText_Continue, DEBUG_BATTLE_1_MENU_ITEM_CONTINUE}, }; + static const struct ListMenuItem sDebugMenu_Items_Battle_2[] = { [DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_0] = {sDebugText_Battle_2_Terrain_0, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_0}, @@ -681,6 +710,7 @@ static const struct ListMenuItem sDebugMenu_Items_Battle_2[] = [DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_8] = {sDebugText_Battle_2_Terrain_8, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_8}, [DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_9] = {sDebugText_Battle_2_Terrain_9, DEBUG_BATTLE_2_MENU_ITEM_TERRAIN_9}, }; + static const struct ListMenuItem sDebugMenu_Items_Give[] = { [DEBUG_GIVE_MENU_ITEM_ITEM_X] = {sDebugText_Give_GiveItem, DEBUG_GIVE_MENU_ITEM_ITEM_X}, @@ -692,6 +722,7 @@ static const struct ListMenuItem sDebugMenu_Items_Give[] = [DEBUG_GIVE_MENU_ITEM_MAX_BATTLE_POINTS] = {sDebugText_Give_BattlePoints, DEBUG_GIVE_MENU_ITEM_MAX_BATTLE_POINTS}, [DEBUG_GIVE_MENU_ITEM_DAYCARE_EGG] = {sDebugText_Give_DaycareEgg, DEBUG_GIVE_MENU_ITEM_DAYCARE_EGG}, }; + static const struct ListMenuItem sDebugMenu_Items_Fill[] = { [DEBUG_FILL_MENU_ITEM_PC_BOXES_FAST] = {sDebugText_Fill_Pc_Fast, DEBUG_FILL_MENU_ITEM_PC_BOXES_FAST}, @@ -703,44 +734,46 @@ static const struct ListMenuItem sDebugMenu_Items_Fill[] = [DEBUG_FILL_MENU_ITEM_POCKET_BERRIES] = {sDebugText_Fill_PocketBerries, DEBUG_FILL_MENU_ITEM_POCKET_BERRIES}, [DEBUG_FILL_MENU_ITEM_POCKET_KEY_ITEMS] = {sDebugText_Fill_PocketKeyItems, DEBUG_FILL_MENU_ITEM_POCKET_KEY_ITEMS}, }; + static const struct ListMenuItem sDebugMenu_Items_Sound[] = { - [DEBUG_SOUND_MENU_ITEM_SE] = {sDebugText_Sound_SE, DEBUG_SOUND_MENU_ITEM_SE}, - [DEBUG_SOUND_MENU_ITEM_MUS] = {sDebugText_Sound_MUS, DEBUG_SOUND_MENU_ITEM_MUS}, + [DEBUG_SOUND_MENU_ITEM_SE] = {sDebugText_Sound_SFX, DEBUG_SOUND_MENU_ITEM_SE}, + [DEBUG_SOUND_MENU_ITEM_MUS] = {sDebugText_Sound_Music, DEBUG_SOUND_MENU_ITEM_MUS}, }; // ******************************* // Menu Actions static void (*const sDebugMenu_Actions_Main[])(u8) = { - [DEBUG_MENU_ITEM_UTILITIES] = DebugAction_OpenUtilitiesMenu, - [DEBUG_MENU_ITEM_SCRIPTS] = DebugAction_OpenScriptsMenu, - [DEBUG_MENU_ITEM_FLAGVAR] = DebugAction_OpenFlagsVarsMenu, - //[DEBUG_MENU_ITEM_BATTLE] = DebugAction_OpenBattleMenu, - [DEBUG_MENU_ITEM_GIVE] = DebugAction_OpenGiveMenu, - [DEBUG_MENU_ITEM_FILL] = DebugAction_OpenFillMenu, - [DEBUG_MENU_ITEM_SOUND] = DebugAction_OpenSoundMenu, - [DEBUG_MENU_ITEM_ACCESS_PC] = DebugAction_AccessPC, - [DEBUG_MENU_ITEM_CANCEL] = DebugAction_Cancel + [DEBUG_MENU_ITEM_UTILITIES] = DebugAction_OpenUtilitiesMenu, + [DEBUG_MENU_ITEM_SCRIPTS] = DebugAction_OpenScriptsMenu, + [DEBUG_MENU_ITEM_FLAGVAR] = DebugAction_OpenFlagsVarsMenu, + //[DEBUG_MENU_ITEM_BATTLE] = DebugAction_OpenBattleMenu, + [DEBUG_MENU_ITEM_GIVE] = DebugAction_OpenGiveMenu, + [DEBUG_MENU_ITEM_FILL] = DebugAction_OpenFillMenu, + [DEBUG_MENU_ITEM_SOUND] = DebugAction_OpenSoundMenu, + [DEBUG_MENU_ITEM_ACCESS_PC] = DebugAction_AccessPC, + [DEBUG_MENU_ITEM_CANCEL] = DebugAction_Cancel }; static void (*const sDebugMenu_Actions_Utilities[])(u8) = { - [DEBUG_UTIL_MENU_ITEM_HEAL_PARTY] = DebugAction_Util_HealParty, - [DEBUG_UTIL_MENU_ITEM_FLY] = DebugAction_Util_Fly, - [DEBUG_UTIL_MENU_ITEM_WARP] = DebugAction_Util_Warp_Warp, - [DEBUG_UTIL_MENU_ITEM_POISON_MONS] = DebugAction_Util_PoisonMons, - [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = DebugAction_Util_CheckSaveBlock, - [DEBUG_UTIL_MENU_ITEM_WEATHER] = DebugAction_Util_Weather, - [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = DebugAction_Util_CheckWallClock, - [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = DebugAction_Util_SetWallClock, - [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = DebugAction_Util_WatchCredits, - [DEBUG_UTIL_MENU_ITEM_TRAINER_NAME] = DebugAction_Util_Trainer_Name, - [DEBUG_UTIL_MENU_ITEM_TRAINER_GENDER] = DebugAction_Util_Trainer_Gender, - [DEBUG_UTIL_MENU_ITEM_TRAINER_ID] = DebugAction_Util_Trainer_Id, + [DEBUG_UTIL_MENU_ITEM_HEAL_PARTY] = DebugAction_Util_HealParty, + [DEBUG_UTIL_MENU_ITEM_FLY] = DebugAction_Util_Fly, + [DEBUG_UTIL_MENU_ITEM_WARP] = DebugAction_Util_Warp_Warp, + [DEBUG_UTIL_MENU_ITEM_POISON_MONS] = DebugAction_Util_PoisonMons, + [DEBUG_UTIL_MENU_ITEM_SAVEBLOCK] = DebugAction_Util_CheckSaveBlock, + [DEBUG_UTIL_MENU_ITEM_WEATHER] = DebugAction_Util_Weather, + [DEBUG_UTIL_MENU_ITEM_CHECKWALLCLOCK] = DebugAction_Util_CheckWallClock, + [DEBUG_UTIL_MENU_ITEM_SETWALLCLOCK] = DebugAction_Util_SetWallClock, + [DEBUG_UTIL_MENU_ITEM_WATCHCREDITS] = DebugAction_Util_WatchCredits, + [DEBUG_UTIL_MENU_ITEM_PLAYER_NAME] = DebugAction_Util_Player_Name, + [DEBUG_UTIL_MENU_ITEM_PLAYER_GENDER] = DebugAction_Util_Player_Gender, + [DEBUG_UTIL_MENU_ITEM_PLAYER_ID] = DebugAction_Util_Player_Id, [DEBUG_UTIL_MENU_ITEM_CLEAR_BOXES] = DebugAction_Util_Clear_Boxes, [DEBUG_UTIL_MENU_ITEM_CHEAT] = DebugAction_Util_CheatStart, [DEBUG_UTIL_MENU_ITEM_HATCH_AN_EGG] = DebugAction_Util_HatchAnEgg, }; + static void (*const sDebugMenu_Actions_Scripts[])(u8) = { [DEBUG_UTIL_MENU_ITEM_SCRIPT_1] = DebugAction_Util_Script_1, @@ -752,6 +785,7 @@ static void (*const sDebugMenu_Actions_Scripts[])(u8) = [DEBUG_UTIL_MENU_ITEM_SCRIPT_7] = DebugAction_Util_Script_7, [DEBUG_UTIL_MENU_ITEM_SCRIPT_8] = DebugAction_Util_Script_8, }; + static void (*const sDebugMenu_Actions_Flags[])(u8) = { [DEBUG_FLAGVAR_MENU_ITEM_FLAGS] = DebugAction_FlagsVars_Flags, @@ -782,6 +816,7 @@ static void (*const sDebugMenu_Actions_Give[])(u8) = [DEBUG_GIVE_MENU_ITEM_MAX_BATTLE_POINTS] = DebugAction_Give_MaxBattlePoints, [DEBUG_GIVE_MENU_ITEM_DAYCARE_EGG] = DebugAction_Give_DayCareEgg, }; + static void (*const sDebugMenu_Actions_Fill[])(u8) = { [DEBUG_FILL_MENU_ITEM_PC_BOXES_FAST] = DebugAction_Fill_PCBoxes_Fast, @@ -800,7 +835,6 @@ static void (*const sDebugMenu_Actions_Sound[])(u8) = [DEBUG_SOUND_MENU_ITEM_MUS] = DebugAction_Sound_MUS, }; - // ******************************* // Windows static const struct WindowTemplate sDebugMenuWindowTemplateMain = @@ -813,6 +847,7 @@ static const struct WindowTemplate sDebugMenuWindowTemplateMain = .paletteNum = 15, .baseBlock = 1, }; + static const struct WindowTemplate sDebugMenuWindowTemplateExtra = { .bg = 0, @@ -823,6 +858,7 @@ static const struct WindowTemplate sDebugMenuWindowTemplateExtra = .paletteNum = 15, .baseBlock = 1, }; + static const struct WindowTemplate sDebugMenuWindowTemplateWeather = { .bg = 0, @@ -833,6 +869,7 @@ static const struct WindowTemplate sDebugMenuWindowTemplateWeather = .paletteNum = 15, .baseBlock = 1, }; + static const struct WindowTemplate sDebugMenuWindowTemplateSound = { .bg = 0, @@ -843,6 +880,7 @@ static const struct WindowTemplate sDebugMenuWindowTemplateSound = .paletteNum = 15, .baseBlock = 1, }; + static const struct WindowTemplate sDebugMenuWindowTemplateFlagsVars = { .bg = 0, @@ -862,54 +900,63 @@ static const struct ListMenuTemplate sDebugMenu_ListTemplate_Main = .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Main), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Utilities = { .items = sDebugMenu_Items_Utilities, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Utilities), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Scripts = { .items = sDebugMenu_Items_Scripts, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Scripts), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_FlagsVars = { .items = sDebugMenu_Items_FlagsVars, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_FlagsVars), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Battle_0 = { .items = sDebugMenu_Items_Battle_0, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Battle_0), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Battle_1 = { .items = sDebugMenu_Items_Battle_1, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Battle_1), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Battle_2 = { .items = sDebugMenu_Items_Battle_2, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Battle_2), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Give = { .items = sDebugMenu_Items_Give, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Give), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Fill = { .items = sDebugMenu_Items_Fill, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .totalItems = ARRAY_COUNT(sDebugMenu_Items_Fill), }; + static const struct ListMenuTemplate sDebugMenu_ListTemplate_Sound = { .items = sDebugMenu_Items_Sound, @@ -928,10 +975,18 @@ void Debug_ShowMainMenu(void) Debug_ShowMenu(DebugTask_HandleMenuInput_Main, sDebugMenu_ListTemplate_Main); } + static void Debug_ReShowMainMenu(void) { Debug_ShowMenu(DebugTask_HandleMenuInput_Main, sDebugMenu_ListTemplate_Main); } + +#define tMenuTaskId data[0] +#define tWindowId data[1] +#define tSubWindowId data[2] +#define tInput data[3] +#define tDigit data[4] + static void Debug_ShowMenu(void (*HandleInput)(u8), struct ListMenuTemplate LMtemplate) { struct ListMenuTemplate menuTemplate; @@ -959,43 +1014,46 @@ static void Debug_ShowMenu(void (*HandleInput)(u8), struct ListMenuTemplate LMte menuTemplate.lettersSpacing = 1; menuTemplate.itemVerticalPadding = 0; menuTemplate.scrollMultiple = LIST_NO_MULTIPLE_SCROLL; - menuTemplate.fontId = 1; + menuTemplate.fontId = DEBUG_MENU_FONT; menuTemplate.cursorKind = 0; menuTaskId = ListMenuInit(&menuTemplate, 0, 0); // create input handler task inputTaskId = CreateTask(HandleInput, 3); - gTasks[inputTaskId].data[0] = menuTaskId; - gTasks[inputTaskId].data[1] = windowId; - gTasks[inputTaskId].data[2] = 0; + gTasks[inputTaskId].tMenuTaskId = menuTaskId; + gTasks[inputTaskId].tWindowId = windowId; + gTasks[inputTaskId].tSubWindowId = 0; Debug_RefreshListMenu(inputTaskId); //Debug_ShowMenuDynamic(inputTaskId); // draw everything - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); } + static void Debug_DestroyMenu(u8 taskId) { - DestroyListMenuTask(gTasks[taskId].data[0], NULL, NULL); - RemoveWindow(gTasks[taskId].data[1]); + DestroyListMenuTask(gTasks[taskId].tMenuTaskId, NULL, NULL); + RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); } + static void Debug_DestroyMenu_Full(u8 taskId) { - if (gTasks[taskId].data[2] != 0) + if (gTasks[taskId].tSubWindowId != 0) { - ClearStdWindowAndFrame(gTasks[taskId].data[2], FALSE); + ClearStdWindowAndFrame(gTasks[taskId].tSubWindowId, FALSE); DebugAction_DestroyExtraWindow(taskId); } - DestroyListMenuTask(gTasks[taskId].data[0], NULL, NULL); - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + DestroyListMenuTask(gTasks[taskId].tMenuTaskId, NULL, NULL); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); DestroyTask(taskId); UnfreezeObjectEvents(); Free(sDebugMenuListData); Free(sDebugBattleData); } + static void Debug_DestroyMenu_Full_Script(u8 taskId, const u8 *script) { Debug_DestroyMenu_Full(taskId); @@ -1003,20 +1061,22 @@ static void Debug_DestroyMenu_Full_Script(u8 taskId, const u8 *script) FreezeObjectEvents(); ScriptContext_SetupScript(script); } + static void DebugAction_Cancel(u8 taskId) { Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_DestroyExtraWindow(u8 taskId) { - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); - ClearStdWindowAndFrame(gTasks[taskId].data[2], TRUE); - RemoveWindow(gTasks[taskId].data[2]); + ClearStdWindowAndFrame(gTasks[taskId].tSubWindowId, TRUE); + RemoveWindow(gTasks[taskId].tSubWindowId); - DestroyListMenuTask(gTasks[taskId].data[0], NULL, NULL); + DestroyListMenuTask(gTasks[taskId].tMenuTaskId, NULL, NULL); DestroyTask(taskId); ScriptContext_Enable(); UnfreezeObjectEvents(); @@ -1122,7 +1182,7 @@ static void Debug_RefreshListMenu(u8 taskId) u16 i; const u8 sColor_Red[] = _("{COLOR RED}"); const u8 sColor_Green[] = _("{COLOR GREEN}"); - u8 listTaskId = gTasks[taskId].data[0]; + u8 listTaskId = gTasks[taskId].tMenuTaskId; struct ListMenu *list = (void*) gTasks[listTaskId].data; u8 totalItems, flagResult; u8 const * name; @@ -1209,7 +1269,7 @@ static void Debug_RefreshListMenu(u8 taskId) gMultiuseListMenuTemplate.items = sDebugMenuListData->listItems; gMultiuseListMenuTemplate.totalItems = totalItems; gMultiuseListMenuTemplate.maxShowed = DEBUG_MENU_HEIGHT_MAIN; - gMultiuseListMenuTemplate.windowId = gTasks[taskId].data[1]; + gMultiuseListMenuTemplate.windowId = gTasks[taskId].tWindowId; gMultiuseListMenuTemplate.header_X = 0; gMultiuseListMenuTemplate.item_X = 8; gMultiuseListMenuTemplate.cursor_X = 0; @@ -1223,15 +1283,16 @@ static void Debug_RefreshListMenu(u8 taskId) gMultiuseListMenuTemplate.fontId = 1; gMultiuseListMenuTemplate.cursorKind = 0; } + static void Debug_RedrawListMenu(u8 taskId) { - u8 listTaskId = gTasks[taskId].data[0]; + u8 listTaskId = gTasks[taskId].tMenuTaskId; u16 scrollOffset, selectedRow; ListMenuGetScrollAndRow(listTaskId, &scrollOffset, &selectedRow); - DestroyListMenuTask(gTasks[taskId].data[0], &scrollOffset, &selectedRow); + DestroyListMenuTask(gTasks[taskId].tMenuTaskId, &scrollOffset, &selectedRow); Debug_RefreshListMenu(taskId); - gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, scrollOffset, selectedRow); + gTasks[taskId].tMenuTaskId = ListMenuInit(&gMultiuseListMenuTemplate, scrollOffset, selectedRow); } @@ -1240,7 +1301,7 @@ static void Debug_RedrawListMenu(u8 taskId) static void DebugTask_HandleMenuInput_Main(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1255,10 +1316,11 @@ static void DebugTask_HandleMenuInput_Main(u8 taskId) ScriptContext_Enable(); } } + static void DebugTask_HandleMenuInput_Utilities(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1273,10 +1335,11 @@ static void DebugTask_HandleMenuInput_Utilities(u8 taskId) Debug_ReShowMainMenu(); } } + static void DebugTask_HandleMenuInput_Scripts(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1291,10 +1354,11 @@ static void DebugTask_HandleMenuInput_Scripts(u8 taskId) Debug_ReShowMainMenu(); } } + static void DebugTask_HandleMenuInput_FlagsVars(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1304,10 +1368,10 @@ static void DebugTask_HandleMenuInput_FlagsVars(u8 taskId) func(taskId); // Remove TRUE/FALSE window for functions that haven't been assigned flags - if (gTasks[taskId].data[3] == 0xFF) + if (gTasks[taskId].tInput == 0xFF) { - ClearStdWindowAndFrame(gTasks[taskId].data[2], TRUE); - RemoveWindow(gTasks[taskId].data[2]); + ClearStdWindowAndFrame(gTasks[taskId].tSubWindowId, TRUE); + RemoveWindow(gTasks[taskId].tSubWindowId); Free(sDebugMenuListData); } else @@ -1345,16 +1409,17 @@ static void DebugTask_HandleBattleMenuReDraw(u8 taskId) break; } } + static void DebugTask_HandleMenuInput_Battle(u8 taskId) { void (*func)(u8); - u8 listTaskId = gTasks[taskId].data[0]; + u8 listTaskId = gTasks[taskId].tMenuTaskId; u32 input = ListMenu_ProcessInput(listTaskId); u16 idx; ListMenuGetCurrentItemArrayId(listTaskId, &idx); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); @@ -1402,7 +1467,7 @@ static void DebugTask_HandleMenuInput_Battle(u8 taskId) break; } } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { switch (sDebugBattleData->submenu) { @@ -1478,7 +1543,7 @@ static void Debug_InitializeBattle(u8 taskId) static void DebugTask_HandleMenuInput_Give(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1493,28 +1558,30 @@ static void DebugTask_HandleMenuInput_Give(u8 taskId) Debug_ReShowMainMenu(); } } + static void DebugTask_HandleMenuInput_Fill(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); - if (gMain.newKeys & A_BUTTON) + if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); if ((func = sDebugMenu_Actions_Fill[input]) != NULL) func(taskId); } - else if (gMain.newKeys & B_BUTTON) + else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); Debug_DestroyMenu(taskId); Debug_ReShowMainMenu(); } } + static void DebugTask_HandleMenuInput_Sound(u8 taskId) { void (*func)(u8); - u32 input = ListMenu_ProcessInput(gTasks[taskId].data[0]); + u32 input = ListMenu_ProcessInput(gTasks[taskId].tMenuTaskId); if (JOY_NEW(A_BUTTON)) { @@ -1537,11 +1604,13 @@ static void DebugAction_OpenUtilitiesMenu(u8 taskId) Debug_DestroyMenu(taskId); Debug_ShowMenu(DebugTask_HandleMenuInput_Utilities, sDebugMenu_ListTemplate_Utilities); } + static void DebugAction_OpenScriptsMenu(u8 taskId) { Debug_DestroyMenu(taskId); Debug_ShowMenu(DebugTask_HandleMenuInput_Scripts, sDebugMenu_ListTemplate_Scripts); } + static void DebugAction_OpenFlagsVarsMenu(u8 taskId) { Debug_DestroyMenu(taskId); @@ -1561,11 +1630,13 @@ static void DebugAction_OpenGiveMenu(u8 taskId) Debug_DestroyMenu(taskId); Debug_ShowMenu(DebugTask_HandleMenuInput_Give, sDebugMenu_ListTemplate_Give); } + static void DebugAction_OpenFillMenu(u8 taskId) { Debug_DestroyMenu(taskId); Debug_ShowMenu(DebugTask_HandleMenuInput_Fill, sDebugMenu_ListTemplate_Fill); } + static void DebugAction_OpenSoundMenu(u8 taskId) { Debug_DestroyMenu(taskId); @@ -1581,6 +1652,7 @@ static void DebugAction_Util_HealParty(u8 taskId) ScriptContext_Enable(); Debug_DestroyMenu_Full(taskId); } + static void DebugAction_Util_Fly(u8 taskId) { FlagSet(FLAG_VISITED_LITTLEROOT_TOWN); @@ -1605,35 +1677,42 @@ static void DebugAction_Util_Fly(u8 taskId) SetMainCallback2(CB2_OpenFlyMap); } +#define tMapGroup data[5] +#define tMapNum data[6] +#define tWarp data[7] + +#define LAST_MAP_GROUP (MAP_GROUPS_COUNT - 1) + static void DebugAction_Util_Warp_Warp(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUPS_COUNT-1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(gStringVar2, LAST_MAP_GROUP, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); StringCopy(gStringVar3, gText_DigitIndicator[0]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMapGroup); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Util_Warp_SelectMapGroup; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 0; //Current Flag - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = 0; //Map Group - gTasks[taskId].data[6] = 0; //Map - gTasks[taskId].data[7] = 0; //warp + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tMapGroup = 0; + gTasks[taskId].tMapNum = 0; + gTasks[taskId].tWarp = 0; } + static void DebugAction_Util_Warp_SelectMapGroup(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -1641,48 +1720,48 @@ static void DebugAction_Util_Warp_SelectMapGroup(u8 taskId) PlaySE(SE_SELECT); if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > MAP_GROUPS_COUNT - 1) - gTasks[taskId].data[3] = MAP_GROUPS_COUNT - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > LAST_MAP_GROUP) + gTasks[taskId].tInput = LAST_MAP_GROUP; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUPS_COUNT - 1, STR_CONV_MODE_LEADING_ZEROS, 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(gStringVar2, LAST_MAP_GROUP, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMapGroup); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[5] = gTasks[taskId].data[3]; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tMapGroup = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1 >= 100) ? 3 : 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1 >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].tMapGroup] - 1 >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].tMapGroup] - 1, STR_CONV_MODE_LEADING_ZEROS, (MAP_GROUP_COUNT[gTasks[taskId].tMapGroup] - 1 >= 100) ? 3 : 2); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); - GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].data[5], gTasks[taskId].data[3])->regionMapSectionId, 0); - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); + GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].tMapGroup, gTasks[taskId].tInput)->regionMapSectionId, 0); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMap); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Util_Warp_SelectMap; } @@ -1692,55 +1771,56 @@ static void DebugAction_Util_Warp_SelectMapGroup(u8 taskId) DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Util_Warp_SelectMap(u8 taskId) { - u8 max_value = MAP_GROUP_COUNT[gTasks[taskId].data[5]]; //maps in the selected map group + u8 max_value = MAP_GROUP_COUNT[gTasks[taskId].tMapGroup]; //maps in the selected map group if (JOY_NEW(DPAD_ANY)) { PlaySE(SE_SELECT); if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > max_value - 1) - gTasks[taskId].data[3] = max_value - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > max_value - 1) + gTasks[taskId].tInput = max_value - 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); - ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].data[5]] - 1, STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); + ConvertIntToDecimalStringN(gStringVar2, MAP_GROUP_COUNT[gTasks[taskId].tMapGroup] - 1, STR_CONV_MODE_LEADING_ZEROS, (max_value >= 100) ? 3 : 2); StringExpandPlaceholders(gStringVar1, sDebugText_Util_WarpToMap_SelMax); - GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].data[5], gTasks[taskId].data[3])->regionMapSectionId, 0); - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); + GetMapName(gStringVar2, Overworld_GetMapHeaderByGroupAndId(gTasks[taskId].tMapGroup, gTasks[taskId].tInput)->regionMapSectionId, 0); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectMap); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[6] = gTasks[taskId].data[3]; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tMapNum = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectWarp); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Util_Warp_SelectWarp; } else if (JOY_NEW(B_BUTTON)) @@ -1749,6 +1829,7 @@ static void DebugAction_Util_Warp_SelectMap(u8 taskId) DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Util_Warp_SelectWarp(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -1756,29 +1837,28 @@ static void DebugAction_Util_Warp_SelectWarp(u8 taskId) PlaySE(SE_SELECT); if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > 10) - gTasks[taskId].data[3] = 10; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > 10) + gTasks[taskId].tInput = 10; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_Util_WarpToMap_SelectWarp); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[7] = gTasks[taskId].data[3]; - //WARP + gTasks[taskId].tWarp = gTasks[taskId].tInput; //If there's no warp with the number available, warp to the center of the map. - SetWarpDestinationToMapWarp(gTasks[taskId].data[5], gTasks[taskId].data[6], gTasks[taskId].data[7]); + SetWarpDestinationToMapWarp(gTasks[taskId].tMapGroup, gTasks[taskId].tMapNum, gTasks[taskId].tWarp); DoWarp(); ResetInitialPlayerAvatarState(); DebugAction_DestroyExtraWindow(taskId); @@ -1790,6 +1870,10 @@ static void DebugAction_Util_Warp_SelectWarp(u8 taskId) } } +#undef tMapGroup +#undef tMapNum +#undef tWarp + static void DebugAction_Util_PoisonMons(u8 taskId) { int i; @@ -1832,9 +1916,7 @@ void CheckPokemonStorageSize(struct ScriptContext *ctx) static void DebugAction_Util_CheckSaveBlock(u8 taskId) { - Debug_DestroyMenu_Full(taskId); - LockPlayerFieldControls(); - ScriptContext_SetupScript(Debug_CheckSaveBlock); + Debug_DestroyMenu_Full_Script(taskId, Debug_CheckSaveBlock); } static const u8 sWeatherNames[22][24] = { @@ -1857,33 +1939,34 @@ static const u8 sWeatherNames[22][24] = { [WEATHER_ROUTE119_CYCLE] = _("ROUTE119 CYCLE"), [WEATHER_ROUTE123_CYCLE] = _("ROUTE123 CYCLE"), }; -static const u8 sText_WeatherNotDefined[] = _("NOT DEFINED!!!"); +static const u8 sDebugText_WeatherNotDefined[] = _("NOT DEFINED!!!"); static void DebugAction_Util_Weather(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateWeather); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); //Display initial ID StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar1, sWeatherNames[0], CHAR_SPACE, 30); StringExpandPlaceholders(gStringVar4, sDebugText_Util_Weather_ID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Util_Weather_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 0; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; } + static void DebugAction_Util_Weather_SelectId(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -1892,44 +1975,44 @@ static void DebugAction_Util_Weather_SelectId(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > WEATHER_ROUTE123_CYCLE) - gTasks[taskId].data[3] = WEATHER_ROUTE123_CYCLE; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > WEATHER_ROUTE123_CYCLE) + gTasks[taskId].tInput = WEATHER_ROUTE123_CYCLE; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < WEATHER_NONE) - gTasks[taskId].data[3] = WEATHER_NONE; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < WEATHER_NONE) + gTasks[taskId].tInput = WEATHER_NONE; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); - if (gTasks[taskId].data[3] <= 15 || gTasks[taskId].data[3] >= 20) - StringCopyPadded(gStringVar1, sWeatherNames[gTasks[taskId].data[3]], CHAR_SPACE, 30); + if (gTasks[taskId].tInput <= 15 || gTasks[taskId].tInput >= 20) + StringCopyPadded(gStringVar1, sWeatherNames[gTasks[taskId].tInput], CHAR_SPACE, 30); else - StringCopyPadded(gStringVar1, sText_WeatherNotDefined, CHAR_SPACE, 30); + StringCopyPadded(gStringVar1, sDebugText_WeatherNotDefined, CHAR_SPACE, 30); StringExpandPlaceholders(gStringVar4, sDebugText_Util_Weather_ID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - if (gTasks[taskId].data[3] <= 14 || gTasks[taskId].data[3] >= 20) + if (gTasks[taskId].tInput <= 14 || gTasks[taskId].tInput >= 20) { - gTasks[taskId].data[5] = gTasks[taskId].data[3]; + gTasks[taskId].data[5] = gTasks[taskId].tInput; SetWeather(gTasks[taskId].data[5]); } } @@ -1944,47 +2027,53 @@ static void DebugAction_Util_CheckWallClock(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, PlayersHouse_2F_EventScript_CheckWallClock); } + static void DebugAction_Util_SetWallClock(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, PlayersHouse_2F_EventScript_SetWallClock); } + static void DebugAction_Util_WatchCredits(u8 taskId) { - struct Task* task = &gTasks[taskId]; Debug_DestroyMenu_Full(taskId); SetMainCallback2(CB2_StartCreditsSequence); } -static void DebugAction_Util_Trainer_Name(u8 taskId) + +static void DebugAction_Util_Player_Name(u8 taskId) { - NewGameBirchSpeech_SetDefaultPlayerName(Random() % 20); - DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldContinueScript); + DoNamingScreen(NAMING_SCREEN_PLAYER, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldContinueScript); } -static void DebugAction_Util_Trainer_Gender(u8 taskId) + +static void DebugAction_Util_Player_Gender(u8 taskId) { - if (gSaveBlock2Ptr->playerGender == 0) // 0 Male, 1 Female - gSaveBlock2Ptr->playerGender = 1; + if (gSaveBlock2Ptr->playerGender == MALE) + gSaveBlock2Ptr->playerGender = FEMALE; else - gSaveBlock2Ptr->playerGender = 0; + gSaveBlock2Ptr->playerGender = MALE; Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } -static void DebugAction_Util_Trainer_Id(u8 taskId) + +static void DebugAction_Util_Player_Id(u8 taskId) { u32 trainerId = ((Random() << 16) | Random()); SetTrainerId(trainerId, gSaveBlock2Ptr->playerTrainerId); Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_Util_Clear_Boxes(u8 taskId) { ResetPokemonStorageSystem(); Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_Util_CheatStart(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, Debug_CheatStart); } + static void DebugAction_Util_HatchAnEgg(u8 taskId) { Debug_DestroyMenu_Full_Script(taskId, Debug_HatchAnEgg); @@ -1994,35 +2083,42 @@ static void DebugAction_Util_HatchAnEgg(u8 taskId) // Actions Scripts static void DebugAction_Util_Script_1(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_1); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_1); } + static void DebugAction_Util_Script_2(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_2); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_2); } + static void DebugAction_Util_Script_3(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_3); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_3); } + static void DebugAction_Util_Script_4(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_4); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_4); } + static void DebugAction_Util_Script_5(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_5); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_5); } + static void DebugAction_Util_Script_6(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_6); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_6); } + static void DebugAction_Util_Script_7(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_7); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_7); } + static void DebugAction_Util_Script_8(u8 taskId) { - Debug_DestroyMenu_Full_Script(taskId, Debug_Script_8); + Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_Script_8); } // ******************************* @@ -2031,17 +2127,17 @@ static void DebugAction_FlagsVars_Flags(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial Flag + // Display initial flag ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_FLAGS); ConvertIntToHexStringN(gStringVar2, 1, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_FlagHex); @@ -2051,17 +2147,20 @@ static void DebugAction_FlagsVars_Flags(u8 taskId) StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); StringCopy(gStringVar3, gText_DigitIndicator[0]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Flag); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_FlagsVars_FlagsSelect; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = FLAG_TEMP_1; //Current Flag - gTasks[taskId].data[4] = 0; //Digit Selected + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = FLAG_TEMP_1; + gTasks[taskId].tDigit = 0; } + static void DebugAction_FlagsVars_FlagsSelect(u8 taskId) { if (JOY_NEW(A_BUTTON)) - FlagToggle(gTasks[taskId].data[3]); + { + FlagToggle(gTasks[taskId].tInput); + } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); @@ -2072,68 +2171,64 @@ static void DebugAction_FlagsVars_FlagsSelect(u8 taskId) if (JOY_NEW(DPAD_UP)) { PlaySE(SE_SELECT); - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= FLAGS_COUNT){ - gTasks[taskId].data[3] = FLAGS_COUNT - 1; - } + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput >= FLAGS_COUNT) + gTasks[taskId].tInput = FLAGS_COUNT - 1; } if (JOY_NEW(DPAD_DOWN)) { PlaySE(SE_SELECT); - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1){ - gTasks[taskId].data[3] = 1; - } + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { PlaySE(SE_SELECT); - gTasks[taskId].data[4] -= 1; - if (gTasks[taskId].data[4] < 0) - { - gTasks[taskId].data[4] = 0; - } + gTasks[taskId].tDigit -= 1; + if (gTasks[taskId].tDigit < 0) + gTasks[taskId].tDigit = 0; } if (JOY_NEW(DPAD_RIGHT)) { PlaySE(SE_SELECT); - gTasks[taskId].data[4] += 1; - if (gTasks[taskId].data[4] > DEBUG_NUMBER_DIGITS_FLAGS - 1) - { - gTasks[taskId].data[4] = DEBUG_NUMBER_DIGITS_FLAGS - 1; - } + gTasks[taskId].tDigit += 1; + if (gTasks[taskId].tDigit > DEBUG_NUMBER_DIGITS_FLAGS - 1) + gTasks[taskId].tDigit = DEBUG_NUMBER_DIGITS_FLAGS - 1; } if (JOY_NEW(DPAD_ANY) || JOY_NEW(A_BUTTON)) { - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_FLAGS); - ConvertIntToHexStringN(gStringVar2, gTasks[taskId].data[3], STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_FLAGS); + ConvertIntToHexStringN(gStringVar2, gTasks[taskId].tInput, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_FlagHex); - if (FlagGet(gTasks[taskId].data[3]) == TRUE) + if (FlagGet(gTasks[taskId].tInput) == TRUE) StringCopyPadded(gStringVar2, sDebugText_True, CHAR_SPACE, 15); else StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); - StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].data[4]]); + StringCopy(gStringVar3, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Flag); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } } +#define tVarValue data[5] + static void DebugAction_FlagsVars_Vars(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial Variable + // Display initial var ConvertIntToDecimalStringN(gStringVar1, VARS_START, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); ConvertIntToHexStringN(gStringVar2, VARS_START, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_VariableHex); @@ -2141,79 +2236,79 @@ static void DebugAction_FlagsVars_Vars(u8 taskId) StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar2, gText_DigitIndicator[0]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Variable); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_FlagsVars_Select; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = VARS_START; //Current Variable - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = 0; //Current Variable VALUE + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = VARS_START; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tVarValue = 0; } static void DebugAction_FlagsVars_Select(u8 taskId) { if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > VARS_END) - gTasks[taskId].data[3] = VARS_END; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > VARS_END) + gTasks[taskId].tInput = VARS_END; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < VARS_START) - gTasks[taskId].data[3] = VARS_START; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < VARS_START) + gTasks[taskId].tInput = VARS_START; } if (JOY_NEW(DPAD_LEFT)) { - gTasks[taskId].data[4] -= 1; - if (gTasks[taskId].data[4] < 0) - gTasks[taskId].data[4] = 0; + gTasks[taskId].tDigit -= 1; + if (gTasks[taskId].tDigit < 0) + gTasks[taskId].tDigit = 0; } if (JOY_NEW(DPAD_RIGHT)) { - gTasks[taskId].data[4] += 1; - if (gTasks[taskId].data[4] > DEBUG_NUMBER_DIGITS_VARIABLES - 1) - gTasks[taskId].data[4] = DEBUG_NUMBER_DIGITS_VARIABLES - 1; + gTasks[taskId].tDigit += 1; + if (gTasks[taskId].tDigit > DEBUG_NUMBER_DIGITS_VARIABLES - 1) + gTasks[taskId].tDigit = DEBUG_NUMBER_DIGITS_VARIABLES - 1; } if (JOY_NEW(DPAD_ANY)) { PlaySE(SE_SELECT); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); - ConvertIntToHexStringN(gStringVar2, gTasks[taskId].data[3], STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + ConvertIntToHexStringN(gStringVar2, gTasks[taskId].tInput, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_VariableHex); - if (VarGetIfExist(gTasks[taskId].data[3]) == 65535) //Current value, if 65535 the value hasnt been set - gTasks[taskId].data[5] = 0; + if (VarGetIfExist(gTasks[taskId].tInput) == 0xFFFF) + gTasks[taskId].tVarValue = 0; else - gTasks[taskId].data[5] = VarGet(gTasks[taskId].data[3]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[5], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); //Current digit + gTasks[taskId].tVarValue = VarGet(gTasks[taskId].tInput); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tVarValue, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); //Combine str's to full window string StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_Variable); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[4] = 0; + gTasks[taskId].tDigit = 0; PlaySE(SE_SELECT); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); - ConvertIntToHexStringN(gStringVar2, gTasks[taskId].data[3], STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + ConvertIntToHexStringN(gStringVar2, gTasks[taskId].tInput, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_VariableHex); - if (VarGetIfExist(gTasks[taskId].data[3]) == 65535) //Current value if 65535 the value hasnt been set - gTasks[taskId].data[5] = 0; + if (VarGetIfExist(gTasks[taskId].tInput) == 0xFFFF) + gTasks[taskId].tVarValue = 0; else - gTasks[taskId].data[5] = VarGet(gTasks[taskId].data[3]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[5], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + gTasks[taskId].tVarValue = VarGet(gTasks[taskId].tInput); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tVarValue, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); //Current digit + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_VariableValueSet); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].data[6] = gTasks[taskId].data[5]; //New value selector gTasks[taskId].func = DebugAction_FlagsVars_SetValue; @@ -2225,12 +2320,13 @@ static void DebugAction_FlagsVars_Select(u8 taskId) return; } } + static void DebugAction_FlagsVars_SetValue(u8 taskId) { if (JOY_NEW(DPAD_UP)) { - if (gTasks[taskId].data[6] + sPowersOfTen[gTasks[taskId].data[4]] <= 32000) - gTasks[taskId].data[6] += sPowersOfTen[gTasks[taskId].data[4]]; + if (gTasks[taskId].data[6] + sPowersOfTen[gTasks[taskId].tDigit] <= 32000) + gTasks[taskId].data[6] += sPowersOfTen[gTasks[taskId].tDigit]; else gTasks[taskId].data[6] = 32000 - 1; @@ -2239,32 +2335,27 @@ static void DebugAction_FlagsVars_SetValue(u8 taskId) } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[6] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[6] < 0){ + gTasks[taskId].data[6] -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].data[6] < 0) gTasks[taskId].data[6] = 0; - } } if (JOY_NEW(DPAD_LEFT)) { - gTasks[taskId].data[4] -= 1; - if (gTasks[taskId].data[4] < 0) - { - gTasks[taskId].data[4] = 0; - } + gTasks[taskId].tDigit -= 1; + if (gTasks[taskId].tDigit < 0) + gTasks[taskId].tDigit = 0; } if (JOY_NEW(DPAD_RIGHT)) { - gTasks[taskId].data[4] += 1; - if (gTasks[taskId].data[4] > 4) - { - gTasks[taskId].data[4] = 4; - } + gTasks[taskId].tDigit += 1; + if (gTasks[taskId].tDigit > 4) + gTasks[taskId].tDigit = 4; } if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - VarSet(gTasks[taskId].data[3], gTasks[taskId].data[6]); + VarSet(gTasks[taskId].tInput, gTasks[taskId].data[6]); } else if (JOY_NEW(B_BUTTON)) { @@ -2277,18 +2368,20 @@ static void DebugAction_FlagsVars_SetValue(u8 taskId) { PlaySE(SE_SELECT); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); - ConvertIntToHexStringN(gStringVar2, gTasks[taskId].data[3], STR_CONV_MODE_LEFT_ALIGN, 4); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); + ConvertIntToHexStringN(gStringVar2, gTasks[taskId].tInput, STR_CONV_MODE_LEFT_ALIGN, 4); StringExpandPlaceholders(gStringVar1, sDebugText_FlagsVars_VariableHex); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[6], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_VARIABLES); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); //Current digit + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); StringExpandPlaceholders(gStringVar4, sDebugText_FlagsVars_VariableValueSet); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } } +#undef tVarValue + static void DebugAction_FlagsVars_PokedexFlags_All(u8 taskId) { u16 i; @@ -2300,6 +2393,7 @@ static void DebugAction_FlagsVars_PokedexFlags_All(u8 taskId) Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_FlagsVars_PokedexFlags_Reset(u8 taskId) { int boxId, boxPosition, partyId; @@ -2336,6 +2430,7 @@ static void DebugAction_FlagsVars_PokedexFlags_Reset(u8 taskId) Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_FlagsVars_SwitchDex(u8 taskId) { if (FlagGet(FLAG_SYS_POKEDEX_GET)) @@ -2344,17 +2439,21 @@ static void DebugAction_FlagsVars_SwitchDex(u8 taskId) PlaySE(SE_PC_LOGIN); FlagToggle(FLAG_SYS_POKEDEX_GET); } + static void DebugAction_FlagsVars_SwitchNatDex(u8 taskId) { if (IsNationalPokedexEnabled()) { DisableNationalPokedex(); PlaySE(SE_PC_OFF); - }else{ + } + else + { EnableNationalPokedex(); PlaySE(SE_PC_LOGIN); } } + static void DebugAction_FlagsVars_SwitchPokeNav(u8 taskId) { if (FlagGet(FLAG_SYS_POKENAV_GET)) @@ -2363,6 +2462,7 @@ static void DebugAction_FlagsVars_SwitchPokeNav(u8 taskId) PlaySE(SE_PC_LOGIN); FlagToggle(FLAG_SYS_POKENAV_GET); } + static void DebugAction_FlagsVars_RunningShoes(u8 taskId) { if (FlagGet(FLAG_SYS_B_DASH)) @@ -2371,59 +2471,36 @@ static void DebugAction_FlagsVars_RunningShoes(u8 taskId) PlaySE(SE_PC_LOGIN); FlagToggle(FLAG_SYS_B_DASH); } + static void DebugAction_FlagsVars_ToggleFlyFlags(u8 taskId) { - // Sound effect if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER)) - { PlaySE(SE_PC_OFF); - - FlagClear(FLAG_VISITED_LITTLEROOT_TOWN); - FlagClear(FLAG_VISITED_OLDALE_TOWN); - FlagClear(FLAG_VISITED_DEWFORD_TOWN); - FlagClear(FLAG_VISITED_LAVARIDGE_TOWN); - FlagClear(FLAG_VISITED_FALLARBOR_TOWN); - FlagClear(FLAG_VISITED_VERDANTURF_TOWN); - FlagClear(FLAG_VISITED_PACIFIDLOG_TOWN); - FlagClear(FLAG_VISITED_PETALBURG_CITY); - FlagClear(FLAG_VISITED_SLATEPORT_CITY); - FlagClear(FLAG_VISITED_MAUVILLE_CITY); - FlagClear(FLAG_VISITED_RUSTBORO_CITY); - FlagClear(FLAG_VISITED_FORTREE_CITY); - FlagClear(FLAG_VISITED_LILYCOVE_CITY); - FlagClear(FLAG_VISITED_MOSSDEEP_CITY); - FlagClear(FLAG_VISITED_SOOTOPOLIS_CITY); - FlagClear(FLAG_VISITED_EVER_GRANDE_CITY); - FlagClear(FLAG_LANDMARK_POKEMON_LEAGUE); - FlagClear(FLAG_LANDMARK_BATTLE_FRONTIER); - } else - { PlaySE(SE_PC_LOGIN); - FlagSet(FLAG_VISITED_LITTLEROOT_TOWN); - FlagSet(FLAG_VISITED_OLDALE_TOWN); - FlagSet(FLAG_VISITED_DEWFORD_TOWN); - FlagSet(FLAG_VISITED_LAVARIDGE_TOWN); - FlagSet(FLAG_VISITED_FALLARBOR_TOWN); - FlagSet(FLAG_VISITED_VERDANTURF_TOWN); - FlagSet(FLAG_VISITED_PACIFIDLOG_TOWN); - FlagSet(FLAG_VISITED_PETALBURG_CITY); - FlagSet(FLAG_VISITED_SLATEPORT_CITY); - FlagSet(FLAG_VISITED_MAUVILLE_CITY); - FlagSet(FLAG_VISITED_RUSTBORO_CITY); - FlagSet(FLAG_VISITED_FORTREE_CITY); - FlagSet(FLAG_VISITED_LILYCOVE_CITY); - FlagSet(FLAG_VISITED_MOSSDEEP_CITY); - FlagSet(FLAG_VISITED_SOOTOPOLIS_CITY); - FlagSet(FLAG_VISITED_EVER_GRANDE_CITY); - FlagSet(FLAG_LANDMARK_POKEMON_LEAGUE); - FlagSet(FLAG_LANDMARK_BATTLE_FRONTIER); - } + FlagToggle(FLAG_VISITED_LITTLEROOT_TOWN); + FlagToggle(FLAG_VISITED_OLDALE_TOWN); + FlagToggle(FLAG_VISITED_DEWFORD_TOWN); + FlagToggle(FLAG_VISITED_LAVARIDGE_TOWN); + FlagToggle(FLAG_VISITED_FALLARBOR_TOWN); + FlagToggle(FLAG_VISITED_VERDANTURF_TOWN); + FlagToggle(FLAG_VISITED_PACIFIDLOG_TOWN); + FlagToggle(FLAG_VISITED_PETALBURG_CITY); + FlagToggle(FLAG_VISITED_SLATEPORT_CITY); + FlagToggle(FLAG_VISITED_MAUVILLE_CITY); + FlagToggle(FLAG_VISITED_RUSTBORO_CITY); + FlagToggle(FLAG_VISITED_FORTREE_CITY); + FlagToggle(FLAG_VISITED_LILYCOVE_CITY); + FlagToggle(FLAG_VISITED_MOSSDEEP_CITY); + FlagToggle(FLAG_VISITED_SOOTOPOLIS_CITY); + FlagToggle(FLAG_VISITED_EVER_GRANDE_CITY); + FlagToggle(FLAG_LANDMARK_POKEMON_LEAGUE); + FlagToggle(FLAG_LANDMARK_BATTLE_FRONTIER); } + static void DebugAction_FlagsVars_ToggleBadgeFlags(u8 taskId) { - // Sound effect if (FlagGet(FLAG_BADGE08_GET)) PlaySE(SE_PC_OFF); else @@ -2437,6 +2514,7 @@ static void DebugAction_FlagsVars_ToggleBadgeFlags(u8 taskId) FlagToggle(FLAG_BADGE07_GET); FlagToggle(FLAG_BADGE08_GET); } + static void DebugAction_FlagsVars_ToggleFrontierPass(u8 taskId) { // Sound effect @@ -2446,6 +2524,7 @@ static void DebugAction_FlagsVars_ToggleFrontierPass(u8 taskId) PlaySE(SE_PC_LOGIN); FlagToggle(FLAG_SYS_FRONTIER_PASS); } + static void DebugAction_FlagsVars_CollisionOnOff(u8 taskId) { #if OW_FLAG_NO_COLLISION == 0 @@ -2458,6 +2537,7 @@ static void DebugAction_FlagsVars_CollisionOnOff(u8 taskId) FlagToggle(OW_FLAG_NO_COLLISION); #endif } + static void DebugAction_FlagsVars_EncounterOnOff(u8 taskId) { #if OW_FLAG_NO_ENCOUNTER == 0 @@ -2470,6 +2550,7 @@ static void DebugAction_FlagsVars_EncounterOnOff(u8 taskId) FlagToggle(OW_FLAG_NO_ENCOUNTER); #endif } + static void DebugAction_FlagsVars_TrainerSeeOnOff(u8 taskId) { #if OW_FLAG_NO_TRAINER_SEE == 0 @@ -2482,6 +2563,7 @@ static void DebugAction_FlagsVars_TrainerSeeOnOff(u8 taskId) FlagToggle(OW_FLAG_NO_TRAINER_SEE); #endif } + static void DebugAction_FlagsVars_BagUseOnOff(u8 taskId) { #if B_FLAG_NO_BAG_USE == 0 @@ -2494,6 +2576,7 @@ static void DebugAction_FlagsVars_BagUseOnOff(u8 taskId) FlagToggle(B_FLAG_NO_BAG_USE); #endif } + static void DebugAction_FlagsVars_CatchingOnOff(u8 taskId) { #if B_FLAG_NO_CATCHING == 0 @@ -2510,37 +2593,41 @@ static void DebugAction_FlagsVars_CatchingOnOff(u8 taskId) // ******************************* // Actions Give #define ITEM_TAG 0xFDF3 +#define tItemId data[5] +#define tSpriteId data[6] + static void DebugAction_Give_Item(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial item StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); CopyItemName(1, gStringVar1); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Item_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 1; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[6] = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].data[3]); - gSprites[gTasks[taskId].data[6]].x2 = DEBUG_NUMBER_ICON_X+10; - gSprites[gTasks[taskId].data[6]].y2 = DEBUG_NUMBER_ICON_Y+10; - gSprites[gTasks[taskId].data[6]].oam.priority = 0; + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tSpriteId = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].tInput); + gSprites[gTasks[taskId].tSpriteId].x2 = DEBUG_NUMBER_ICON_X+10; + gSprites[gTasks[taskId].tSpriteId].y2 = DEBUG_NUMBER_ICON_Y+10; + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } + static void DebugAction_Give_Item_SelectId(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -2549,72 +2636,73 @@ static void DebugAction_Give_Item_SelectId(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= ITEMS_COUNT) - gTasks[taskId].data[3] = ITEMS_COUNT - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput >= ITEMS_COUNT) + gTasks[taskId].tInput = ITEMS_COUNT - 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < DEBUG_NUMBER_DIGITS_ITEMS - 1) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < DEBUG_NUMBER_DIGITS_ITEMS - 1) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - CopyItemName(gTasks[taskId].data[3], gStringVar1); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + CopyItemName(gTasks[taskId].tInput, gStringVar1); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringExpandPlaceholders(gStringVar4, sDebugText_ItemID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); - FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon - FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - gTasks[taskId].data[6] = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].data[3]); - gSprites[gTasks[taskId].data[6]].x2 = DEBUG_NUMBER_ICON_X+10; - gSprites[gTasks[taskId].data[6]].y2 = DEBUG_NUMBER_ICON_Y+10; - gSprites[gTasks[taskId].data[6]].oam.priority = 0; + FreeSpriteTilesByTag(ITEM_TAG); + FreeSpritePaletteByTag(ITEM_TAG); + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); + gTasks[taskId].tSpriteId = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].tInput); + gSprites[gTasks[taskId].tSpriteId].x2 = DEBUG_NUMBER_ICON_X+10; + gSprites[gTasks[taskId].tSpriteId].y2 = DEBUG_NUMBER_ICON_Y+10; + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } if (JOY_NEW(A_BUTTON)) { - gTasks[taskId].data[5] = gTasks[taskId].data[3]; - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tItemId = gTasks[taskId].tInput; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemQuantity); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Item_SelectQuantity; } else if (JOY_NEW(B_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon - FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon + FreeSpriteTilesByTag(ITEM_TAG); + FreeSpritePaletteByTag(ITEM_TAG); + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); PlaySE(SE_SELECT); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Item_SelectQuantity(u8 taskId) { - u32 itemId = gTasks[taskId].data[5]; + u32 itemId = gTasks[taskId].tItemId; if (JOY_NEW(DPAD_ANY)) { @@ -2623,57 +2711,60 @@ static void DebugAction_Give_Item_SelectQuantity(u8 taskId) if (JOY_NEW(DPAD_UP)) { u32 maxCapacity = (ItemId_GetPocket(itemId) - 1 == BERRIES_POCKET) ? MAX_BERRY_CAPACITY : MAX_BAG_ITEM_CAPACITY; - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > maxCapacity) - gTasks[taskId].data[3] = maxCapacity; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > maxCapacity) + gTasks[taskId].tInput = maxCapacity; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEM_QUANTITY); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_ItemQuantity); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon - FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon + FreeSpriteTilesByTag(ITEM_TAG); + FreeSpritePaletteByTag(ITEM_TAG); + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); PlaySE(MUS_OBTAIN_ITEM); - AddBagItem(itemId, gTasks[taskId].data[3]); + AddBagItem(itemId, gTasks[taskId].tInput); DebugAction_DestroyExtraWindow(taskId); } else if (JOY_NEW(B_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon - FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon - DestroySprite(&gSprites[gTasks[taskId].data[6]]); //Destroy item icon + FreeSpriteTilesByTag(ITEM_TAG); + FreeSpritePaletteByTag(ITEM_TAG); + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); PlaySE(SE_SELECT); DebugAction_DestroyExtraWindow(taskId); } } +#undef tItemId +#undef tSpriteId + //TMs static void DebugAction_Give_AllTMs(u8 taskId) { @@ -2684,6 +2775,7 @@ static void DebugAction_Give_AllTMs(u8 taskId) if (ItemIdToBattleMoveId(i) != MOVE_NONE && !CheckBagHasItem(i, 1)) AddBagItem(i, 1); } + Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } @@ -2691,11 +2783,11 @@ static void DebugAction_Give_AllTMs(u8 taskId) //Pokemon static void ResetMonDataStruct(struct DebugMonData *sDebugMonData) { - sDebugMonData->mon_speciesId = 1; - sDebugMonData->mon_level = 1; + sDebugMonData->species = 1; + sDebugMonData->level = MIN_LEVEL; sDebugMonData->isShiny = 0; - sDebugMonData->mon_natureId = 0; - sDebugMonData->mon_abilityNum = 0; + sDebugMonData->nature = 0; + sDebugMonData->abilityNum = 0; sDebugMonData->mon_iv_hp = 0; sDebugMonData->mon_iv_atk = 0; sDebugMonData->mon_iv_def = 0; @@ -2703,6 +2795,11 @@ static void ResetMonDataStruct(struct DebugMonData *sDebugMonData) sDebugMonData->mon_iv_satk = 0; sDebugMonData->mon_iv_sdef = 0; } + +#define tIsComplex data[5] +#define tSpriteId data[6] +#define tIterator data[7] + static void DebugAction_Give_PokemonSimple(u8 taskId) { u8 windowId; @@ -2712,35 +2809,37 @@ static void DebugAction_Give_PokemonSimple(u8 taskId) ResetMonDataStruct(sDebugMonData); //Window initialization - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial Pokémon StringCopy(gStringVar2, gText_DigitIndicator[0]); - ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, 3); - StringCopy(gStringVar1, GetSpeciesName(1)); + ConvertIntToDecimalStringN(gStringVar3, sDebugMonData->species, STR_CONV_MODE_LEADING_ZEROS, 3); + StringCopy(gStringVar1, GetSpeciesName(sDebugMonData->species)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); //Set task data gTasks[taskId].func = DebugAction_Give_Pokemon_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 1; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = 0; //Complex? - FreeMonIconPalettes(); //Free space for new pallete - LoadMonIconPalette(gTasks[taskId].data[3]); //Loads pallete for current mon - gTasks[taskId].data[6] = CreateMonIcon(gTasks[taskId].data[3], SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); //Create pokemon sprite - gSprites[gTasks[taskId].data[6]].oam.priority = 0; //Mon Icon ID + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = sDebugMonData->species; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tIsComplex = FALSE; + + FreeMonIconPalettes(); + LoadMonIconPalette(gTasks[taskId].tInput); + gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } + static void DebugAction_Give_PokemonComplex(u8 taskId) { u8 windowId; @@ -2750,34 +2849,35 @@ static void DebugAction_Give_PokemonComplex(u8 taskId) ResetMonDataStruct(sDebugMonData); //Window initialization - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateExtra); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial Pokémon StringCopy(gStringVar2, gText_DigitIndicator[0]); - ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, 4); - StringCopy(gStringVar1, GetSpeciesName(1)); + ConvertIntToDecimalStringN(gStringVar3, sDebugMonData->species, STR_CONV_MODE_LEADING_ZEROS, 4); + StringCopy(gStringVar1, GetSpeciesName(sDebugMonData->species)); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 1; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = 1; //Complex? - FreeMonIconPalettes(); //Free space for new palletes - LoadMonIconPalette(gTasks[taskId].data[3]); //Loads pallete for current mon - gTasks[taskId].data[6] = CreateMonIcon(gTasks[taskId].data[3], SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); //Create pokemon sprite - gSprites[gTasks[taskId].data[6]].oam.priority = 0; //Mon Icon ID - gTasks[taskId].data[7] = 0; //iterator + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tIsComplex = TRUE; + + FreeMonIconPalettes(); + LoadMonIconPalette(gTasks[taskId].tInput); + gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; + gTasks[taskId].tIterator = 0; } static void DebugAction_Give_Pokemon_SelectId(u8 taskId) @@ -2788,64 +2888,65 @@ static void DebugAction_Give_Pokemon_SelectId(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= NUM_SPECIES) - gTasks[taskId].data[3] = NUM_SPECIES - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput >= NUM_SPECIES) + gTasks[taskId].tInput = NUM_SPECIES - 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < DEBUG_NUMBER_DIGITS_ITEMS - 1) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < DEBUG_NUMBER_DIGITS_ITEMS - 1) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopy(gStringVar1, GetSpeciesName(gTasks[taskId].data[3])); //CopyItemName(gTasks[taskId].data[3], gStringVar1); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopy(gStringVar1, GetSpeciesName(gTasks[taskId].tInput)); //CopyItemName(gTasks[taskId].tInput, gStringVar1); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 4); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 4); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); - FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[6]]); - FreeMonIconPalettes(); //Free space for new pallete - LoadMonIconPalette(gTasks[taskId].data[3]); //Loads pallete for current mon - gTasks[taskId].data[6] = CreateMonIcon(gTasks[taskId].data[3], SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); //Create pokemon sprite - gSprites[gTasks[taskId].data[6]].oam.priority = 0; + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); + FreeMonIconPalettes(); + LoadMonIconPalette(gTasks[taskId].tInput); + gTasks[taskId].tSpriteId = CreateMonIcon(gTasks[taskId].tInput, SpriteCB_MonIcon, DEBUG_NUMBER_ICON_X, DEBUG_NUMBER_ICON_Y, 4, 0); + gSprites[gTasks[taskId].tSpriteId].oam.priority = 0; } if (JOY_NEW(A_BUTTON)) { - sDebugMonData->mon_speciesId = gTasks[taskId].data[3]; //Species ID - gTasks[taskId].data[3] = 1; - gTasks[taskId].data[4] = 0; + sDebugMonData->species = gTasks[taskId].tInput; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonLevel); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectLevel; } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); FreeMonIconPalettes(); - FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[6]]); //Destroy pokemon sprite + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -2854,58 +2955,58 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > 100) - gTasks[taskId].data[3] = 100; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > 100) + gTasks[taskId].tInput = 100; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonLevel); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { FreeMonIconPalettes(); - FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[6]]); //Destroy pokemon sprite - if (gTasks[taskId].data[5] == 0) + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); + if (gTasks[taskId].tIsComplex == FALSE) { PlaySE(MUS_LEVEL_UP); - ScriptGiveMon(sDebugMonData->mon_speciesId, gTasks[taskId].data[3], ITEM_NONE, 0,0,0); + ScriptGiveMon(sDebugMonData->species, gTasks[taskId].tInput, ITEM_NONE, 0, 0, 0); // Set flag for user convenience FlagSet(FLAG_SYS_POKEMON_GET); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } else { - sDebugMonData->mon_level = gTasks[taskId].data[3]; //Level - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + sDebugMonData->level = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 0); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 0); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonShiny); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectShiny; } @@ -2913,13 +3014,13 @@ static void DebugAction_Give_Pokemon_SelectLevel(u8 taskId) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); FreeMonIconPalettes(); - FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].data[6]]); //Destroy pokemon sprite + FreeAndDestroyMonIconSprite(&gSprites[gTasks[taskId].tSpriteId]); DebugAction_DestroyExtraWindow(taskId); } } -//If complex + static void DebugAction_Give_Pokemon_SelectShiny(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -2928,49 +3029,50 @@ static void DebugAction_Give_Pokemon_SelectShiny(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } - if (gTasks[taskId].data[3] == 1) + if (gTasks[taskId].tInput == 1) StringCopyPadded(gStringVar2, sDebugText_True, CHAR_SPACE, 15); else StringCopyPadded(gStringVar2, sDebugText_False, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 0); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 0); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonShiny); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - sDebugMonData->isShiny = gTasks[taskId].data[3]; //isShiny - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + sDebugMonData->isShiny = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar1, gNatureNamePointers[0]); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonNature); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectNature; } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_SelectNature(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -2979,49 +3081,50 @@ static void DebugAction_Give_Pokemon_SelectNature(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > NUM_NATURES-1) - gTasks[taskId].data[3] = NUM_NATURES-1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > NUM_NATURES-1) + gTasks[taskId].tInput = NUM_NATURES-1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringCopy(gStringVar1, gNatureNamePointers[gTasks[taskId].data[3]]); + StringCopy(gStringVar1, gNatureNamePointers[gTasks[taskId].tInput]); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonNature); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { u8 abilityId; - sDebugMonData->mon_natureId = gTasks[taskId].data[3]; //NatureId - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + sDebugMonData->nature = gTasks[taskId].tInput; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - abilityId = GetAbilityBySpecies(sDebugMonData->mon_speciesId, 0); + abilityId = GetAbilityBySpecies(sDebugMonData->species, 0); StringCopy(gStringVar1, gAbilityNames[abilityId]); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonAbility); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectAbility; } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_SelectAbility(u8 taskId) { u16 abilityId; @@ -3034,51 +3137,52 @@ static void DebugAction_Give_Pokemon_SelectAbility(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > abilityCount) - gTasks[taskId].data[3] = abilityCount; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > abilityCount) + gTasks[taskId].tInput = abilityCount; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } - while (GetAbilityBySpecies(sDebugMonData->mon_speciesId, gTasks[taskId].data[3] - i) == ABILITY_NONE && gTasks[taskId].data[3] - i < NUM_ABILITY_SLOTS) + while (GetAbilityBySpecies(sDebugMonData->species, gTasks[taskId].tInput - i) == ABILITY_NONE && gTasks[taskId].tInput - i < NUM_ABILITY_SLOTS) { i++; } - abilityId = GetAbilityBySpecies(sDebugMonData->mon_speciesId, gTasks[taskId].data[3] - i); - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + abilityId = GetAbilityBySpecies(sDebugMonData->species, gTasks[taskId].tInput - i); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); StringCopy(gStringVar1, gAbilityNames[abilityId]); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonAbility); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - sDebugMonData->mon_abilityNum = gTasks[taskId].data[3] - i; //AbilityNum - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + sDebugMonData->abilityNum = gTasks[taskId].tInput - i; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_0); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + StringExpandPlaceholders(gStringVar4, sDebugText_IV_HP); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectIVs; } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -3087,126 +3191,126 @@ static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > 31) - gTasks[taskId].data[3] = 31; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > 31) + gTasks[taskId].tInput = 31; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 2) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 2) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - switch (gTasks[taskId].data[7]) + switch (gTasks[taskId].tIterator) { - case 0: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_0); + case STAT_HP: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_HP); break; - case 1: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_1); + case STAT_ATK: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Attack); break; - case 2: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_2); + case STAT_DEF: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Defense); break; - case 3: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_3); + case STAT_SPEED: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Speed); break; - case 4: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_4); + case STAT_SPATK: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpAttack); break; - case 5: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_5); + case STAT_SPDEF: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpDefense); break; } - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } //If A or B button if (JOY_NEW(A_BUTTON)) { - switch (gTasks[taskId].data[7]) + switch (gTasks[taskId].tIterator) { - case 0: - sDebugMonData->mon_iv_hp = gTasks[taskId].data[3]; + case STAT_HP: + sDebugMonData->mon_iv_hp = gTasks[taskId].tInput; break; - case 1: - sDebugMonData->mon_iv_atk = gTasks[taskId].data[3]; + case STAT_ATK: + sDebugMonData->mon_iv_atk = gTasks[taskId].tInput; break; - case 2: - sDebugMonData->mon_iv_def = gTasks[taskId].data[3]; + case STAT_DEF: + sDebugMonData->mon_iv_def = gTasks[taskId].tInput; break; - case 3: - sDebugMonData->mon_iv_speed = gTasks[taskId].data[3]; + case STAT_SPEED: + sDebugMonData->mon_iv_speed = gTasks[taskId].tInput; break; - case 4: - sDebugMonData->mon_iv_satk = gTasks[taskId].data[3]; + case STAT_SPATK: + sDebugMonData->mon_iv_satk = gTasks[taskId].tInput; break; - case 5: - sDebugMonData->mon_iv_sdef = gTasks[taskId].data[3]; + case STAT_SPDEF: + sDebugMonData->mon_iv_sdef = gTasks[taskId].tInput; break; } //Check if all IVs set - if (gTasks[taskId].data[7] != 5) + if (gTasks[taskId].tIterator != NUM_STATS - 1) { - gTasks[taskId].data[7] += 1; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tIterator++; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 2); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2); StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15); - switch (gTasks[taskId].data[7]) + switch (gTasks[taskId].tIterator) { - case 0: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_0); + case STAT_HP: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_HP); break; - case 1: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_1); + case STAT_ATK: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Attack); break; - case 2: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_2); + case STAT_DEF: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Defense); break; - case 3: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_3); + case STAT_SPEED: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_Speed); break; - case 4: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_4); + case STAT_SPATK: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpAttack); break; - case 5: - StringExpandPlaceholders(gStringVar4, sDebugText_PokemonIV_5); + case STAT_SPDEF: + StringExpandPlaceholders(gStringVar4, sDebugText_IV_SpDefense); break; } - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_SelectIVs; } else { - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[7] = 0; //Reset iterator + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tIterator = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopy(gStringVar1, gMoveNames[gTasks[taskId].data[3]]); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopy(gStringVar1, gMoveNames[gTasks[taskId].tInput]); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_0); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_Move; } @@ -3214,10 +3318,11 @@ static void DebugAction_Give_Pokemon_SelectIVs(u8 taskId) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_Move(u8 taskId) { if (JOY_NEW(DPAD_ANY)) @@ -3226,32 +3331,32 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] >= MOVES_COUNT) - gTasks[taskId].data[3] = MOVES_COUNT - 1; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput >= MOVES_COUNT) + gTasks[taskId].tInput = MOVES_COUNT - 1; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 0) - gTasks[taskId].data[3] = 0; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 0) + gTasks[taskId].tInput = 0; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < 3) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < 3) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopy(gStringVar1, gMoveNames[gTasks[taskId].data[3]]); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopy(gStringVar1, gMoveNames[gTasks[taskId].tInput]); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); - switch (gTasks[taskId].data[7]) + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); + switch (gTasks[taskId].tIterator) { case 0: StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_0); @@ -3266,44 +3371,44 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_3); break; } - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - //If MOVE_NONE selected, stop asking for additional moves - if (gTasks[taskId].data[3] == 0) - gTasks[taskId].data[7] = 4; + // If MOVE_NONE selected, stop asking for additional moves + if (gTasks[taskId].tInput == MOVE_NONE) + gTasks[taskId].tIterator = 4; //Set current value - switch (gTasks[taskId].data[7]) + switch (gTasks[taskId].tIterator) { case 0: - sDebugMonData->mon_move_0 = gTasks[taskId].data[3]; + sDebugMonData->mon_move_0 = gTasks[taskId].tInput; break; case 1: - sDebugMonData->mon_move_1 = gTasks[taskId].data[3]; + sDebugMonData->mon_move_1 = gTasks[taskId].tInput; break; case 2: - sDebugMonData->mon_move_2 = gTasks[taskId].data[3]; + sDebugMonData->mon_move_2 = gTasks[taskId].tInput; break; case 3: - sDebugMonData->mon_move_3 = gTasks[taskId].data[3]; + sDebugMonData->mon_move_3 = gTasks[taskId].tInput; break; } //If NOT last move or selected MOVE_NONE ask for next move, else make mon - if (gTasks[taskId].data[7] < 3) + if (gTasks[taskId].tIterator < MAX_MON_MOVES - 1) { - gTasks[taskId].data[7] += 1; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tIterator++; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopy(gStringVar1, gMoveNames[gTasks[taskId].data[3]]); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopy(gStringVar1, gMoveNames[gTasks[taskId].tInput]); StringCopyPadded(gStringVar1, gStringVar1, CHAR_SPACE, 15); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, 3); - switch (gTasks[taskId].data[7]) + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 3); + switch (gTasks[taskId].tIterator) { case 0: StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_0); @@ -3318,14 +3423,14 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_PokemonMove_3); break; } - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); gTasks[taskId].func = DebugAction_Give_Pokemon_Move; } else { - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = 0; + gTasks[taskId].tInput = 0; + gTasks[taskId].tDigit = 0; PlaySE(MUS_LEVEL_UP); gTasks[taskId].func = DebugAction_Give_Pokemon_ComplexCreateMon; @@ -3334,10 +3439,11 @@ static void DebugAction_Give_Pokemon_Move(u8 taskId) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); } } + static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://github.com/ghoulslash/pokeemerald/tree/custom-givemon { u16 nationalDexNum; @@ -3347,11 +3453,11 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu u16 moves[4]; u8 IVs[6]; u8 iv_val; - u16 species = sDebugMonData->mon_speciesId; - u8 level = sDebugMonData->mon_level; + u16 species = sDebugMonData->species; + u8 level = sDebugMonData->level; u8 isShiny = sDebugMonData->isShiny; //Shiny: no 0, yes 1 - u8 nature = sDebugMonData->mon_natureId; - u8 abilityNum = sDebugMonData->mon_abilityNum; + u8 nature = sDebugMonData->nature; + u8 abilityNum = sDebugMonData->abilityNum; moves[0] = sDebugMonData->mon_move_0; moves[1] = sDebugMonData->mon_move_1; moves[2] = sDebugMonData->mon_move_2; @@ -3449,10 +3555,14 @@ static void DebugAction_Give_Pokemon_ComplexCreateMon(u8 taskId) //https://githu // Set flag for user convenience FlagSet(FLAG_SYS_POKEMON_GET); - Free(sDebugMonData); //Frees EWRAM of MonData Struct + Free(sDebugMonData); DebugAction_DestroyExtraWindow(taskId); //return sentToPc; } +#undef tIsComplex +#undef tSpriteId +#undef tIterator + static void DebugAction_Give_MaxMoney(u8 taskId) { SetMoney(&gSaveBlock1Ptr->money, MAX_MONEY); @@ -3460,7 +3570,7 @@ static void DebugAction_Give_MaxMoney(u8 taskId) static void DebugAction_Give_MaxCoins(u8 taskId) { - SetCoins(9999); + SetCoins(MAX_COINS); } static void DebugAction_Give_MaxBattlePoints(u8 taskId) @@ -3515,6 +3625,7 @@ static void DebugAction_Fill_PCBoxes_Fast(u8 taskId) //Credit: Sierraffinity Debug_DestroyMenu_Full(taskId); ScriptContext_Enable(); } + static void DebugAction_Fill_PCBoxes_Slow(u8 taskId) { int boxId, boxPosition; @@ -3546,6 +3657,7 @@ static void DebugAction_Fill_PCBoxes_Slow(u8 taskId) Debug_DestroyMenu_Full_Script(taskId, Debug_BoxFilledMessage); } + static void DebugAction_Fill_PCItemStorage(u8 taskId) { u16 itemId; @@ -3556,6 +3668,7 @@ static void DebugAction_Fill_PCItemStorage(u8 taskId) AddPCItem(itemId, MAX_PC_ITEM_CAPACITY); } } + static void DebugAction_Fill_PocketItems(u8 taskId) { u16 itemId; @@ -3566,6 +3679,7 @@ static void DebugAction_Fill_PocketItems(u8 taskId) AddBagItem(itemId, MAX_BAG_ITEM_CAPACITY); } } + static void DebugAction_Fill_PocketPokeBalls(u8 taskId) { u16 itemId; @@ -3576,6 +3690,7 @@ static void DebugAction_Fill_PocketPokeBalls(u8 taskId) AddBagItem(itemId, MAX_BAG_ITEM_CAPACITY); } } + static void DebugAction_Fill_PocketTMHM(u8 taskId) { u16 itemId; @@ -3586,6 +3701,7 @@ static void DebugAction_Fill_PocketTMHM(u8 taskId) AddBagItem(itemId, 1); } } + static void DebugAction_Fill_PocketBerries(u8 taskId) { u16 itemId; @@ -3596,6 +3712,7 @@ static void DebugAction_Fill_PocketBerries(u8 taskId) AddBagItem(itemId, MAX_BERRY_CAPACITY); } } + static void DebugAction_Fill_PocketKeyItems(u8 taskId) { u16 itemId; @@ -3611,160 +3728,181 @@ static void DebugAction_Fill_PocketKeyItems(u8 taskId) // Actions Sound static const u8 *const sBGMNames[]; static const u8 *const sSENames[]; + +#define tCurrentSong data[5] + static void DebugAction_Sound_SE(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateSound); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial sound effect StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, 1, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringCopyPadded(gStringVar1, sSENames[0], CHAR_SPACE, 35); - StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SE_ID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SFX_ID); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); StopMapMusic(); //Stop map music to better hear sounds gTasks[taskId].func = DebugAction_Sound_SE_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = 1; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = gTasks[taskId].data[3]; //Last song played (for stopping) + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = 1; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tCurrentSong = gTasks[taskId].tInput; } + static void DebugAction_Sound_SE_SelectId(u8 taskId) { if (JOY_NEW(DPAD_ANY)) { if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > END_SE) - gTasks[taskId].data[3] = END_SE; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > END_SE) + gTasks[taskId].tInput = END_SE; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < 1) - gTasks[taskId].data[3] = 1; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < 1) + gTasks[taskId].tInput = 1; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < DEBUG_NUMBER_DIGITS_ITEMS - 1) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < DEBUG_NUMBER_DIGITS_ITEMS - 1) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopyPadded(gStringVar1, sSENames[gTasks[taskId].data[3]-1], CHAR_SPACE, 35); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); - StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SE_ID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopyPadded(gStringVar1, sSENames[gTasks[taskId].tInput-1], CHAR_SPACE, 35); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); + StringExpandPlaceholders(gStringVar4, sDebugText_Sound_SFX_ID); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - m4aSongNumStop(gTasks[taskId].data[5]); - gTasks[taskId].data[5] = gTasks[taskId].data[3]; - m4aSongNumStart(gTasks[taskId].data[3]); + m4aSongNumStop(gTasks[taskId].tCurrentSong); + gTasks[taskId].tCurrentSong = gTasks[taskId].tInput; + m4aSongNumStart(gTasks[taskId].tInput); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - m4aSongNumStop(gTasks[taskId].data[5]); + m4aSongNumStop(gTasks[taskId].tCurrentSong); DebugAction_DestroyExtraWindow(taskId); } + else if (JOY_NEW(START_BUTTON)) + { + m4aSongNumStop(gTasks[taskId].tCurrentSong); + } } static void DebugAction_Sound_MUS(u8 taskId) { u8 windowId; - ClearStdWindowAndFrame(gTasks[taskId].data[1], TRUE); - RemoveWindow(gTasks[taskId].data[1]); + ClearStdWindowAndFrame(gTasks[taskId].tWindowId, TRUE); + RemoveWindow(gTasks[taskId].tWindowId); HideMapNamePopUpWindow(); LoadMessageBoxAndBorderGfx(); windowId = AddWindow(&sDebugMenuWindowTemplateSound); DrawStdWindowFrame(windowId, FALSE); - CopyWindowToVram(windowId, 3); + CopyWindowToVram(windowId, COPYWIN_FULL); - //Display initial ID + // Display initial song StringCopy(gStringVar2, gText_DigitIndicator[0]); ConvertIntToDecimalStringN(gStringVar3, START_MUS, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); StringCopyPadded(gStringVar1, sBGMNames[0], CHAR_SPACE, 35); - StringExpandPlaceholders(gStringVar4, sDebugText_Sound_MUS_ID); - AddTextPrinterParameterized(windowId, 1, gStringVar4, 1, 1, 0, NULL); + StringExpandPlaceholders(gStringVar4, sDebugText_Sound_Music_ID); + AddTextPrinterParameterized(windowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); StopMapMusic(); //Stop map music to better hear new music gTasks[taskId].func = DebugAction_Sound_MUS_SelectId; - gTasks[taskId].data[2] = windowId; - gTasks[taskId].data[3] = START_MUS; //Current ID - gTasks[taskId].data[4] = 0; //Digit Selected - gTasks[taskId].data[5] = gTasks[taskId].data[3]; //Last song played (for stopping) + gTasks[taskId].tSubWindowId = windowId; + gTasks[taskId].tInput = START_MUS; + gTasks[taskId].tDigit = 0; + gTasks[taskId].tCurrentSong = gTasks[taskId].tInput; } + static void DebugAction_Sound_MUS_SelectId(u8 taskId) { if (JOY_NEW(DPAD_ANY)) { if (JOY_NEW(DPAD_UP)) { - gTasks[taskId].data[3] += sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] > END_MUS) - gTasks[taskId].data[3] = END_MUS; + gTasks[taskId].tInput += sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput > END_MUS) + gTasks[taskId].tInput = END_MUS; } if (JOY_NEW(DPAD_DOWN)) { - gTasks[taskId].data[3] -= sPowersOfTen[gTasks[taskId].data[4]]; - if (gTasks[taskId].data[3] < START_MUS) - gTasks[taskId].data[3] = START_MUS; + gTasks[taskId].tInput -= sPowersOfTen[gTasks[taskId].tDigit]; + if (gTasks[taskId].tInput < START_MUS) + gTasks[taskId].tInput = START_MUS; } if (JOY_NEW(DPAD_LEFT)) { - if (gTasks[taskId].data[4] > 0) - gTasks[taskId].data[4] -= 1; + if (gTasks[taskId].tDigit > 0) + gTasks[taskId].tDigit -= 1; } if (JOY_NEW(DPAD_RIGHT)) { - if (gTasks[taskId].data[4] < DEBUG_NUMBER_DIGITS_ITEMS - 1) - gTasks[taskId].data[4] += 1; + if (gTasks[taskId].tDigit < DEBUG_NUMBER_DIGITS_ITEMS - 1) + gTasks[taskId].tDigit += 1; } - StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].data[4]]); - StringCopyPadded(gStringVar1, sBGMNames[gTasks[taskId].data[3]-START_MUS], CHAR_SPACE, 35); - ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].data[3], STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); - StringExpandPlaceholders(gStringVar4, sDebugText_Sound_MUS_ID); - AddTextPrinterParameterized(gTasks[taskId].data[2], 1, gStringVar4, 1, 1, 0, NULL); + StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]); + StringCopyPadded(gStringVar1, sBGMNames[gTasks[taskId].tInput-START_MUS], CHAR_SPACE, 35); + ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, DEBUG_NUMBER_DIGITS_ITEMS); + StringExpandPlaceholders(gStringVar4, sDebugText_Sound_Music_ID); + AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); } if (JOY_NEW(A_BUTTON)) { - m4aSongNumStop(gTasks[taskId].data[5]); - gTasks[taskId].data[5] = gTasks[taskId].data[3]; - m4aSongNumStart(gTasks[taskId].data[3]); + m4aSongNumStop(gTasks[taskId].tCurrentSong); + gTasks[taskId].tCurrentSong = gTasks[taskId].tInput; + m4aSongNumStart(gTasks[taskId].tInput); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - // m4aSongNumStop(gTasks[taskId].data[5]); //Uncomment if music should stop after leaving menu + // m4aSongNumStop(gTasks[taskId].tCurrentSong); //Uncomment if music should stop after leaving menu DebugAction_DestroyExtraWindow(taskId); } + else if (JOY_NEW(START_BUTTON)) + { + m4aSongNumStop(gTasks[taskId].tCurrentSong); + } } +#undef tCurrentSong + +#undef tMenuTaskId +#undef tWindowId +#undef tSubWindowId +#undef tInput +#undef tDigit + #define SOUND_LIST_BGM \ X(MUS_LITTLEROOT_TEST) \ X(MUS_GSC_ROUTE38) \ diff --git a/src/menu.c b/src/menu.c index 2d3a8a8b2f..71f1f8b8cf 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1589,7 +1589,7 @@ void PrintMenuTable(u8 windowId, u8 itemCount, const struct MenuAction *menuActi u32 i; for (i = 0; i < itemCount; i++) - AddTextPrinterParameterized(windowId, 1, menuActions[i].text, 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, menuActions[i].text, 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); CopyWindowToVram(windowId, COPYWIN_GFX); } @@ -1653,7 +1653,7 @@ void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const for (i = 0; i < rows; i++) { for (j = 0; j < columns; j++) - AddTextPrinterParameterized(windowId, 1, menuActions[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); + AddTextPrinterParameterized(windowId, FONT_NORMAL, menuActions[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, TEXT_SKIP_DRAW, NULL); } CopyWindowToVram(windowId, COPYWIN_GFX); } @@ -1987,7 +1987,7 @@ void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y) StringExpandPlaceholders(gStringVar4, src); - AddTextPrinterParameterized(windowId, 1, gStringVar4, x, y, TEXT_SKIP_DRAW, 0); + AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, x, y, TEXT_SKIP_DRAW, 0); } static void UNUSED UnusedBlitBitmapRect(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height) diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c index 0b2ce43cf1..61e35a66f9 100644 --- a/src/pokedex_plus_hgss.c +++ b/src/pokedex_plus_hgss.c @@ -4778,7 +4778,7 @@ static void ResetStatsWindows(void) { FillWindowPixelBuffer(i, PIXEL_FILL(0)); PutWindowTilemap(i); - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); } } @@ -5939,7 +5939,7 @@ static void EvoFormsPage_PrintNavigationButtons(void) // DrawKeypadIcon(WIN_NAVIGATION_BUTTONS, 10, 5, 0); //(u8 windowId, u8 keypadIconId, u16 x, u16 y) PutWindowTilemap(WIN_NAVIGATION_BUTTONS); - CopyWindowToVram(WIN_NAVIGATION_BUTTONS, 3); + CopyWindowToVram(WIN_NAVIGATION_BUTTONS, COPYWIN_FULL); } static void ResetEvoScreenDataStruct(void) @@ -5998,10 +5998,10 @@ static void Task_LoadEvolutionScreen(u8 taskId) LoadTilesetTilemapHGSS(EVO_SCREEN); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); - CopyWindowToVram(WIN_INFO, 3); + CopyWindowToVram(WIN_INFO, COPYWIN_FULL); FillWindowPixelBuffer(WIN_NAVIGATION_BUTTONS, PIXEL_FILL(0)); PutWindowTilemap(WIN_NAVIGATION_BUTTONS); - CopyWindowToVram(WIN_NAVIGATION_BUTTONS, 3); + CopyWindowToVram(WIN_NAVIGATION_BUTTONS, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); @@ -6676,10 +6676,10 @@ static void Task_LoadFormsScreen(u8 taskId) LoadTilesetTilemapHGSS(FORMS_SCREEN); FillWindowPixelBuffer(WIN_INFO, PIXEL_FILL(0)); PutWindowTilemap(WIN_INFO); - CopyWindowToVram(WIN_INFO, 3); + CopyWindowToVram(WIN_INFO, COPYWIN_FULL); FillWindowPixelBuffer(WIN_NAVIGATION_BUTTONS, PIXEL_FILL(0)); PutWindowTilemap(WIN_NAVIGATION_BUTTONS); - CopyWindowToVram(WIN_NAVIGATION_BUTTONS, 3); + CopyWindowToVram(WIN_NAVIGATION_BUTTONS, COPYWIN_FULL); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); diff --git a/src/pokemon_debug.c b/src/pokemon_debug.c index 3c9a562776..3e3cdf470d 100644 --- a/src/pokemon_debug.c +++ b/src/pokemon_debug.c @@ -434,7 +434,7 @@ static void PrintInstructionsOnWindow(struct PokemonDebugMenu *data) else AddTextPrinterParameterized(WIN_INSTRUCTIONS, fontId, textInstructionsSubmenuTwo, x, 0, 0, NULL); } - CopyWindowToVram(WIN_INSTRUCTIONS, 3); + CopyWindowToVram(WIN_INSTRUCTIONS, COPYWIN_FULL); //Bottom left text FillWindowPixelBuffer(WIN_BOTTOM_LEFT, PIXEL_FILL(0)); @@ -496,7 +496,7 @@ static void PrintDigitChars(struct PokemonDebugMenu *data) StringCopy(&text[i], GetSpeciesName(species)); FillWindowPixelBuffer(WIN_NAME_NUMBERS, 0x11); - AddTextPrinterParameterized(WIN_NAME_NUMBERS, 1, text, 6, 0, 0, NULL); + AddTextPrinterParameterized(WIN_NAME_NUMBERS, FONT_NORMAL, text, 6, 0, 0, NULL); } static u32 CharDigitsToValue(u8 *charDigits, u8 maxDigits) @@ -1067,7 +1067,7 @@ static void ResetPokemonDebugWindows(void) { FillWindowPixelBuffer(i, PIXEL_FILL(0)); PutWindowTilemap(i); - CopyWindowToVram(i, 3); + CopyWindowToVram(i, COPYWIN_FULL); } } From 89321bd5e3e404a3039605aea8f5b469816e537a Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Wed, 11 Oct 2023 12:36:28 -0300 Subject: [PATCH 02/17] Re-asigned bits --- src/debug.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/debug.c b/src/debug.c index 76329948fc..853556db0b 100644 --- a/src/debug.c +++ b/src/debug.c @@ -239,9 +239,9 @@ enum SoundMenu struct DebugMonData { u16 species; - u8 level:7; + u8 level; bool8 isShiny:1; - u8 nature:6; + u8 nature:5; u8 abilityNum:2; u8 mon_iv_hp; u8 mon_iv_atk; From f461bc3256ee9deefbe92e1b52996e0a6767a8a8 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Mon, 30 Oct 2023 10:04:59 +0100 Subject: [PATCH 03/17] AI_CompareDamagingMoves changes to increase the score by 1 for best moves (#3382) * Further optimizes AI_CompareDamagingMoves * viableMove name change + 2 tests * some issues --------- Co-authored-by: DizzyEggg --- src/battle_ai_main.c | 42 ++++++++++++++++++++++++---- src/battle_ai_util.c | 1 - test/battle/ai.c | 66 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+), 7 deletions(-) diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 7cdd63317b..2e99def5e7 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -3149,6 +3149,8 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) { u32 i; bool32 multipleBestMoves = FALSE; + s32 viableMoveScores[MAX_MON_MOVES]; + s32 bestViableMoveScore; s32 noOfHits[MAX_MON_MOVES]; s32 score = 0; s32 leastHits = 1000; @@ -3164,11 +3166,13 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) { leastHits = noOfHits[i]; } + viableMoveScores[i] = AI_SCORE_DEFAULT; isPowerfulIgnoredEffect[i] = IsInIgnoredPowerfulMoveEffects(gBattleMoves[moves[i]].effect); } else { noOfHits[i] = -1; + viableMoveScores[i] = 0; isPowerfulIgnoredEffect[i] = FALSE; } /* @@ -3194,19 +3198,45 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId) multipleBestMoves = TRUE; // We need to make sure it's the current move which is objectively better. if (isPowerfulIgnoredEffect[i] && !isPowerfulIgnoredEffect[currId]) - ADJUST_SCORE(3); - else if (CompareMoveAccuracies(battlerAtk, battlerDef, currId, i) == 0) - ADJUST_SCORE(2); - else if (AI_WhichMoveBetter(moves[currId], moves[i], battlerAtk, battlerDef, noOfHits[currId]) == 0) + viableMoveScores[i] -= 3; + else if (!isPowerfulIgnoredEffect[i] && isPowerfulIgnoredEffect[currId]) + viableMoveScores[currId] -= 3; + + switch (CompareMoveAccuracies(battlerAtk, battlerDef, currId, i)) { - // MgbaPrintf_("%S better than %S", gMoveNames[moves[currId]], gMoveNames[moves[i]]); - ADJUST_SCORE(1); + case 0: + viableMoveScores[i] -= 2; + break; + case 1: + viableMoveScores[currId] -= 2; + break; + } + switch (AI_WhichMoveBetter(moves[currId], moves[i], battlerAtk, battlerDef, noOfHits[currId])) + { + case 0: + viableMoveScores[i] -= 1; + break; + case 1: + viableMoveScores[currId] -= 1; + break; } } } // Turns out the current move deals the most dmg compared to the other 3. if (!multipleBestMoves) ADJUST_SCORE(1); + else + { + bestViableMoveScore = 0; + for (i = 0; i < MAX_MON_MOVES; i++) + { + if (viableMoveScores[i] > bestViableMoveScore) + bestViableMoveScore = viableMoveScores[i]; + } + // Unless a better move was found increase score of current move + if (viableMoveScores[currId] == bestViableMoveScore) + ADJUST_SCORE(1); + } } return score; diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index 38c7a9550f..c4d543dfe0 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -2063,7 +2063,6 @@ bool32 HasMoveWithSplit(u32 battler, u32 split) if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && GetBattleMoveSplit(moves[i]) == split) return TRUE; } - return FALSE; } diff --git a/test/battle/ai.c b/test/battle/ai.c index fd91634db9..22e6800bce 100644 --- a/test/battle/ai.c +++ b/test/battle/ai.c @@ -93,6 +93,9 @@ AI_SINGLE_BATTLE_TEST("AI prefers moves with better accuracy, but only if they b PARAMETRIZE { move1 = MOVE_MEGA_KICK; move2 = MOVE_SLAM; move3 = MOVE_TACKLE; move4 = MOVE_GUST; hp = 5; expectedMove = MOVE_GUST; expectedMove2 = MOVE_TACKLE; turns = 1; } // All moves hit with No guard ability PARAMETRIZE { move1 = MOVE_MEGA_KICK; move2 = MOVE_GUST; hp = 5; expectedMove = MOVE_MEGA_KICK; expectedMove2 = MOVE_GUST; turns = 1; } + // Tests to compare move that always hits and a beneficial effect. A move with higher acc should be chosen in this case. + PARAMETRIZE { move1 = MOVE_SHOCK_WAVE; move2 = MOVE_ICY_WIND; hp = 5; expectedMove = MOVE_SHOCK_WAVE; turns = 1; } + PARAMETRIZE { move1 = MOVE_SHOCK_WAVE; move2 = MOVE_ICY_WIND; move3 = MOVE_THUNDERBOLT; hp = 5; expectedMove = MOVE_SHOCK_WAVE; expectedMove2 = MOVE_THUNDERBOLT; turns = 1; } GIVEN { AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); @@ -105,6 +108,9 @@ AI_SINGLE_BATTLE_TEST("AI prefers moves with better accuracy, but only if they b ASSUME(gBattleMoves[MOVE_MEGA_KICK].accuracy < gBattleMoves[MOVE_STRENGTH].accuracy); ASSUME(gBattleMoves[MOVE_TACKLE].accuracy == 100); ASSUME(gBattleMoves[MOVE_GUST].accuracy == 100); + ASSUME(gBattleMoves[MOVE_SHOCK_WAVE].accuracy == 0); + ASSUME(gBattleMoves[MOVE_THUNDERBOLT].accuracy == 100); + ASSUME(gBattleMoves[MOVE_ICY_WIND].accuracy != 100); OPPONENT(SPECIES_EXPLOUD) { Moves(move1, move2, move3, move4); Ability(abilityAtk); SpAttack(50); } // Low Sp.Atk, so Swift deals less damage than Strength. } WHEN { switch (turns) @@ -191,6 +197,66 @@ AI_SINGLE_BATTLE_TEST("AI prefers Earthquake over Drill Run if both require the } } +AI_SINGLE_BATTLE_TEST("AI prefers a weaker move over a one with a downside effect if both require the same number of hits to ko") +{ + u16 move1 = MOVE_NONE, move2 = MOVE_NONE, move3 = MOVE_NONE, move4 = MOVE_NONE; + u16 hp, expectedMove, turns; + + // Both moves require the same number of turns but Flamethrower will be chosen over Overheat (powerful effect) + PARAMETRIZE { move1 = MOVE_OVERHEAT; move2 = MOVE_FLAMETHROWER; hp = 300; expectedMove = MOVE_FLAMETHROWER; turns = 2; } + // Overheat kill in least amount of turns + PARAMETRIZE { move1 = MOVE_OVERHEAT; move2 = MOVE_FLAMETHROWER; hp = 250; expectedMove = MOVE_OVERHEAT; turns = 1; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(hp); } + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_TYPHLOSION) { Moves(move1, move2); } + } WHEN { + switch (turns) + { + case 1: + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + case 2: + TURN { EXPECT_MOVE(opponent, expectedMove); } + TURN { EXPECT_MOVE(opponent, expectedMove); SEND_OUT(player, 1); } + break; + } + } + SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI prefers moves with the best possible score, chosen randomly if tied") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(5); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_THUNDERBOLT, MOVE_SLUDGE_BOMB, MOVE_TAKE_DOWN); } + } WHEN { + TURN { EXPECT_MOVES(opponent, MOVE_THUNDERBOLT, MOVE_SLUDGE_BOMB); SEND_OUT(player, 1); } + } + SCENE { + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI can choose a status move that boosts the attack by two") +{ + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(250); }; + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_KANGASKHAN) { Moves(MOVE_STRENGTH, MOVE_HORN_ATTACK, MOVE_SWORDS_DANCE); } + } WHEN { + TURN { EXPECT_MOVES(opponent, MOVE_STRENGTH, MOVE_SWORDS_DANCE); } + TURN { EXPECT_MOVE(opponent, MOVE_STRENGTH); SEND_OUT(player, 1); } + } +} + AI_SINGLE_BATTLE_TEST("AI chooses the safest option to faint the target, taking into account accuracy and move effect") { u16 move1 = MOVE_NONE, move2 = MOVE_NONE, move3 = MOVE_NONE, move4 = MOVE_NONE; From 0c8fdce1a4c6b8fe92184f0bd45a16afd81b45fa Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 30 Oct 2023 11:39:41 +0100 Subject: [PATCH 04/17] New tests + Sheer Force / Last Resort minor bug fixes (#3378) * tests for intimidate defiant * sheer force fix + tests * white herb tests * tests for stealth rock, weak armor and last resort fix * style changes to weak armor test --- include/test/battle.h | 6 +- src/battle_script_commands.c | 4 +- test/battle/ability/defiant.c | 117 +++++++++++++++++++++++++ test/battle/ability/sheer_force.c | 56 ++++++++++++ test/battle/ability/weak_armor.c | 70 +++++++++++++++ test/battle/hold_effect/white_herb.c | 70 +++++++++++++++ test/battle/move_effect/encore.c | 21 ++++- test/battle/move_effect/last_resort.c | 116 ++++++++++++++++++++++++ test/battle/move_effect/stealth_rock.c | 32 +++++++ 9 files changed, 487 insertions(+), 5 deletions(-) create mode 100644 test/battle/ability/defiant.c create mode 100644 test/battle/ability/sheer_force.c create mode 100644 test/battle/ability/weak_armor.c create mode 100644 test/battle/hold_effect/white_herb.c create mode 100644 test/battle/move_effect/last_resort.c create mode 100644 test/battle/move_effect/stealth_rock.c diff --git a/include/test/battle.h b/include/test/battle.h index e77482e40e..0fb651e5ff 100644 --- a/include/test/battle.h +++ b/include/test/battle.h @@ -600,9 +600,9 @@ struct BattleTestData struct BattleTestRunnerState { u8 battlersCount; - u8 parametersCount; // Valid only in BattleTest_Setup. - u8 parameters; - u8 runParameter; + u16 parametersCount; // Valid only in BattleTest_Setup. + u16 parameters; + u16 runParameter; u16 rngTag; u16 rngTrialOffset; u16 trials; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index dcb4620809..32f61423af 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -2824,7 +2824,7 @@ void SetMoveEffect(bool32 primary, u32 certain) && !primary && gBattleScripting.moveEffect <= MOVE_EFFECT_CONFUSION) INCREMENT_RESET_RETURN - if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER) + if (TestSheerForceFlag(gBattlerAttacker, gCurrentMove) && gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING) INCREMENT_RESET_RETURN if (gBattleMons[gEffectBattler].hp == 0 && !activateAfterFaint) @@ -12822,6 +12822,8 @@ static void Cmd_trychoosesleeptalkmove(void) } else // at least one move can be chosen { + // Set Sleep Talk as used move, so it works with Last Resort. + gDisableStructs[gBattlerAttacker].usedMoves |= gBitTable[gCurrMovePos]; do { movePosition = MOD(Random(), MAX_MON_MOVES); diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c new file mode 100644 index 0000000000..4b9cfa42b5 --- /dev/null +++ b/test/battle/ability/defiant.c @@ -0,0 +1,117 @@ +#include "global.h" +#include "test/battle.h" + +DOUBLE_BATTLE_TEST("Defiant sharply raises player's Attack after Intimidate") +{ + u32 abilityLeft, abilityRight; + + PARAMETRIZE { abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_DEFIANT; } + PARAMETRIZE { abilityLeft = ABILITY_DEFIANT; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { abilityLeft = ABILITY_DEFIANT; abilityRight = ABILITY_DEFIANT; } + + GIVEN { + PLAYER(SPECIES_MANKEY) { Ability(abilityLeft); } + PLAYER(SPECIES_PRIMEAPE) { Ability(abilityRight); } + OPPONENT(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { MOVE(playerLeft, MOVE_TACKLE, target:opponentLeft); MOVE(playerRight, MOVE_TACKLE, target:opponentRight); } + } SCENE { + //1st mon Intimidate + ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Foe Gyarados's Intimidate cuts Mankey's attack!"); + if (abilityLeft == ABILITY_DEFIANT) { + ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Mankey's Attack sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Foe Gyarados's Intimidate cuts Primeape's attack!"); + if (abilityRight == ABILITY_DEFIANT) { + ABILITY_POPUP(playerRight, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Primeape's Attack sharply rose!"); + } + + //2nd mon Intimidate + ABILITY_POPUP(opponentRight, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Foe Arbok's Intimidate cuts Mankey's attack!"); + if (abilityLeft == ABILITY_DEFIANT) { + ABILITY_POPUP(playerLeft, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft); + MESSAGE("Mankey's Attack sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Foe Arbok's Intimidate cuts Primeape's attack!"); + if (abilityRight == ABILITY_DEFIANT) { + ABILITY_POPUP(playerRight, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight); + MESSAGE("Primeape's Attack sharply rose!"); + } + } FINALLY { + // -2 from Intimidates and +4 from Defiants gets +2 total + EXPECT_EQ(playerLeft->statStages[STAT_ATK], (abilityLeft == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); + EXPECT_EQ(playerRight->statStages[STAT_ATK], (abilityRight == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); + } +} + +// Same as above, but for opponent. +DOUBLE_BATTLE_TEST("Defiant sharply raises opponent's Attack after Intimidate") +{ + u32 abilityLeft, abilityRight; + + PARAMETRIZE { abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { abilityLeft = ABILITY_VITAL_SPIRIT; abilityRight = ABILITY_DEFIANT; } + PARAMETRIZE { abilityLeft = ABILITY_DEFIANT; abilityRight = ABILITY_VITAL_SPIRIT; } + PARAMETRIZE { abilityLeft = ABILITY_DEFIANT; abilityRight = ABILITY_DEFIANT; } + + GIVEN { + OPPONENT(SPECIES_MANKEY) { Ability(abilityLeft); } + OPPONENT(SPECIES_PRIMEAPE) { Ability(abilityRight); } + PLAYER(SPECIES_GYARADOS) { Ability(ABILITY_INTIMIDATE); } + PLAYER(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { MOVE(opponentLeft, MOVE_TACKLE, target:playerLeft); MOVE(opponentRight, MOVE_TACKLE, target:playerRight); } + } SCENE { + //1st mon Intimidate + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Gyarados's Intimidate cuts Foe Mankey's attack!"); + if (abilityLeft == ABILITY_DEFIANT) { + ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Mankey's Attack sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Gyarados's Intimidate cuts Foe Primeape's attack!"); + if (abilityRight == ABILITY_DEFIANT) { + ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Primeape's Attack sharply rose!"); + } + + //2nd mon Intimidate + ABILITY_POPUP(playerRight, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Arbok's Intimidate cuts Foe Mankey's attack!"); + if (abilityLeft == ABILITY_DEFIANT) { + ABILITY_POPUP(opponentLeft, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + MESSAGE("Foe Mankey's Attack sharply rose!"); + } + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Arbok's Intimidate cuts Foe Primeape's attack!"); + if (abilityRight == ABILITY_DEFIANT) { + ABILITY_POPUP(opponentRight, ABILITY_DEFIANT); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + MESSAGE("Foe Primeape's Attack sharply rose!"); + } + } FINALLY { + // -2 from Intimidates and +4 from Defiants gets +2 total + EXPECT_EQ(opponentLeft->statStages[STAT_ATK], (abilityLeft == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); + EXPECT_EQ(opponentRight->statStages[STAT_ATK], (abilityRight == ABILITY_DEFIANT) ? DEFAULT_STAT_STAGE + 2 : DEFAULT_STAT_STAGE - 2); + } +} diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c new file mode 100644 index 0000000000..6bff0bcd00 --- /dev/null +++ b/test/battle/ability/sheer_force.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "test/battle.h" + +SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of moves", s16 damage) +{ + s32 j; + u32 ability, move; + + for (j = 1; j < MOVES_COUNT; j++) + { + if (gBattleMoves[j].sheerForceBoost && j != MOVE_ORDER_UP) + { + PARAMETRIZE { ability = ABILITY_ANGER_POINT; move = j; } + PARAMETRIZE { ability = ABILITY_SHEER_FORCE; move = j; } + } + } + + GIVEN { + PLAYER(SPECIES_TAUROS) { Ability(ability); Status1(move == MOVE_SNORE ? STATUS1_SLEEP : STATUS1_NONE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, move); } + if (gBattleMoves[move].effect == EFFECT_TWO_TURNS_ATTACK || gBattleMoves[move].effect == EFFECT_SEMI_INVULNERABLE) { + TURN { SKIP_TURN(player); } + TURN { ; } + } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, player); + HP_BAR(opponent, captureDamage: &results[i].damage); + if (ability == ABILITY_SHEER_FORCE) { + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + STATUS_ICON(opponent, STATUS1_FREEZE); + STATUS_ICON(opponent, STATUS1_POISON); + STATUS_ICON(opponent, STATUS1_BURN); + STATUS_ICON(opponent, STATUS1_TOXIC_POISON); + STATUS_ICON(opponent, STATUS1_PARALYSIS); + MESSAGE("Wobbuffet is confused!"); + MESSAGE("Wobbuffet flinched!"); + } + // Volt Tackle/Flare Blitz edge case: recoil happens, but target isn't statused + if (gBattleMoves[move].effect == EFFECT_RECOIL_33_STATUS) + { + HP_BAR(player); + MESSAGE("Tauros is hit with recoil!"); + } + } + } FINALLY { + s32 j; + for (j = 0; j < gBattleTestRunnerState->parametersCount; j+=2) + { + EXPECT_GT(results[j+1].damage, results[j].damage); + } + } +} diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c new file mode 100644 index 0000000000..abe4a797e5 --- /dev/null +++ b/test/battle/ability/weak_armor.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_TACKLE].power != 0); + ASSUME(gBattleMoves[MOVE_GUST].power != 0); + ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); + ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); +} + +SINGLE_BATTLE_TEST("Weak Armor lowers Defense by 1 and boosts Speed by 2 when hit by a physical attack") +{ + u16 move; + + PARAMETRIZE { move = MOVE_TACKLE; } + PARAMETRIZE { move = MOVE_GUST; } + + GIVEN { + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, move); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, move, opponent); + HP_BAR(player); + if (move == MOVE_TACKLE) { + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } + } THEN { + if (move == MOVE_TACKLE) { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } + } +} + +// Oddly specific, but it was a bug at one point. +SINGLE_BATTLE_TEST("Weak Armor does not trigger when brought in by Dragon Tail and taking Stealth Rock damage") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STEALTH_ROCK].effect == EFFECT_STEALTH_ROCK); + ASSUME(gBattleMoves[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET); + PLAYER(SPECIES_WOBBUFFET); + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_STEALTH_ROCK); } + TURN { MOVE(opponent, MOVE_DRAGON_TAIL); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_TAIL, opponent); + HP_BAR(player); + MESSAGE("Slugma was dragged out!"); + HP_BAR(player); + MESSAGE("Pointed stones dug into Slugma!"); + NONE_OF { + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/white_herb.c new file mode 100644 index 0000000000..f0ed096216 --- /dev/null +++ b/test/battle/hold_effect/white_herb.c @@ -0,0 +1,70 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + gItems[ITEM_WHITE_HERB].holdEffect == HOLD_EFFECT_RESTORE_STATS; +} + +SINGLE_BATTLE_TEST("White Herb restores stats when they're lowered") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_LEER].effect == EFFECT_DEFENSE_DOWN); + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_LEER); } + } SCENE { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet's White Herb restored its status!"); + } THEN { + EXPECT(player->item == ITEM_NONE); + EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimidate in singles") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } + OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + } WHEN { + TURN { ; } + } SCENE { + ABILITY_POPUP(opponent, ABILITY_INTIMIDATE); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player); + MESSAGE("Wobbuffet's White Herb restored its status!"); + } THEN { + EXPECT(player->item == ITEM_NONE); + EXPECT(player->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); + } +} + +DOUBLE_BATTLE_TEST("White Herb restores stats after Attack was lowered by Intimidate in doubles") +{ + GIVEN { + OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_WHITE_HERB); } + OPPONENT(SPECIES_WYNAUT) { Item(ITEM_WHITE_HERB); } + PLAYER(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); } + PLAYER(SPECIES_WOBBUFFET); + } WHEN { + TURN { ; } + } SCENE { + ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight); + + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentLeft); + MESSAGE("Foe Wobbuffet's White Herb restored its status!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponentRight); + MESSAGE("Foe Wynaut's White Herb restored its status!"); + } THEN { + EXPECT(opponentLeft->item == ITEM_NONE); + EXPECT(opponentLeft->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); + EXPECT(opponentRight->item == ITEM_NONE); + EXPECT(opponentRight->statStages[STAT_DEF] = DEFAULT_STAT_STAGE); + } +} diff --git a/test/battle/move_effect/encore.c b/test/battle/move_effect/encore.c index eff6c33b20..08d3f25448 100644 --- a/test/battle/move_effect/encore.c +++ b/test/battle/move_effect/encore.c @@ -6,7 +6,7 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_ENCORE].effect == EFFECT_ENCORE); } -SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns") +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns for player") { GIVEN { PLAYER(SPECIES_WOBBUFFET); @@ -25,6 +25,25 @@ SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns") } } +SINGLE_BATTLE_TEST("Encore forces consecutive move uses for 2 turns for opponent") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_ENCORE); } + TURN { FORCED_MOVE(opponent); } + TURN { FORCED_MOVE(opponent); } + TURN { MOVE(opponent, MOVE_SPLASH); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_ENCORE, player); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent); + ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponent); + } +} + SINGLE_BATTLE_TEST("Encore has no effect if no previous move") { GIVEN { diff --git a/test/battle/move_effect/last_resort.c b/test/battle/move_effect/last_resort.c new file mode 100644 index 0000000000..01a685ffc1 --- /dev/null +++ b/test/battle/move_effect/last_resort.c @@ -0,0 +1,116 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_LAST_RESORT].effect == EFFECT_LAST_RESORT); +} + +SINGLE_BATTLE_TEST("Last Resort always fails if it's the only known move") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + } SCENE { + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + NOT HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Last Resort works only when all of the known moves have been used - 2 moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT, MOVE_TACKLE); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + } SCENE { + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Last Resort!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Last Resort works only when all of the known moves have been used - 3 moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT, MOVE_TACKLE, MOVE_SCRATCH); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_SCRATCH); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + } SCENE { + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("Wobbuffet used Last Resort!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Last Resort works only when all of the known moves have been used - 4 moves") +{ + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT, MOVE_TACKLE, MOVE_SCRATCH, MOVE_GUST); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_TACKLE); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_SCRATCH); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + TURN { MOVE(player, MOVE_GUST); } + TURN { MOVE(player, MOVE_LAST_RESORT); } + } SCENE { + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Tackle!"); + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Scratch!"); + MESSAGE("Wobbuffet used Last Resort!"); + MESSAGE("But it failed!"); + MESSAGE("Wobbuffet used Gust!"); + MESSAGE("Wobbuffet used Last Resort!"); + HP_BAR(opponent); + } +} + +SINGLE_BATTLE_TEST("Last Resort works with Sleep Talk") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_SLEEP_TALK].effect == EFFECT_SLEEP_TALK); + PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_LAST_RESORT, MOVE_SLEEP_TALK); Status1(STATUS1_SLEEP_TURN(3)); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_SLEEP_TALK); } + TURN { MOVE(player, MOVE_SLEEP_TALK); } + } SCENE { + // Turn 1 + MESSAGE("Wobbuffet used Sleep Talk!"); + MESSAGE("Wobbuffet used Last Resort!"); + NOT MESSAGE("But it failed!"); + HP_BAR(opponent); + // Turn 2 + MESSAGE("Wobbuffet used Sleep Talk!"); + MESSAGE("Wobbuffet used Last Resort!"); + NOT MESSAGE("But it failed!"); + HP_BAR(opponent); + } +} diff --git a/test/battle/move_effect/stealth_rock.c b/test/battle/move_effect/stealth_rock.c new file mode 100644 index 0000000000..4662379f5e --- /dev/null +++ b/test/battle/move_effect/stealth_rock.c @@ -0,0 +1,32 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STEALTH_ROCK].effect == EFFECT_STEALTH_ROCK); +} + +SINGLE_BATTLE_TEST("Stealth Rock damage on switch in based on typing") +{ + u32 species, divisor; + + PARAMETRIZE { species = SPECIES_CHARIZARD; divisor = 2; } // Fire / Flying + PARAMETRIZE { species = SPECIES_PIDGEOT; divisor = 4; } // Flying + PARAMETRIZE { species = SPECIES_RATICATE; divisor = 8; } // Normal dmg + PARAMETRIZE { species = SPECIES_GOLEM; divisor = 16; } // Ground not very effective + PARAMETRIZE { species = SPECIES_STEELIX; divisor = 32; } // Ground/Steel not very effective + + GIVEN { + PLAYER(SPECIES_WOBBUFFET); + OPPONENT(SPECIES_WOBBUFFET); + OPPONENT(species); + } WHEN { + TURN { MOVE(player, MOVE_STEALTH_ROCK); } + TURN { SWITCH(opponent, 1); } + } SCENE { + s32 maxHP = GetMonData(&OPPONENT_PARTY[1], MON_DATA_MAX_HP); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, player); + // MESSAGE("2 sent out species!"); + HP_BAR(opponent, damage: maxHP / divisor); + } +} From f4be01f0acc2b563f53eb1c2a3d8664c1a71fc43 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 30 Oct 2023 11:58:15 +0100 Subject: [PATCH 05/17] Fix strength sap on substitute (#3486) * tests for strenth sap * fix strength sap on substitute --------- Co-authored-by: ghoulslash --- data/battle_scripts_1.s | 1 + test/battle/move_effect/strength_sap.c | 59 ++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 test/battle/move_effect/strength_sap.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 51090237bc..5d2e18cb4b 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -1452,6 +1452,7 @@ BattleScript_StrengthSapHp: jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd jumpiffullhp BS_ATTACKER, BattleScript_MoveEnd manipulatedamage DMG_BIG_ROOT + orword gHitMarker, HITMARKER_IGNORE_SUBSTITUTE healthbarupdate BS_ATTACKER datahpupdate BS_ATTACKER printstring STRINGID_PKMNENERGYDRAINED diff --git a/test/battle/move_effect/strength_sap.c b/test/battle/move_effect/strength_sap.c new file mode 100644 index 0000000000..c549e4c332 --- /dev/null +++ b/test/battle/move_effect/strength_sap.c @@ -0,0 +1,59 @@ +#include "global.h" +#include "test/battle.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_STRENGTH_SAP].effect == EFFECT_STRENGTH_SAP); +} + +SINGLE_BATTLE_TEST("Strength Sap lowers Attack by 1 and restores HP based on target's Attack Stat", s16 hp) +{ + u32 atkStat = 0; + + PARAMETRIZE{ atkStat = 100; } + PARAMETRIZE{ atkStat = 50; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(200); } + OPPONENT(SPECIES_WOBBUFFET) { Attack(atkStat); } + } WHEN { + TURN { MOVE(player, MOVE_STRENGTH_SAP); } + } SCENE { + MESSAGE("Wobbuffet used Strength Sap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Attack fell!"); + HP_BAR(player, captureDamage: &results[i].hp); + MESSAGE("Foe Wobbuffet had its energy drained!"); + } THEN { + EXPECT_EQ(results[i].hp * -1, atkStat); + } +} + +// Same as above, but Substitute is used before Strength Sap. +SINGLE_BATTLE_TEST("Strength Sap works exactly the same when attacker is behind substitute", s16 hp) +{ + u32 atkStat = 0; + + PARAMETRIZE{ atkStat = 100; } + PARAMETRIZE{ atkStat = 50; } + + GIVEN { + PLAYER(SPECIES_WOBBUFFET) { HP(200); } + OPPONENT(SPECIES_WOBBUFFET) { Attack(atkStat); } + } WHEN { + TURN { MOVE(player, MOVE_SUBSTITUTE); } + TURN { MOVE(player, MOVE_STRENGTH_SAP); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, player); + MESSAGE("Wobbuffet used Strength Sap!"); + ANIMATION(ANIM_TYPE_MOVE, MOVE_STRENGTH_SAP, player); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent); + MESSAGE("Foe Wobbuffet's Attack fell!"); + HP_BAR(player, captureDamage: &results[i].hp); + NOT MESSAGE("The SUBSTITUTE took damage for Foe Wobbuffet!"); + MESSAGE("Foe Wobbuffet had its energy drained!"); + } THEN { + EXPECT_EQ(results[i].hp * -1, atkStat); + } +} From fe91f08b2606a0ea8b9ed5487cd65376a05ac4c5 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 30 Oct 2023 08:10:23 -0300 Subject: [PATCH 06/17] Restore comments for now --- src/debug.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/debug.c b/src/debug.c index 31bdd0db45..156c2013ba 100644 --- a/src/debug.c +++ b/src/debug.c @@ -2717,10 +2717,10 @@ static void DebugAction_Give_Item_SelectId(u8 taskId) StringExpandPlaceholders(gStringVar4, sDebugText_ItemID); AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL); - FreeSpriteTilesByTag(ITEM_TAG); - FreeSpritePaletteByTag(ITEM_TAG); - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); - DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon gTasks[taskId].tSpriteId = AddItemIconSprite(ITEM_TAG, ITEM_TAG, gTasks[taskId].tInput); gSprites[gTasks[taskId].tSpriteId].x2 = DEBUG_NUMBER_ICON_X+10; gSprites[gTasks[taskId].tSpriteId].y2 = DEBUG_NUMBER_ICON_Y+10; @@ -2743,10 +2743,10 @@ static void DebugAction_Give_Item_SelectId(u8 taskId) } else if (JOY_NEW(B_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); - FreeSpritePaletteByTag(ITEM_TAG); - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); - DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon PlaySE(SE_SELECT); DebugAction_DestroyExtraWindow(taskId); @@ -2794,10 +2794,10 @@ static void DebugAction_Give_Item_SelectQuantity(u8 taskId) if (JOY_NEW(A_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); - FreeSpritePaletteByTag(ITEM_TAG); - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); - DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon PlaySE(MUS_OBTAIN_ITEM); AddBagItem(itemId, gTasks[taskId].tInput); @@ -2805,10 +2805,10 @@ static void DebugAction_Give_Item_SelectQuantity(u8 taskId) } else if (JOY_NEW(B_BUTTON)) { - FreeSpriteTilesByTag(ITEM_TAG); - FreeSpritePaletteByTag(ITEM_TAG); - FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); - DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); + FreeSpriteTilesByTag(ITEM_TAG); //Destroy item icon + FreeSpritePaletteByTag(ITEM_TAG); //Destroy item icon + FreeSpriteOamMatrix(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon + DestroySprite(&gSprites[gTasks[taskId].tSpriteId]); //Destroy item icon PlaySE(SE_SELECT); DebugAction_DestroyExtraWindow(taskId); From 24de138eb54566d2657003c94ae6f46e4dc00a53 Mon Sep 17 00:00:00 2001 From: AaghatIsLive <109757010+AaghatIsLive@users.noreply.github.com> Date: Mon, 30 Oct 2023 17:51:17 +0530 Subject: [PATCH 07/17] Add dark mode for Hoenn dex mode (HGSS) (#3479) Co-authored-by: Eduardo Quezada D'Ottone --- graphics/pokedex/hgss/palette_default_dark.pal | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/graphics/pokedex/hgss/palette_default_dark.pal b/graphics/pokedex/hgss/palette_default_dark.pal index 5889ede7ac..1523b7d25f 100644 --- a/graphics/pokedex/hgss/palette_default_dark.pal +++ b/graphics/pokedex/hgss/palette_default_dark.pal @@ -7,11 +7,11 @@ JASC-PAL 201 201 201 169 169 169 129 129 129 -249 153 161 -233 49 49 -193 33 41 -145 17 33 -249 153 161 +106 106 106 +37 37 37 +106 106 106 +0 0 0 +106 106 106 193 33 41 141 251 184 52 66 162 From 15e038cd30b70af335cb32c9ab6d6de09cc7cc14 Mon Sep 17 00:00:00 2001 From: Bassoonian Date: Mon, 30 Oct 2023 14:53:26 +0100 Subject: [PATCH 08/17] Decapitalise Alcremie file names (#3488) --- ...amel_Swirl.pal => berry_caramel_swirl.pal} | 0 .../{Berry_Default.pal => berry_default.pal} | 0 ..._Lemon_Cream.pal => berry_lemon_cream.pal} | 0 ...atcha_Cream.pal => berry_matcha_cream.pal} | 0 ...ry_Mint_Cream.pal => berry_mint_cream.pal} | 0 ...nbow_Swirl.pal => berry_rainbow_swirl.pal} | 0 ...ry_Ruby_Cream.pal => berry_ruby_cream.pal} | 0 ...ry_Ruby_Swirl.pal => berry_ruby_swirl.pal} | 0 ...alted_Cream.pal => berry_salted_cream.pal} | 0 .../{Berry_Shiny.pal => berry_shiny.pal} | 0 ...mel_Swirl.pal => clover_caramel_swirl.pal} | 0 ...{Clover_Default.pal => clover_default.pal} | 0 ...Lemon_Cream.pal => clover_lemon_cream.pal} | 0 ...tcha_Cream.pal => clover_matcha_cream.pal} | 0 ...r_Mint_Cream.pal => clover_mint_cream.pal} | 0 ...bow_Swirl.pal => clover_rainbow_swirl.pal} | 0 ...r_Ruby_Cream.pal => clover_ruby_cream.pal} | 0 ...r_Ruby_Swirl.pal => clover_ruby_swirl.pal} | 0 ...lted_Cream.pal => clover_salted_cream.pal} | 0 .../{Clover_Shiny.pal => clover_shiny.pal} | 0 ...mel_Swirl.pal => flower_caramel_swirl.pal} | 0 ...{Flower_Default.pal => flower_default.pal} | 0 ...Lemon_Cream.pal => flower_lemon_cream.pal} | 0 ...tcha_Cream.pal => flower_matcha_cream.pal} | 0 ...r_Mint_Cream.pal => flower_mint_cream.pal} | 0 ...bow_Swirl.pal => flower_rainbow_swirl.pal} | 0 ...r_Ruby_Cream.pal => flower_ruby_cream.pal} | 0 ...r_Ruby_Swirl.pal => flower_ruby_swirl.pal} | 0 ...lted_Cream.pal => flower_salted_cream.pal} | 0 .../{Flower_Shiny.pal => flower_shiny.pal} | 0 ...ramel_Swirl.pal => love_caramel_swirl.pal} | 0 .../{Love_Default.pal => love_default.pal} | 0 ...e_Lemon_Cream.pal => love_lemon_cream.pal} | 0 ...Matcha_Cream.pal => love_matcha_cream.pal} | 0 ...ove_Mint_Cream.pal => love_mint_cream.pal} | 0 ...inbow_Swirl.pal => love_rainbow_swirl.pal} | 0 ...ove_Ruby_Cream.pal => love_ruby_cream.pal} | 0 ...ove_Ruby_Swirl.pal => love_ruby_swirl.pal} | 0 ...Salted_Cream.pal => love_salted_cream.pal} | 0 .../love/{Love_Shiny.pal => love_shiny.pal} | 0 ...mel_Swirl.pal => ribbon_caramel_swirl.pal} | 0 ...{Ribbon_Default.pal => ribbon_default.pal} | 0 ...Lemon_Cream.pal => ribbon_lemon_cream.pal} | 0 ...tcha_Cream.pal => ribbon_matcha_cream.pal} | 0 ...n_Mint_Cream.pal => ribbon_mint_cream.pal} | 0 ...bow_Swirl.pal => ribbon_rainbow_swirl.pal} | 0 ...n_Ruby_Cream.pal => ribbon_ruby_cream.pal} | 0 ...n_Ruby_Swirl.pal => ribbon_ruby_swirl.pal} | 0 ...lted_Cream.pal => ribbon_salted_cream.pal} | 0 .../{Ribbon_Shiny.pal => ribbon_shiny.pal} | 0 ...ramel_Swirl.pal => star_caramel_swirl.pal} | 0 .../{Star_Default.pal => star_default.pal} | 0 ...r_Lemon_Cream.pal => star_lemon_cream.pal} | 0 ...Matcha_Cream.pal => star_matcha_cream.pal} | 0 ...tar_Mint_Cream.pal => star_mint_cream.pal} | 0 ...inbow_Swirl.pal => star_rainbow_swirl.pal} | 0 ...tar_Ruby_Cream.pal => star_ruby_cream.pal} | 0 ...tar_Ruby_Swirl.pal => star_ruby_swirl.pal} | 0 ...Salted_Cream.pal => star_salted_cream.pal} | 0 .../star/{Star_Shiny.pal => star_shiny.pal} | 0 ...Swirl.pal => strawberry_caramel_swirl.pal} | 0 ...rry_Default.pal => strawberry_default.pal} | 0 ...n_Cream.pal => strawberry_lemon_cream.pal} | 0 ..._Cream.pal => strawberry_matcha_cream.pal} | 0 ...nt_Cream.pal => strawberry_mint_cream.pal} | 0 ...Swirl.pal => strawberry_rainbow_swirl.pal} | 0 ...by_Cream.pal => strawberry_ruby_cream.pal} | 0 ...by_Swirl.pal => strawberry_ruby_swirl.pal} | 0 ..._Cream.pal => strawberry_salted_cream.pal} | 0 ...awberry_Shiny.pal => strawberry_shiny.pal} | 0 src/data/graphics/pokemon.h | 140 +++++++++--------- 71 files changed, 70 insertions(+), 70 deletions(-) rename graphics/pokemon/alcremie/berry/{Berry_Caramel_Swirl.pal => berry_caramel_swirl.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Default.pal => berry_default.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Lemon_Cream.pal => berry_lemon_cream.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Matcha_Cream.pal => berry_matcha_cream.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Mint_Cream.pal => berry_mint_cream.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Rainbow_Swirl.pal => berry_rainbow_swirl.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Ruby_Cream.pal => berry_ruby_cream.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Ruby_Swirl.pal => berry_ruby_swirl.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Salted_Cream.pal => berry_salted_cream.pal} (100%) rename graphics/pokemon/alcremie/berry/{Berry_Shiny.pal => berry_shiny.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Caramel_Swirl.pal => clover_caramel_swirl.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Default.pal => clover_default.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Lemon_Cream.pal => clover_lemon_cream.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Matcha_Cream.pal => clover_matcha_cream.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Mint_Cream.pal => clover_mint_cream.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Rainbow_Swirl.pal => clover_rainbow_swirl.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Ruby_Cream.pal => clover_ruby_cream.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Ruby_Swirl.pal => clover_ruby_swirl.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Salted_Cream.pal => clover_salted_cream.pal} (100%) rename graphics/pokemon/alcremie/clover/{Clover_Shiny.pal => clover_shiny.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Caramel_Swirl.pal => flower_caramel_swirl.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Default.pal => flower_default.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Lemon_Cream.pal => flower_lemon_cream.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Matcha_Cream.pal => flower_matcha_cream.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Mint_Cream.pal => flower_mint_cream.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Rainbow_Swirl.pal => flower_rainbow_swirl.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Ruby_Cream.pal => flower_ruby_cream.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Ruby_Swirl.pal => flower_ruby_swirl.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Salted_Cream.pal => flower_salted_cream.pal} (100%) rename graphics/pokemon/alcremie/flower/{Flower_Shiny.pal => flower_shiny.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Caramel_Swirl.pal => love_caramel_swirl.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Default.pal => love_default.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Lemon_Cream.pal => love_lemon_cream.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Matcha_Cream.pal => love_matcha_cream.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Mint_Cream.pal => love_mint_cream.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Rainbow_Swirl.pal => love_rainbow_swirl.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Ruby_Cream.pal => love_ruby_cream.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Ruby_Swirl.pal => love_ruby_swirl.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Salted_Cream.pal => love_salted_cream.pal} (100%) rename graphics/pokemon/alcremie/love/{Love_Shiny.pal => love_shiny.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Caramel_Swirl.pal => ribbon_caramel_swirl.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Default.pal => ribbon_default.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Lemon_Cream.pal => ribbon_lemon_cream.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Matcha_Cream.pal => ribbon_matcha_cream.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Mint_Cream.pal => ribbon_mint_cream.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Rainbow_Swirl.pal => ribbon_rainbow_swirl.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Ruby_Cream.pal => ribbon_ruby_cream.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Ruby_Swirl.pal => ribbon_ruby_swirl.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Salted_Cream.pal => ribbon_salted_cream.pal} (100%) rename graphics/pokemon/alcremie/ribbon/{Ribbon_Shiny.pal => ribbon_shiny.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Caramel_Swirl.pal => star_caramel_swirl.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Default.pal => star_default.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Lemon_Cream.pal => star_lemon_cream.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Matcha_Cream.pal => star_matcha_cream.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Mint_Cream.pal => star_mint_cream.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Rainbow_Swirl.pal => star_rainbow_swirl.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Ruby_Cream.pal => star_ruby_cream.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Ruby_Swirl.pal => star_ruby_swirl.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Salted_Cream.pal => star_salted_cream.pal} (100%) rename graphics/pokemon/alcremie/star/{Star_Shiny.pal => star_shiny.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Caramel_Swirl.pal => strawberry_caramel_swirl.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Default.pal => strawberry_default.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Lemon_Cream.pal => strawberry_lemon_cream.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Matcha_Cream.pal => strawberry_matcha_cream.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Mint_Cream.pal => strawberry_mint_cream.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Rainbow_Swirl.pal => strawberry_rainbow_swirl.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Ruby_Cream.pal => strawberry_ruby_cream.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Ruby_Swirl.pal => strawberry_ruby_swirl.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Salted_Cream.pal => strawberry_salted_cream.pal} (100%) rename graphics/pokemon/alcremie/strawberry/{Strawberry_Shiny.pal => strawberry_shiny.pal} (100%) diff --git a/graphics/pokemon/alcremie/berry/Berry_Caramel_Swirl.pal b/graphics/pokemon/alcremie/berry/berry_caramel_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Caramel_Swirl.pal rename to graphics/pokemon/alcremie/berry/berry_caramel_swirl.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Default.pal b/graphics/pokemon/alcremie/berry/berry_default.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Default.pal rename to graphics/pokemon/alcremie/berry/berry_default.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Lemon_Cream.pal b/graphics/pokemon/alcremie/berry/berry_lemon_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Lemon_Cream.pal rename to graphics/pokemon/alcremie/berry/berry_lemon_cream.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Matcha_Cream.pal b/graphics/pokemon/alcremie/berry/berry_matcha_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Matcha_Cream.pal rename to graphics/pokemon/alcremie/berry/berry_matcha_cream.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Mint_Cream.pal b/graphics/pokemon/alcremie/berry/berry_mint_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Mint_Cream.pal rename to graphics/pokemon/alcremie/berry/berry_mint_cream.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Rainbow_Swirl.pal b/graphics/pokemon/alcremie/berry/berry_rainbow_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Rainbow_Swirl.pal rename to graphics/pokemon/alcremie/berry/berry_rainbow_swirl.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Ruby_Cream.pal b/graphics/pokemon/alcremie/berry/berry_ruby_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Ruby_Cream.pal rename to graphics/pokemon/alcremie/berry/berry_ruby_cream.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Ruby_Swirl.pal b/graphics/pokemon/alcremie/berry/berry_ruby_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Ruby_Swirl.pal rename to graphics/pokemon/alcremie/berry/berry_ruby_swirl.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Salted_Cream.pal b/graphics/pokemon/alcremie/berry/berry_salted_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Salted_Cream.pal rename to graphics/pokemon/alcremie/berry/berry_salted_cream.pal diff --git a/graphics/pokemon/alcremie/berry/Berry_Shiny.pal b/graphics/pokemon/alcremie/berry/berry_shiny.pal similarity index 100% rename from graphics/pokemon/alcremie/berry/Berry_Shiny.pal rename to graphics/pokemon/alcremie/berry/berry_shiny.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Caramel_Swirl.pal b/graphics/pokemon/alcremie/clover/clover_caramel_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Caramel_Swirl.pal rename to graphics/pokemon/alcremie/clover/clover_caramel_swirl.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Default.pal b/graphics/pokemon/alcremie/clover/clover_default.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Default.pal rename to graphics/pokemon/alcremie/clover/clover_default.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Lemon_Cream.pal b/graphics/pokemon/alcremie/clover/clover_lemon_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Lemon_Cream.pal rename to graphics/pokemon/alcremie/clover/clover_lemon_cream.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Matcha_Cream.pal b/graphics/pokemon/alcremie/clover/clover_matcha_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Matcha_Cream.pal rename to graphics/pokemon/alcremie/clover/clover_matcha_cream.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Mint_Cream.pal b/graphics/pokemon/alcremie/clover/clover_mint_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Mint_Cream.pal rename to graphics/pokemon/alcremie/clover/clover_mint_cream.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Rainbow_Swirl.pal b/graphics/pokemon/alcremie/clover/clover_rainbow_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Rainbow_Swirl.pal rename to graphics/pokemon/alcremie/clover/clover_rainbow_swirl.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Ruby_Cream.pal b/graphics/pokemon/alcremie/clover/clover_ruby_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Ruby_Cream.pal rename to graphics/pokemon/alcremie/clover/clover_ruby_cream.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Ruby_Swirl.pal b/graphics/pokemon/alcremie/clover/clover_ruby_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Ruby_Swirl.pal rename to graphics/pokemon/alcremie/clover/clover_ruby_swirl.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Salted_Cream.pal b/graphics/pokemon/alcremie/clover/clover_salted_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Salted_Cream.pal rename to graphics/pokemon/alcremie/clover/clover_salted_cream.pal diff --git a/graphics/pokemon/alcremie/clover/Clover_Shiny.pal b/graphics/pokemon/alcremie/clover/clover_shiny.pal similarity index 100% rename from graphics/pokemon/alcremie/clover/Clover_Shiny.pal rename to graphics/pokemon/alcremie/clover/clover_shiny.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Caramel_Swirl.pal b/graphics/pokemon/alcremie/flower/flower_caramel_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Caramel_Swirl.pal rename to graphics/pokemon/alcremie/flower/flower_caramel_swirl.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Default.pal b/graphics/pokemon/alcremie/flower/flower_default.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Default.pal rename to graphics/pokemon/alcremie/flower/flower_default.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Lemon_Cream.pal b/graphics/pokemon/alcremie/flower/flower_lemon_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Lemon_Cream.pal rename to graphics/pokemon/alcremie/flower/flower_lemon_cream.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Matcha_Cream.pal b/graphics/pokemon/alcremie/flower/flower_matcha_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Matcha_Cream.pal rename to graphics/pokemon/alcremie/flower/flower_matcha_cream.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Mint_Cream.pal b/graphics/pokemon/alcremie/flower/flower_mint_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Mint_Cream.pal rename to graphics/pokemon/alcremie/flower/flower_mint_cream.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Rainbow_Swirl.pal b/graphics/pokemon/alcremie/flower/flower_rainbow_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Rainbow_Swirl.pal rename to graphics/pokemon/alcremie/flower/flower_rainbow_swirl.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Ruby_Cream.pal b/graphics/pokemon/alcremie/flower/flower_ruby_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Ruby_Cream.pal rename to graphics/pokemon/alcremie/flower/flower_ruby_cream.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Ruby_Swirl.pal b/graphics/pokemon/alcremie/flower/flower_ruby_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Ruby_Swirl.pal rename to graphics/pokemon/alcremie/flower/flower_ruby_swirl.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Salted_Cream.pal b/graphics/pokemon/alcremie/flower/flower_salted_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Salted_Cream.pal rename to graphics/pokemon/alcremie/flower/flower_salted_cream.pal diff --git a/graphics/pokemon/alcremie/flower/Flower_Shiny.pal b/graphics/pokemon/alcremie/flower/flower_shiny.pal similarity index 100% rename from graphics/pokemon/alcremie/flower/Flower_Shiny.pal rename to graphics/pokemon/alcremie/flower/flower_shiny.pal diff --git a/graphics/pokemon/alcremie/love/Love_Caramel_Swirl.pal b/graphics/pokemon/alcremie/love/love_caramel_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Caramel_Swirl.pal rename to graphics/pokemon/alcremie/love/love_caramel_swirl.pal diff --git a/graphics/pokemon/alcremie/love/Love_Default.pal b/graphics/pokemon/alcremie/love/love_default.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Default.pal rename to graphics/pokemon/alcremie/love/love_default.pal diff --git a/graphics/pokemon/alcremie/love/Love_Lemon_Cream.pal b/graphics/pokemon/alcremie/love/love_lemon_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Lemon_Cream.pal rename to graphics/pokemon/alcremie/love/love_lemon_cream.pal diff --git a/graphics/pokemon/alcremie/love/Love_Matcha_Cream.pal b/graphics/pokemon/alcremie/love/love_matcha_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Matcha_Cream.pal rename to graphics/pokemon/alcremie/love/love_matcha_cream.pal diff --git a/graphics/pokemon/alcremie/love/Love_Mint_Cream.pal b/graphics/pokemon/alcremie/love/love_mint_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Mint_Cream.pal rename to graphics/pokemon/alcremie/love/love_mint_cream.pal diff --git a/graphics/pokemon/alcremie/love/Love_Rainbow_Swirl.pal b/graphics/pokemon/alcremie/love/love_rainbow_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Rainbow_Swirl.pal rename to graphics/pokemon/alcremie/love/love_rainbow_swirl.pal diff --git a/graphics/pokemon/alcremie/love/Love_Ruby_Cream.pal b/graphics/pokemon/alcremie/love/love_ruby_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Ruby_Cream.pal rename to graphics/pokemon/alcremie/love/love_ruby_cream.pal diff --git a/graphics/pokemon/alcremie/love/Love_Ruby_Swirl.pal b/graphics/pokemon/alcremie/love/love_ruby_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Ruby_Swirl.pal rename to graphics/pokemon/alcremie/love/love_ruby_swirl.pal diff --git a/graphics/pokemon/alcremie/love/Love_Salted_Cream.pal b/graphics/pokemon/alcremie/love/love_salted_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Salted_Cream.pal rename to graphics/pokemon/alcremie/love/love_salted_cream.pal diff --git a/graphics/pokemon/alcremie/love/Love_Shiny.pal b/graphics/pokemon/alcremie/love/love_shiny.pal similarity index 100% rename from graphics/pokemon/alcremie/love/Love_Shiny.pal rename to graphics/pokemon/alcremie/love/love_shiny.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Caramel_Swirl.pal b/graphics/pokemon/alcremie/ribbon/ribbon_caramel_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Caramel_Swirl.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_caramel_swirl.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Default.pal b/graphics/pokemon/alcremie/ribbon/ribbon_default.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Default.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_default.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Lemon_Cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_lemon_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Lemon_Cream.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_lemon_cream.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Matcha_Cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_matcha_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Matcha_Cream.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_matcha_cream.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Mint_Cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_mint_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Mint_Cream.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_mint_cream.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Rainbow_Swirl.pal b/graphics/pokemon/alcremie/ribbon/ribbon_rainbow_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Rainbow_Swirl.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_rainbow_swirl.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Ruby_Cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_ruby_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Ruby_Cream.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_ruby_cream.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Ruby_Swirl.pal b/graphics/pokemon/alcremie/ribbon/ribbon_ruby_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Ruby_Swirl.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_ruby_swirl.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Salted_Cream.pal b/graphics/pokemon/alcremie/ribbon/ribbon_salted_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Salted_Cream.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_salted_cream.pal diff --git a/graphics/pokemon/alcremie/ribbon/Ribbon_Shiny.pal b/graphics/pokemon/alcremie/ribbon/ribbon_shiny.pal similarity index 100% rename from graphics/pokemon/alcremie/ribbon/Ribbon_Shiny.pal rename to graphics/pokemon/alcremie/ribbon/ribbon_shiny.pal diff --git a/graphics/pokemon/alcremie/star/Star_Caramel_Swirl.pal b/graphics/pokemon/alcremie/star/star_caramel_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Caramel_Swirl.pal rename to graphics/pokemon/alcremie/star/star_caramel_swirl.pal diff --git a/graphics/pokemon/alcremie/star/Star_Default.pal b/graphics/pokemon/alcremie/star/star_default.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Default.pal rename to graphics/pokemon/alcremie/star/star_default.pal diff --git a/graphics/pokemon/alcremie/star/Star_Lemon_Cream.pal b/graphics/pokemon/alcremie/star/star_lemon_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Lemon_Cream.pal rename to graphics/pokemon/alcremie/star/star_lemon_cream.pal diff --git a/graphics/pokemon/alcremie/star/Star_Matcha_Cream.pal b/graphics/pokemon/alcremie/star/star_matcha_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Matcha_Cream.pal rename to graphics/pokemon/alcremie/star/star_matcha_cream.pal diff --git a/graphics/pokemon/alcremie/star/Star_Mint_Cream.pal b/graphics/pokemon/alcremie/star/star_mint_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Mint_Cream.pal rename to graphics/pokemon/alcremie/star/star_mint_cream.pal diff --git a/graphics/pokemon/alcremie/star/Star_Rainbow_Swirl.pal b/graphics/pokemon/alcremie/star/star_rainbow_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Rainbow_Swirl.pal rename to graphics/pokemon/alcremie/star/star_rainbow_swirl.pal diff --git a/graphics/pokemon/alcremie/star/Star_Ruby_Cream.pal b/graphics/pokemon/alcremie/star/star_ruby_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Ruby_Cream.pal rename to graphics/pokemon/alcremie/star/star_ruby_cream.pal diff --git a/graphics/pokemon/alcremie/star/Star_Ruby_Swirl.pal b/graphics/pokemon/alcremie/star/star_ruby_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Ruby_Swirl.pal rename to graphics/pokemon/alcremie/star/star_ruby_swirl.pal diff --git a/graphics/pokemon/alcremie/star/Star_Salted_Cream.pal b/graphics/pokemon/alcremie/star/star_salted_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Salted_Cream.pal rename to graphics/pokemon/alcremie/star/star_salted_cream.pal diff --git a/graphics/pokemon/alcremie/star/Star_Shiny.pal b/graphics/pokemon/alcremie/star/star_shiny.pal similarity index 100% rename from graphics/pokemon/alcremie/star/Star_Shiny.pal rename to graphics/pokemon/alcremie/star/star_shiny.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Caramel_Swirl.pal b/graphics/pokemon/alcremie/strawberry/strawberry_caramel_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Caramel_Swirl.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_caramel_swirl.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Default.pal b/graphics/pokemon/alcremie/strawberry/strawberry_default.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Default.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_default.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Lemon_Cream.pal b/graphics/pokemon/alcremie/strawberry/strawberry_lemon_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Lemon_Cream.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_lemon_cream.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Matcha_Cream.pal b/graphics/pokemon/alcremie/strawberry/strawberry_matcha_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Matcha_Cream.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_matcha_cream.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Mint_Cream.pal b/graphics/pokemon/alcremie/strawberry/strawberry_mint_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Mint_Cream.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_mint_cream.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Rainbow_Swirl.pal b/graphics/pokemon/alcremie/strawberry/strawberry_rainbow_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Rainbow_Swirl.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_rainbow_swirl.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Ruby_Cream.pal b/graphics/pokemon/alcremie/strawberry/strawberry_ruby_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Ruby_Cream.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_ruby_cream.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Ruby_Swirl.pal b/graphics/pokemon/alcremie/strawberry/strawberry_ruby_swirl.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Ruby_Swirl.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_ruby_swirl.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Salted_Cream.pal b/graphics/pokemon/alcremie/strawberry/strawberry_salted_cream.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Salted_Cream.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_salted_cream.pal diff --git a/graphics/pokemon/alcremie/strawberry/Strawberry_Shiny.pal b/graphics/pokemon/alcremie/strawberry/strawberry_shiny.pal similarity index 100% rename from graphics/pokemon/alcremie/strawberry/Strawberry_Shiny.pal rename to graphics/pokemon/alcremie/strawberry/strawberry_shiny.pal diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h index 0e12a0509c..8e539845ea 100644 --- a/src/data/graphics/pokemon.h +++ b/src/data/graphics/pokemon.h @@ -7270,96 +7270,96 @@ const u8 gMonFootprint_Runerigus[] = INCBIN_U8("graphics/pokemon/runerigus/footp const u8 gMonFootprint_Milcery[] = INCBIN_U8("graphics/pokemon/milcery/footprint.1bpp"); const u32 gMonFrontPic_AlcremieStrawberry[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/front.4bpp.lz"); -const u32 gMonPalette_AlcremieStrawberryVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Default.gbapal.lz"); -const u32 gMonPalette_AlcremieStrawberryRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Ruby_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStrawberryMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Matcha_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStrawberryMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Mint_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStrawberryLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Lemon_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStrawberrySaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Salted_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStrawberryRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Ruby_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieStrawberryCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Caramel_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieStrawberryRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Rainbow_Swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_default.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberrySaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStrawberryRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_rainbow_swirl.gbapal.lz"); const u32 gMonBackPic_AlcremieStrawberry[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/back.4bpp.lz"); -const u32 gMonShinyPalette_AlcremieStrawberry[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/Strawberry_Shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlcremieStrawberry[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/strawberry_shiny.gbapal.lz"); const u8 gMonFootprint_Alcremie[] = INCBIN_U8("graphics/pokemon/alcremie/footprint.1bpp"); const u32 gMonFrontPic_AlcremieBerry[] = INCBIN_U32("graphics/pokemon/alcremie/berry/front.4bpp.lz"); -const u32 gMonPalette_AlcremieBerryVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Default.gbapal.lz"); -const u32 gMonPalette_AlcremieBerryRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Ruby_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieBerryMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Matcha_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieBerryMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Mint_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieBerryLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Lemon_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieBerrySaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Salted_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieBerryRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Ruby_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieBerryCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Caramel_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieBerryRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Rainbow_Swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_default.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerrySaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieBerryRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_rainbow_swirl.gbapal.lz"); const u32 gMonBackPic_AlcremieBerry[] = INCBIN_U32("graphics/pokemon/alcremie/berry/back.4bpp.lz"); -const u32 gMonShinyPalette_AlcremieBerry[] = INCBIN_U32("graphics/pokemon/alcremie/berry/Berry_Shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlcremieBerry[] = INCBIN_U32("graphics/pokemon/alcremie/berry/berry_shiny.gbapal.lz"); const u32 gMonFrontPic_AlcremieLove[] = INCBIN_U32("graphics/pokemon/alcremie/love/front.4bpp.lz"); -const u32 gMonPalette_AlcremieLoveVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Default.gbapal.lz"); -const u32 gMonPalette_AlcremieLoveRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Ruby_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieLoveMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Matcha_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieLoveMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Mint_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieLoveLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Lemon_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieLoveSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Salted_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieLoveRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Ruby_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieLoveCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Caramel_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieLoveRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Rainbow_Swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_default.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieLoveRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_rainbow_swirl.gbapal.lz"); const u32 gMonBackPic_AlcremieLove[] = INCBIN_U32("graphics/pokemon/alcremie/love/back.4bpp.lz"); -const u32 gMonShinyPalette_AlcremieLove[] = INCBIN_U32("graphics/pokemon/alcremie/love/Love_Shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlcremieLove[] = INCBIN_U32("graphics/pokemon/alcremie/love/love_shiny.gbapal.lz"); const u32 gMonFrontPic_AlcremieStar[] = INCBIN_U32("graphics/pokemon/alcremie/star/front.4bpp.lz"); -const u32 gMonPalette_AlcremieStarVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Default.gbapal.lz"); -const u32 gMonPalette_AlcremieStarRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Ruby_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStarMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Matcha_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStarMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Mint_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStarLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Lemon_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStarSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Salted_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieStarRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Ruby_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieStarCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Caramel_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieStarRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Rainbow_Swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStarVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_default.gbapal.lz"); +const u32 gMonPalette_AlcremieStarRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieStarRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStarCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieStarRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_rainbow_swirl.gbapal.lz"); const u32 gMonBackPic_AlcremieStar[] = INCBIN_U32("graphics/pokemon/alcremie/star/back.4bpp.lz"); -const u32 gMonShinyPalette_AlcremieStar[] = INCBIN_U32("graphics/pokemon/alcremie/star/Star_Shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlcremieStar[] = INCBIN_U32("graphics/pokemon/alcremie/star/star_shiny.gbapal.lz"); const u32 gMonFrontPic_AlcremieClover[] = INCBIN_U32("graphics/pokemon/alcremie/clover/front.4bpp.lz"); -const u32 gMonPalette_AlcremieCloverVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Default.gbapal.lz"); -const u32 gMonPalette_AlcremieCloverRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Ruby_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieCloverMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Matcha_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieCloverMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Mint_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieCloverLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Lemon_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieCloverSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Salted_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieCloverRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Ruby_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieCloverCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Caramel_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieCloverRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Rainbow_Swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_default.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieCloverRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_rainbow_swirl.gbapal.lz"); const u32 gMonBackPic_AlcremieClover[] = INCBIN_U32("graphics/pokemon/alcremie/clover/back.4bpp.lz"); -const u32 gMonShinyPalette_AlcremieClover[] = INCBIN_U32("graphics/pokemon/alcremie/clover/Clover_Shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlcremieClover[] = INCBIN_U32("graphics/pokemon/alcremie/clover/clover_shiny.gbapal.lz"); const u32 gMonFrontPic_AlcremieFlower[] = INCBIN_U32("graphics/pokemon/alcremie/flower/front.4bpp.lz"); -const u32 gMonPalette_AlcremieFlowerVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Default.gbapal.lz"); -const u32 gMonPalette_AlcremieFlowerRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Ruby_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieFlowerMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Matcha_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieFlowerMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Mint_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieFlowerLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Lemon_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieFlowerSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Salted_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieFlowerRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Ruby_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieFlowerCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Caramel_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieFlowerRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Rainbow_Swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_default.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieFlowerRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_rainbow_swirl.gbapal.lz"); const u32 gMonBackPic_AlcremieFlower[] = INCBIN_U32("graphics/pokemon/alcremie/flower/back.4bpp.lz"); -const u32 gMonShinyPalette_AlcremieFlower[] = INCBIN_U32("graphics/pokemon/alcremie/flower/Flower_Shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlcremieFlower[] = INCBIN_U32("graphics/pokemon/alcremie/flower/flower_shiny.gbapal.lz"); const u32 gMonFrontPic_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/front.4bpp.lz"); -const u32 gMonPalette_AlcremieRibbonVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Default.gbapal.lz"); -const u32 gMonPalette_AlcremieRibbonRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Ruby_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieRibbonMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Matcha_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieRibbonMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Mint_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieRibbonLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Lemon_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieRibbonSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Salted_Cream.gbapal.lz"); -const u32 gMonPalette_AlcremieRibbonRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Ruby_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieRibbonCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Caramel_Swirl.gbapal.lz"); -const u32 gMonPalette_AlcremieRibbonRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Rainbow_Swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_default.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonRubyCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_ruby_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonMatchaCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_matcha_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonMintCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_mint_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonLemonCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_lemon_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonSaltedCream[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_salted_cream.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonRubySwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_ruby_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonCaramelSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_caramel_swirl.gbapal.lz"); +const u32 gMonPalette_AlcremieRibbonRainbowSwirl[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_rainbow_swirl.gbapal.lz"); const u32 gMonBackPic_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/back.4bpp.lz"); -const u32 gMonShinyPalette_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/Ribbon_Shiny.gbapal.lz"); +const u32 gMonShinyPalette_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_shiny.gbapal.lz"); const u8 gMonFootprint_Falinks[] = INCBIN_U8("graphics/pokemon/falinks/footprint.1bpp"); const u8 gMonFootprint_Pincurchin[] = INCBIN_U8("graphics/pokemon/pincurchin/footprint.1bpp"); From 71ba501b94c7fabc1ddb65b323b3cc6568bec84c Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 30 Oct 2023 10:58:30 -0300 Subject: [PATCH 09/17] Fixed tests on modern --- test/battle/ability/sheer_force.c | 2 +- test/battle/hold_effect/white_herb.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/battle/ability/sheer_force.c b/test/battle/ability/sheer_force.c index 6bff0bcd00..fba494cd4d 100644 --- a/test/battle/ability/sheer_force.c +++ b/test/battle/ability/sheer_force.c @@ -4,7 +4,7 @@ SINGLE_BATTLE_TEST("Sheer Force boosts power, but removes secondary effects of moves", s16 damage) { s32 j; - u32 ability, move; + u32 ability = 0, move = 0; for (j = 1; j < MOVES_COUNT; j++) { diff --git a/test/battle/hold_effect/white_herb.c b/test/battle/hold_effect/white_herb.c index f0ed096216..a34bb6a347 100644 --- a/test/battle/hold_effect/white_herb.c +++ b/test/battle/hold_effect/white_herb.c @@ -3,7 +3,7 @@ ASSUMPTIONS { - gItems[ITEM_WHITE_HERB].holdEffect == HOLD_EFFECT_RESTORE_STATS; + ASSUME(gItems[ITEM_WHITE_HERB].holdEffect == HOLD_EFFECT_RESTORE_STATS); } SINGLE_BATTLE_TEST("White Herb restores stats when they're lowered") From 1a6acad3cf301a8f5c46cdfaa3a521a01f103360 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 30 Oct 2023 12:13:32 -0300 Subject: [PATCH 10/17] Added Match Call to togglable options in debug menu (#3489) * Added Match Call to togglable options in debug menu * Added badge flags to Cheat Start * Fixed potential Fly and badge flag mismatch using the debug options * Added Fly flags to Cheat Start --- data/scripts/debug.inc | 26 +++++++++ src/debug.c | 129 +++++++++++++++++++++++++++-------------- 2 files changed, 110 insertions(+), 45 deletions(-) diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc index 24a83833c3..72ace2512a 100644 --- a/data/scripts/debug.inc +++ b/data/scripts/debug.inc @@ -39,6 +39,32 @@ Debug_CheatStart:: setvar VAR_BRINEY_HOUSE_STATE, 1 setvar VAR_ROUTE116_STATE, 2 setflag FLAG_HIDE_ROUTE_116_MR_BRINEY + setflag FLAG_BADGE01_GET + setflag FLAG_BADGE02_GET + setflag FLAG_BADGE03_GET + setflag FLAG_BADGE04_GET + setflag FLAG_BADGE05_GET + setflag FLAG_BADGE06_GET + setflag FLAG_BADGE07_GET + setflag FLAG_BADGE08_GET + setflag FLAG_VISITED_LITTLEROOT_TOWN + setflag FLAG_VISITED_OLDALE_TOWN + setflag FLAG_VISITED_DEWFORD_TOWN + setflag FLAG_VISITED_LAVARIDGE_TOWN + setflag FLAG_VISITED_FALLARBOR_TOWN + setflag FLAG_VISITED_VERDANTURF_TOWN + setflag FLAG_VISITED_PACIFIDLOG_TOWN + setflag FLAG_VISITED_PETALBURG_CITY + setflag FLAG_VISITED_SLATEPORT_CITY + setflag FLAG_VISITED_MAUVILLE_CITY + setflag FLAG_VISITED_RUSTBORO_CITY + setflag FLAG_VISITED_FORTREE_CITY + setflag FLAG_VISITED_LILYCOVE_CITY + setflag FLAG_VISITED_MOSSDEEP_CITY + setflag FLAG_VISITED_SOOTOPOLIS_CITY + setflag FLAG_VISITED_EVER_GRANDE_CITY + setflag FLAG_LANDMARK_POKEMON_LEAGUE + setflag FLAG_LANDMARK_BATTLE_FRONTIER clearflag FLAG_HIDE_BRINEYS_HOUSE_MR_BRINEY clearflag FLAG_HIDE_BRINEYS_HOUSE_PEEKO release diff --git a/src/debug.c b/src/debug.c index 156c2013ba..822d1bb472 100644 --- a/src/debug.c +++ b/src/debug.c @@ -120,6 +120,7 @@ enum FlagsVarsMenu DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKEDEX, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_NATDEX, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV, + DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_LOCATIONS, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BADGES_ALL, @@ -349,6 +350,7 @@ static void DebugAction_FlagsVars_PokedexFlags_Reset(u8 taskId); static void DebugAction_FlagsVars_SwitchDex(u8 taskId); static void DebugAction_FlagsVars_SwitchNatDex(u8 taskId); static void DebugAction_FlagsVars_SwitchPokeNav(u8 taskId); +static void DebugAction_FlagsVars_SwitchMatchCall(u8 taskId); static void DebugAction_FlagsVars_ToggleFlyFlags(u8 taskId); static void DebugAction_FlagsVars_ToggleBadgeFlags(u8 taskId); static void DebugAction_FlagsVars_ToggleFrontierPass(u8 taskId); @@ -482,6 +484,7 @@ static const u8 sDebugText_FlagsVars_PokedexFlags_Reset[] = _("Pokédex Flag static const u8 sDebugText_FlagsVars_SwitchDex[] = _("Toggle {STR_VAR_1}Pokédex"); static const u8 sDebugText_FlagsVars_SwitchNationalDex[] = _("Toggle {STR_VAR_1}NatDex"); static const u8 sDebugText_FlagsVars_SwitchPokeNav[] = _("Toggle {STR_VAR_1}PokéNav"); +static const u8 sDebugText_FlagsVars_SwitchMatchCall[] = _("Toggle {STR_VAR_1}Match Call"); static const u8 sDebugText_FlagsVars_RunningShoes[] = _("Toggle {STR_VAR_1}Running Shoes"); static const u8 sDebugText_FlagsVars_ToggleFlyFlags[] = _("Toggle {STR_VAR_1}Fly Flags"); static const u8 sDebugText_FlagsVars_ToggleAllBadges[] = _("Toggle {STR_VAR_1}All badges"); @@ -657,6 +660,7 @@ static const struct ListMenuItem sDebugMenu_Items_FlagsVars[] = [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKEDEX] = {sDebugText_FlagsVars_SwitchDex, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKEDEX}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_NATDEX] = {sDebugText_FlagsVars_SwitchNationalDex, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_NATDEX}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV] = {sDebugText_FlagsVars_SwitchPokeNav, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV}, + [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL] = {sDebugText_FlagsVars_SwitchMatchCall, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES] = {sDebugText_FlagsVars_RunningShoes, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_LOCATIONS] = {sDebugText_FlagsVars_ToggleFlyFlags, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_LOCATIONS}, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BADGES_ALL] = {sDebugText_FlagsVars_ToggleAllBadges, DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BADGES_ALL}, @@ -799,6 +803,7 @@ static void (*const sDebugMenu_Actions_Flags[])(u8) = [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKEDEX] = DebugAction_FlagsVars_SwitchDex, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_NATDEX] = DebugAction_FlagsVars_SwitchNatDex, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV] = DebugAction_FlagsVars_SwitchPokeNav, + [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL] = DebugAction_FlagsVars_SwitchMatchCall, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES] = DebugAction_FlagsVars_RunningShoes, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_LOCATIONS] = DebugAction_FlagsVars_ToggleFlyFlags, [DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_BADGES_ALL] = DebugAction_FlagsVars_ToggleBadgeFlags, @@ -1100,6 +1105,9 @@ static u8 Debug_CheckToggleFlags(u8 id) case DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_POKENAV: result = FlagGet(FLAG_SYS_POKENAV_GET); break; + case DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_MATCH_CALL: + result = FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV) && FlagGet(FLAG_HAS_MATCH_CALL); + break; case DEBUG_FLAGVAR_MENU_ITEM_TOGGLE_RUN_SHOES: result = FlagGet(FLAG_SYS_B_DASH); break; @@ -1649,24 +1657,6 @@ static void DebugAction_Util_HealParty(u8 taskId) static void DebugAction_Util_Fly(u8 taskId) { - FlagSet(FLAG_VISITED_LITTLEROOT_TOWN); - FlagSet(FLAG_VISITED_OLDALE_TOWN); - FlagSet(FLAG_VISITED_DEWFORD_TOWN); - FlagSet(FLAG_VISITED_LAVARIDGE_TOWN); - FlagSet(FLAG_VISITED_FALLARBOR_TOWN); - FlagSet(FLAG_VISITED_VERDANTURF_TOWN); - FlagSet(FLAG_VISITED_PACIFIDLOG_TOWN); - FlagSet(FLAG_VISITED_PETALBURG_CITY); - FlagSet(FLAG_VISITED_SLATEPORT_CITY); - FlagSet(FLAG_VISITED_MAUVILLE_CITY); - FlagSet(FLAG_VISITED_RUSTBORO_CITY); - FlagSet(FLAG_VISITED_FORTREE_CITY); - FlagSet(FLAG_VISITED_LILYCOVE_CITY); - FlagSet(FLAG_VISITED_MOSSDEEP_CITY); - FlagSet(FLAG_VISITED_SOOTOPOLIS_CITY); - FlagSet(FLAG_VISITED_EVER_GRANDE_CITY); - FlagSet(FLAG_LANDMARK_POKEMON_LEAGUE); - FlagSet(FLAG_LANDMARK_BATTLE_FRONTIER); Debug_DestroyMenu_Full(taskId); SetMainCallback2(CB2_OpenFlyMap); } @@ -2516,6 +2506,22 @@ static void DebugAction_FlagsVars_SwitchPokeNav(u8 taskId) FlagToggle(FLAG_SYS_POKENAV_GET); } +static void DebugAction_FlagsVars_SwitchMatchCall(u8 taskId) +{ + if (FlagGet(FLAG_ADDED_MATCH_CALL_TO_POKENAV)) + { + PlaySE(SE_PC_OFF); + FlagClear(FLAG_ADDED_MATCH_CALL_TO_POKENAV); + FlagClear(FLAG_HAS_MATCH_CALL); + } + else + { + PlaySE(SE_PC_LOGIN); + FlagSet(FLAG_ADDED_MATCH_CALL_TO_POKENAV); + FlagSet(FLAG_HAS_MATCH_CALL); + } +} + static void DebugAction_FlagsVars_RunningShoes(u8 taskId) { if (FlagGet(FLAG_SYS_B_DASH)) @@ -2528,44 +2534,77 @@ static void DebugAction_FlagsVars_RunningShoes(u8 taskId) static void DebugAction_FlagsVars_ToggleFlyFlags(u8 taskId) { if (FlagGet(FLAG_LANDMARK_BATTLE_FRONTIER)) + { PlaySE(SE_PC_OFF); + FlagClear(FLAG_VISITED_LITTLEROOT_TOWN); + FlagClear(FLAG_VISITED_OLDALE_TOWN); + FlagClear(FLAG_VISITED_DEWFORD_TOWN); + FlagClear(FLAG_VISITED_LAVARIDGE_TOWN); + FlagClear(FLAG_VISITED_FALLARBOR_TOWN); + FlagClear(FLAG_VISITED_VERDANTURF_TOWN); + FlagClear(FLAG_VISITED_PACIFIDLOG_TOWN); + FlagClear(FLAG_VISITED_PETALBURG_CITY); + FlagClear(FLAG_VISITED_SLATEPORT_CITY); + FlagClear(FLAG_VISITED_MAUVILLE_CITY); + FlagClear(FLAG_VISITED_RUSTBORO_CITY); + FlagClear(FLAG_VISITED_FORTREE_CITY); + FlagClear(FLAG_VISITED_LILYCOVE_CITY); + FlagClear(FLAG_VISITED_MOSSDEEP_CITY); + FlagClear(FLAG_VISITED_SOOTOPOLIS_CITY); + FlagClear(FLAG_VISITED_EVER_GRANDE_CITY); + FlagClear(FLAG_LANDMARK_POKEMON_LEAGUE); + FlagClear(FLAG_LANDMARK_BATTLE_FRONTIER); + } else + { PlaySE(SE_PC_LOGIN); - - FlagToggle(FLAG_VISITED_LITTLEROOT_TOWN); - FlagToggle(FLAG_VISITED_OLDALE_TOWN); - FlagToggle(FLAG_VISITED_DEWFORD_TOWN); - FlagToggle(FLAG_VISITED_LAVARIDGE_TOWN); - FlagToggle(FLAG_VISITED_FALLARBOR_TOWN); - FlagToggle(FLAG_VISITED_VERDANTURF_TOWN); - FlagToggle(FLAG_VISITED_PACIFIDLOG_TOWN); - FlagToggle(FLAG_VISITED_PETALBURG_CITY); - FlagToggle(FLAG_VISITED_SLATEPORT_CITY); - FlagToggle(FLAG_VISITED_MAUVILLE_CITY); - FlagToggle(FLAG_VISITED_RUSTBORO_CITY); - FlagToggle(FLAG_VISITED_FORTREE_CITY); - FlagToggle(FLAG_VISITED_LILYCOVE_CITY); - FlagToggle(FLAG_VISITED_MOSSDEEP_CITY); - FlagToggle(FLAG_VISITED_SOOTOPOLIS_CITY); - FlagToggle(FLAG_VISITED_EVER_GRANDE_CITY); - FlagToggle(FLAG_LANDMARK_POKEMON_LEAGUE); - FlagToggle(FLAG_LANDMARK_BATTLE_FRONTIER); + FlagSet(FLAG_VISITED_LITTLEROOT_TOWN); + FlagSet(FLAG_VISITED_OLDALE_TOWN); + FlagSet(FLAG_VISITED_DEWFORD_TOWN); + FlagSet(FLAG_VISITED_LAVARIDGE_TOWN); + FlagSet(FLAG_VISITED_FALLARBOR_TOWN); + FlagSet(FLAG_VISITED_VERDANTURF_TOWN); + FlagSet(FLAG_VISITED_PACIFIDLOG_TOWN); + FlagSet(FLAG_VISITED_PETALBURG_CITY); + FlagSet(FLAG_VISITED_SLATEPORT_CITY); + FlagSet(FLAG_VISITED_MAUVILLE_CITY); + FlagSet(FLAG_VISITED_RUSTBORO_CITY); + FlagSet(FLAG_VISITED_FORTREE_CITY); + FlagSet(FLAG_VISITED_LILYCOVE_CITY); + FlagSet(FLAG_VISITED_MOSSDEEP_CITY); + FlagSet(FLAG_VISITED_SOOTOPOLIS_CITY); + FlagSet(FLAG_VISITED_EVER_GRANDE_CITY); + FlagSet(FLAG_LANDMARK_POKEMON_LEAGUE); + FlagSet(FLAG_LANDMARK_BATTLE_FRONTIER); + } } static void DebugAction_FlagsVars_ToggleBadgeFlags(u8 taskId) { if (FlagGet(FLAG_BADGE08_GET)) + { PlaySE(SE_PC_OFF); + FlagClear(FLAG_BADGE01_GET); + FlagClear(FLAG_BADGE02_GET); + FlagClear(FLAG_BADGE03_GET); + FlagClear(FLAG_BADGE04_GET); + FlagClear(FLAG_BADGE05_GET); + FlagClear(FLAG_BADGE06_GET); + FlagClear(FLAG_BADGE07_GET); + FlagClear(FLAG_BADGE08_GET); + } else + { PlaySE(SE_PC_LOGIN); - FlagToggle(FLAG_BADGE01_GET); - FlagToggle(FLAG_BADGE02_GET); - FlagToggle(FLAG_BADGE03_GET); - FlagToggle(FLAG_BADGE04_GET); - FlagToggle(FLAG_BADGE05_GET); - FlagToggle(FLAG_BADGE06_GET); - FlagToggle(FLAG_BADGE07_GET); - FlagToggle(FLAG_BADGE08_GET); + FlagSet(FLAG_BADGE01_GET); + FlagSet(FLAG_BADGE02_GET); + FlagSet(FLAG_BADGE03_GET); + FlagSet(FLAG_BADGE04_GET); + FlagSet(FLAG_BADGE05_GET); + FlagSet(FLAG_BADGE06_GET); + FlagSet(FLAG_BADGE07_GET); + FlagSet(FLAG_BADGE08_GET); + } } static void DebugAction_FlagsVars_ToggleFrontierPass(u8 taskId) From 242d68487a51a61dbc3d703c0505c1e8a38849a9 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 30 Oct 2023 14:31:28 -0300 Subject: [PATCH 11/17] Weak Armor tests --- test/battle/ability/weak_armor.c | 126 +++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c index abe4a797e5..f23f67cbab 100644 --- a/test/battle/ability/weak_armor.c +++ b/test/battle/ability/weak_armor.c @@ -29,6 +29,13 @@ SINGLE_BATTLE_TEST("Weak Armor lowers Defense by 1 and boosts Speed by 2 when hi ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); MESSAGE("Slugma's Weak Armor lowered its Defense!"); MESSAGE("Slugma's Weak Armor raised its Speed!"); + } else { + NONE_OF { + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } } } THEN { if (move == MOVE_TACKLE) { @@ -68,3 +75,122 @@ SINGLE_BATTLE_TEST("Weak Armor does not trigger when brought in by Dragon Tail a EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE); } } + +SINGLE_BATTLE_TEST("Weak Armor still lowers boosts Speed if Defense can't go any lower") +{ + GIVEN { + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + } + MESSAGE("Slugma's Defense won't go lower!"); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], MIN_STAT_STAGE); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Weak Armor still lowers Defense if Speed can't go any higher") +{ + GIVEN { + PLAYER(SPECIES_SLUGMA) { Ability(ABILITY_WEAK_ARMOR); } + OPPONENT(SPECIES_WOBBUFFET); + } WHEN { + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(opponent, MOVE_TACKLE); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent); + HP_BAR(player); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor lowered its Defense!"); + NONE_OF { + ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); + MESSAGE("Slugma's Weak Armor raised its Speed!"); + } + MESSAGE("Slugma's Speed won't go higher!"); + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1); + EXPECT_EQ(player->statStages[STAT_SPEED], MAX_STAT_STAGE); + } +} + +SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can't go any lower") +{ + u32 j; + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); } + OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); } + } WHEN { + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_SCREECH); } + TURN { MOVE(opponent, MOVE_FURY_SWIPES); } + } SCENE { + for (j = 0; j < 2; j++) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Weak Armor lowered its Defense!"); + MESSAGE("Magcargo's Weak Armor raised its Speed!"); + } + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Defense won't go lower!"); + MESSAGE("Magcargo's Weak Armor raised its Speed!"); + for (j = 0; j < 2; j++) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Defense won't go lower!"); + MESSAGE("Slugma's Speed won't go higher!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], MIN_STAT_STAGE); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } +} + +SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Speed can't go any higher") +{ + u32 j; + KNOWN_FAILING; + GIVEN { + PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); } + OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); } + } WHEN { + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(player, MOVE_AGILITY); } + TURN { MOVE(opponent, MOVE_FURY_SWIPES); } + } SCENE { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Weak Armor lowered its Defense!"); + MESSAGE("Magcargo's Weak Armor raised its Speed!"); + for (j = 0; j < 4; j++) + { + ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Weak Armor lowered its Defense!"); + MESSAGE("Magcargo's Speed won't go higher!"); + } + } THEN { + EXPECT_EQ(player->statStages[STAT_DEF], MIN_STAT_STAGE); + EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + } +} From 72dad4d7c6959d2430e828923def10e2a5a190ab Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 30 Oct 2023 20:44:42 +0100 Subject: [PATCH 12/17] Fix Weak Armor interrupting multi hit moves (#3497) --- data/battle_scripts_1.s | 2 ++ src/battle_util.c | 4 ++-- test/battle/ability/weak_armor.c | 17 +++++++++-------- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 5d2e18cb4b..898be404b5 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9122,6 +9122,7 @@ BattleScript_WeakArmorActivates:: jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_WeakArmorActivatesSpeed pause B_WAIT_TIME_SHORTEST printfromtable gStatDownStringIds + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED @ Set by statbuffchange when stat can't be decreased waitmessage B_WAIT_TIME_LONG goto BattleScript_WeakArmorActivatesSpeed BattleScript_WeakArmorDefAnim: @@ -9136,6 +9137,7 @@ BattleScript_WeakArmorActivatesSpeed: jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd pause B_WAIT_TIME_SHORTEST printstring STRINGID_TARGETSTATWONTGOHIGHER + bichalfword gMoveResultFlags, MOVE_RESULT_MISSED waitmessage B_WAIT_TIME_LONG goto BattleScript_WeakArmorActivatesEnd BattleScript_WeakArmorSpeedAnim: diff --git a/src/battle_util.c b/src/battle_util.c index d64acb6fb5..c9ef0b08bd 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -5231,8 +5231,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 && TARGET_TURN_DAMAGED && IsBattlerAlive(battler) && IS_MOVE_PHYSICAL(gCurrentMove) - && (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) // Don't activate if speed cannot be raised - || CompareStat(battler, STAT_DEF, MIN_STAT_STAGE, CMP_GREATER_THAN))) // Don't activate if defense cannot be lowered + && (CompareStat(battler, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN) // Don't activate if both Speed and Defense cannot be raised. + || CompareStat(battler, STAT_DEF, MIN_STAT_STAGE, CMP_GREATER_THAN))) { if (gBattleMoves[gCurrentMove].effect == EFFECT_HIT_ESCAPE && CanBattlerSwitch(gBattlerAttacker)) gProtectStructs[battler].disableEjectPack = TRUE; // Set flag for target diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c index f23f67cbab..8fc09bb287 100644 --- a/test/battle/ability/weak_armor.c +++ b/test/battle/ability/weak_armor.c @@ -133,7 +133,6 @@ SINGLE_BATTLE_TEST("Weak Armor still lowers Defense if Speed can't go any higher SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can't go any lower") { u32 j; - KNOWN_FAILING; GIVEN { PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); } OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); } @@ -156,20 +155,22 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Defense can' for (j = 0; j < 2; j++) { ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, opponent); - ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); - MESSAGE("Magcargo's Defense won't go lower!"); - MESSAGE("Slugma's Speed won't go higher!"); + // Ability doesn't activate if neither stat can be changed. + NONE_OF { + ABILITY_POPUP(player, ABILITY_WEAK_ARMOR); + MESSAGE("Magcargo's Defense won't go lower!"); + MESSAGE("Magcargo's Speed won't go higher!"); + } } } THEN { EXPECT_EQ(player->statStages[STAT_DEF], MIN_STAT_STAGE); - EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(player->statStages[STAT_SPEED], MAX_STAT_STAGE); } } SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Speed can't go any higher") { u32 j; - KNOWN_FAILING; GIVEN { PLAYER(SPECIES_MAGCARGO) { Ability(ABILITY_WEAK_ARMOR); Defense(999); } OPPONENT(SPECIES_CLOYSTER) { Ability(ABILITY_SKILL_LINK); } @@ -190,7 +191,7 @@ SINGLE_BATTLE_TEST("Weak Armor doesn't interrupt multi hit moves if Speed can't MESSAGE("Magcargo's Speed won't go higher!"); } } THEN { - EXPECT_EQ(player->statStages[STAT_DEF], MIN_STAT_STAGE); - EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2); + EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 5); + EXPECT_EQ(player->statStages[STAT_SPEED], MAX_STAT_STAGE); } } From c0c100d90d889603fc072773a9f390c1da75aced Mon Sep 17 00:00:00 2001 From: kittenchilly Date: Mon, 30 Oct 2023 14:45:52 -0500 Subject: [PATCH 13/17] Base friendship Gen 8+ config (#3491) Co-authored-by: Eduardo Quezada D'Ottone --- include/config/pokemon.h | 1 + include/constants/pokemon.h | 6 +++++- src/data/pokemon/species_info.h | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/config/pokemon.h b/include/config/pokemon.h index 271a77add4..9c233eab0f 100644 --- a/include/config/pokemon.h +++ b/include/config/pokemon.h @@ -6,6 +6,7 @@ #define P_UPDATED_STATS GEN_LATEST // Since Gen 6, Pokémon stats are updated with each passing generation. #define P_UPDATED_ABILITIES GEN_LATEST // Since Gen 6, certain Pokémon have their abilities changed. #define P_UPDATED_EGG_GROUPS GEN_LATEST // Since Gen 8, certain Pokémon have gained new egg groups. +#define P_UPDATED_FRIENDSHIP GEN_LATEST // Since Gen 8, the base friendship of certain Pokémon was changed. // Evolution settings #define P_FRIENDSHIP_EVO_THRESHOLD GEN_LATEST // Since Gen 8, Pokémon that evolve by friendship evolve at or above 160 friendship instead of 220. diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h index 49272691c6..eaba4c544b 100644 --- a/include/constants/pokemon.h +++ b/include/constants/pokemon.h @@ -191,8 +191,12 @@ #define FRIENDSHIP_200_TO_254 5 #define FRIENDSHIP_MAX 6 -// Friendship value that the majority of species use. This was changed in Generation 8 to 50. +// Friendship value that the majority of species use. +#if P_UPDATED_FRIENDSHIP >= GEN_8 +#define STANDARD_FRIENDSHIP 50 +#else #define STANDARD_FRIENDSHIP 70 +#endif #define MAX_FRIENDSHIP 255 #define MAX_SHEEN 255 diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 01bc20e46a..fe36cb5210 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -24496,7 +24496,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_SpAttack = 3, .genderRatio = MON_GENDERLESS, .eggCycles = 120, - .friendship = 100, + .friendship = P_UPDATED_FRIENDSHIP >= GEN_8 ? STANDARD_FRIENDSHIP : 100, .growthRate = GROWTH_SLOW, .eggGroups = { EGG_GROUP_UNDISCOVERED, EGG_GROUP_UNDISCOVERED}, .abilities = {ABILITY_MAGICIAN, ABILITY_NONE}, From 2dfae911aa6473260f9ced5918504c269799df41 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Mon, 30 Oct 2023 17:18:00 -0300 Subject: [PATCH 14/17] Added config for Weak Armor's Gen 5-6 effect (#3498) --- data/battle_scripts_1.s | 4 ++++ include/config/battle.h | 1 + test/battle/ability/weak_armor.c | 1 + 3 files changed, 6 insertions(+) diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index 2cd49853cf..f4c614aa7c 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -9113,7 +9113,11 @@ BattleScript_WeakArmorDefAnim: printstring STRINGID_TARGETABILITYSTATLOWER waitmessage B_WAIT_TIME_LONG BattleScript_WeakArmorActivatesSpeed: +.if B_WEAK_ARMOR_SPEED >= GEN_7 setstatchanger STAT_SPEED, 2, FALSE +.else + setstatchanger STAT_SPEED, 1, FALSE +.endif statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_WeakArmorActivatesEnd jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_WeakArmorSpeedAnim jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_ROSE_EMPTY, BattleScript_WeakArmorActivatesEnd diff --git a/include/config/battle.h b/include/config/battle.h index 43f8138c1e..ba6dfd0b7a 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -129,6 +129,7 @@ #define B_SNOW_WARNING GEN_LATEST // In Gen9+, Snow Warning will summon snow instead of hail. #define B_TRANSISTOR_BOOST GEN_LATEST // In Gen9+, Transistor will only boost Electric-type moves by 1.3x as opposed to 1.5x. #define B_ILLUMINATE_EFFECT GEN_LATEST // In Gen9+, Illuminate prevents accuracy reductions and ignores the target's evasion. +#define B_WEAK_ARMOR_SPEED GEN_LATEST // In Gen7+, Weak Armor raises Speed by 2 stages instead of 1 when hit by a physical move. // Item settings #define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore HP activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn. diff --git a/test/battle/ability/weak_armor.c b/test/battle/ability/weak_armor.c index 8fc09bb287..84cad5c222 100644 --- a/test/battle/ability/weak_armor.c +++ b/test/battle/ability/weak_armor.c @@ -7,6 +7,7 @@ ASSUMPTIONS ASSUME(gBattleMoves[MOVE_GUST].power != 0); ASSUME(gBattleMoves[MOVE_GUST].split == SPLIT_SPECIAL); ASSUME(gBattleMoves[MOVE_TACKLE].split == SPLIT_PHYSICAL); + ASSUME(B_WEAK_ARMOR_SPEED >= GEN_7); } SINGLE_BATTLE_TEST("Weak Armor lowers Defense by 1 and boosts Speed by 2 when hit by a physical attack") From 6dc534f8071b78398fa8de2a9204e1f625ea2f58 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada D'Ottone Date: Tue, 31 Oct 2023 07:28:47 -0300 Subject: [PATCH 15/17] Version 1.6.2 (#3503) --- .../ISSUE_TEMPLATE/01_battle_engine_bugs.yaml | 3 +- .../ISSUE_TEMPLATE/02_battle_ai_issues.yaml | 3 +- .github/ISSUE_TEMPLATE/04_other_errors.yaml | 3 +- CHANGELOG.md | 124 ++++++++++++++++++ README.md | 2 +- 5 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 CHANGELOG.md diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml index 38b323146a..d7a4516d2a 100644 --- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml +++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml @@ -23,8 +23,9 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.6.1 (Default) + - 1.6.2 (Default) - upcoming (Edge) + - 1.6.1 - 1.6.0 - 1.5.3 - 1.5.2 diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml index bb617b3d5e..0c3378eb3f 100644 --- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml +++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml @@ -23,8 +23,9 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.6.1 (Default) + - 1.6.2 (Default) - upcoming (Edge) + - 1.6.1 - 1.6.0 - 1.5.3 - 1.5.2 diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml index fec54fa150..538dae0383 100644 --- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml +++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml @@ -23,8 +23,9 @@ body: label: Version description: What version of pokeemerald-expansion are you using as a base? options: - - 1.6.1 (Default) + - 1.6.2 (Default) - upcoming (Edge) + - 1.6.1 - 1.6.0 - 1.5.3 - 1.5.2 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000..393eca81cc --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,124 @@ +# Pokeemerald-Expansion Changelog + +# Version 1.6.2 + +## 🌋 *IMPORTANT CHANGES* 🌋 +### Battle changes +* Battler Types are now obtained via `GetBattlerType` instead of `gBattleMons[battlerId].type1/2/3` to better consider Roost. Be sure to update your custom battle effects to account for this change. + +## 🧬 General 🧬 +### Fixed +* Fixed Cheat Start not initiating time-based events by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3446 + +## 🐉 Pokémon 🐉 +### Changed +* Updated Cresselia's base stats to Gen 9 by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3419 +* Updated Zacian/Zamazenta base stats to Gen 9 by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3421 +### Fixed +* Fixed Kleavor, Hisuian Sneasel and Sneasler missing their SV abilities by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3391 +* Fixed Bergmite/Avalugg old and updated egg groups being switched by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3380 + +## 🤹 Moves 🤹 +### Changed +* Quick Draw now uses weighted RNG by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399 +* Added `IS_BATTLER_TYPELESS` macro that checks if the specified battler has no valid type by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3303 +### Fixed +* Fixed Protect failing if the user flinched on the previous turn by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3345 +* Fixed entry hazards not working properly being cleared on switch-in by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3316 + * This includes Toxic Spikes not working if Pecha Berry actived on the previous turn. +* Fixed Roost overwriting other type changing at the end of the turn (Soak, Forest's Curse, Color Change, etc.) by @BLourenco in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258 + * Now it suppresses the user's Flying-type rather than remove and re-add it. +* Fixes Salt Cure visual bug if mon fainted by direct attack by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3388 +* Fixed Purifying Salt not preventing the use of Rest by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399 +* Fixed Make it Rain lowering Sp. Attack twice if hitting 2 targets in double battles by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3441 +* Fixed Reflect Type not properly handle 3rd types by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3303 +* Fixed form change triggered by switching not occuring when using moves like U-Turn or Baton Pass by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3463 +* Fixed Last Resort not counting Sleep Talk as used for its effect by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378 + +## 🎭 Abilities 🎭 +### Added +* Added config for Synchronize's Gen9 behaviour (as in, not working at all) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3455 +### Changed +* Removed unused `STATUS3_CANT_SCORE_A_CRIT` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 +* Moved Beads of Ruin and Sword of Ruin damage to the appropiate damage modifier functions by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415 +### Fixed +* Fixed Intimidate increasing the attack of both opponents if one of them has Contrary in double battles by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3365 +* Fixed Battle/Shell Armor not preventing critical hits by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 +* Fixed Rivalry's effect being reversed by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381 +* Fixed Rivalry lowering attack if either attacker or target were genderless by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381 +* Fixed missing Poison Heal Ability Popup by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3385 +* Fixed Parental Bond not working at all by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3417 +* Fixed Beads of Ruin and Sword of Ruin damage modifiers by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415 +* Fixed Sheer Force not negating effects that benefit the user (eg. Flame Charge, Power-Up Punch) by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378 +* Fixed Strength Sap not healing the user when used on a Substitute by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3486 +* Fixed Substitute showing the "took damage for" message if Strength Sap was used on it by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3486 +* Fixed Weak Armor interrupting Multi Hit moves by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3497 + +## 🧶 Items 🧶 +### Fixed +* Fixed Shiny Charm doing too many rerolls by default by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3327 +* Fixed Berserk Gene activating for the wrong Pokémon double battles by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3363 +* Fixed Red Card not being consumed after opponent Sticky Web activation by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364 +* Fixed implementation of Gen6 that didn't allow for the Exp Share flag to be set via script without setting the item to the Gen 6+ version by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3384 +* Fixed Kee Berry raising defense by 1 stage instead of 2 by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409 +* Fixed Kee Berry incorrect stat raise message by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409 +* Fixed Razor Fang not being able to be used directly even if `I_USE_EVO_HELD_ITEMS_FROM_BAG` was set to `TRUE` by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/3456 + +## 🧹 Cleanup 🧹 +* `AbilityBattleEffects` uses `B_MSG_TERRAIN` constants for field terrain intro text by @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/3410 +* Removed all trailing whitespace by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3472 + +## 🧪 Test Runner 🧪 +### Added +* Flinch tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3345 +* Berserk Gene double battle tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3363 +* More specific Toxic Spikes tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3316 +* Red Card/Sticky Web test @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364 +* Intimidate/Contrary double battle test by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3365 +* Critical Hit tests by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 +* Roost tests by @BLourenco in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258 +* Rivalry tests by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3381 +* Various tests by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3385 + * Defeatist, Dragon's Maw, Earth Eater, Gale Wings, Poison Heal, Rocky Payload, Sap Sipper, Steelworker and Transistor. +* Various tests by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3399 + * Beast Boost, Ice Scales, Neuroforce, Purifying Salt, Quick Draw and Sharpness. +* Berry tests @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3409 + * Full: Apicot, Custap, Ganlon, Jaboca, Kee, Lansat, Liechi, Maranga, Micle, Petaya, Rowap and Salac Berries. + * TODO: Starf Berry. +* Weather and type-specific tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3260 + * Full: Freezing, Hail, Moonlight, Morning Sun, Sandstorm, Snow, Solar Beam/Blade, Steel poisoning, Synthesis, Thunder and Weather Ball. + * Partial: Prankster, Safety Goggles, Aurora Veil, Hurricane, Leech Seed and OHKO moves. + * TODO: Harvest. +* Single Parental Bond test by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3417 +* Several tests by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378 + * Full: Weak Armor, Last Resort, Stealth Rock. + * Completed Weak Armor tests by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3493 + * Partial: Defiant, Sheer Force, White Herb, Strength Sap. +### Changed +* Red Card tests now check if the item was consumed by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3364 +* Tests now cannot use `i` in their cycles to avoid messing with `PARAMETRIZE` by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3408 +* Moved battle tests off the heap by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3414 +* Moved Powder/Grass test to `move_flags` folder by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3260 +* Continuous `NOT x; NOT y;` are now not allowed in tests due to them not acting as one would expect by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3459 + * Test writers should use `NONE_OF { x; y; }` instead. +### Fixed +* Fixed CreateNPCTrainerPartyForTrainer test failing on modern by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3367 +* Fixed `RNG_CRITICAL_HIT` by @mrgriffin and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 +* Fixed `ASSUMPTIONS` block not working by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3368 + * Fixup by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3408 +* Fixed Beads of Ruin and Sword of Ruin damage tests by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415 +* Fixes test RNG by @mrgriffin and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3433 +* Fixed battle test estimateCost bug by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3448 +* Test cleanup and improvements by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3449 + * Removed duplicated Prankster TO_DO test. + * Corrected Multi-hit test names (4 and 5 hits stated 35% instead of 15%). + * Grouped Maranga Berry's Physical vs Special tests using PARAMETRIZE. + * Improved Jaboca, Kee and Rowap tests by @AlexOn1ine +* Fixed `ModifyPersonalityForNature` by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3452 +* Fixed test_runner.c modern warning by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3451 + +## New Contributors +* @BLourenco made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/3258 + +## Full Changelog +https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.6.1...expansion/1.6.2 diff --git a/README.md b/README.md index 6f87572467..520dd5930f 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ With this, you'll get the latest version of the Expansion, plus a couple of bugf ## **How do I update my version of the pokeemerald Expansion?** - If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`. -- Once you have your remote set up, run the command `git pull RHH expansion/1.6.0`. +- Once you have your remote set up, run the command `git pull RHH expansion/1.6.2`. ### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :) From e2811035752b8db36ad8a85be35b72260b5c63b8 Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Tue, 31 Oct 2023 07:33:53 -0300 Subject: [PATCH 16/17] Reverted PR3455 --- CHANGELOG.md | 2 -- include/config/battle.h | 2 +- src/wild_encounter.c | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 393eca81cc..9d599aaf3f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,8 +36,6 @@ * Fixed Last Resort not counting Sleep Talk as used for its effect by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/3378 ## 🎭 Abilities 🎭 -### Added -* Added config for Synchronize's Gen9 behaviour (as in, not working at all) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/3455 ### Changed * Removed unused `STATUS3_CANT_SCORE_A_CRIT` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/3377 * Moved Beads of Ruin and Sword of Ruin damage to the appropiate damage modifier functions by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3415 diff --git a/include/config/battle.h b/include/config/battle.h index 5ce2e4f9f8..2278d7fea5 100644 --- a/include/config/battle.h +++ b/include/config/battle.h @@ -115,7 +115,7 @@ #define B_SHADOW_TAG_ESCAPE GEN_LATEST // In Gen4+, if both sides have a Pokémon with Shadow Tag, all battlers can escape. Before, neither side could escape this situation. #define B_MOODY_ACC_EVASION GEN_LATEST // In Gen8, Moody CANNOT raise Accuracy and Evasion anymore. #define B_FLASH_FIRE_FROZEN GEN_LATEST // In Gen5+, Flash Fire can trigger even when frozen, when it couldn't before. -#define B_SYNCHRONIZE_NATURE GEN_LATEST // In Gen8, if a Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same Nature, as opposed to 50% previously. In Gen9, it has no out-of-battle effect. +#define B_SYNCHRONIZE_NATURE GEN_LATEST // In Gen8, if a Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same Nature, as opposed to 50% previously. #define B_SYNCHRONIZE_TOXIC GEN_LATEST // In Gen5+, if a Pokémon with Synchronize is badly poisoned, the opponent will also become badly poisoned. Previously, the opponent would become regular poisoned. #define B_UPDATED_INTIMIDATE GEN_LATEST // In Gen8, Intimidate doesn't work on opponents with the Inner Focus, Scrappy, Own Tempo or Oblivious abilities. It also activates Rattled. #define B_OBLIVIOUS_TAUNT GEN_LATEST // In Gen6+, Pokémon with Oblivious can't be taunted. diff --git a/src/wild_encounter.c b/src/wild_encounter.c index 5ea88f4c4a..6016e08e69 100644 --- a/src/wild_encounter.c +++ b/src/wild_encounter.c @@ -415,7 +415,6 @@ static u8 PickWildMonNature(void) } } } -#if B_SYNCHRONIZE_NATURE < GEN_9 // check synchronize for a pokemon with the same ability if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG) && GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE @@ -426,7 +425,6 @@ static u8 PickWildMonNature(void) { return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % NUM_NATURES; } -#endif // random nature return Random() % NUM_NATURES; From 64ba52d2142051146af38df73c4c14c205641879 Mon Sep 17 00:00:00 2001 From: Alex <93446519+AlexOn1ine@users.noreply.github.com> Date: Tue, 31 Oct 2023 13:41:22 +0100 Subject: [PATCH 17/17] Remove redundant AI score increases (#3504) * Remove redundant AI score increases * review applied * fix score --- data/battle_scripts_1.s | 2 +- include/battle_ai_util.h | 1 - include/constants/battle_move_effects.h | 2 +- src/battle_ai_main.c | 124 ++------------------ src/battle_ai_util.c | 1 - src/battle_script_commands.c | 2 +- src/battle_tv.c | 2 +- src/battle_util.c | 2 +- src/data/battle_moves.h | 70 ++++++------ test/battle/ai_check_viability.c | 145 ++++++++++++++++++++++++ 10 files changed, 195 insertions(+), 156 deletions(-) create mode 100644 test/battle/ai_check_viability.c diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s index f4c614aa7c..f87ae01b0e 100644 --- a/data/battle_scripts_1.s +++ b/data/battle_scripts_1.s @@ -188,7 +188,7 @@ gBattleScriptsForMoveEffects:: .4byte BattleScript_EffectMemento @ EFFECT_MEMENTO .4byte BattleScript_EffectHit @ EFFECT_FACADE .4byte BattleScript_EffectFocusPunch @ EFFECT_FOCUS_PUNCH - .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLINGSALT + .4byte BattleScript_EffectSmellingsalt @ EFFECT_SMELLING_SALTS .4byte BattleScript_EffectFollowMe @ EFFECT_FOLLOW_ME .4byte BattleScript_EffectNaturePower @ EFFECT_NATURE_POWER .4byte BattleScript_EffectCharge @ EFFECT_CHARGE diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h index 76362a2c7a..3d37a185c7 100644 --- a/include/battle_ai_util.h +++ b/include/battle_ai_util.h @@ -128,7 +128,6 @@ bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move); bool32 HasThawingMove(u32 battler); bool32 IsStatRaisingEffect(u32 effect); bool32 IsStatLoweringEffect(u32 effect); -bool32 IsStatRaisingEffect(u32 effect); bool32 IsAttackBoostMoveEffect(u32 effect); bool32 IsUngroundingEffect(u32 effect); bool32 IsSemiInvulnerable(u32 battlerDef, u32 move); diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h index 91b74feee7..aa378ac15d 100644 --- a/include/constants/battle_move_effects.h +++ b/include/constants/battle_move_effects.h @@ -167,7 +167,7 @@ #define EFFECT_MEMENTO 163 #define EFFECT_FACADE 164 #define EFFECT_FOCUS_PUNCH 165 -#define EFFECT_SMELLINGSALT 166 +#define EFFECT_SMELLING_SALTS 166 #define EFFECT_FOLLOW_ME 167 #define EFFECT_NATURE_POWER 168 #define EFFECT_CHARGE 169 diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c index 2e99def5e7..8339195ea7 100644 --- a/src/battle_ai_main.c +++ b/src/battle_ai_main.c @@ -1684,10 +1684,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score) if (gDisableStructs[battlerAtk].stockpileCounter >= 3) ADJUST_SCORE(-10); break; - case EFFECT_SPIT_UP: - if (gDisableStructs[battlerAtk].stockpileCounter <= 1) - ADJUST_SCORE(-10); - break; case EFFECT_SWALLOW: if (gDisableStructs[battlerAtk].stockpileCounter == 0) { @@ -3295,63 +3291,16 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score // check thawing moves if ((gBattleMons[battlerAtk].status1 & (STATUS1_FREEZE | STATUS1_FROSTBITE)) && gBattleMoves[move].thawsUser) - score += (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) ? 20 : 10; + ADJUST_SCORE(10); - // check burn - if (gBattleMons[battlerAtk].status1 & STATUS1_BURN) + // check burn / frostbite + if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING && AI_DATA->abilities[battlerAtk] == ABILITY_NATURAL_CURE) { - switch (aiData->abilities[battlerAtk]) - { - case ABILITY_GUTS: - break; - case ABILITY_NATURAL_CURE: - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING - && HasOnlyMovesWithSplit(battlerAtk, SPLIT_PHYSICAL, TRUE)) - score = 90; // Force switch if all your attacking moves are physical and you have Natural Cure. - break; - default: - if (IS_MOVE_PHYSICAL(move) && gBattleMoves[move].effect != EFFECT_FACADE) - ADJUST_SCORE(-2); - break; - } + if ((gBattleMons[battlerAtk].status1 & STATUS1_BURN && HasOnlyMovesWithSplit(battlerAtk, SPLIT_PHYSICAL, TRUE)) + || (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE && HasOnlyMovesWithSplit(battlerAtk, SPLIT_SPECIAL, TRUE))) + ADJUST_SCORE(-20); // Force switch if all your attacking moves are physical and you have Natural Cure. } - // check frostbite - if (gBattleMons[battlerAtk].status1 & STATUS1_FROSTBITE) - { - switch (aiData->abilities[battlerAtk]) - { - case ABILITY_GUTS: - break; - case ABILITY_NATURAL_CURE: - if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_SMART_SWITCHING - && HasOnlyMovesWithSplit(battlerAtk, SPLIT_SPECIAL, TRUE)) - score = 90; // Force switch if all your attacking moves are special and you have Natural Cure. - break; - default: - if (IS_MOVE_SPECIAL(move) && gBattleMoves[move].effect != EFFECT_FACADE) - ADJUST_SCORE(-2); - break; - } - } - - // attacker ability checks - switch (aiData->abilities[battlerAtk]) - { - case ABILITY_MOXIE: - case ABILITY_BEAST_BOOST: - case ABILITY_CHILLING_NEIGH: - case ABILITY_GRIM_NEIGH: - case ABILITY_AS_ONE_ICE_RIDER: - case ABILITY_AS_ONE_SHADOW_RIDER: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first - { - if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0)) - ADJUST_SCORE(8); // prioritize killing target for stat boost - } - break; - } // ability checks - // move effect checks switch (moveEffect) { @@ -3363,11 +3312,8 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score IncreaseSleepScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_ABSORB: - if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT) - ADJUST_SCORE(1); - if (effectiveness <= AI_EFFECTIVENESS_x0_5 && AI_RandLessThan(50)) - ADJUST_SCORE(-3); - break; + if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_BIG_ROOT && effectiveness >= AI_EFFECTIVENESS_x1) + ADJUST_SCORE(2); case EFFECT_EXPLOSION: case EFFECT_MEMENTO: if (AI_THINKING_STRUCT->aiFlags & AI_FLAG_WILL_SUICIDE && gBattleMons[battlerDef].statStages[STAT_EVASION] < 7) @@ -3581,11 +3527,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score if (aiData->hpPercents[battlerAtk] < 90) ADJUST_SCORE(-2); break; - case EFFECT_DREAM_EATER: - if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP)) - break; - ADJUST_SCORE(1); // if target is asleep, dream eater is a pretty good move even without draining - // fallthrough case EFFECT_ACUPRESSURE: break; case EFFECT_ATTACK_ACCURACY_UP: // hone claws @@ -3734,20 +3675,12 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score || HasHighCritRatioMove(battlerAtk)) ADJUST_SCORE(2); break; - case EFFECT_CONFUSE_HIT: - if (sereneGraceBoost) - ADJUST_SCORE(1); - //fallthrough case EFFECT_CONFUSE: IncreaseConfusionScore(battlerAtk, battlerDef, move, &score); break; case EFFECT_PARALYZE: IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score); break; - case EFFECT_GRAV_APPLE: - if (gFieldStatuses & STATUS_FIELD_GRAVITY) - ADJUST_SCORE(2); - // fall through case EFFECT_ATTACK_DOWN_HIT: case EFFECT_DEFENSE_DOWN_HIT: case EFFECT_SPECIAL_ATTACK_DOWN_HIT: @@ -4243,14 +4176,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score IncreaseStatUpScore(battlerAtk, battlerDef, STAT_DEF, &score); IncreaseStatUpScore(battlerAtk, battlerDef, STAT_SPDEF, &score); break; - case EFFECT_SPIT_UP: - if (gDisableStructs[battlerAtk].stockpileCounter >= 2) - ADJUST_SCORE(1); - break; - case EFFECT_ROLLOUT: - if (gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL) - ADJUST_SCORE(8); - break; case EFFECT_SWAGGER: if (HasMoveEffect(battlerAtk, EFFECT_FOUL_PLAY) || HasMoveEffect(battlerAtk, EFFECT_PSYCH_UP) @@ -4745,11 +4670,8 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score ADJUST_SCORE(2); break; case EFFECT_PLEDGE: - if (isDoubleBattle) - { - if (HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_PLEDGE)) - ADJUST_SCORE(3); // Partner might use pledge move - } + if (isDoubleBattle && HasMoveEffect(BATTLE_PARTNER(battlerAtk), EFFECT_PLEDGE)) + ADJUST_SCORE(3); // Partner might use pledge move break; case EFFECT_TRICK_ROOM: if (!(gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && GetBattlerSideSpeedAverage(battlerAtk) < GetBattlerSideSpeedAverage(battlerDef)) @@ -4952,15 +4874,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score ADJUST_SCORE(3); } break; - case EFFECT_FLAIL: - if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Ai goes first - { - if (aiData->hpPercents[battlerAtk] < 20) - ADJUST_SCORE(1); - else if (aiData->hpPercents[battlerAtk] < 8) - ADJUST_SCORE(2); - } - break; case EFFECT_SHORE_UP: if ((AI_GetWeather(aiData) & B_WEATHER_SANDSTORM) && ShouldRecover(battlerAtk, battlerDef, move, 67)) @@ -4968,10 +4881,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score else if (ShouldRecover(battlerAtk, battlerDef, move, 50)) ADJUST_SCORE(2); break; - case EFFECT_FACADE: - if (gBattleMons[battlerAtk].status1 & (STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON | STATUS1_FROSTBITE)) - ADJUST_SCORE(1); - break; case EFFECT_FOCUS_PUNCH: if (!isDoubleBattle && effectiveness > AI_EFFECTIVENESS_x0_5) { @@ -4981,19 +4890,6 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score ADJUST_SCORE(1); } break; - case EFFECT_SMELLINGSALT: - if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS) - ADJUST_SCORE(2); - break; - case EFFECT_WAKE_UP_SLAP: - if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP) - ADJUST_SCORE(2); - break; - case EFFECT_REVENGE: - if (!(gBattleMons[battlerDef].status1 & STATUS1_SLEEP) - && !(gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))) - ADJUST_SCORE(2); - break; case EFFECT_ENDEAVOR: if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent faster { diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c index c4d543dfe0..dd06a69eaf 100644 --- a/src/battle_ai_util.c +++ b/src/battle_ai_util.c @@ -373,7 +373,6 @@ static const u16 sIgnoredPowerfulMoveEffects[] = EFFECT_RECHARGE, EFFECT_SKULL_BASH, EFFECT_SOLAR_BEAM, - EFFECT_SPIT_UP, EFFECT_FOCUS_PUNCH, EFFECT_SUPERPOWER, EFFECT_ERUPTION, diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index a0bd9faf2a..34b861a6d4 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -979,7 +979,7 @@ static const u16 sFinalStrikeOnlyEffects[] = EFFECT_SECRET_POWER, EFFECT_SMACK_DOWN, EFFECT_SPARKLING_ARIA, - EFFECT_SMELLINGSALT, + EFFECT_SMELLING_SALTS, EFFECT_WAKE_UP_SLAP, EFFECT_HIT_ESCAPE, EFFECT_RECOIL_HP_25, diff --git a/src/battle_tv.c b/src/battle_tv.c index 361b6fa2b9..af485df70d 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -253,7 +253,7 @@ static const u16 sPoints_MoveEffect[NUM_BATTLE_MOVE_EFFECTS] = [EFFECT_MEMENTO] = 7, [EFFECT_FACADE] = 1, [EFFECT_FOCUS_PUNCH] = 7, - [EFFECT_SMELLINGSALT] = 1, + [EFFECT_SMELLING_SALTS] = 1, [EFFECT_FOLLOW_ME] = 5, [EFFECT_NATURE_POWER] = 0, [EFFECT_CHARGE] = 4, diff --git a/src/battle_util.c b/src/battle_util.c index 7974ff8eff..91e6e69b57 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -8555,7 +8555,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3 if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP || abilityDef == ABILITY_COMATOSE) basePower *= 2; break; - case EFFECT_SMELLINGSALT: + case EFFECT_SMELLING_SALTS: if (gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS) basePower *= 2; break; diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 0ad7cc0719..543c21e1d5 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -4748,7 +4748,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = #else .power = 60, #endif - .effect = EFFECT_SMELLINGSALT, + .effect = EFFECT_SMELLING_SALTS, .type = TYPE_NORMAL, .accuracy = 100, .pp = 10, @@ -15142,7 +15142,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_RAISE_TEAM_DEFENSE, }, - + [MOVE_G_MAX_VINE_LASH] = { //ANIM TODO .effect = EFFECT_MAX_MOVE, @@ -15156,7 +15156,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_VINE_LASH, }, - + [MOVE_G_MAX_WILDFIRE] = { .effect = EFFECT_MAX_MOVE, @@ -15170,7 +15170,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_WILDFIRE, }, - + [MOVE_G_MAX_CANNONADE] = { //ANIM TODO .effect = EFFECT_MAX_MOVE, @@ -15184,7 +15184,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_CANNONADE, }, - + [MOVE_G_MAX_BEFUDDLE] = { .effect = EFFECT_MAX_MOVE, @@ -15198,7 +15198,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_EFFECT_SPORE_FOES, }, - + [MOVE_G_MAX_VOLT_CRASH] = { .effect = EFFECT_MAX_MOVE, @@ -15212,7 +15212,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_PARALYZE_FOES, }, - + [MOVE_G_MAX_GOLD_RUSH] = { .effect = EFFECT_MAX_MOVE, @@ -15226,7 +15226,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES_PAY_DAY, }, - + [MOVE_G_MAX_CHI_STRIKE] = { .effect = EFFECT_MAX_MOVE, @@ -15240,7 +15240,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_CRIT_PLUS, }, - + [MOVE_G_MAX_TERROR] = { .effect = EFFECT_MAX_MOVE, @@ -15254,7 +15254,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_MEAN_LOOK, }, - + [MOVE_G_MAX_FOAM_BURST] = { .effect = EFFECT_MAX_MOVE, @@ -15268,7 +15268,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_LOWER_SPEED_2_FOES, }, - + [MOVE_G_MAX_RESONANCE] = { .effect = EFFECT_MAX_MOVE, @@ -15282,7 +15282,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_AURORA_VEIL, }, - + [MOVE_G_MAX_CUDDLE] = { .effect = EFFECT_MAX_MOVE, @@ -15296,7 +15296,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_INFATUATE_FOES, }, - + [MOVE_G_MAX_REPLENISH] = { .effect = EFFECT_MAX_MOVE, @@ -15310,7 +15310,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_RECYCLE_BERRIES, }, - + [MOVE_G_MAX_MALODOR] = { .effect = EFFECT_MAX_MOVE, @@ -15324,7 +15324,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_POISON_FOES, }, - + [MOVE_G_MAX_MELTDOWN] = { .effect = EFFECT_MAX_MOVE, @@ -15338,7 +15338,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_TORMENT_FOES, }, - + [MOVE_G_MAX_DRUM_SOLO] = { //ANIM TODO .effect = EFFECT_MAX_MOVE, @@ -15353,7 +15353,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, }, - + [MOVE_G_MAX_FIREBALL] = { //ANIM TODO .effect = EFFECT_MAX_MOVE, @@ -15368,7 +15368,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, }, - + [MOVE_G_MAX_HYDROSNIPE] = { //ANIM TODO .effect = EFFECT_MAX_MOVE, @@ -15383,7 +15383,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO .ignoresTargetAbility = TRUE, }, - + [MOVE_G_MAX_WIND_RAGE] = { .effect = EFFECT_MAX_MOVE, @@ -15397,7 +15397,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_DEFOG, }, - + [MOVE_G_MAX_GRAVITAS] = { .effect = EFFECT_MAX_MOVE, @@ -15411,7 +15411,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_GRAVITY, }, - + [MOVE_G_MAX_STONESURGE] = { .effect = EFFECT_MAX_MOVE, @@ -15425,7 +15425,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_STEALTH_ROCK, }, - + [MOVE_G_MAX_VOLCALITH] = { .effect = EFFECT_MAX_MOVE, @@ -15439,7 +15439,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_VOLCALITH, }, - + [MOVE_G_MAX_TARTNESS] = { .effect = EFFECT_MAX_MOVE, @@ -15453,7 +15453,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_LOWER_EVASIVENESS_FOES, }, - + [MOVE_G_MAX_SWEETNESS] = { .effect = EFFECT_MAX_MOVE, @@ -15467,7 +15467,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_AROMATHERAPY, }, - + [MOVE_G_MAX_SANDBLAST] = { .effect = EFFECT_MAX_MOVE, @@ -15481,7 +15481,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_SANDBLAST_FOES, }, - + [MOVE_G_MAX_STUN_SHOCK] = { .effect = EFFECT_MAX_MOVE, @@ -15495,7 +15495,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_POISON_PARALYZE_FOES, }, - + [MOVE_G_MAX_CENTIFERNO] = { .effect = EFFECT_MAX_MOVE, @@ -15509,7 +15509,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_FIRE_SPIN_FOES, }, - + [MOVE_G_MAX_SMITE] = { .effect = EFFECT_MAX_MOVE, @@ -15523,7 +15523,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_CONFUSE_FOES, }, - + [MOVE_G_MAX_SNOOZE] = { @@ -15538,7 +15538,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_YAWN_FOE, }, - + [MOVE_G_MAX_FINALE] = { .effect = EFFECT_MAX_MOVE, @@ -15552,7 +15552,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_HEAL_TEAM, }, - + [MOVE_G_MAX_STEELSURGE] = { .effect = EFFECT_MAX_MOVE, @@ -15566,7 +15566,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_STEELSURGE, }, - + [MOVE_G_MAX_DEPLETION] = { .effect = EFFECT_MAX_MOVE, @@ -15580,7 +15580,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_SPITE, }, - + [MOVE_G_MAX_ONE_BLOW] = { .effect = EFFECT_MAX_MOVE, @@ -15594,7 +15594,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO }, - + [MOVE_G_MAX_RAPID_FLOW] = { //ANIM TODO .effect = EFFECT_MAX_MOVE, @@ -15608,5 +15608,5 @@ const struct BattleMove gBattleMoves[MOVES_COUNT_DYNAMAX] = .split = SPLIT_PHYSICAL, .argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO }, - + }; diff --git a/test/battle/ai_check_viability.c b/test/battle/ai_check_viability.c new file mode 100644 index 0000000000..11052fb163 --- /dev/null +++ b/test/battle/ai_check_viability.c @@ -0,0 +1,145 @@ +#include "global.h" +#include "test/battle.h" +#include "battle_ai_util.h" + +ASSUMPTIONS +{ + ASSUME(gBattleMoves[MOVE_BODY_SLAM].effect == EFFECT_PARALYZE_HIT); +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Facade") +{ + u16 status1, expectedMove; + + PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { status1 = STATUS1_BURN; expectedMove = MOVE_FACADE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_FACADE].effect == EFFECT_FACADE); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(60); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_FACADE); Status1(status1); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_FACADE) + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Smelling Salt") +{ + u16 status1, expectedMove; + + PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { status1 = STATUS1_PARALYSIS; expectedMove = MOVE_SMELLING_SALTS; } + + GIVEN { + ASSUME(B_UPDATED_MOVE_DATA >= GEN_6); + ASSUME(gBattleMoves[MOVE_SMELLING_SALTS].effect == EFFECT_SMELLING_SALTS); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(60); Status1(status1); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_SMELLING_SALTS); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_SMELLING_SALTS) + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Wake Up Slap") +{ + u16 status1, expectedMove; + + PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { status1 = STATUS1_SLEEP; expectedMove = MOVE_WAKE_UP_SLAP; } + + GIVEN { + ASSUME(B_UPDATED_MOVE_DATA >= GEN_6); + ASSUME(gBattleMoves[MOVE_WAKE_UP_SLAP].effect == EFFECT_WAKE_UP_SLAP); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_MEGANIUM) { HP(35); Status1(status1); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_WAKE_UP_SLAP); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_WAKE_UP_SLAP) + MESSAGE("Meganium fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Grav Apple") +{ + u32 movePlayer; + u16 expectedMove; + + PARAMETRIZE { movePlayer = MOVE_CELEBRATE; expectedMove = MOVE_TROP_KICK; } + PARAMETRIZE { movePlayer = MOVE_GRAVITY; expectedMove = MOVE_GRAV_APPLE; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_GRAV_APPLE].effect == EFFECT_GRAV_APPLE); + ASSUME(gBattleMoves[MOVE_TROP_KICK].effect == EFFECT_ATTACK_DOWN_HIT); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(81); Speed(20); } + OPPONENT(SPECIES_WOBBUFFET) { Speed(10); Moves(MOVE_TROP_KICK, MOVE_GRAV_APPLE); } + } WHEN { + TURN { MOVE(player, movePlayer); EXPECT_MOVE(opponent, MOVE_TROP_KICK); } + TURN { MOVE(player, MOVE_CELEBRATE); EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_GRAV_APPLE) + MESSAGE("Wobbuffet fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Flail") +{ + u16 hp, expectedMove; + + PARAMETRIZE { hp = 490; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { hp = 5; expectedMove = MOVE_FLAIL; } + + GIVEN { + ASSUME(gBattleMoves[MOVE_FLAIL].effect == EFFECT_FLAIL); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { Speed(10); } + OPPONENT(SPECIES_WOBBUFFET) { HP(hp); MaxHP(490); Speed(20); Moves(MOVE_BODY_SLAM, MOVE_FLAIL); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } +} + +AI_SINGLE_BATTLE_TEST("AI will only use Dream Eater if target is asleep") +{ + u16 status1, expectedMove; + + PARAMETRIZE { status1 = STATUS1_NONE; expectedMove = MOVE_BODY_SLAM; } + PARAMETRIZE { status1 = STATUS1_SLEEP; expectedMove = MOVE_DREAM_EATER; } + + GIVEN { + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_MEGANIUM) { HP(38); Status1(status1); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_BODY_SLAM, MOVE_DREAM_EATER); } + } WHEN { + TURN { EXPECT_MOVE(opponent, expectedMove); } + } SCENE { + if (expectedMove == MOVE_DREAM_EATER) + MESSAGE("Meganium fainted!"); + } +} + +AI_SINGLE_BATTLE_TEST("AI sees increased base power of Spit Up") +{ + GIVEN { + ASSUME(gBattleMoves[MOVE_STOCKPILE].effect == EFFECT_STOCKPILE); + ASSUME(gBattleMoves[MOVE_SPIT_UP].effect == EFFECT_SPIT_UP); + AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT); + PLAYER(SPECIES_WOBBUFFET) { HP(43); } + OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_STOCKPILE, MOVE_SPIT_UP, MOVE_TACKLE); } + } WHEN { + TURN { EXPECT_MOVE(opponent, MOVE_STOCKPILE); } + TURN { EXPECT_MOVE(opponent, MOVE_SPIT_UP); } + } SCENE { + // MESSAGE("Wobbuffet fainted!"); + } +}